command system, message sending and receiving (untested)
This commit is contained in:
parent
c1fcde1b3b
commit
bd8936ad13
2 changed files with 135 additions and 8 deletions
13
README.md
13
README.md
|
@ -21,8 +21,8 @@ You **MUST** grant your bot all Privileged Gateway Intents.
|
|||
* "Jank" by design. While I don't expect anyone to actually use comcord on serial terminals or teletypes other than for meme factor, the option is still there.
|
||||
|
||||
## TODO
|
||||
- [ ] Commands
|
||||
- [ ] Quit (q)
|
||||
- [x] Commands
|
||||
- [x] Quit (q)
|
||||
- [ ] Switch guilds (G)
|
||||
- [ ] Switch channels (g)
|
||||
- [ ] List online users in guild (w)
|
||||
|
@ -33,20 +33,21 @@ You **MUST** grant your bot all Privileged Gateway Intents.
|
|||
- [ ] Creation date, join date, ID, etc
|
||||
- [ ] Room history (r)
|
||||
- [ ] Extended room history (R)
|
||||
- [ ] Message Receiving
|
||||
- [x] Message Receiving
|
||||
- [ ] Markdown styling
|
||||
- [ ] Common markdown (bold, italic, etc)
|
||||
- [ ] Figure out how spoilers would work
|
||||
- [ ] Emotes?????
|
||||
- [ ] Timestamp parsing
|
||||
- [ ] Embeds in the style of commode's posted links
|
||||
- [ ] Messages wrapped in `*`'s or `_`'s parsed as emotes
|
||||
- [x] Messages wrapped in `*`'s or `_`'s parsed as emotes
|
||||
- [ ] Inline DMs to replicate commode's private messages
|
||||
- [ ] Replies
|
||||
- [ ] Message sending
|
||||
- [ ] Puts incoming messages into queue whilst in send mode
|
||||
- [x] Message sending
|
||||
- [x] Puts incoming messages into queue whilst in send mode
|
||||
- [ ] Mentions
|
||||
- [ ] Replies
|
||||
- [ ] Configuration
|
||||
- [ ] Default guild/channel
|
||||
- [ ] Threads
|
||||
- [ ] Not have the token just be in argv
|
||||
|
|
130
src/index.js
130
src/index.js
|
@ -1,9 +1,19 @@
|
|||
const Eris = require("eris");
|
||||
const chalk = require("chalk");
|
||||
const {inspect} = require("util");
|
||||
|
||||
const token = process.argv[2];
|
||||
const stdin = process.stdin;
|
||||
const stdout = process.stdout;
|
||||
|
||||
stdin.setRawMode(true);
|
||||
stdin.resume();
|
||||
stdin.setEncoding("utf8");
|
||||
|
||||
let currentGuild,
|
||||
currentChannel,
|
||||
inSendMode = false;
|
||||
inSendMode = false,
|
||||
nameLength = 2;
|
||||
|
||||
const messageQueue = [];
|
||||
|
||||
|
@ -15,15 +25,131 @@ const client = new Eris("Bot " + token, {
|
|||
|
||||
client.once("ready", function () {
|
||||
console.log(
|
||||
`Logged in as: ${client.user.username}#${client.user.discriminator} (${client.user.id})`
|
||||
"Logged in as: " +
|
||||
chalk.yellow(
|
||||
`${client.user.username}#${client.user.discriminator} (${client.user.id})`
|
||||
)
|
||||
);
|
||||
nameLength = client.user.username.length + 2;
|
||||
});
|
||||
|
||||
function processMessage({name, content, bot}) {
|
||||
if (name.length + 2 > nameLength) nameLength = name.length + 2;
|
||||
|
||||
if (
|
||||
(content.startsWith("*") && content.endsWith("*")) ||
|
||||
(content.startsWith("_") && content.endsWith("_"))
|
||||
) {
|
||||
console.log(chalk.bold.green(`<${name} ${content}>`));
|
||||
} else {
|
||||
// TODO: markdown
|
||||
console.log(
|
||||
chalk.bold.cyan(`[${name}]` + " ".rep(nameLength - (name.length + 2))) +
|
||||
chalk.reset(" " + content)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function processQueue() {
|
||||
for (const msg of messageQueue) {
|
||||
if (msg.content.indexOf("\n") > -1) {
|
||||
const lines = msg.content.split("\n");
|
||||
for (const line of lines) {
|
||||
processMessage({
|
||||
name: msg.author.name,
|
||||
bot: msg.author.bot,
|
||||
content: line,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
processMessage({
|
||||
name: msg.author.name,
|
||||
bot: msg.author.bot,
|
||||
content: msg.content,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
client.on("messageCreate", function (msg) {
|
||||
if (msg.channel.id == currentChannel) {
|
||||
if (inSendMode) {
|
||||
messageQueue.push(msg);
|
||||
} else {
|
||||
if (msg.content.indexOf("\n") > -1) {
|
||||
const lines = msg.content.split("\n");
|
||||
for (const line of lines) {
|
||||
processMessage({
|
||||
name: msg.author.name,
|
||||
bot: msg.author.bot,
|
||||
content: line,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
processMessage({
|
||||
name: msg.author.name,
|
||||
bot: msg.author.bot,
|
||||
content: msg.content,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let toSend = "";
|
||||
function setupSendMode() {
|
||||
inSendMode = true;
|
||||
toSend = "";
|
||||
const name = `[${client.user.username}]`;
|
||||
stdout.write(
|
||||
chalk.bold.cyan(name) + " ".rep(nameLength - name.length) + chalk.reset(" ")
|
||||
);
|
||||
}
|
||||
function sendMessage() {
|
||||
toSend = toSend.trim();
|
||||
if (toSend === "") {
|
||||
stdout.write("<no message sent>\n");
|
||||
} else {
|
||||
client.createMessage(currentChannel, toSend);
|
||||
}
|
||||
inSendMode = false;
|
||||
processQueue();
|
||||
}
|
||||
|
||||
stdin.on("data", function (key) {
|
||||
if (inSendMode) {
|
||||
if (key === "\r") {
|
||||
sendMessage();
|
||||
} else {
|
||||
if (key === "\b") {
|
||||
if (toSend.length > 0) {
|
||||
stdout.moveCursor(-1);
|
||||
stdout.write(" ");
|
||||
stdout.moveCursor(-1);
|
||||
toSend = toSend.substring(0, toSend.length - 1);
|
||||
}
|
||||
} else {
|
||||
stdout.write(key);
|
||||
toSend += key;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch (key) {
|
||||
case "\u0003":
|
||||
case "q":
|
||||
client.disconnect(false);
|
||||
process.exit(0);
|
||||
break;
|
||||
case " ":
|
||||
case "\r":
|
||||
default: {
|
||||
if (currentChannel == null) {
|
||||
console.log("not in a channel");
|
||||
break;
|
||||
}
|
||||
setupSendMode();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue