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.
|
* "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
|
## TODO
|
||||||
- [ ] Commands
|
- [x] Commands
|
||||||
- [ ] Quit (q)
|
- [x] Quit (q)
|
||||||
- [ ] Switch guilds (G)
|
- [ ] Switch guilds (G)
|
||||||
- [ ] Switch channels (g)
|
- [ ] Switch channels (g)
|
||||||
- [ ] List online users in guild (w)
|
- [ ] 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
|
- [ ] Creation date, join date, ID, etc
|
||||||
- [ ] Room history (r)
|
- [ ] Room history (r)
|
||||||
- [ ] Extended room history (R)
|
- [ ] Extended room history (R)
|
||||||
- [ ] Message Receiving
|
- [x] Message Receiving
|
||||||
- [ ] Markdown styling
|
- [ ] Markdown styling
|
||||||
- [ ] Common markdown (bold, italic, etc)
|
- [ ] Common markdown (bold, italic, etc)
|
||||||
- [ ] Figure out how spoilers would work
|
- [ ] Figure out how spoilers would work
|
||||||
- [ ] Emotes?????
|
- [ ] Emotes?????
|
||||||
- [ ] Timestamp parsing
|
- [ ] Timestamp parsing
|
||||||
- [ ] Embeds in the style of commode's posted links
|
- [ ] 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
|
- [ ] Inline DMs to replicate commode's private messages
|
||||||
- [ ] Replies
|
- [ ] Replies
|
||||||
- [ ] Message sending
|
- [x] Message sending
|
||||||
- [ ] Puts incoming messages into queue whilst in send mode
|
- [x] Puts incoming messages into queue whilst in send mode
|
||||||
- [ ] Mentions
|
- [ ] Mentions
|
||||||
- [ ] Replies
|
- [ ] Replies
|
||||||
- [ ] Configuration
|
- [ ] Configuration
|
||||||
- [ ] Default guild/channel
|
- [ ] Default guild/channel
|
||||||
- [ ] Threads
|
- [ ] 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 Eris = require("eris");
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const {inspect} = require("util");
|
||||||
|
|
||||||
const token = process.argv[2];
|
const token = process.argv[2];
|
||||||
|
const stdin = process.stdin;
|
||||||
|
const stdout = process.stdout;
|
||||||
|
|
||||||
|
stdin.setRawMode(true);
|
||||||
|
stdin.resume();
|
||||||
|
stdin.setEncoding("utf8");
|
||||||
|
|
||||||
let currentGuild,
|
let currentGuild,
|
||||||
currentChannel,
|
currentChannel,
|
||||||
inSendMode = false;
|
inSendMode = false,
|
||||||
|
nameLength = 2;
|
||||||
|
|
||||||
const messageQueue = [];
|
const messageQueue = [];
|
||||||
|
|
||||||
|
@ -15,15 +25,131 @@ const client = new Eris("Bot " + token, {
|
||||||
|
|
||||||
client.once("ready", function () {
|
client.once("ready", function () {
|
||||||
console.log(
|
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) {
|
client.on("messageCreate", function (msg) {
|
||||||
if (msg.channel.id == currentChannel) {
|
if (msg.channel.id == currentChannel) {
|
||||||
if (inSendMode) {
|
if (inSendMode) {
|
||||||
messageQueue.push(msg);
|
messageQueue.push(msg);
|
||||||
} else {
|
} 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