From 5a17e3811f5b40621352be6931cf314bb67ef337 Mon Sep 17 00:00:00 2001 From: ION606 Date: Tue, 12 Jul 2022 20:10:35 +0300 Subject: [PATCH] Added more moderation commands and upgraded the 'audio' command --- .gitignore | 2 +- commands/admin/lockchannel.js | 28 ++ commands/admin/moderation.js | 12 +- commands/admin/serverLock.js | 18 + commands/admin/serverUnlock.js | 21 ++ commands/admin/setup.js | 2 +- commands/admin/unnlockchannel.js | 28 ++ commands/dm_handler.js | 4 +- commands/interactionhandler.js | 18 +- commands/misc/help.js | 49 ++- commands/misc/pickupLines.js | 311 +++++++++++++++++ commands/misc/playAudio.js | 463 +++++++++++++++++++++----- commands/{API => premium}/chat.js | 0 commands/{API => premium}/stripe.js | 26 +- commands/{API => premium}/wordlist.js | 0 main.js | 13 +- 16 files changed, 881 insertions(+), 114 deletions(-) create mode 100644 commands/admin/lockchannel.js create mode 100644 commands/admin/serverLock.js create mode 100644 commands/admin/serverUnlock.js create mode 100644 commands/admin/unnlockchannel.js create mode 100644 commands/misc/pickupLines.js rename commands/{API => premium}/chat.js (100%) rename commands/{API => premium}/stripe.js (89%) rename commands/{API => premium}/wordlist.js (100%) diff --git a/.gitignore b/.gitignore index 61100d1..2654024 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ config.json *.sqlite *.txt !spec/LevelsXP.txt -database.sqlite +*.sqlite temp.js diff --git a/commands/admin/lockchannel.js b/commands/admin/lockchannel.js new file mode 100644 index 0000000..a4faae8 --- /dev/null +++ b/commands/admin/lockchannel.js @@ -0,0 +1,28 @@ +const { checkRole } = require('./verify.js'); + + +module.exports = { + name: 'lock', + description: 'Lock a channel', + execute(message, args, Discord, Client, bot) { + const guild = bot.guilds.cache.get(message.guild.id); + + if (!checkRole(bot, guild, message.author.id)) { return message.reply('Insufficient Permissions!'); } + + var channel; + if (args[0]) { + channel = guild.channels.cache.find(channel => channel.name.toLowerCase() === args[0]); + } else { + channel = message.channel; + } + + if (!channel) { return message.reply("This channel does not exist!"); } + + channel.permissionOverwrites.edit(message.guild.roles.everyone.id, { + VIEW_CHANNEL: true, + SEND_MESSAGES: false, + READ_MESSAGE_HISTORY: true, + ATTACH_FILES: false + }); + } +} \ No newline at end of file diff --git a/commands/admin/moderation.js b/commands/admin/moderation.js index 3564a57..604947f 100644 --- a/commands/admin/moderation.js +++ b/commands/admin/moderation.js @@ -3,6 +3,13 @@ const { log, SEVCODES } = require('../log.js'); const { checkRole } = require('./verify.js'); +function modHelp() { + const l = ['lock', 'unlock', 'kick', 'ban', 'unban', 'mute', 'unmute']; + + return l.join(", "); +} + + function kick(guild, user) { guild.members.kick(user); } @@ -134,4 +141,7 @@ function moderation_handler(bot, message, args, command) { } } -module.exports = { moderation_handler } \ No newline at end of file +module.exports = { + name: 'moderation', + moderation_handler, modHelp +} \ No newline at end of file diff --git a/commands/admin/serverLock.js b/commands/admin/serverLock.js new file mode 100644 index 0000000..c23ce3f --- /dev/null +++ b/commands/admin/serverLock.js @@ -0,0 +1,18 @@ +module.exports = { + name: 'serverLock', + description: 'Lock ***ALL CHANNELS*** for everyone with the "everyone" role - ***SERVER OWNER ONLY. FOR EMERGENCY USE ONLY***', + execute(message, args, Discord, Client, bot) { + const guild = bot.guilds.cache.get(message.guild.id); + + if (guild.ownerId != message.author.id) { return message.reply('Insufficient Permissions!'); } + + message.guild.channels.cache.forEach(ch => { + channel.permissionOverwrites.edit(message.guild.roles.everyone.id, { + VIEW_CHANNEL: false, + SEND_MESSAGES: false, + READ_MESSAGE_HISTORY: false, + ATTACH_FILES: false + }); + }); + } +} \ No newline at end of file diff --git a/commands/admin/serverUnlock.js b/commands/admin/serverUnlock.js new file mode 100644 index 0000000..587c01a --- /dev/null +++ b/commands/admin/serverUnlock.js @@ -0,0 +1,21 @@ +// const { checkRole } = require('./verify.js'); + + +// module.exports = { +// name: 'serverUnlock', +// description: 'unlocks ***ALL CHANNELS*** for everyone except the those with the "Selmer Bot Commands" role', +// execute(message, args, Discord, Client, bot) { +// const guild = bot.guilds.cache.get(message.guild.id); + +// if (!checkRole(bot, guild, message.author.id)) { return message.reply('Insufficient Permissions!'); } + +// message.guild.channels.cache.forEach(ch => { +// channel.permissionOverwrites.edit(message.guild.roles.everyone.id, { +// VIEW_CHANNEL: true, +// SEND_MESSAGES: false, +// READ_MESSAGE_HISTORY: false, +// ATTACH_FILES: false +// }); +// }); +// } +// } \ No newline at end of file diff --git a/commands/admin/setup.js b/commands/admin/setup.js index c4cd76b..78685e1 100644 --- a/commands/admin/setup.js +++ b/commands/admin/setup.js @@ -104,6 +104,6 @@ async function execute(bot, message, args, command, Discord, mongouri, items, xp module.exports = { name: 'setup', - description: 'N/A', + description: 'Set up server features', execute } \ No newline at end of file diff --git a/commands/admin/unnlockchannel.js b/commands/admin/unnlockchannel.js new file mode 100644 index 0000000..e709635 --- /dev/null +++ b/commands/admin/unnlockchannel.js @@ -0,0 +1,28 @@ +const { checkRole } = require('./verify.js'); + + +module.exports = { + name: 'unlock', + description: 'Unlock a channel', + execute(message, args, Discord, Client, bot) { + const guild = bot.guilds.cache.get(message.guild.id); + + if (!checkRole(bot, guild, message.author.id)) { return message.reply('Insufficient Permissions!'); } + + var channel; + if (args[0]) { + channel = guild.channels.cache.find(channel => channel.name.toLowerCase() === args[0]); + } else { + channel = message.channel; + } + + if (!channel) { return message.reply("This channel does not exist!"); } + + channel.permissionOverwrites.edit(message.guild.roles.everyone.id, { + VIEW_CHANNEL: true, + SEND_MESSAGES: true, + READ_MESSAGE_HISTORY: true, + ATTACH_FILES: true + }); + } +} \ No newline at end of file diff --git a/commands/dm_handler.js b/commands/dm_handler.js index d04e922..d9a101f 100644 --- a/commands/dm_handler.js +++ b/commands/dm_handler.js @@ -1,5 +1,5 @@ -const { convoManager } = require('./API/chat.js'); -const { handleInp } = require('./API/stripe'); +const { convoManager } = require('./premium/chat.js'); +const { handleInp } = require('./premium/stripe'); const { MongoClient, ServerApiVersion, ConnectionClosedEvent } = require('mongodb'); function handle_dm(message, bot) { diff --git a/commands/interactionhandler.js b/commands/interactionhandler.js index c49fedb..ede9ebe 100644 --- a/commands/interactionhandler.js +++ b/commands/interactionhandler.js @@ -1,13 +1,13 @@ const { MongoClient, ServerApiVersion } = require('mongodb'); -const { createSubscriptionManual } = require('./API/stripe.js'); -const { pause_start_stop } = require('./misc/playAudio.js'); +const { createSubscriptionManual } = require('./premium/stripe.js'); +const { pause_start_stop, playNext, showQueue } = require('./misc/playAudio.js'); async function handle_interaction(interaction, mongouri, turnManager, bot, STATE, items, xp_collection) { if (interaction.isButton()) { const battlecommandlist = ['ATTACK', 'HEAL', 'DEFEND', 'ITEMS', 'ULTIMATE']; const singleCommandGames = ['ttt']; // Use when you have more single-player games - const musicCommandList = ['PLAY', 'PAUSE', 'UNPAUSE', 'STOP']; + const musicCommandList = ['PLAY', 'PAUSE', 'RESUME', 'STOP', 'SKIP']; const client = new MongoClient(mongouri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 }); client.connect(async (err) => { @@ -59,8 +59,16 @@ async function handle_interaction(interaction, mongouri, turnManager, bot, STATE console.log("It's not your turn!"); } }); - } else if (musicCommandList.indexOf(interaction.customId) != -1) { - pause_start_stop(interaction, bot); + } else if (musicCommandList.indexOf(interaction.customId) != -1 || interaction.customId.indexOf('audioQueue|') != -1) { + if (interaction.customId == 'SKIP') { + playNext(interaction, bot); + } else if (interaction.customId.indexOf('audioQueue|') != -1) { + const page = Number(interaction.customId.split('|')[1]); + showQueue(bot, interaction.message, interaction, page); + } else { + pause_start_stop(interaction, bot); + } + } //else ifs here }); diff --git a/commands/misc/help.js b/commands/misc/help.js index 1131d5a..6116b35 100644 --- a/commands/misc/help.js +++ b/commands/misc/help.js @@ -1,48 +1,77 @@ +const { modHelp } = require('../admin/moderation.js'); + module.exports ={ name: "help", description: "Gets help for all of Selmer Bot's commands", execute(message, args, Discord, Client, bot) { + const groups = new Map([['SBspec', ['arrow', 'extracredit', 'profile', 'quotes']], ['adminCommands', [ 'setup', 'lock', 'unlock', 'serverLock' ]]]); + if (args[0] == 'econ') { let temp = "***Selmer Bot Commands (Econ):***\n"; temp += bot.commands.get('econ').econHelp(); temp += `\n\n(remember to use _'${bot.prefix}'_ before the command!)`; return message.channel.send(temp); + } else if (args[0] == 'game') { let temp = "***Selmer Bot Commands (Games):***\n"; temp += bot.commands.get('game').allGames.join(", "); temp += `\n\n(remember to use _'${bot.prefix}game'_ before the command!)`; return message.channel.send(temp); + + } + else if (args[0] == 'admin') { + let temp = `__**Selmer Bot Admin Commands**__\n` + Array.from(groups.get('adminCommands')).forEach(commName => { + let comm = bot.commands.get(commName); + temp += `${comm.name.toLowerCase()} - _${comm.description}_\n`; + }); + + temp += `__**Selmer Bot Moderation Commands**__\n` + temp += modHelp(); + + //Uses a different format, only the server owner can use it + temp += '\n_setup_ - ***SERVER OWNER ONLY*** - use _!setup help_\n'; + temp += `\n\n(remember to use _'${bot.prefix}'_ before the command!)`; + + return message.channel.send(temp); } let temp = "***Selmer Bot Commands:***\n"; bot.commands.sort((a, b) => {if (a.name && b.name) { return a.name[0] < b.name[0]} else {return false;} }); - bot.commands.forEach((comm) => { + const noPostList = Array.from(groups.values()).flat(); + const sList = groups.get('SBspec'); + + bot.commands.forEach((comm) => { if (comm.name != 'verify') { if (comm.name == 'econ') { - temp += `econ - use _!help econ_\n`; + temp += `**econ** - use _!help econ_\n`; } else if (comm.name == 'game') { - temp += `game - use _!help game_\n`; - } /* else if (comm.name == 'setup') { - temp += `setup - use _!setup_\n`; - }*/ + temp += `**games** - use _!help game_\n`; + } else { - if (comm.name && comm.description) { + if (comm.name && comm.description && !noPostList.includes(comm.name)) { temp += `${comm.name.toLowerCase()} - _${comm.description}_\n`; } } } }); - //Uses a different format, only the server owner can use it - temp += '_setup_ - ***SERVER OWNER ONLY*** - use _!setup help_\n'; - + temp += '**admin/moderation commands** - use !help admin\n'; + //Selmer Specific + temp += '\n__**Selmer\'s \\*Special\\* Commands**__\n' + sList.forEach((commName) => { + const comm = bot.commands.get(commName); + temp += `${comm.name.toLowerCase()} - _${comm.description}_\n`; + }) + temp += `\n_(remember to use '${bot.prefix}' before the command!)_`; + message.channel.send(temp); } } \ No newline at end of file diff --git a/commands/misc/pickupLines.js b/commands/misc/pickupLines.js new file mode 100644 index 0000000..2b080cb --- /dev/null +++ b/commands/misc/pickupLines.js @@ -0,0 +1,311 @@ +// https://ponly.com/200-pick-up-lines/ + +const cheesy = [ + 'If I said you had a good body would you hold it against me?', + 'Do you believe in love at first sight, or should I walk past again?', + 'Are you a magician? Because you just cast a spell on me.', + 'You’re so sweet you must be made out of chocolate.', + 'Did you hurt yourself when you fell from Heaven?', + 'Are you a cat? Because you look purrrfect!', + 'Are you tired? Because you’ve been running through my mind all day.', + 'Hold out hand: “Hey I’m going for a walk. Will you hold this for me?”', + 'I’m not a photographer, but I can picture me and you together.”', + 'Are you a cake, “Because I want a piece of that.”', + 'Are you a bank loan? Well, you’ve certainly got my interest. ', + 'If you were a triangle, you’d be acute one!', + 'Your hand looks heavy, let me hold it for you.', + 'I think you are suffering from a lack of Vitamin Me.', + 'On a scale of 1 to 10, you’re a 9 and I’m the 1 you lack.', + 'Do you like Harry Potter? Because I adumbledore you.', + 'Was your dad a boxer? Because damn, you’re a knockout!', + 'Your lips look lonely. Would they like to meet mine?', + 'I was wondering if you had an extra heart. Mine was just stolen.', + 'Your phone has GPS, right? Because I’m totally going to get lost in those *insert color* eyes.', + 'Would you grab my arm, so I can tell my friends I’ve been touched by an angel?', + 'Can I have your picture so I can show Santa what I want for Christmas?', + 'Your body is 65% water and I’m thirsty.', + 'Excuse me, do you have a band-aid? Cause I scraped my knee falling for you.', + 'Do I know you? Cause you look a lot like my next girlfriend/boyfriend.', + 'Do you know what my shirt is made of? Boyfriend/girlfriend material?', + 'They say Disneyland is the happiest place on earth. Well apparently, no one has ever been standing next to you.', + 'You look cold. Want to use me as a blanket?', + 'Are you an alien? Because you just abducted my heart.', + 'Did your license get suspended for driving all these guys crazy?', + 'For some reason, I was feeling a little off today. But when you came along, you definitely turned me on.', + 'Can I borrow your phone? I need to call God and tell him I’ve found his missing angel.', + 'Hey, you’re pretty and I’m cute. Together we’d be Pretty Cute.', + 'Can I follow you home? Cause my parents always told me to follow my dreams.', + 'What’s a smart, attractive man like myself doing without your phone number?', + 'I seem to have lost my phone number. Can I have yours?', + 'I’m lost. Can you give me directions to your heart?', + 'I would say God bless you, but it looks like he already did.', + 'Are you a parking ticket? Cause you’ve got fine written all over you.', + 'Is your name Google? Because you got everything I am searching for.', + 'Are you sure you’re not tired? You’ve been running through my mind all day.', + 'Did I tell you I’m writing a book? It’s a phone book and it’s missing your number.', + 'Is there an airport nearby or is it my heart taking off?', + 'Life without you would be like a broken pencil… pointless.', + 'Are you from Tennessee? Because you’re the only ten I see!', + 'I must be in a museum because you truly are a work of art.', + 'I’m not stalking you, I’m doing research!', + 'If I could rearrange the alphabet, I’d put U and I together.', + 'I’m no mathematician, but I’m pretty good with numbers. Tell you what, give me yours and watch what I can do with it.', + 'Aside from being sexy, what do you do for a living?' +]; + +const funny = [ + 'Are you wi-fi? Cause I’m totally feeling a connection.', + 'If I had a nickel for every time I saw someone as beautiful as you, I’d have five cents.', + 'I’d like to take you to the movies, but they don’t let you bring in your own snacks.', + 'Are you Australian? Because you meet all of my koalafications.', + 'Know what’s on the menu? Me-N-U.', + 'Your middle name must be Gillette. Because you’re the best a man can get!', + 'You look so familiar. Didn’t we take a class together? I could’ve sworn we had chemistry.', + 'You and I are like nachos with jalapeños. I’m super cheesy, you’re super hot, and we belong together.', + 'Knock-knock. (Who’s there?) When where? (When where who?) Tomorrow night, my house, you.', + 'Do you like Star Wars? Cause Yoda only one for me.', + 'Go ahead, feel my shirt. It’s made of boyfriend material!', + 'If you were a Transformer you’d be Optimus Fine!', + 'Do you believe in love at first sight, or should I walk past you again?', + 'I’m learning about important dates in history. Wanna be one of them?', + 'I seem to have lost my phone number. Can I have yours?', + 'Are you a parking ticket? Cause you’ve got fine written all over you!', + 'Did you invent the airplane? Because you seem just Wright for me!', + 'I was wondering if you had an extra heart…because mine was just stolen.', + 'Are you Siri? Because you autocomplete me!', + 'I hope you know CPR, because you are taking my breath away!', + 'If I had four quarters to give to the four prettiest women in the world, you would have a dollar!', + 'Let me guess, your middle name is Gillette, right? Because you’re the best a man can get!', + 'Your eyes are bluer than the Atlantic Ocean, and I don’t mind being lost at sea.', + 'If you were a burger at McDonald’s, you’d be the McGorgeous.', + 'Are you a camera? Because every time I look at you, I smile.', + 'Is there an airport nearby, or was that just my heart taking off?', + 'Are you a loan? ‘Cause you’ve got my interest!', + 'I’m in the mood for pizza. A pizza you, that is!', + 'Are you a 45-degree angle? Because you’re a-cutie!', + 'You’re so sweet, you could put Hershey’s out of business!', + 'I’m good at algebra; I can replace your X and you wouldn’t need to figure out Y.', + 'I’m really glad I just bought life insurance, because when I saw you, my heart stopped.', + 'If I had to rate you from 1 to 10, I’d give you a 9, because I’m the 1 you’re missing.', + 'You must be jelly, cause jam don’t shake like that.', + 'You must be a bank loan, cause you’ve got my interest.', + 'I’ve got 1-ply, I’ve got 2-ply, but all I really want is your re-ply.', + 'If nothing lasts forever, will you be my nothing?', + 'If you were a phaser on Star Trek, you’d be set to stun!', + 'Is your name Google? Because you have everything I’ve been searching for.', + 'Have you been covered in bees recently? I just assumed, because you look sweeter than honey.', + 'There must be something wrong with my eyes. I can’t take them off you.', + 'Are you from Tennessee? Because you’re the only Ten I See.', + 'You must be a campfire. Because you’re super hot and I want s’more.', + 'My buddies bet me that I wouldn’t be able to start a conversation with the most beautiful person here. How should we spend their money?', + 'Well, here I am. What are your other two wishes?', + 'Remember me? Oh, that’s right, I’ve only met you in my dreams.', + 'You must be made of cheese. Because you’re looking Gouda tonight!', + 'I’m glad I remembered to bring my library card. ‘Cause I am totally checking you out!', + 'If you were a vegetable, you would be a cute-cumber!', + 'I’m no mathematician, but I’m pretty good with numbers. Tell you what, give me yours and watch what I can do with it.' +]; + +const smooth = [ + 'Girl are those space pants? Because your butt is out of this world!', + 'I think you’re suffering from a lack of vitamin me.', + 'Kiss me if I’m wrong, but dinosaurs still exist, right?', + 'Excuse me, is your name Earl Grey? Because you look like a hot-tea!', + 'Can I borrow a kiss? I swear I’ll give it back!', + 'If you were a vegetable you’d be a cute cumber.', + 'Is summer over? Because I’m about to “fall” for you!', + 'There’s a massive clothes sale in my bedroom – everything is 100% off', + 'I lost my number…can I have yours?', + 'Are you a baker? ‘Cause those buns look TASTY.', + 'I’m not a hoarder but I really want to keep you forever.', + 'Is your name google? Because you’re everything I’ve been searching for.', + 'Are you an onion cos I want to remove your layers.', + 'Even if there wasn’t gravity on earth, I’d still fall for you.', + 'I’m glad I brought my library card because I’m checking you out.', + 'You don’t need keys to drive me crazy.', + 'Do you know what my shirt is made of? Girlfriend material?', + 'Do you smoke pot? Because weed be cute together.', + 'Are those mirrors in your pants? Because I can see myself in them!', + 'I was wondering if you had an extra heart? Mine was just stolen.', + 'Are those space pants? Because your butt looks out of this world.', + 'Is your name Chapstick? Because you’re da-balm.', + 'Do you have a map? Because I’m getting lost in your eyes.', + 'Do you have a bandaid? Cause I hurt my knee falling for you!', + 'Are you my phone charger? Because without you, I’d die.', + 'Like a broken pencil, life without you is pointless.', + 'We’re not socks. But I think we’d make a great pair.', + 'This may be cheesy, but I think you’re grate.', + 'Did it hurt? When you fell from heaven.', + 'I wish I could select all of your clothes and press delete.', + 'If you were a booger I’d pick you first ', + 'Did you sit in sugar? Because you have a sweet ass.', + 'We’re you born a mermaid, because you were a mermaid for me.', + 'Your hand looks heavy; can I hold it for you?', + 'Is your name honey? Cuz I’d love to drizzle you on my bland day.', + 'Of all the beautiful curves on your body, your smile is my favorite.', + 'I’m finding it really hard to breathe. U just keep on taking my breath away.', + 'Have you got the time… I’ve got the time if you’ve got the place!', + 'Are you glitter because you add sparkle to my life?', + 'Are you sitting on the F5 key? ‘Cause your ass is refreshing!', + 'Let’s commit the perfect crime- I’ll steal your heart, you steal mine.', + 'Do you wanna grab a coffee because I like you a latte?', + 'Hello! I guess you are looking for Mr. Right. Well, that’s me!', + 'My mom said she found a beautiful and intelligent girl for me. Is that you?', + 'How does it feel to be so gorgeous?', + 'What does it feel like to be the most beautiful girl in the room?', + 'If you were a transformer, you’d be Optimus Fine.', + ' Do you know what’s on today’s menu? It’s Me ‘n’ U.', + 'Are you a doctor? Because my heart beats faster when I see you.', + 'Are you Australian? Because you meet all of my koalafications.' +] + + +const best = [ + 'Let me tie your shoes, cause I don’t want you falling for anyone else.', + ' Are you an omelette? Because you’re making me egg-cited!', + 'Did you sit in a pile of sugar? Cause you have a pretty sweet butt.', + 'Do you have a pencil? Cause I want to erase your past and write our future.', + 'Are you my Appendix? Because I have a funny feeling in my stomach that makes me feel like I should take you out.', + 'Are you a florist? Cause ever since I met you, my life has been Rosey.', + 'I wanna live in your socks so I can be with you every step of the way.', + 'If God made anything more beautiful than you, I’m sure he’d keep it for himself.', + 'Do you have a map? I’m getting lost in your eyes.', + 'I don’t have a library card, but do you mind if I check you out?', + 'Are you an orphanage? Cause I wanna give you kids.', + 'Do you have a sunburn, or are you always this hot?', + 'I was feeling a little off today, but you definitely turned me on.', + 'Are you a fruit, because Honeydew you know how fine you look right now?', + 'Do you live in a corn field, cause I’m stalking you.', + 'Sorry, but you owe me a drink. [Why?] Because when I looked at you, I dropped mine.', + 'Excuse me, is your name Earl Grey? Because you look like a hot-tea!', + 'I’m not a hoarder but I really want to keep you forever.', + 'Do you have a Band-Aid? Because I just scraped my knee falling for you.', + 'Are you a parking ticket? ‘Cause you’ve got fine written all over you.', + 'Are you mexican? Because you’re my juan and only!', + 'Do you drink Pepsi? Because you’re so-da-licious!', + 'Do I know you? Cause you look exactly like my next girlfriend.', + 'I’m no organ donor but I’d be happy to give you my heart.', + 'I seem to have lost my phone number. Can I have yours?', + 'Is your nickname Chapstick? Because you’re da balm!', + 'I’m not staring at your b00bs. I’m staring at your heart.', + 'Can I take your picture to prove to all my friends that angels do exist?', + 'I’ll give up my morning cereal to spoon you instead.', + 'Do you want to see a picture of a beautiful person? (hold up a mirror)', + 'I’m not drunk, I’m just intoxicated by YOU.', + 'I was blinded by your beauty… I’m going to need your name and number for insurance purposes.', + 'Is there an airport nearby or is that just my heart taking off?', + 'There must be a lightswitch on my forehead because everytime I see you, you turn me on!', + 'Hi, I’m writing a term paper on the finer things in life, and I was wondering if I could interview you?', + 'Have you been to the doctor lately? Cause I think you’re lacking some Vitamin Me.', + 'Can I follow you home? Cause my parents always told me to follow my dreams.', + 'You look so familiar… didn’t we take a class together? I could’ve sworn we had chemistry.', + 'Hi, I’m Mr. Right. Someone said you were looking for me?', + 'Do you like Nintendo? Because Wii would look good together.', + 'If you were a flower you’d be a damnnn-delion', + 'If you were ground coffee, you’d be Espresso cause you’re so fine.', + 'If I had a star for every time you brightened my day, I’d have a galaxy in my hand.', + 'Damn, if being sexy was a crime, you’d be guilty as charged!', + 'I was wondering if you had an extra heart? Mine seems to have been stolen', + 'Do you smoke pot? Because weed be cute together.', + 'I thought happiness started with an H. Why does mine start with U?', + 'Are you a campfire? Cause you are hot and I want s’more.', + 'If you were a tropical fruit, you’d be a Fine-apple!', + 'Are you a banana? Because I find you a-peeling' +] + +const anime = [ + 'Hey darling, I must be in Infinite Tsukuyomi, cause you’re like a dream come true. (Naruto)', + 'Do you have a pen? So I can write your virginity in my death note. (Death Note)', + 'Our love is over 9000. Know what I am Saiyan? (Dragon Ball)', + 'Do you believe in fate? How about you stay the night? (Fate)', + 'Are you a trap card? Because I’ve Fallen for you. (Yu-Gi-Oh)', + 'Baby, you can call me Luffy, because I’ll bend anyway you want me to. (One Piece)', + 'I don’t need 99 souls. All I need is yours. (Soul Eater)', + 'Did you like Ghostory? How about making our story? (Ghostory)', + 'You’re hotter than the Amaterasu. (Naruto)', + 'I know a mystery even Detective Conan can’t solve: The mystery of how you got so damn beautiful! (Case Closed)', + 'Girl have you mastered the Rasengan? Because every time your hand touches me you make me dizzy. (Naruto)', + 'Zoro has the three sword style. But I’m really good with my one sword. (One Piece)', + 'You must be better than Kuuhaku. Because when I first saw you, you already won my heart. (No Game No Life)', + 'If I just had a Geass, I’d command you to be mine. (Code Geass)', + 'Call me All Might cause I’m just looking to Texas Smash. (My Hero Academia)', + 'Something is rising and it isn’t the shield hero. (The Rising of the Shield Hero)', + 'I wish I was a demon because I really want you to slay me tonight. (Demon Slayer)', + 'Are you a Wing Spiker? Cause you make my pulse spike too! (Haikyuu)', + 'Are you a part of the phantom thieves? Because you just stole my heart. (Persona 5)', + 'Is your name Erza? Cause my cheeks go Scarlet when I think of you. (Fairy Tale)', + 'Do you have the Byakugaan, because it feels like you can see right through my Heart. (Naruto)', + 'Is your name Levi? Because I love you GAJEEL-ION times more than Jet and Droy. (Fairy Tale)', + 'Jeagar on the streets, Titan in the bed. (Attack on Titan )', + 'You’re the hospital bed for my Deku. (My Hero Academia)', + 'I was just checking you out from across the room with my Sharingan. (Naruto)', + 'Are you Chisaki? Because I wanna Detroit smash you. (My Hero Academia)', + 'Are you Nezuko? Because I want to be in your box. (Demon Slayer)', + 'Just say yes and I’ll give you more than seven eurekas. (Eureka Seven)', + 'You remind me of Menma. Because even when I can’t see you, I still feel you inside my heart. (Anohana)', + 'Are you Gaara? Because love is written all over your face. (Naruto)', + 'Are you Karasuno’s Captain? Because you’re my number one. (Haikyuu)', + 'Orochimaru: Be my vessel, I want to be inside you. (Naruto)', + 'Are you Kikyo? Because I think you shot an arrow through my heart. (Inuyasha)', + 'Are you from dragon ball, because I wanna blow my Picciload in you. (Dragon Ball)', + 'Are you Makise Kurisu? Because I will travel world lines to be with you. (Steins;Gate)', + 'Is your name Cana? Um, Cana call you mine? (Fairy Tail Guild)', + 'Let’s have a future diary. A diary of the future of you and me. (Future Diary)', + 'You’re so sexy and that’s a deadly sin! (The Seven Deadly Sins)', + 'Don’t need to be a phantom thief to steal your heart.', + 'Show me your Bankai, big boy. (Bleach)', + 'Did Buu attack you? Because you’re as sweet as candy. (Dragon Ball)', + 'Lelouch Vi Britannia commands you to give me your number. (Code Geass)', + 'Are you a tuner monster? Because you’re powering up my Syncro. (Yu-Gi-Oh!)', + 'Damn girl, Are you Kira Yoshikage? Cause you blow me away. (JoJo’s Bizarre Adventure)', + 'I’d trade an arm and a leg to get a piece of your philosopher’s stone. (Fullmetal Alchemist)', + 'Are you a pokemon? Because I wanna Peak-at-you? (Pokemon)', + 'Roses are red, Light is dead, will you be the butter to my bread? (Death Note)', + 'Hey Girl, you Bulma mind. (Dragon Ball)', + 'Are you Saitama? Because you got me down in one move. (One-Punch Man)', + 'Hey! Are you the railgun? Because I can feel a spark. (A Certain Scientific Railgun)', + 'Are you a loli? Because you’re worth going to jail for. (A lolicon)', + 'Are you from Howl’s Moving Castle? Because you take my spirit away. (Howl’s Moving Castle)', + 'I can be the Aizawa to your sleeping bag. (My Hero Academia)', + 'Equivalent exchange. I’ll give you half of my life, so give me half of yours! (Fullmetal Alchemist)', + 'Even if it means risking my existence, I’ll cross different world lines just to find you. (Steins;Gate)', + 'Can I touch your Pikacheeks? (Pokemon)', + 'Better wear my sunglasses because you Meiko my day so bright. (Prison School)', + 'Are you Hiro? Because I want you to be my darling. (Darling in the Franxx)', + 'Are you a death note? Because you make my heart stop. (Death Note)', + 'I’ll love you longer than all the One Piece episodes. (One Piece)' +] + + +module.exports = { + name: 'pickupline', + description: 'Get a pickup line from our selection of 200 lines!', + execute(message, args, Discord, Client, bot) { + const nameList = new Map([['cheesy', cheesy], ['funny', funny], ['smooth', smooth], ['best', best], ['anime', anime]]); + + if (args[0] == 'sources') { + message.reply("The normal lines are from https://ponly.com/200-pick-up-lines/\nThe anime lines are from https://thoughtcatalog.com/january-nelson/2021/06/anime-pick-up-lines/") + .then((msg) => { msg.suppressEmbeds(true); }) + return; + } + + if (args.length < 1 || (!nameList.get(args[0]) && args[0] != 'random')) { return message.reply("Please use the following format !pickupline <'cheesy', 'funny', 'smooth', 'best', 'anime', 'random', 'sources'>"); } + + var key; + if (args[0] == 'random') { + let keyInd = Math.floor(Math.random() * nameList.size); + key = Array.from(nameList.keys())[keyInd]; + } else { + key = args[0]; + } + + + const arr = nameList.get(key); + keyInd = Math.floor(Math.random() * arr.length); + try { + message.reply(arr[keyInd]); + } catch { + message.channel.send(arr[keyInd]); + } + } +} \ No newline at end of file diff --git a/commands/misc/playAudio.js b/commands/misc/playAudio.js index 9477f67..9fdff8c 100644 --- a/commands/misc/playAudio.js +++ b/commands/misc/playAudio.js @@ -1,73 +1,380 @@ const pathToFfmpeg = require('ffmpeg-static'); // const { joinVoiceChannel, createAudioResource } = require('@discordjs/voice'); const { VoiceConnectionStatus, AudioPlayerStatus, createAudioPlayer, StreamType, joinVoiceChannel, createAudioResource, getVoiceConnection } = require('@discordjs/voice'); -const { MessageActionRow, MessageButton, MessageSelectMenu } = require('discord.js'); +const { MessageActionRow, MessageButton, MessageEmbed, MessageSelectMenu, Message } = require('discord.js'); const play = require('play-dl'); -// Leave here to be initialized at the program's start -const player = createAudioPlayer(); // Note: Unsure of what this does , but may be related to the play-dl lib (my notes are inconsistent) // play.authorization(); -function pause_start_stop(interaction, bot) { - const command = interaction.customId.toLowerCase(); - var em = interaction.message.embeds[0]; - var rows = [new MessageActionRow()]; - - if (command == "pause") { - rows[0].addComponents( - new MessageButton() - .setCustomId('UNPAUSE') - .setLabel('▶️') - .setStyle('SECONDARY'), - new MessageButton() - .setCustomId('STOP') - .setLabel('⏹️') - .setStyle('SECONDARY') - ); - - em.description = 'IS NOW PAUSED'; - player.pause(); - - } else if (command == "unpause") { - rows[0].addComponents( - new MessageButton() - .setCustomId('PAUSE') - .setLabel('⏸️') - .setStyle('SECONDARY'), - new MessageButton() - .setCustomId('STOP') - .setLabel('⏹️') - .setStyle('SECONDARY') - ); - - em.description = 'IS NOW PLAYING'; - - player.unpause(); - } else if (command == "stop") { +function playStopEmbed(bot, interaction, yt_info, stopped, message = null) { + if (stopped) { + var em = interaction.message.embeds[0]; rows = []; + em.description = new String; em.description = 'IS NOW STOPPED'; - - const connection = getVoiceConnection(interaction.guild.id); + + interaction.update({embeds: [em], components: rows}); + } else { + const author = { + name: "Selmer Bot", + url: "", + iconURL: bot.user.displayAvatarURL() + } + const newEmbed = new MessageEmbed() + .setColor('#0F00F0') + .setTitle(`${yt_info.video_details.title}`) + .setAuthor(author) + .setDescription('IS NOW PLAYING') + .setURL(yt_info.video_details.url) + .setThumbnail(yt_info.video_details.thumbnails[0].url); + + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId('PAUSE') + .setLabel('⏸️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('STOP') + .setLabel('⏹️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('SKIP') + .setLabel('⏭️') + .setStyle('SECONDARY') + ); + + + if (message) { + const m = message.reply({ embeds: [newEmbed], components: [row] }); + m.then((msg) => { + const data = bot.audioData.get(message.guild.id); + data[2] = msg.id; + bot.audioData.set(message.guild.id, data); + }) + } else { + interaction.update({embeds: [newEmbed], components: [row]}); + } + } +} + + +function pause_start_stop(interaction, bot, message = null, command = null) { + try { + var player, em; + + if (interaction) { + player = bot.audioData.get(interaction.guildId)[0]; + command = interaction.customId.toLowerCase(); + em = interaction.message.embeds[0]; + } else { + player = bot.audioData.get(message.guild.id)[0]; + em = message.embeds[0]; + } + + var rows = [new MessageActionRow()]; + + if (command == "pause") { + rows[0].addComponents( + new MessageButton() + .setCustomId('RESUME') + .setLabel('▶️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('STOP') + .setLabel('⏹️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('SKIP') + .setLabel('⏭️') + .setStyle('SECONDARY') + ); + + em.description = 'IS NOW PAUSED'; + player.pause(); + + } else if (command == "resume") { + rows[0].addComponents( + new MessageButton() + .setCustomId('PAUSE') + .setLabel('⏸️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('STOP') + .setLabel('⏹️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId('SKIP') + .setLabel('⏭️') + .setStyle('SECONDARY') + ); + + em.description = 'IS NOW PLAYING'; + + player.unpause(); + } else if (command == "stop") { + playStopEmbed(bot, interaction, null, true); + + const connection = getVoiceConnection(interaction.guild.id); + + player.stop(); + + //Remove everything from queue + bot.audioData.delete(interaction.guildId); + + if (connection) { connection.destroy(); } + return; + } + + if (interaction) { interaction.update({embeds: [em], components: rows}); } + else { + const data = bot.audioData.get(message.guild.id); + + // var msg = message.channel.messages.cache.get(data[2]); + const newEmbed = message.embeds[0]; + newEmbed.description = "Has been deferred"; + message.edit({ embeds: [ newEmbed ], components: []}); + + const m = message.reply({embeds: [em], components: rows}); + m.then((msg) => { + const data = bot.audioData.get(message.guild.id); + data[2] = msg.id; + bot.audioData.set(message.guild.id, data); + }) + } + + } catch (e) { + console.log(e); + rows = []; + em.description = new String('IS NOW STOPPED'); + interaction.update({embeds: [em], components: rows}); + } +} + + +function playNext(interaction, bot, message = null) { + // https://discordjs.guide/voice/audio-player.html#taking-action-within-the-error-handler + + //Setup data[1] = {info: yt_info, resource: resource} + var guildId; + if (message) { guildId = message.guild.id; } + else { interaction.guildId; } + + let data = bot.audioData.get(guildId); + const player = data[0]; + + //Check if the queue is empty + if (!data[1][0]) { player.stop(); - if (connection) { connection.destroy(); } + bot.audioData.delete(guildId); + if (message) { return true; } + else { playStopEmbed(bot, interaction, null, true); } + } + + + const resource = data[1][0].resource; + const yt_info = data[1][0].yt_info; + player.stop(); + + //Play the thing + player.play(resource); + + //remove the song from queue + delete data[1][0]; + data[1] = data[1].filter(n => n); + + bot.audioData.set(guildId, data); + + //Add the embed + var msg = message; + if (!message) { + msg = interaction.message; + interaction.update({ embeds: [ new MessageEmbed(interaction.message.embeds[0]).setDescription("IS NOW STOPPED") ], components: []}); } - interaction.update({embeds: [em], components: rows}) + playStopEmbed(bot, interaction, yt_info, false, msg); + + return false; } +function fromMessage(bot, command, msg) { + //Setup data[1] = {info: yt_info, resource: resource} + const guildId = msg.guild.id; + let data = bot.audioData.get(guildId); + if (!data) { return msg.reply("No music is currently playing!"); } + + const player = data[0]; + const message = msg.channel.messages.cache.get(data[2]); + // console.log(message); + + var em = message.embeds[0]; + var rows; + + if (command == 'stop') { + em = message.embeds[0]; + rows = []; + em.description = new String; + em.description = 'IS NOW STOPPED'; + + player.stop(); + const connection = getVoiceConnection(guildId); + if (connection) { connection.destroy(); } + + bot.audioData.delete(guildId); + msg.reply("Audio stopped!"); + + } else if (command == 'skip') { + if (playNext(null, bot, message)) { + rows = []; + em = message.embeds[0]; + em.description = new String; + em.description = 'IS NOW STOPPED'; + + msg.reply("Audio stopped!"); + } + } else if (command == 'pause' || command == 'resume') { + pause_start_stop(null, bot, message, command); + } + + + message.edit({embeds: [em], components: rows}); +} + + + +function showQueue(bot, message, interaction = null, page = 0) { + const guild = message.guild.id; + const data = bot.audioData.get(guild); + if (!data) { return message.reply("The audio queue is empty!"); } + + const rawQueue = data[1]; + if (!rawQueue || rawQueue.length <= 0) { return message.reply("The audio queue is empty!"); } + + const songList = []; + var fiveSongs = ''; + let i = 0; + + rawQueue.forEach(function (rawSong) { + const songDetails = rawSong.yt_info.video_details; + fiveSongs += `${i + 1}. ${songDetails.title}\n`; + + i++; + + //Split the songs into pages of 10 + if (i % 10 == 0) { songList.push(fiveSongs); fiveSongs = ''; } + }); + + if (page >= songList.length) { page = songList.length - 1 } + if (page < 0) { page = 0; } //LEAVE AS TWO IF's AS THE LENGTH MIGHT BE 0 + + if (songList.length == 0) { songList.push(fiveSongs); } + + //Create the embed + const author = { + name: "Selmer Bot", + url: "", + iconURL: bot.user.displayAvatarURL() + } + + const newEmbed = new MessageEmbed() + .setTitle("SONG QUEUE") + .setAuthor(author) + .setDescription(songList[page]) + .setFooter({ text: `Page ${page + 1}` }) + + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId(`audioQueue|${page - 1}`) + .setLabel('⬅️') + .setStyle('SECONDARY'), + new MessageButton() + .setCustomId(`audioQueue|${page + 1}`) + .setLabel('➡️') + .setStyle('SECONDARY'), + + ) + + if (interaction) { + interaction.update({embeds: [newEmbed], components: [row]}); + } else { + message.reply({ embeds: [newEmbed], components: [row] }); + } +} + + +function removeFromQueue(bot, message, posStr) { + const guildId = message.guild.id; + let data = bot.audioData.get(guildId); + if (!data) { return message.reply("The audio queue is empty!"); } + + const rawQueue = data[1]; + if (!rawQueue || rawQueue.length <= 0) { return message.reply("The audio queue is empty!"); } + else if (isNaN(posStr) || Number(posStr) > rawQueue.length) { return message.reply("Please specify a number within queue bounds!"); } + + const pos = Number(posStr) - 1; + const details = rawQueue[pos].yt_info.video_details; + + delete data[1][pos]; + data[1] = data[1].filter(n => n); + + bot.audioData.set(guildId, data); + + const newEmbed = new MessageEmbed() + .setColor('#0F00F0') + .setTitle(`${details.title}`) + .setAuthor({ name: "Selmer Bot", url: "", iconURL: bot.user.displayAvatarURL() }) + .setDescription( `has been removed from position ${pos + 1} in queue!`) + .setThumbnail(details.thumbnails[0].url); + + message.reply({ embeds: [newEmbed] }); +} + + + +function shuffleQueue(bot, message) { + const guildId = message.guild.id; + let data = bot.audioData.get(guildId); + if (!data) { return message.reply("The audio queue is empty!"); } + + let rawQueue = data[1]; + if (!rawQueue || rawQueue.length <= 0) { return message.reply("The audio queue is empty!"); } + + //Shuffle the queue + rawQueue = rawQueue.sort(() => Math.random()-0.5); + + data[1] = rawQueue; + + bot.audioData.set(guildId, data); + + message.reply("The queue has been shuffled!\nThe new queue is:"); + showQueue(bot, message); +} + + + module.exports = { name: "audio", description: 'Play a song from YouTube, add free!', async execute(message, args, Discord, Client, bot, interaction = null) { - // message.channel.send("This command has not been set up yet\nSorry!"); - // return; + const commandList = ['stop', 'skip', 'pause', 'resume']; + if (args.length < 1) { - message.reply("Please use the following format _!audio [song name or URL]_"); + message.reply("Please use the following format _!audio [song name or URL]_ **or** _!audio queue_"); return; + } else if (args[0] == 'queue') { + return showQueue(bot, message); + } else if (commandList.indexOf(args[0]) != -1) { + return fromMessage(bot, args[0], message); + } else if (args[0] == 'remove') { + if (args.length < 2) { return message.reply("Please specify a position in queue!"); } + return removeFromQueue(bot, message, args[1]); + } else if (args[0] == 'shuffle') { + return shuffleQueue(bot, message); } /* @@ -89,7 +396,7 @@ module.exports = { guildId: channel.guild.id, adapterCreator: channel.guild.voiceAdapterCreator, }); - + connection.on(VoiceConnectionStatus.Ready, () => { // console.log('Connected to the voice channel!'); }); @@ -116,48 +423,36 @@ module.exports = { yt_info = await play.video_info(yt_info[0].url); } - const author = { - name: "Selmer Bot", - url: "", - iconURL: bot.user.displayAvatarURL() - } - - const newEmbed = new Discord.MessageEmbed() - .setColor(' #0F00F0') - .setTitle(`${yt_info.video_details.title}`) - .setAuthor(author) - .setDescription('IS NOW PLAYING') - .setURL(yt_info.video_details.url) - .setThumbnail(yt_info.video_details.thumbnails[0].url); - - const row = new MessageActionRow() - .addComponents( - new MessageButton() - .setCustomId('PAUSE') - .setLabel('⏸️') - .setStyle('SECONDARY'), - new MessageButton() - .setCustomId('STOP') - .setLabel('⏹️') - .setStyle('SECONDARY') - ); - - let resource = createAudioResource(stream.stream, { inputType: stream.type }) - connection.subscribe(player); - - let audio = "em.mp3"; + // let audio = "em.mp3"; // let resource = createAudioResource(join(__dirname, audio)); - player.play(resource); - - player.on(AudioPlayerStatus.Playing, () => { - // console.log('The audio player has started playing!'); - }); - message.reply({ embeds: [newEmbed], components: [row] }); + const data = bot.audioData.get(channel.guild.id); - }, pause_start_stop + if (data && data[1]) { + //[player, [queue Array]] + data[1].push({yt_info: yt_info, resource: resource}); + bot.audioData.set(channel.guild.id, data); + message.reply(`_"${yt_info.video_details.title}" added to queue!_`); + } else { + const player = createAudioPlayer(); + connection.subscribe(player); + + bot.audioData.set(channel.guild.id, [player, new Array(), null]); + player.play(resource); + + + player.on(AudioPlayerStatus.Playing, () => { + //Check maybe? + }); + + playStopEmbed(bot, interaction, yt_info, false, message); + } + + + + }, pause_start_stop, playNext, showQueue } \ No newline at end of file diff --git a/commands/API/chat.js b/commands/premium/chat.js similarity index 100% rename from commands/API/chat.js rename to commands/premium/chat.js diff --git a/commands/API/stripe.js b/commands/premium/stripe.js similarity index 89% rename from commands/API/stripe.js rename to commands/premium/stripe.js index 9519c37..372722e 100644 --- a/commands/API/stripe.js +++ b/commands/premium/stripe.js @@ -64,9 +64,16 @@ async function createSubscriptionManual(bot, interaction, id, priceID) { success_url: billingPortalSession.url, cancel_url: "https://linktr.ee/selmerbot" }); - + interaction.editReply(session.url); - }).catch((err) => { interaction.editReply(err); }) + }).catch((err) => { + if (String(typeof(err)) == 'string') { + interaction.editReply(err); + } else { + console.log(err); + interaction.editReply("A Stripe error occured! Please contact support ASAP!") + } + }); } @@ -100,13 +107,20 @@ async function changeSubscriptionManual(bot, message) { }); }).then(async (userID) => { - const session = await stripe.billingPortal.sessions.create({ + await stripe.billingPortal.sessions.create({ customer: userID, return_url: "https://linktr.ee/selmerbot", - }); - message.reply(session.url); + }).then((session) => { + message.reply(session.url); + }) }).catch((err) => { - message.reply(err); + + if (String(typeof(err)) == 'string') { + message.reply(err); + } else { + console.log(err); + message.reply("A Stripe error occured! Please contact support ASAP!"); + } }); } diff --git a/commands/API/wordlist.js b/commands/premium/wordlist.js similarity index 100% rename from commands/API/wordlist.js rename to commands/premium/wordlist.js diff --git a/main.js b/main.js index 8f9ea54..745cfdb 100644 --- a/main.js +++ b/main.js @@ -74,6 +74,9 @@ bot.openai = new OpenAIApi(configuration); bot.temptext = ''; bot.stripe = Stripe(StripeAPIKey); +//The first thing will be an audioPlayer(), the second a queue +bot.audioData = new Map(); + //#region MongoDB integration //Development support @@ -95,7 +98,7 @@ const { connect } = require('mongoose'); // const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js')); // Obsolete? bot.commands = new Discord.Collection(); -const forbiddenFolders = ['db', 'API', 'dev only']; +const forbiddenFolders = ['db', 'premium', 'dev only']; fs.readdirSync('./commands') .forEach(dir => { @@ -104,7 +107,9 @@ fs.readdirSync('./commands') .filter(file => file.endsWith('.js')) .forEach(file => { const command = require(`./commands/${dir}/${file}`); - bot.commands.set(command.name, command); + if (command.name && command.description) { + bot.commands.set(command.name, command); + } }); } }); @@ -118,9 +123,9 @@ temp_command = require('./commands/games/game.js'); bot.commands.set('game', temp_command); //Everything in the API should be handled by specific handler functions -const chat = require('./commands/API/chat.js'); +const chat = require('./commands/premium/chat.js'); bot.commands.set('chat', chat); -const stripeCommands = require('./commands/API/stripe.js'); +const stripeCommands = require('./commands/premium/stripe.js'); bot.commands.set('premium', stripeCommands); //#endregion