channel switching

This commit is contained in:
Cynthia Foxwell 2022-08-27 20:13:25 -06:00
parent 8591f3e002
commit f85ac8138d
1 changed files with 75 additions and 7 deletions

View File

@ -60,9 +60,13 @@ function processMessage({name, content, bot}) {
) {
console.log(chalk.bold.green(`<${name} ${content}>`));
} else {
let nameColor = chalk.bold.cyan;
if (bot) nameColor = chalk.bold.yellow;
// TODO: markdown
console.log(
chalk.bold.cyan(`[${name}]`).padEnd(nameLength, " ") +
nameColor(`[${name}]`) +
" ".repeat(nameLength - (name.length + 2)) +
chalk.reset(" " + content)
);
}
@ -74,14 +78,14 @@ function processQueue() {
const lines = msg.content.split("\n");
for (const line of lines) {
processMessage({
name: msg.author.name,
name: msg.author.username,
bot: msg.author.bot,
content: line,
});
}
} else {
processMessage({
name: msg.author.name,
name: msg.author.username,
bot: msg.author.bot,
content: msg.content,
});
@ -90,6 +94,8 @@ function processQueue() {
}
client.on("messageCreate", function (msg) {
if (msg.author.id === client.user.id) return;
if (msg.channel.id == currentChannel) {
if (inSendMode) {
messageQueue.push(msg);
@ -98,14 +104,14 @@ client.on("messageCreate", function (msg) {
const lines = msg.content.split("\n");
for (const line of lines) {
processMessage({
name: msg.author.name,
name: msg.author.username,
bot: msg.author.bot,
content: line,
});
}
} else {
processMessage({
name: msg.author.name,
name: msg.author.username,
bot: msg.author.bot,
content: msg.content,
});
@ -119,7 +125,8 @@ async function setupSendMode() {
inSendMode = true;
toSend = "";
stdout.write(
chalk.bold.cyan(`[${client.user.username}]`).padEnd(nameLength, " ") +
chalk.bold.cyan(`[${client.user.username}]`) +
" ".repeat(nameLength - (client.user.username.length + 2)) +
chalk.reset(" ")
);
try {
@ -281,6 +288,12 @@ function listUsers() {
}
function switchGuild() {
if (targetGuild == "") {
listUsers();
guildSwitch = false;
return;
}
let target;
for (const guild of client.guilds.values()) {
@ -294,7 +307,7 @@ function switchGuild() {
console.log("<guild not found>");
} else {
currentGuild = target;
// TODO: store last visited channel
// TODO: store last visited channel and switch to it if we've been to this guild before
const topChannel = findTopChannel(target);
currentChannel = topChannel.id;
@ -304,6 +317,43 @@ function switchGuild() {
guildSwitch = false;
}
let targetChannel = "";
function gotoChannel() {
targetChannel = "";
channelSwitch = true;
stdout.write(":channel> ");
}
function switchChannel() {
if (targetChannel == "") {
listUsers();
channelSwitch = false;
return;
}
let target;
const guild = client.guilds.get(currentGuild);
const channels = [...guild.channels.values()].filter((c) => c.type == 0);
for (const channel of channels) {
if (channel.name.toLowerCase().indexOf(targetChannel.toLowerCase()) > -1) {
target = channel.id;
break;
}
}
if (target == null) {
console.log("<channel not found>");
} else {
currentChannel = target;
listUsers();
}
channelSwitch = false;
}
stdin.on("data", function (key) {
if (guildSwitch) {
if (key === "\r") {
@ -322,6 +372,23 @@ stdin.on("data", function (key) {
targetGuild += key;
}
}
} else if (channelSwitch) {
if (key === "\r") {
console.log("");
switchChannel();
} else {
if (key === "\b") {
if (targetChannel.length > 0) {
stdout.moveCursor(-1);
stdout.write(" ");
stdout.moveCursor(-1);
targetChannel = targetChannel.substring(0, targetChannel.length - 1);
}
} else {
stdout.write(key);
targetChannel += key;
}
}
} else if (inSendMode) {
if (key === "\r") {
console.log("");
@ -356,6 +423,7 @@ stdin.on("data", function (key) {
console.log("<not in a guild>");
break;
}
gotoChannel();
break;
}
case "G": {