mirror of
https://github.com/jcreek/denBot.git
synced 2026-07-12 18:33:45 +00:00
refactor(*): Move command functions into commands.js
This commit is contained in:
+362
@@ -0,0 +1,362 @@
|
||||
const {
|
||||
checkQueue,
|
||||
deleteChannel,
|
||||
getChannelName,
|
||||
getUserFromMention,
|
||||
sendEmbedMessage,
|
||||
} = require('./helpers.js');
|
||||
|
||||
let playerQueue = [];
|
||||
let playerVotes = [];
|
||||
let pokemonName = '';
|
||||
let captainInGameName = '';
|
||||
|
||||
module.exports = {
|
||||
matchCommand: function (Discord, config, logger, message, command, args) {
|
||||
switch (command) {
|
||||
case 'help':
|
||||
commandHelp(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'adminhelp':
|
||||
commandHelp(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'q':
|
||||
commandJoinQueue(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'lq':
|
||||
commandLeaveQueue(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'start':
|
||||
commandStartEarly(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'sq':
|
||||
commandShowQueue(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'cq':
|
||||
commandClearQueue(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'ru':
|
||||
commandRemoveUserFromQueue(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
case 'dc':
|
||||
commandDeleteChannel(Discord, config, logger, message, command, args);
|
||||
break;
|
||||
default:
|
||||
message.channel.send('That command is not one I know yet!');
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
function commandHelp(Discord, config, logger, message, command, args) {
|
||||
const helpMessage = `
|
||||
The commands available to you are:
|
||||
\`${config.prefix}q\` - Join the queue
|
||||
\`${config.prefix}q <pokemon> <ign>\` - Join the queue (first player can set the pokemon and their in-game name)
|
||||
\`${config.prefix}lq\` - Leave the queue
|
||||
\`${config.prefix}sq\` - Show the queue
|
||||
\`${config.prefix}start\` - Vote to start the adventure early, without the full number of players (all players in the queue must use this to start early)
|
||||
\`${config.prefix}dc\` - Delete an adventure channel (only the captain can use this)
|
||||
`;
|
||||
|
||||
message.channel.send(helpMessage);
|
||||
}
|
||||
|
||||
function commandAdminHelp(Discord, config, logger, message, command, args) {
|
||||
const helpMessage = `
|
||||
The commands available to you are:
|
||||
\`${config.prefix}q\` - Join the queue
|
||||
\`${config.prefix}q <pokemon> <ign>\` - Join the queue (first player can set the pokemon and their in-game name)
|
||||
\`${config.prefix}lq\` - Leave the queue
|
||||
\`${config.prefix}sq\` - Show the queue
|
||||
\`${config.prefix}start\` - Vote to start the adventure early, without the full number of players (all players in the queue must use this to start early)
|
||||
\`${config.prefix}cq\` - Clear the queue (admin-only, not to be shared with normal users)
|
||||
\`${config.prefix}ru\` - Remove a tagged user from the queue (admin-only, not to be shared with normal users)
|
||||
\`${config.prefix}dc\` - Delete an adventure channel (only the captain can use this)
|
||||
`;
|
||||
|
||||
message.channel.send(helpMessage);
|
||||
}
|
||||
|
||||
function commandJoinQueue(Discord, config, logger, message, command, args) {
|
||||
if (!playerQueue.includes(message.author)) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command q in ${message.channel.name}`);
|
||||
|
||||
logger.info(`${message.author.username} joined the queue.`);
|
||||
sendEmbedMessage(
|
||||
logger,
|
||||
message,
|
||||
Discord,
|
||||
'Queue in progress',
|
||||
`${message.author.username} joined the queue.`
|
||||
);
|
||||
|
||||
playerQueue.push(message.author);
|
||||
|
||||
if (playerQueue.length === 1 && args[0] && args[1]) {
|
||||
// First player can submit pokemon and in-game name
|
||||
pokemonName = args[0];
|
||||
captainInGameName = args[1];
|
||||
}
|
||||
|
||||
checkQueue(
|
||||
message,
|
||||
playerQueue,
|
||||
playerVotes,
|
||||
logger,
|
||||
Discord,
|
||||
pokemonName,
|
||||
captainInGameName,
|
||||
config
|
||||
);
|
||||
} else if (playerQueue.includes(message.author)) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command q in ${message.channel.name}`);
|
||||
|
||||
message.channel.send(
|
||||
`${message.author.username} is too keen, you're already in the queue mate!`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function commandLeaveQueue(Discord, config, logger, message, command, args) {
|
||||
if (playerQueue.includes(message.author)) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command lq in ${message.channel.name}`);
|
||||
|
||||
for (var i = 0; i < playerQueue.length; i++) {
|
||||
if (playerQueue[i] === message.author) {
|
||||
playerQueue.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < playerVotes.length; i++) {
|
||||
if (playerVotes[i] === message.author) {
|
||||
playerVotes.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} left the queue.`);
|
||||
sendEmbedMessage(
|
||||
logger,
|
||||
message,
|
||||
Discord,
|
||||
'Queue in progress',
|
||||
`${message.author.username} left the queue.`
|
||||
);
|
||||
|
||||
checkQueue(
|
||||
message,
|
||||
playerQueue,
|
||||
playerVotes,
|
||||
logger,
|
||||
Discord,
|
||||
pokemonName,
|
||||
captainInGameName,
|
||||
config
|
||||
);
|
||||
} else if (!playerQueue.includes(message.author)) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command lq in ${message.channel.name}`);
|
||||
|
||||
message.channel.send(
|
||||
`${message.author.username} you can't leave the queue before you've joined it!`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function commandStartEarly(Discord, config, logger, message, command, args) {
|
||||
// Vote to start early with only the users currently in the queue
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command ${command} in ${message.channel.name}`);
|
||||
|
||||
if (playerQueue.length == 0) {
|
||||
message.channel.send(
|
||||
`You can only vote to start an adventure early if there is a queue. You can start a queue by using the command ${config.prefix}help`
|
||||
);
|
||||
} else if (!playerQueue.includes(message.author)) {
|
||||
message.channel.send(
|
||||
`You can only vote to start an adventure early if you are in the queue. You can join the queue by using the command ${config.prefix}q`
|
||||
);
|
||||
} else if (playerVotes.length == 0) {
|
||||
// First player to vote
|
||||
playerVotes.push(message.author);
|
||||
|
||||
sendEmbedMessage(
|
||||
logger,
|
||||
message,
|
||||
Discord,
|
||||
'Voting to start early',
|
||||
`${message.author.username} voted to start the adventure.\nAll other players in the queue must also vote to start the adventure for it to begin without ${config.maxqueuesize} players.`
|
||||
);
|
||||
} else if (playerVotes.includes(message.author.username)) {
|
||||
sendEmbedMessage(
|
||||
logger,
|
||||
message,
|
||||
Discord,
|
||||
'Voting to start early',
|
||||
`${message.author.username} has already voted to start the adventure.\nAll other players in the queue must also vote to start the adventure for it to begin without ${config.maxqueuesize} players.`
|
||||
);
|
||||
} else if (playerVotes.length < config.maxqueuesize) {
|
||||
// Not the first player to vote
|
||||
playerVotes.push(message.author);
|
||||
|
||||
if (playerVotes.length < playerQueue.length) {
|
||||
// Still not all players voted
|
||||
sendEmbedMessage(
|
||||
logger,
|
||||
message,
|
||||
Discord,
|
||||
'Voting to start early',
|
||||
`${message.author.username} voted to start the adventure.\nAll other players in the queue must also vote to start the adventure for it to begin without ${config.maxqueuesize} players.`
|
||||
);
|
||||
} else {
|
||||
// All players have voted, we can start the adventure early
|
||||
checkQueue(
|
||||
message,
|
||||
playerQueue,
|
||||
playerVotes,
|
||||
logger,
|
||||
Discord,
|
||||
pokemonName,
|
||||
captainInGameName,
|
||||
config
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function commandShowQueue(Discord, config, logger, message, command, args) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command sq in ${message.channel.name}`);
|
||||
|
||||
checkQueue(
|
||||
message,
|
||||
playerQueue,
|
||||
playerVotes,
|
||||
logger,
|
||||
Discord,
|
||||
pokemonName,
|
||||
captainInGameName,
|
||||
config
|
||||
);
|
||||
}
|
||||
|
||||
function commandClearQueue(Discord, config, logger, message, command, args) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
logger.info(`${message.author.username} used command cq in ${message.channel.name}`);
|
||||
|
||||
if (playerQueue.length === 0) {
|
||||
message.channel.send(`The queue is already empty...`);
|
||||
logger.info(
|
||||
`${message.author.username} attempted to clear the queue but it was already empty.`
|
||||
);
|
||||
} else {
|
||||
playerQueue = [];
|
||||
playerVotes = [];
|
||||
message.channel.send(`The queue has been cleared!`);
|
||||
logger.info(`${message.author.username} cleared the queue and the votes.`);
|
||||
pokemonName = '';
|
||||
captainInGameName = '';
|
||||
logger.info('Emptied pokemon name and captain name');
|
||||
}
|
||||
}
|
||||
|
||||
function commandRemoveUserFromQueue(Discord, config, logger, message, command, args) {
|
||||
// Remove a tagged user from the queue
|
||||
if (args[0]) {
|
||||
// Delete the message with the bot command
|
||||
if (config.deletecommandstoggle) {
|
||||
message.delete();
|
||||
}
|
||||
|
||||
try {
|
||||
const user = getUserFromMention(args[0], logger, message);
|
||||
logger.info(`${message.author.username} used command ru ${user} in ${message.channel.name}`);
|
||||
|
||||
if (playerQueue.includes(user)) {
|
||||
// Search for the user
|
||||
for (var i = 0; i < playerQueue.length; i++) {
|
||||
if (playerQueue[i].username === user.username) {
|
||||
playerQueue.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < playerVotes.length; i++) {
|
||||
if (playerVotes[i].username === user.username) {
|
||||
playerVotes.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
message.channel.send(`${user.username} removed from queue.`);
|
||||
logger.info(`${message.author.username} removed ${user.username} from queue.`);
|
||||
|
||||
checkQueue(
|
||||
message,
|
||||
playerQueue,
|
||||
playerVotes,
|
||||
logger,
|
||||
Discord,
|
||||
pokemonName,
|
||||
captainInGameName,
|
||||
config
|
||||
);
|
||||
} else if (!playerQueue.includes(user)) {
|
||||
message.channel.send(`${user.username} is not in the queue.`);
|
||||
logger.info(
|
||||
`${message.author.username} attempted to remove ${user.username} from queue but they weren't in it.`
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(`Tried to remove user ${args[0]} from queue but got an error: ${error}`);
|
||||
message.channel.send(`Failed to remove ${args[0]} from the queue.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function commandDeleteChannel(Discord, config, logger, message, command, args) {
|
||||
logger.info(`${message.author.username} used command dc in ${message.channel.name}`);
|
||||
|
||||
// Determine if they can delete the channel (i.e. it's their temporary one) - compare the name
|
||||
if (message.channel.name === getChannelName(message.author.username)) {
|
||||
deleteChannel(message, message.channel.name, logger);
|
||||
logger.info(`${message.author.username} deleted their adventure channel.`);
|
||||
} else {
|
||||
message.channel.send(`${message.author.username} is not allowed to delete this channel.`);
|
||||
logger.info(
|
||||
`${message.author.username} attempted to delete channel ${message.channel.name} but it's not their adventure channel.`
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user