From ab2cd6bd7ddcbcc0aee544f329f5062aefa2fe32 Mon Sep 17 00:00:00 2001 From: Nathaniel Mason Date: Fri, 22 Apr 2022 05:44:02 +0100 Subject: [PATCH] Add (almost complete) slash command support --- commands/8ball.js | 53 +++++++++++++++------------- commands/avatar.js | 24 ++++++++----- commands/bonk.js | 45 +++++++++++++----------- commands/cheese.js | 44 ++++++++++++----------- commands/choose.js | 41 ++++++++++++---------- commands/contributors.js | 16 ++++++--- commands/cuddle.js | 48 +++++++++++++------------ commands/eval.js | 29 +++++++++------ commands/help.js | 16 ++++++--- commands/hug.js | 47 +++++++++++++------------ commands/info.js | 16 ++++++--- commands/invite.js | 16 ++++++--- commands/kiss.js | 47 +++++++++++++------------ commands/leskiss.js | 47 +++++++++++++------------ commands/lick.js | 46 ++++++++++++------------ commands/nom.js | 47 +++++++++++++------------ commands/pat.js | 46 ++++++++++++------------ commands/ping.js | 16 ++++++--- commands/poke.js | 47 +++++++++++++------------ commands/reload.js | 38 ++++++++++++-------- commands/restart.js | 20 +++++++---- commands/setnick.js | 76 +++++++++++++++++++++++----------------- commands/slap.js | 44 ++++++++++++----------- commands/snuggle.js | 47 +++++++++++++------------ commands/stop.js | 29 +++++++++------ commands/uinfo.js | 42 +++++++++++----------- start.js | 41 ++++++++++++---------- 27 files changed, 585 insertions(+), 443 deletions(-) diff --git a/commands/8ball.js b/commands/8ball.js index 668cf31..81b6ed8 100644 --- a/commands/8ball.js +++ b/commands/8ball.js @@ -11,32 +11,37 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.STRING }], - async execute (client, message, args, config) { + async parseMessage (client, config, message, args) { + await message.channel.send(this.handle(client, config, message.author, args.slice(0).join(' '))); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + handle (client, config, user, question) { const index = Math.floor(Math.random() * config.answers.length); const answer = config.answers[index]; - const question = args.slice(0).join(' '); - const avatarURL = message.author.displayAvatarURL(); + const avatarURL = user.displayAvatarURL(); - if (!question) { - await message.channel.send(client.generateErrorMessage('You need to ask a question!', avatarURL)); - } else { - await message.channel.send({ - embeds: [{ - title: ':8ball: 8Ball', - description: `Your amazing question: **${question}**`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - fields: [ - { - name: 'Answer', - value: `${answer}` - } - ] - }] - }); - } + if (!question) return client.generateErrorMessage('You need to ask a question!', avatarURL); + + return { + embeds: [{ + title: ':8ball: 8Ball', + description: `Your amazing question: **${question}**`, + color: 9442302, + footer: { + icon_url: avatarURL, + text: config.footerTxt + }, + fields: [ + { + name: 'Answer', + value: `${answer}` + } + ] + }] + }; } }; diff --git a/commands/avatar.js b/commands/avatar.js index ee831cd..53d203e 100644 --- a/commands/avatar.js +++ b/commands/avatar.js @@ -14,24 +14,32 @@ module.exports = { name: 'userid', description: "Another user's ID", required: false, - type: Constants.ApplicationCommandOptionTypes.INTEGER + type: Constants.ApplicationCommandOptionTypes.STRING }], - async execute (client, message, args, config) { - const user = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author; + async parseMessage (client, config, message, args) { + const target = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author; + await message.channel.send(this.handle(client, config, message.author, target)); + }, - await message.channel.send({ + async parseInteraction (client, config, interaction) { + const target = interaction.options.getUser('user') || client.users.cache.get(interaction.options.getString('userid')) || interaction.user; + await interaction.reply(this.handle(client, config, interaction.user, target)); + }, + + handle (_, config, user, target) { + return { embeds: [{ - title: `:frame_photo: ${user.username}'s Beautiful Avatar!`, + title: `:frame_photo: ${target.username}'s Beautiful Avatar!`, color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, image: { - url: user.displayAvatarURL() + url: target.displayAvatarURL() } }] - }); + }; } }; diff --git a/commands/bonk.js b/commands/bonk.js index e1088ac..0dff2b4 100644 --- a/commands/bonk.js +++ b/commands/bonk.js @@ -11,27 +11,30 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - await message.channel.send({ - embeds: [{ - title: ' Bonk', - description: `${taggedUser} You have been bonked by ${message.author}!`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: 'https://cdn.discordapp.com/attachments/793537380330111028/801194481549312060/HappyBONK.gif' - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + return { + embeds: [{ + title: ' Bonk', + description: `${target} You have been bonked by ${user}!`, + color: 9442302, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: 'https://cdn.discordapp.com/attachments/793537380330111028/801194481549312060/HappyBONK.gif' + } + }] + }; } }; diff --git a/commands/cheese.js b/commands/cheese.js index 4721efc..38b4f5e 100644 --- a/commands/cheese.js +++ b/commands/cheese.js @@ -11,26 +11,30 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (_0, message, _1, config) { - const taggedUser = message.mentions.users.first(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send('*slams cheese on desk*\n**Cheese.** https://www.youtube.com/watch?v=Or4IE8fkpn4'); - } else { - await message.channel.send({ - embeds: [{ - title: ':cheese: Cheesed', - description: `${taggedUser} You have been cheesed by ${message.author}!`, - color: 16312092, - footer: { - icon_url: message.author.displayAvatarURL(), - text: config.footerTxt - }, - image: { - url: 'https://cdn.discordapp.com/attachments/803658122299572255/812867714368536636/R06325af354168febcafd96b8328b7590.png' - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (_, config, user, target) { + if (!target) return '*slams cheese on desk*\n**Cheese.** https://www.youtube.com/watch?v=Or4IE8fkpn4'; + + return { + embeds: [{ + title: ':cheese: Cheesed', + description: `${target} You have been cheesed by ${user}!`, + color: 16312092, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: 'https://cdn.discordapp.com/attachments/803658122299572255/812867714368536636/R06325af354168febcafd96b8328b7590.png' + } + }] + }; } }; diff --git a/commands/choose.js b/commands/choose.js index 083b518..023bd50 100644 --- a/commands/choose.js +++ b/commands/choose.js @@ -4,27 +4,32 @@ module.exports = { description: 'Give some lines of input, and get one back at random', options: [], - async execute (client, message, _, config) { - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message, args) { let [head, ...options] = message.content.split(/\s*\n\s*/); head = head.slice(this.name.length + config.prefix.length); if (head) options.push(head); + await message.channel.send(this.handle(client, config, message.author, options)); + }, - if (!options.length) { - await message.channel.send(client.generateErrorMessage('You need to provide some input!', avatarURL)); - } else { - const answer = options[Math.floor(Math.random() * options.length)]; - await message.channel.send({ - embeds: [{ - title: 'I have made my decision:', - description: answer, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - } - }] - }); - } + // TODO: Figure out variable input + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + handle (client, config, user, options) { + if (!options.length) return client.generateErrorMessage('You need to provide some input!', user.displayAvatarURL()); + + const answer = options[Math.floor(Math.random() * options.length)]; + return { + embeds: [{ + title: 'I have made my decision:', + description: answer, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + } + }] + }; } }; diff --git a/commands/contributors.js b/commands/contributors.js index 17e8c9a..9b11355 100644 --- a/commands/contributors.js +++ b/commands/contributors.js @@ -4,14 +4,22 @@ module.exports = { description: 'Attributions to open source components used by Anitrox', options: [], - async execute (_0, message, _1, config) { - await message.channel.send({ + async parseMessage (_, config, message) { + await message.channel.send(this.handle(config, message.author)); + }, + + async parseInteraction (_, config, interaction) { + await interaction.reply(this.handle(config, interaction.user)); + }, + + handle (config, user) { + return { embeds: [{ title: 'Contributors', description: 'Links to check out our contributors!', color: 52508, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, thumbnail: { @@ -32,6 +40,6 @@ module.exports = { } ] }] - }); + }; } }; diff --git a/commands/cuddle.js b/commands/cuddle.js index 1beac8e..bbf5e61 100644 --- a/commands/cuddle.js +++ b/commands/cuddle.js @@ -18,29 +18,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const index = Math.floor(Math.random() * gifchoices.length); - const gif = (gifchoices[index]); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - await message.channel.send({ - embeds: [{ - title: ':heart: Cuddle', - description: `${taggedUser} You have been cuddled by ${message.author}!`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: ':heart: Cuddle', + description: `${target} You have been cuddled by ${user}!`, + color: 9442302, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/eval.js b/commands/eval.js index 5a2493f..df12710 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -1,37 +1,44 @@ const { Constants } = require('discord.js'); - const { inspect } = require('util'); module.exports = { name: require('path').parse(__filename).name, - description: 'Executes JS code', + description: 'handles JS code', options: [{ - name: 'text', + name: 'code', description: 'The string to evaluate', required: true, type: Constants.ApplicationCommandOptionTypes.STRING }], - async execute (_, message, args, config) { - if (message.author.id === config.ownerID) { + async parseMessage (client, config, message, args) { + await message.channel.send(this.handle(client, config, message.author, args.join(' '))); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('code'))); + }, + + handle (_, config, user, code) { + if (user.id === config.ownerID) { try { - const code = args.join(' '); const evaled = inspect(eval(code)); - await message.channel.send(evaled, { code: 'xl' }); + // await message.channel.send(evaled, { code: 'xl' }); + return `\`\`\`js\n${evaled}\n\`\`\``; } catch (error) { - await message.channel.send({ + return { embeds: [{ title: '<:AnitroxError:809651936563429416> **Something went wrong! **', color: 13632027, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, fields: [ { name: '**What Happened?**', - value: 'The command you tried to run failed to execute due to an error.' + value: 'The command you tried to run failed to handle due to an error.' }, { name: 'Error Info', @@ -39,7 +46,7 @@ module.exports = { } ] }] - }); + }; } }; } diff --git a/commands/help.js b/commands/help.js index a62e9e5..99ee3e5 100644 --- a/commands/help.js +++ b/commands/help.js @@ -4,14 +4,22 @@ module.exports = { description: 'Get help on anything from commands, to what the bot does! just not your homework..', options: [], - async execute (_0, message, _1, config) { - await message.channel.send({ + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author)); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user)); + }, + + handle (_, config, user) { + return { embeds: [{ title: 'HELP! SEYMOUR! THE BOT IS ON FIRE!', description: 'Get help on anything from commands, to what the bot does! just not your homework..', color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: `${config.footerTxt} | No mother it's just the northern lights` }, fields: [ @@ -25,6 +33,6 @@ module.exports = { } ] }] - }); + }; } }; diff --git a/commands/hug.js b/commands/hug.js index be6a8ad..b3d2f8e 100644 --- a/commands/hug.js +++ b/commands/hug.js @@ -19,28 +19,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: ' Hug', - description: `${taggedUser} You have been hugged by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: ' Hug', + description: `${target} You have been hugged by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/info.js b/commands/info.js index f99181d..36ccdf4 100644 --- a/commands/info.js +++ b/commands/info.js @@ -20,18 +20,26 @@ module.exports = { description: 'Shows bot and host information', options: [], - async execute (client, message, _, config) { + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author)); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user)); + }, + + async handle (client, config, user) { const os = require('os'); const osu = require('node-os-utils'); const cpu = osu.cpu; - await message.channel.send({ + return { embeds: [{ title: '<:AnitroxInfo:809651936831733791> Information about Anitrox', description: "Everything you've ever wanted to know about your favorite bot, Anitrox!", color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, thumbnail: { @@ -104,6 +112,6 @@ module.exports = { } ] }] - }); + }; } }; diff --git a/commands/invite.js b/commands/invite.js index 76e85b1..afc2376 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -4,14 +4,22 @@ module.exports = { description: 'Add Anitrox to your beautiful server!', options: [], - async execute (_0, message, _1, config) { - await message.channel.send({ + async parseMessage (client, config, message, args) { + await message.channel.send(this.handle(client, config, message.author, args.slice(0).join(' '))); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + handle (_, config, user) { + return { embeds: [{ title: 'Add Anitrox to your Server!', description: 'Weather you want stable, or that squeaky clean fresh PTB build, we gotchu.', color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, thumbnail: { @@ -32,6 +40,6 @@ module.exports = { } ] }] - }); + }; } }; diff --git a/commands/kiss.js b/commands/kiss.js index e36d0cc..871257e 100644 --- a/commands/kiss.js +++ b/commands/kiss.js @@ -19,28 +19,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: ':heart: Kiss', - description: `${taggedUser} You have been kissed by ${message.author}!`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvaterURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: ':heart: Kiss', + description: `${target} You have been kissed by ${user}!`, + color: 9442302, + footer: { + icon_url: user.displayAvaterURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/leskiss.js b/commands/leskiss.js index 8758203..89b34db 100644 --- a/commands/leskiss.js +++ b/commands/leskiss.js @@ -29,28 +29,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: ':heart: <:lesbian:803831629428686849> Kiss', - description: `${taggedUser} You have been kissed by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: ':heart: <:lesbian:803831629428686849> Kiss', + description: `${target} You have been kissed by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/lick.js b/commands/lick.js index 85d6de3..abf6257 100644 --- a/commands/lick.js +++ b/commands/lick.js @@ -18,28 +18,30 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: ' Lick', - description: `${taggedUser} You have been licked by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: ' Lick', + description: `${target} You have been licked by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/nom.js b/commands/nom.js index 8f319e7..7d9dfc1 100644 --- a/commands/nom.js +++ b/commands/nom.js @@ -18,28 +18,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: '<:BlobNomBlob:801241117919805510> Nom', - description: `${taggedUser} You have been nommed by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: '<:BlobNomBlob:801241117919805510> Nom', + description: `${target} You have been nommed by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/pat.js b/commands/pat.js index 4e843a7..03baec6 100644 --- a/commands/pat.js +++ b/commands/pat.js @@ -17,28 +17,30 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: '<:pats:801238281286713355> Pat', - description: `${taggedUser} You have been patted by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: '<:pats:801238281286713355> Pat', + description: `${target} You have been patted by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/ping.js b/commands/ping.js index 5163a4e..3988921 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -4,20 +4,28 @@ module.exports = { description: 'Gets bot ping', options: [], - async execute (client, message, _, config) { + async parseMessage (client, config, message, args) { + await message.channel.send(await this.handle(client, config, message.author, args.slice(0).join(' '))); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(await this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + async handle (client, config, user) { const index = Math.floor(Math.random() * config.locations.length); const location = config.locations[index]; - await message.channel.send({ + return { embeds: [{ title: ':ping_pong: Ping', description: `**Pong!** We pinged **${location}** and got ${client.ws.ping} ms.`, color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt } }] - }); + }; } }; diff --git a/commands/poke.js b/commands/poke.js index 830c435..52a9c3f 100644 --- a/commands/poke.js +++ b/commands/poke.js @@ -17,28 +17,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: '👉 Poke!', - description: `${taggedUser} You have been poked by ${message.author}!`, - color: 8311585, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: '👉 Poke!', + description: `${target} You have been poked by ${user}!`, + color: 8311585, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/reload.js b/commands/reload.js index 3bee5af..00c3471 100644 --- a/commands/reload.js +++ b/commands/reload.js @@ -4,40 +4,50 @@ module.exports = { description: 'Reloads a command', options: [], - async execute (client, message, args, config) { - const avatarURL = message.author.displayAvatarURL(); - if (message.author.id === config.ownerID) { - if (!args.length) { - await message.channel.send(client.generateErrorMessage('You forgot to provide anything to reload, you pillock', avatarURL)); - } + async parseMessage (client, config, message, args) { + await message.channel.send(this.handle(client, config, message.author, args.split(' '))); + }, + + // TODO: figure out variable input (again) + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user)); + }, + + handle (client, config, user, args) { + if (user.id === config.ownerID) { + if (!args) return client.generateErrorMessage('You forgot to provide anything to reload, you pillock', user.displayAvatarURL()); + let returnMessage = ''; + args.forEach(async (arg) => { const commandName = arg.toLowerCase(); - const command = message.client.commands.get(commandName) || - message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); + const command = client.commands.get(commandName) || + client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); if (!command) { - await message.channel.send(client.generateErrorMessage(`There is no command with name or alias \`${commandName}\`, ${message.author}!`, avatarURL)); + returnMessage += `There is no command with name or alias \`${commandName}\`\n`; } else { delete require.cache[require.resolve(`./${command.name}.js`)]; try { const newCommand = require(`./${command.name}.js`); client.commands.set(newCommand.name, newCommand); - await message.channel.send(`<:AnitroxSuccess:809651936819019796> **Reloaded \`${command.name}\` successfully!**`); + returnMessage += `Successfully reloaded \`${commandName}\`\n`; console.log(`User reloaded ${command.name}.`); } catch (error) { console.error(error); - await message.channel.send(client.generateErrorMessage(`There was an error while reloading \`${command.name}\`:\n\`${error.message}\``, avatarURL)); + returnMessage += `There was an error while reloading \`${command.name}\`\n`; } } }); + + return returnMessage; } else { - message.channel.send({ + return { embeds: [{ title: '<:AnitroxDenied:809651936642203668> **403 Forbidden**', color: 13632027, footer: { - icon_url: avatarURL, + icon_url: user.displayAvatarURL(), text: config.footerTxt }, fields: [ @@ -47,7 +57,7 @@ module.exports = { } ] }] - }); + }; } } }; diff --git a/commands/restart.js b/commands/restart.js index 09482cd..ebd8577 100644 --- a/commands/restart.js +++ b/commands/restart.js @@ -4,18 +4,26 @@ module.exports = { description: 'Restarts the bot', options: [], - async execute (client, message, _, config) { - if (message.author.id === config.ownerID) { + async parseMessage (client, config, message, args) { + await message.channel.send(await this.handle(client, config, message.author, args.slice(0).join(' '))); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(await this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + async handle (client, config, user) { + if (user.id === config.ownerID) { console.log('Anitrox is restarting now!'); - await message.channel.send(' Restarting...'); + // await message.channel.send(' Restarting...'); try { client.destroy(); await client.login(config.token); - await message.channel.send('<:NyabotSuccess:697211376740859914> Restart Successful'); console.log('All systems go'); - } catch (e) { console.log(e); } + return '<:NyabotSuccess:697211376740859914> Restart Successful'; + } catch (e) { console.error(e); } } else { - await message.channel.send('<:NyabotDenied:697145462565896194> Access Denied, You must be bot owner to execute this command.'); + return '<:NyabotDenied:697145462565896194> Access Denied, You must be bot owner to execute this command.'; } } }; diff --git a/commands/setnick.js b/commands/setnick.js index ca71b01..dd9ea3d 100644 --- a/commands/setnick.js +++ b/commands/setnick.js @@ -11,39 +11,49 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.STRING }], - async execute (client, message, args, config) { - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message, args) { + await message.channel.send(this.handle(client, config, message.author, args.slice(0).join(' '))); + }, - if (message.channel.permissionsFor(message.author).has('CHANGE_NICKNAME')) { - const newnick = args.slice(0).join(' '); - try { - await message.member.setNickname(newnick, "Nickname change requested by the server member. If you don't want users to be able to change their nickname disable 'CHANGE_NICKNAME' via Change Nickname in Roles."); - await message.channel.send({ - embeds: [{ - title: '<:AnitroxSuccess:809651936819019796> Nickname Changed', - color: 9442302, - footer: { - icon_url: message.author.displayAvatarURL(), - text: config.footerTxt - }, - fields: [ - { - name: 'Changed nickname successfully!', - value: `New Nickname: ${newnick}` - }, - { - name: 'New Nickname', - value: newnick, - inline: true - } - ] - }] - }); - } catch (error) { - await message.channel.send(client.generateErrorMessage('Failed to set user nickname. Does the bot have the correct permissions?', avatarURL)); - }; - } else { - await message.channel.send(client.generateErrorMessage('You need to have permission ``CHANGE_NICKNAME`` to change your nick!', avatarURL)); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('question'))); + }, + + handle (client, config, user, newNick) { + return "Discord has an inbuilt slash command for this, so I think it's best we deprecate this"; + + // const avatarURL = message.author.displayAvatarURL(); + + // if (message.channel.permissionsFor(message.author).has('CHANGE_NICKNAME')) { + // const newnick = args.slice(0).join(' '); + // try { + // await message.member.setNickname(newnick, "Nickname change requested by the server member. If you don't want users to be able to change their nickname disable 'CHANGE_NICKNAME' via Change Nickname in Roles."); + // await message.channel.send({ + // embeds: [{ + // title: '<:AnitroxSuccess:809651936819019796> Nickname Changed', + // color: 9442302, + // footer: { + // icon_url: message.author.displayAvatarURL(), + // text: config.footerTxt + // }, + // fields: [ + // { + // name: 'Changed nickname successfully!', + // value: `New Nickname: ${newnick}` + // }, + // { + // name: 'New Nickname', + // value: newnick, + // inline: true + // } + // ] + // }] + // }); + // } catch (error) { + // await message.channel.send(client.generateErrorMessage('Failed to set user nickname. Does the bot have the correct permissions?', avatarURL)); + // }; + // } else { + // await message.channel.send(client.generateErrorMessage('You need to have permission ``CHANGE_NICKNAME`` to change your nick!', avatarURL)); + // } } }; diff --git a/commands/slap.js b/commands/slap.js index 2b0beb5..ac5d86d 100644 --- a/commands/slap.js +++ b/commands/slap.js @@ -11,27 +11,29 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - await message.channel.send({ - embeds: [{ - title: ':anger: Slap', - description: `${taggedUser} You have been slapped by ${message.author}!`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: 'https://media1.tenor.com/images/b6d8a83eb652a30b95e87cf96a21e007/tenor.gif?itemid=10426943' - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + return { + embeds: [{ + title: ':anger: Slap', + description: `${target} You have been slapped by ${user}!`, + color: 9442302, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: 'https://media1.tenor.com/images/b6d8a83eb652a30b95e87cf96a21e007/tenor.gif?itemid=10426943' + } + }] + }; } }; diff --git a/commands/snuggle.js b/commands/snuggle.js index 4c54797..1eaeff7 100644 --- a/commands/snuggle.js +++ b/commands/snuggle.js @@ -17,28 +17,31 @@ module.exports = { type: Constants.ApplicationCommandOptionTypes.USER }], - async execute (client, message, _, config) { - const taggedUser = message.mentions.users.first(); - const avatarURL = message.author.displayAvatarURL(); + async parseMessage (client, config, message) { + await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first())); + }, - if (!taggedUser) { - await message.channel.send(client.generateErrorMessage('You need to @mention a user!', avatarURL)); - } else { - const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; - await message.channel.send({ - embeds: [{ - title: '<:BlobSnuggleCat:806759753450782731> Snuggle', - description: `${taggedUser} You have been snuggled by ${message.author}!`, - color: 9442302, - footer: { - icon_url: avatarURL, - text: config.footerTxt - }, - image: { - url: gif - } - }] - }); - } + async parseInteraction (client, config, interaction) { + await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user'))); + }, + + handle (client, config, user, target) { + if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL()); + + const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)]; + return { + embeds: [{ + title: '<:BlobSnuggleCat:806759753450782731> Snuggle', + description: `${target} You have been snuggled by ${user}!`, + color: 9442302, + footer: { + icon_url: user.displayAvatarURL(), + text: config.footerTxt + }, + image: { + url: gif + } + }] + }; } }; diff --git a/commands/stop.js b/commands/stop.js index d98d512..86d355f 100644 --- a/commands/stop.js +++ b/commands/stop.js @@ -4,33 +4,42 @@ module.exports = { description: "IT'S TIME TO STOP!... the bot", options: [], - async execute (_0, message, _1, config) { - if (message.author.id === config.ownerID) { - await message.channel.send({ + async parseMessage (client, config, message, args) { + await message.channel.send(await this.handle(client, config, message.author, args.slice(0).join(' '))); + process.exit(); + }, + + async parseInteraction (client, config, interaction) { + await interaction.reply(await this.handle(client, config, interaction.user, interaction.options.getString('question'))); + process.exit(); + }, + + async handle (_, config, user) { + if (user.id === config.ownerID) { + console.log('The bot is shutting down! Bye bye!'); + return { embeds: [{ title: ' **Shutting Down...**', description: 'See you next time!', color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt } }] - }); - console.log('The bot is shutting down! Bye bye!'); - process.exit(); + }; } else { - await message.channel.send({ + return { embeds: [{ title: '<:AnitroxDenied:809651936642203668> 403 Forbidden', description: 'You need to be the bot owner to execute this command!', color: 13632027, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt } }] - }); + }; } } }; diff --git a/commands/uinfo.js b/commands/uinfo.js index 383d94f..4e36d03 100644 --- a/commands/uinfo.js +++ b/commands/uinfo.js @@ -9,66 +9,68 @@ module.exports = { description: 'Another user', required: false, type: Constants.ApplicationCommandOptionTypes.USER - }, - { - name: 'userid', - description: "Another user's ID", - required: false, - type: Constants.ApplicationCommandOptionTypes.INTEGER }], - async execute (_0, message, _1, config) { - const user = message.mentions.users.first() || message.member; + async parseMessage (client, config, message) { + const target = message.mentions.members.first() || message.member; + await message.channel.send(this.handle(client, config, message.author, target)); + }, - await message.channel.send({ + async parseInteraction (client, config, interaction) { + const target = interaction.options.getUser('user') ? (await interaction.guild.members.fetch(interaction.options.getUser('user'))) : interaction.member; + await interaction.reply(this.handle(client, config, interaction.user, target)); + }, + + handle (client, config, user, target) { + return { embeds: [{ - title: `Everything you've ever wanted to know about ${user.user}!`, + title: `Everything you've ever wanted to know about ${target}!`, color: 9442302, footer: { - icon_url: message.author.displayAvatarURL(), + icon_url: user.displayAvatarURL(), text: config.footerTxt }, thumbnail: { - url: user.user.displayAvatarURL() + url: target.displayAvatarURL() }, fields: [ { name: 'Username', - value: user.user.username, + value: target.user.username, inline: true }, { name: 'Discriminator', - value: user.user.discriminator, + value: target.user.discriminator, inline: true }, { name: 'Full Username', - value: user.user.tag, + value: target.user.tag, inline: true }, { name: 'User Profile Picture', - value: user.user.displayAvatarURL() + value: target.user.displayAvatarURL() }, { name: 'User Status', - value: user.presence?.status ?? 'Error getting status, does the bot have the GUILD_PRESENCES intent?' + value: target.presence?.status ?? (config.intents.includes('GUILD_PRESENCES') ? 'Offline' : 'Missing GUILD_PRESENCES intent') // IMPORTANT NOTE: // There seems to be an issue where offline and invisible users return a null presense // I'll try to patch this soon if I can figure out why }, { name: 'User ID', - value: `\`${user.user.id}\`` + value: `\`${target.user.id}\`` }, { name: 'User Joined Discord', - value: user.user.createdAt.toString(), + value: target.user.createdAt.toString(), inline: true } ] }] - }); + }; } }; diff --git a/start.js b/start.js index 9fe1db4..675f5af 100755 --- a/start.js +++ b/start.js @@ -32,25 +32,26 @@ client.generateErrorMessage = (errorMsg, avatarURL) => ({ client.on('error', (e) => console.log(`[ERROR] ${e}`)); client.on('warn', (e) => (`[WARN] ${e}`)); client.once('ready', async () => { - const commands = config.sandbox ? client.guilds.cache.get(config.sandboxGuild)?.commands : client.application.commands; + // const commands = config.sandbox ? client.guilds.cache.get(config.sandboxGuild)?.commands : client.application.commands; - if (config.sandbox) { - console.log('deleting previous commands from sandbox'); - const localCommands = await commands.fetch(); - localCommands.forEach(async x => { - await commands.delete(x); - }); + // if (config.sandbox) { + // console.log('deleting previous commands from sandbox'); + // const localCommands = await commands.fetch(); + // localCommands.forEach(async x => { + // await commands.delete(x); + // }); - // console.log('deleting global commands'); - // const globalCommands = await client.application.commands.fetch(); - // globalCommands.forEach(async x => { - // await client.application.commands.delete(x); - // }); - } + // console.log('deleting global commands'); + // const globalCommands = await client.application.commands.fetch(); + // globalCommands.forEach(async x => { + // await client.application.commands.delete(x); + // }); + // } - client.commands.forEach(async command => { - await commands.create(command); - }); + // client.commands.forEach(async command => { + // await commands.create(command); + // console.log(command); + // }); // console.clear(); console.log(' ___ _ __ '); @@ -78,9 +79,9 @@ client.on('messageCreate', async (message) => { if (!client.commands.has(command)) return; try { - await client.commands.get(command).execute(client, message, args, config); + await client.commands.get(command).parseMessage(client, config, message, args); } catch (error) { - console.trace(); + console.log(error); message.channel.send({ embeds: [{ title: '<:AnitroxError:809651936563429416> **Something went wrong!**', @@ -95,4 +96,8 @@ client.on('messageCreate', async (message) => { } }); +client.on('interactionCreate', async (interaction) => { + client.commands.get(interaction.commandName).parseInteraction(client, config, interaction); +}); + client.login(config.token);