mirror of https://github.com/kry008/Bot-2.0.git
				
				
				
			first commit
						commit
						74ca98e6dc
					
				| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					config.json
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					package-lock.json
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,121 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'argumentstest',
 | 
				
			||||||
 | 
					    description: 'Test command for args',
 | 
				
			||||||
 | 
					    help: 'This command is used to test the arguments of a command',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'ANY',
 | 
				
			||||||
 | 
					            type: 'ANY',
 | 
				
			||||||
 | 
					            description: 'Any type of argument',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type3',
 | 
				
			||||||
 | 
					            type: 3, 
 | 
				
			||||||
 | 
					            description: 'STRING',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type4',
 | 
				
			||||||
 | 
					            type: 4, 
 | 
				
			||||||
 | 
					            description: 'INTEGER',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type5',
 | 
				
			||||||
 | 
					            type: 5, 
 | 
				
			||||||
 | 
					            description: 'BOOLEAN',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type6',
 | 
				
			||||||
 | 
					            type: 6, 
 | 
				
			||||||
 | 
					            description: 'USER',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type7',
 | 
				
			||||||
 | 
					            type: 7, 
 | 
				
			||||||
 | 
					            description: 'CHANNEL',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type8',
 | 
				
			||||||
 | 
					            type: 8, 
 | 
				
			||||||
 | 
					            description: 'ROLE',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type9',
 | 
				
			||||||
 | 
					            type: 9, 
 | 
				
			||||||
 | 
					            description: 'MENTIONABLE',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type10',
 | 
				
			||||||
 | 
					            type: 10, 
 | 
				
			||||||
 | 
					            description: 'NUMBER',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type11',
 | 
				
			||||||
 | 
					            type: 11, 
 | 
				
			||||||
 | 
					            description: 'ATTACHMENT',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        message.channel.send('Arguments test command executed');
 | 
				
			||||||
 | 
					        var txt = '';
 | 
				
			||||||
 | 
					        if(args) {
 | 
				
			||||||
 | 
					            for (var key in args) {
 | 
				
			||||||
 | 
					                txt += key + ': ' + args[key] + '\n';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        message.channel.send(txt);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        var stringToReturn = 'Arguments test command executed\n';
 | 
				
			||||||
 | 
					        //get which type of argument was passed, and return the value
 | 
				
			||||||
 | 
					        if(interaction.options.getString('type3')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type3: ' + interaction.options.getString('type3') + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getInteger('type4')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type4: ' + interaction.options.getInteger('type4') + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getBoolean('type5')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type5: ' + interaction.options.getBoolean('type5') + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getUser('type6')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type6: ' + interaction.options.getUser('type6').username + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getChannel('type7')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type7: ' + interaction.options.getChannel('type7').name + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getRole('type8')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type8: ' + interaction.options.getRole('type8').name + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getMentionable('type9')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type9: ' + interaction.options.getMentionable('type9').name + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getNumber('type10')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type10: ' + interaction.options.getNumber('type10') + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(interaction.options.getMessage('type11')) {
 | 
				
			||||||
 | 
					            stringToReturn += 'type11: ' + interaction.options.getMessage('type11').content + '\n';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        interaction.reply(stringToReturn);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,65 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'ban',
 | 
				
			||||||
 | 
					    description: 'Bans a user from the server',
 | 
				
			||||||
 | 
					    help: 'This command is used to ban a user from the server. Requires the user to have the "Ban Members" permission. Requires the bot to have the "Ban Members" permission.',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 'USER',
 | 
				
			||||||
 | 
					            description: 'The user to ban',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 6,
 | 
				
			||||||
 | 
					            description: 'The user to ban',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'reason',
 | 
				
			||||||
 | 
					            type: 3,
 | 
				
			||||||
 | 
					            description: 'The reason for the ban',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: true,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE'],
 | 
				
			||||||
 | 
					    integration_types: [0],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const user = message.mentions.users.first();
 | 
				
			||||||
 | 
					        if (!user) {
 | 
				
			||||||
 | 
					            return message.reply('You need to mention a user to ban');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const member = message.guild.members.cache.get(user.id);
 | 
				
			||||||
 | 
					        if (!member) {
 | 
				
			||||||
 | 
					            return message.reply('That user is not in this server');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!member.bannable) {
 | 
				
			||||||
 | 
					            return message.reply('I cannot ban that user');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const reason = args.slice(1).join(' ') || 'No reason provided';
 | 
				
			||||||
 | 
					        await member.ban({ reason });
 | 
				
			||||||
 | 
					        message.reply(`${user.tag} has been banned`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const user = interaction.options.getUser('user');
 | 
				
			||||||
 | 
					        const member = interaction.guild.members.cache.get(user.id);
 | 
				
			||||||
 | 
					        if (!member) {
 | 
				
			||||||
 | 
					            return interaction.reply('That user is not in this server');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!member.bannable) {
 | 
				
			||||||
 | 
					            return interaction.reply('I cannot ban that user');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const reason = interaction.options.getString('reason') || 'No reason provided';
 | 
				
			||||||
 | 
					        await member.ban({ reason });
 | 
				
			||||||
 | 
					        interaction.reply(`${user.tag} has been banned`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					function returnCat() {
 | 
				
			||||||
 | 
					    return fetch('https://api.thecatapi.com/v1/images/search')
 | 
				
			||||||
 | 
					        .then(response => response.json())
 | 
				
			||||||
 | 
					        .then(data => data[0].url);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'cat',
 | 
				
			||||||
 | 
					    description: 'Get a random cat picture',
 | 
				
			||||||
 | 
					    help: 'Get a random cat picture',
 | 
				
			||||||
 | 
					    arguments: [],
 | 
				
			||||||
 | 
					    options: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const cat = await returnCat();
 | 
				
			||||||
 | 
					        message.channel.send(cat);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const cat = await returnCat();
 | 
				
			||||||
 | 
					        interaction.reply(cat);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					//https://cat-fact.herokuapp.com/facts/random
 | 
				
			||||||
 | 
					function returnCatFact() {
 | 
				
			||||||
 | 
					    return fetch('https://cat-fact.herokuapp.com/facts/random')
 | 
				
			||||||
 | 
					        .then(response => response.json())
 | 
				
			||||||
 | 
					        .then(data => data[0].text);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'catfact',
 | 
				
			||||||
 | 
					    description: 'Get a random cat fact',
 | 
				
			||||||
 | 
					    help: 'Get a random cat fact',
 | 
				
			||||||
 | 
					    arguments: [],
 | 
				
			||||||
 | 
					    options: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const catFact = await returnCatFact();
 | 
				
			||||||
 | 
					        message.channel.send(catFact);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const catFact = await returnCatFact();
 | 
				
			||||||
 | 
					        interaction.reply(catFact);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					//https://api.chucknorris.io/jokes/random
 | 
				
			||||||
 | 
					function randomChuck() {
 | 
				
			||||||
 | 
					    return fetch('https://api.chucknorris.io/jokes/random')
 | 
				
			||||||
 | 
					        .then(response => response.json())
 | 
				
			||||||
 | 
					        .then(data => data.value);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'chuck',
 | 
				
			||||||
 | 
					    description: 'Get a random Chuck Norris joke',
 | 
				
			||||||
 | 
					    help: 'Get a random Chuck Norris joke',
 | 
				
			||||||
 | 
					    arguments: [],
 | 
				
			||||||
 | 
					    options: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const chuck = await randomChuck();
 | 
				
			||||||
 | 
					        message.channel.send(chuck);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const chuck = await randomChuck();
 | 
				
			||||||
 | 
					        interaction.reply(chuck);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,143 @@
 | 
				
			||||||
 | 
					// This command converts a RGB color to HEX, HSL, and CMYK
 | 
				
			||||||
 | 
					function rgbToHex(r, g, b) {
 | 
				
			||||||
 | 
					    const red = r.toString(16).padStart(2, '0');
 | 
				
			||||||
 | 
					    const green = g.toString(16).padStart(2, '0');
 | 
				
			||||||
 | 
					    const blue = b.toString(16).padStart(2, '0');
 | 
				
			||||||
 | 
					    return `#${red}${green}${blue}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function rgbToHsl(r, g, b) {
 | 
				
			||||||
 | 
					    const red = r / 255;
 | 
				
			||||||
 | 
					    const green = g / 255;
 | 
				
			||||||
 | 
					    const blue = b / 255;
 | 
				
			||||||
 | 
					    const max = Math.max(red, green, blue);
 | 
				
			||||||
 | 
					    const min = Math.min(red, green, blue);
 | 
				
			||||||
 | 
					    const lightness = (max + min) / 2;
 | 
				
			||||||
 | 
					    if (max === min) {
 | 
				
			||||||
 | 
					        return { h: 0, s: 0, l: lightness };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const d = max - min;
 | 
				
			||||||
 | 
					    const saturation = lightness > 0.5 ? d / (2 - max - min) : d / (max + min);
 | 
				
			||||||
 | 
					    let hue;
 | 
				
			||||||
 | 
					    switch (max) {
 | 
				
			||||||
 | 
					        case red:
 | 
				
			||||||
 | 
					            hue = (green - blue) / d + (green < blue ? 6 : 0);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case green:
 | 
				
			||||||
 | 
					            hue = (blue - red) / d + 2;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case blue:
 | 
				
			||||||
 | 
					            hue = (red - green) / d + 4;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    hue /= 6;
 | 
				
			||||||
 | 
					    return { h: hue, s: saturation, l: lightness };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function rgbToCmyk(r, g, b) {
 | 
				
			||||||
 | 
					    const red = r / 255;
 | 
				
			||||||
 | 
					    const green = g / 255;
 | 
				
			||||||
 | 
					    const blue = b / 255;
 | 
				
			||||||
 | 
					    const black = 1 - Math.max(red, green, blue);
 | 
				
			||||||
 | 
					    const cyan = (1 - red - black) / (1 - black);
 | 
				
			||||||
 | 
					    const magenta = (1 - green - black) / (1 - black);
 | 
				
			||||||
 | 
					    const yellow = (1 - blue - black) / (1 - black);
 | 
				
			||||||
 | 
					    return { c: cyan, m: magenta, y: yellow, k: black };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'colorrgb',
 | 
				
			||||||
 | 
					    description: 'converts a RGB color to HEX, HSL, and CMYK',
 | 
				
			||||||
 | 
					    help: 'This command converts a RGB color to HEX, HSL, and CMYK',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'r',
 | 
				
			||||||
 | 
					            type: 'INTEGER',
 | 
				
			||||||
 | 
					            description: 'The red value (0-255)',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'g',
 | 
				
			||||||
 | 
					            type: 'INTEGER',
 | 
				
			||||||
 | 
					            description: 'The green value (0-255)',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'b',
 | 
				
			||||||
 | 
					            type: 'INTEGER',
 | 
				
			||||||
 | 
					            description: 'The blue value (0-255)',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'r',
 | 
				
			||||||
 | 
					            type: 4, // Integer type
 | 
				
			||||||
 | 
					            description: 'The red value (0-255)',
 | 
				
			||||||
 | 
					            required: true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'g',
 | 
				
			||||||
 | 
					            type: 4, // Integer type
 | 
				
			||||||
 | 
					            description: 'The green value (0-255)',
 | 
				
			||||||
 | 
					            required: true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'b',
 | 
				
			||||||
 | 
					            type: 4, // Integer type
 | 
				
			||||||
 | 
					            description: 'The blue value (0-255)',
 | 
				
			||||||
 | 
					            required: true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        //check if the user provided the 3 values 0-255
 | 
				
			||||||
 | 
					        if (args.length !== 3) {
 | 
				
			||||||
 | 
					            message.channel.send('You need to provide 3 values (0-255).');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //check if the values are integers
 | 
				
			||||||
 | 
					        const r = parseInt(args[0]);
 | 
				
			||||||
 | 
					        const g = parseInt(args[1]);
 | 
				
			||||||
 | 
					        const b = parseInt(args[2]);
 | 
				
			||||||
 | 
					        if (isNaN(r) || isNaN(g) || isNaN(b)) {
 | 
				
			||||||
 | 
					            message.channel.send('The values must be integers.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //check if the values are between 0 and 255
 | 
				
			||||||
 | 
					        if (r < 0 || r > 255 || g < 0 || g > 255 || b < 0 || b > 255) {
 | 
				
			||||||
 | 
					            message.channel.send('The values must be between 0 and 255.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //convert the RGB values to HEX
 | 
				
			||||||
 | 
					        const hex = rgbToHex(r, g, b);
 | 
				
			||||||
 | 
					        message.channel.send(`HEX: ${hex}`);
 | 
				
			||||||
 | 
					        const hsl = rgbToHsl(r, g, b);
 | 
				
			||||||
 | 
					        message.channel.send(`HSL: ${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}, ${hsl.l.toFixed(2)}`);
 | 
				
			||||||
 | 
					        const cmyk = rgbToCmyk(r, g, b);
 | 
				
			||||||
 | 
					        message.channel.send(`CMYK: ${cmyk.c.toFixed(2)}, ${cmyk.m.toFixed(2)}, ${cmyk.y.toFixed(2)}, ${cmyk.k.toFixed(2)}`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        const r = interaction.options.getInteger('r');
 | 
				
			||||||
 | 
					        const g = interaction.options.getInteger('g');
 | 
				
			||||||
 | 
					        const b = interaction.options.getInteger('b');
 | 
				
			||||||
 | 
					        //check if the values are between 0 and 255
 | 
				
			||||||
 | 
					        if (r < 0 || r > 255 || g < 0 || g > 255 || b < 0 || b > 255) {
 | 
				
			||||||
 | 
					            interaction.reply('The values must be between 0 and 255.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //convert the RGB values to HEX
 | 
				
			||||||
 | 
					        const hex = rgbToHex(r, g, b);
 | 
				
			||||||
 | 
					        const hsl = rgbToHsl(r, g, b);
 | 
				
			||||||
 | 
					        const cmyk = rgbToCmyk(r, g, b);
 | 
				
			||||||
 | 
					        interaction.reply(`HEX: ${hex}\nHSL: ${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}, ${hsl.l.toFixed(2)}\nCMYK: ${cmyk.c.toFixed(2)}, ${cmyk.m.toFixed(2)}, ${cmyk.y.toFixed(2)}, ${cmyk.k.toFixed(2)}`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					const dns = require('dns');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'dns',
 | 
				
			||||||
 | 
					    description: 'Look what is the IP of a domain. Requires a domain as argument.',
 | 
				
			||||||
 | 
					    help: 'Look what is the IP of a domain. Requires a domain as argument.',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'domain',
 | 
				
			||||||
 | 
					            type: 'STRING',
 | 
				
			||||||
 | 
					            description: 'The domain to look up',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'domain',
 | 
				
			||||||
 | 
					            type: 3, // String type
 | 
				
			||||||
 | 
					            description: 'The domain to look up',
 | 
				
			||||||
 | 
					            required: true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        const domain = args[0];
 | 
				
			||||||
 | 
					        if (!domain) {
 | 
				
			||||||
 | 
					            message.channel.send('You need to provide a domain.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        var ipv4 = '';
 | 
				
			||||||
 | 
					        var ipv6 = '';
 | 
				
			||||||
 | 
					        dns.lookup(domain, { family: 4 }, (err, addresses) => {
 | 
				
			||||||
 | 
					            if (err) {
 | 
				
			||||||
 | 
					                ipv4 = 'Error: not found';
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                ipv4 = 'IP: ' + addresses;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            dns.lookup(domain, { family: 6 }, (err, addresses) => {
 | 
				
			||||||
 | 
					                if (err) {
 | 
				
			||||||
 | 
					                    ipv6 = 'Error: not found';
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    ipv6 = 'IP: ' + addresses;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                message.channel.send('IPv4: ' + ipv4 + '\nIPv6: ' + ipv6);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        const domain = interaction.options.getString('domain');
 | 
				
			||||||
 | 
					        if (!domain) {
 | 
				
			||||||
 | 
					            interaction.reply('You need to provide a domain.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        var ipv4 = '';
 | 
				
			||||||
 | 
					        var ipv6 = '';
 | 
				
			||||||
 | 
					        dns.lookup(domain, { family: 4 }, (err, addresses) => {
 | 
				
			||||||
 | 
					            if (err) {
 | 
				
			||||||
 | 
					                ipv4 = 'Error: not found';
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                ipv4 = 'IP: ' + addresses;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            dns.lookup(domain, { family: 6 }, (err, addresses) => {
 | 
				
			||||||
 | 
					                if (err) {
 | 
				
			||||||
 | 
					                    ipv6 = 'Error: not found';
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    ipv6 = 'IP: ' + addresses;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                interaction.reply('IPv4: ' + ipv4 + '\nIPv6: ' + ipv6);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					function returnDog() {
 | 
				
			||||||
 | 
					  return fetch('https://dog.ceo/api/breeds/image/random')
 | 
				
			||||||
 | 
					    .then(response => response.json())
 | 
				
			||||||
 | 
					    .then(data => data.message);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  name: 'dog',
 | 
				
			||||||
 | 
					  description: 'Get a random dog picture',
 | 
				
			||||||
 | 
					  help: 'Get a random dog picture',
 | 
				
			||||||
 | 
					  arguments: [],
 | 
				
			||||||
 | 
					  options: [],
 | 
				
			||||||
 | 
					  slash: true,
 | 
				
			||||||
 | 
					  text: true,
 | 
				
			||||||
 | 
					  admin: false,
 | 
				
			||||||
 | 
					  requireKick: false,
 | 
				
			||||||
 | 
					  requireBan: false,
 | 
				
			||||||
 | 
					  canBeUsedInDm: true,
 | 
				
			||||||
 | 
					  premium: false,
 | 
				
			||||||
 | 
					  contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					  integration_types: [0,1],
 | 
				
			||||||
 | 
					  execute: async (message, args) => {
 | 
				
			||||||
 | 
					    const dog = await returnDog();
 | 
				
			||||||
 | 
					    message.channel.send(dog);
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  executeSlash: async interaction => {
 | 
				
			||||||
 | 
					    const dog = await returnDog();
 | 
				
			||||||
 | 
					    interaction.reply(dog);
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					function returnCat() {
 | 
				
			||||||
 | 
					    return fetch('https://randomfox.ca/floof/')
 | 
				
			||||||
 | 
					        .then(response => response.json())
 | 
				
			||||||
 | 
					        .then(data => data.image);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'fox',
 | 
				
			||||||
 | 
					    description: 'Get a random fox picture',
 | 
				
			||||||
 | 
					    help: 'Get a random fox picture',
 | 
				
			||||||
 | 
					    arguments: [],
 | 
				
			||||||
 | 
					    options: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const cat = await returnCat();
 | 
				
			||||||
 | 
					        message.channel.send(cat);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const cat = await returnCat();
 | 
				
			||||||
 | 
					        interaction.reply(cat);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,53 @@
 | 
				
			||||||
 | 
					function getRandomIntInclusive(min, max) {
 | 
				
			||||||
 | 
					    min = Math.ceil(min);
 | 
				
			||||||
 | 
					    max = Math.floor(max);
 | 
				
			||||||
 | 
					    return Math.floor(Math.random() * (max - min + 1)) + min;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'guessnumber',
 | 
				
			||||||
 | 
					    description: 'Guess a number between 1 and 100',
 | 
				
			||||||
 | 
					    help: 'Guess a number between 1 and 100',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'number',
 | 
				
			||||||
 | 
					            type: 'INTEGER',
 | 
				
			||||||
 | 
					            description: 'Your guess',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'number',
 | 
				
			||||||
 | 
					            type: 4,
 | 
				
			||||||
 | 
					            description: 'Your guess',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        const guess = parseInt(args[0]);
 | 
				
			||||||
 | 
					        const number = getRandomIntInclusive(1, 100);
 | 
				
			||||||
 | 
					        if (guess === number) {
 | 
				
			||||||
 | 
					            message.reply('You guessed the number!');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            message.reply(`The number was ${number}`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        const guess = interaction.options.getInteger('number');
 | 
				
			||||||
 | 
					        const number = getRandomIntInclusive(1, 100);
 | 
				
			||||||
 | 
					        if (guess === number) {
 | 
				
			||||||
 | 
					            interaction.reply('You guessed the number!');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            interaction.reply(`The number was ${number}`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					//optiona name of the command
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,71 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'kick',
 | 
				
			||||||
 | 
					    description: 'Kicks a user from the server',
 | 
				
			||||||
 | 
					    help: 'Kicks a user from the server with a reason if provided. Requires the user to have the "Kick Members" permission. Requires the bot to have the "Kick Members" permission.',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 'USER',
 | 
				
			||||||
 | 
					            description: 'The user to kick',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'reason',
 | 
				
			||||||
 | 
					            type: 'STRING',
 | 
				
			||||||
 | 
					            description: 'The reason for the kick',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 6,
 | 
				
			||||||
 | 
					            description: 'The user to kick',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'reason',
 | 
				
			||||||
 | 
					            type: 3,
 | 
				
			||||||
 | 
					            description: 'The reason for the kick',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: true,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE'],
 | 
				
			||||||
 | 
					    integration_types: [0],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const user = message.mentions.users.first();
 | 
				
			||||||
 | 
					        if (!user) {
 | 
				
			||||||
 | 
					            return message.reply('You need to mention a user to kick');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const member = message.guild.members.cache.get(user.id);
 | 
				
			||||||
 | 
					        if (!member) {
 | 
				
			||||||
 | 
					            return message.reply('That user is not in this server');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!member.kickable) {
 | 
				
			||||||
 | 
					            return message.reply('I cannot kick that user');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const reason = args.slice(1).join(' ') || 'No reason provided';
 | 
				
			||||||
 | 
					        await member.kick(reason);
 | 
				
			||||||
 | 
					        message.reply(`${user.tag} has been kicked`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const user = interaction.options.getUser('user');
 | 
				
			||||||
 | 
					        const member = interaction.guild.members.cache.get(user.id);
 | 
				
			||||||
 | 
					        if (!member) {
 | 
				
			||||||
 | 
					            return interaction.reply('That user is not in this server');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!member.kickable) {
 | 
				
			||||||
 | 
					            return interaction.reply('I cannot kick that user');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const reason = interaction.options.getString('reason') || 'No reason provided';
 | 
				
			||||||
 | 
					        await member.kick(reason);
 | 
				
			||||||
 | 
					        interaction.reply(`${user.tag} has been kicked`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'ping',
 | 
				
			||||||
 | 
					    description: 'Ping!',
 | 
				
			||||||
 | 
					    help: 'Ping!',
 | 
				
			||||||
 | 
					    arguments: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        message.channel.send('Pong!');
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        interaction.reply('Pong.');
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,145 @@
 | 
				
			||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					//read files databases/pokemon_games.json and databases/pokemon.json
 | 
				
			||||||
 | 
					const pokemon_games = JSON.parse(fs.readFileSync('databases/pokemon_games.json'));
 | 
				
			||||||
 | 
					const pokemon = JSON.parse(fs.readFileSync('databases/pokemon.json'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*pokemon.json
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 1,
 | 
				
			||||||
 | 
					        "name": "Bulbasaur",
 | 
				
			||||||
 | 
					        "img": "https://en.wikipedia.org/wiki/Bulbasaur#/media/File:Pok%C3%A9mon_Bulbasaur_art.png",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Grass",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.7 m",
 | 
				
			||||||
 | 
					        "weight": "6.9 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Bulbasaur is the first Pokémon in the National Pokédex.",
 | 
				
			||||||
 | 
					            "Bulbasaur is the only dual-type Pokémon in the National Pokédex that is both Poison and Grass type.",
 | 
				
			||||||
 | 
					            "Bulbasaur is the only Pokémon that can learn Frenzy Plant, Blast Burn, and Hydro Cannon."
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					pokemon_games.json
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "id": 1,
 | 
				
			||||||
 | 
					        "name": "Pokémon Red and Blue",
 | 
				
			||||||
 | 
					        "year": 1996
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function randomPokemon() {
 | 
				
			||||||
 | 
					    //connect data from pokemon.json and pokemon_games.json
 | 
				
			||||||
 | 
					    const randomPokemon = pokemon[Math.floor(Math.random() * pokemon.length)];
 | 
				
			||||||
 | 
					    //find game id in pokemon_games.json
 | 
				
			||||||
 | 
					    const game = pokemon_games.find(game => game.id === randomPokemon.first_appeared);
 | 
				
			||||||
 | 
					    //get numbers of facts and get random fact
 | 
				
			||||||
 | 
					    const fact = randomPokemon.some_facts[Math.floor(Math.random() * randomPokemon.some_facts.length)];
 | 
				
			||||||
 | 
					    //get types of pokemon
 | 
				
			||||||
 | 
					    const types = randomPokemon.type.join(', ');
 | 
				
			||||||
 | 
					    return `**${randomPokemon.name}**\nTypes: ${types}\nHeight: ${randomPokemon.height}\nWeight: ${randomPokemon.weight}\nFirst appeared in: ${game.name} (${game.year})\n${fact}\n${randomPokemon.img}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pokemonNumber(number) {
 | 
				
			||||||
 | 
					    const pokemonNumber = pokemon.find(pokemon => pokemon.number === number);
 | 
				
			||||||
 | 
					    if (!pokemonNumber) {
 | 
				
			||||||
 | 
					        return 'Pokemon not found **FUNCTION NOT FINISHED**';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const game = pokemon_games.find(game => game.id === pokemonNumber.first_appeared);
 | 
				
			||||||
 | 
					    const fact = pokemonNumber.some_facts[Math.floor(Math.random() * pokemonNumber.some_facts.length)];
 | 
				
			||||||
 | 
					    const types = pokemonNumber.type.join(', ');
 | 
				
			||||||
 | 
					    return `**${pokemonNumber.name}**\nTypes: ${types}\nHeight: ${pokemonNumber.height}\nWeight: ${pokemonNumber.weight}\nFirst appeared in: ${game.name} (${game.year})\n${fact}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pokemonName(name) {
 | 
				
			||||||
 | 
					    const pokemonName = pokemon.find(pokemon => pokemon.name.toLowerCase() === name.toLowerCase());
 | 
				
			||||||
 | 
					    if (!pokemonName) {
 | 
				
			||||||
 | 
					        return 'Pokemon not found **FUNCTION NOT FINISHED**';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const game = pokemon_games.find(game => game.id === pokemonName.first_appeared);
 | 
				
			||||||
 | 
					    const fact = pokemonName.some_facts[Math.floor(Math.random() * pokemonName.some_facts.length)];
 | 
				
			||||||
 | 
					    const types = pokemonName.type.join(', ');
 | 
				
			||||||
 | 
					    return `**${pokemonName.name}**\nTypes: ${types}\nHeight: ${pokemonName.height}\nWeight: ${pokemonName.weight}\nFirst appeared in: ${game.name} (${game.year})\n${fact}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'pokemon',
 | 
				
			||||||
 | 
					    description: 'Get a random pokemon. **FUNCTION NOT FINISHED**',
 | 
				
			||||||
 | 
					    help: 'Get a random pokemon. **FUNCTION NOT FINISHED**',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'pokemonname',
 | 
				
			||||||
 | 
					            type: 'STRING',
 | 
				
			||||||
 | 
					            description: 'Name of the pokemon you want to get information about',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'pokemonnumber',
 | 
				
			||||||
 | 
					            type: 'INTEGER',
 | 
				
			||||||
 | 
					            description: 'Number of the pokemon you want to get information about',
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'pokemonname',
 | 
				
			||||||
 | 
					            type: 3, // String type
 | 
				
			||||||
 | 
					            description: 'Name of the pokemon you want to get information about',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'pokemonnumber',
 | 
				
			||||||
 | 
					            type: 4, // Integer type
 | 
				
			||||||
 | 
					            description: 'Number of the pokemon you want to get information about',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        if(args.length === 0) {
 | 
				
			||||||
 | 
					            const pokemon = randomPokemon();
 | 
				
			||||||
 | 
					            message.channel.send(pokemon);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //check if it is a number
 | 
				
			||||||
 | 
					        if(!isNaN(args[0])) {
 | 
				
			||||||
 | 
					            const pokemon = pokemonNumber(parseInt(args[0]));
 | 
				
			||||||
 | 
					            message.channel.send(pokemon);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //check if it is a string
 | 
				
			||||||
 | 
					        const pokemon = pokemonName(args.join(' '));
 | 
				
			||||||
 | 
					        return message.channel.send(pokemon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const name = interaction.options.getString('pokemonname');
 | 
				
			||||||
 | 
					        const number = interaction.options.getInteger('pokemonnumber');
 | 
				
			||||||
 | 
					        if (!name && !number) {
 | 
				
			||||||
 | 
					            const pokemon = randomPokemon();
 | 
				
			||||||
 | 
					            interaction.reply(pokemon);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (number) {
 | 
				
			||||||
 | 
					            const pokemon = pokemonNumber(number);
 | 
				
			||||||
 | 
					            interaction.reply(pokemon);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const pokemon = pokemonName(name);
 | 
				
			||||||
 | 
					        interaction.reply(pokemon);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'profilepicture',
 | 
				
			||||||
 | 
					    description: 'Get the profile picture of a user.',
 | 
				
			||||||
 | 
					    help: 'Get the profile picture of a user.',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 'User',
 | 
				
			||||||
 | 
					            description: 'The user to get the profile picture',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 6, // User type
 | 
				
			||||||
 | 
					            description: 'The user to get the profile picture',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        const user = message.mentions.users.first() || message.author;
 | 
				
			||||||
 | 
					        message.channel.send(user.displayAvatarURL({ dynamic: true }));
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        const user = interaction.options.getUser('user') || interaction.user;
 | 
				
			||||||
 | 
					        interaction.reply(user.displayAvatarURL({ dynamic: true }));
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: '',
 | 
				
			||||||
 | 
					    description: '',
 | 
				
			||||||
 | 
					    help: '',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: '',
 | 
				
			||||||
 | 
					            description: '',
 | 
				
			||||||
 | 
					            type: 3,
 | 
				
			||||||
 | 
					            required: false,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        message.channel.send();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        interaction.reply();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,149 @@
 | 
				
			||||||
 | 
					//waifu img
 | 
				
			||||||
 | 
					function returnWaifu(type) {
 | 
				
			||||||
 | 
					    //check if the type is valid
 | 
				
			||||||
 | 
					    const validTypes = ['waifu', 'neko', 'shinobu', 'megumin', 'bully', 'cuddle', 'cry', 'hug', 'awoo', 'kiss', 'lick', 'pat', 'smug', 'bonk', 'yeet', 'blush', 'smile', 'wave', 'highfive', 'handhold', 'nom', 'bite', 'glomp', 'slap', 'kill', 'kick', 'happy', 'wink', 'poke', 'dance', 'cringe'];
 | 
				
			||||||
 | 
					    if (!validTypes.includes(type)) {
 | 
				
			||||||
 | 
					        return 'Invalid type';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return fetch(`https://api.waifu.pics/sfw/${type}`)
 | 
				
			||||||
 | 
					        .then(response => response.json())
 | 
				
			||||||
 | 
					        .then(data => data.url);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    //make choose list
 | 
				
			||||||
 | 
					    name: 'waifu',
 | 
				
			||||||
 | 
					    description: 'Get a random waifu picture',
 | 
				
			||||||
 | 
					    help: 'Get a random waifu picture with the type you want',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type',
 | 
				
			||||||
 | 
					            type: 'STRING',
 | 
				
			||||||
 | 
					            description: 'The type of waifu picture you want',
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'type',
 | 
				
			||||||
 | 
					            description: 'The type of waifu picture you want',
 | 
				
			||||||
 | 
					            type: 3,
 | 
				
			||||||
 | 
					            required: true,
 | 
				
			||||||
 | 
					            choices: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'waifu',
 | 
				
			||||||
 | 
					                    value: 'waifu',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'neko',
 | 
				
			||||||
 | 
					                    value: 'neko',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'shinobu',
 | 
				
			||||||
 | 
					                    value: 'shinobu',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'megumin',
 | 
				
			||||||
 | 
					                    value: 'megumin',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'cuddle',
 | 
				
			||||||
 | 
					                    value: 'cuddle',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'cry',
 | 
				
			||||||
 | 
					                    value: 'cry',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'hug',
 | 
				
			||||||
 | 
					                    value: 'hug',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'awoo',
 | 
				
			||||||
 | 
					                    value: 'awoo',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'kiss',
 | 
				
			||||||
 | 
					                    value: 'kiss',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'pat',
 | 
				
			||||||
 | 
					                    value: 'pat',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'smug',
 | 
				
			||||||
 | 
					                    value: 'smug',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'bonk',
 | 
				
			||||||
 | 
					                    value: 'bonk',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'blush',
 | 
				
			||||||
 | 
					                    value: 'blush',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'smile',
 | 
				
			||||||
 | 
					                    value: 'smile',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'wave',
 | 
				
			||||||
 | 
					                    value: 'wave',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'highfive',
 | 
				
			||||||
 | 
					                    value: 'highfive',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'handhold',
 | 
				
			||||||
 | 
					                    value: 'handhold',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'nom',
 | 
				
			||||||
 | 
					                    value: 'nom',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'bite',
 | 
				
			||||||
 | 
					                    value: 'bite',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'slap',
 | 
				
			||||||
 | 
					                    value: 'slap',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'happy',
 | 
				
			||||||
 | 
					                    value: 'happy',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'wink',
 | 
				
			||||||
 | 
					                    value: 'wink',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'poke',
 | 
				
			||||||
 | 
					                    value: 'poke',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    name: 'dance',
 | 
				
			||||||
 | 
					                    value: 'dance',
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: true,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'GUILD_VOICE', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    execute: async (message, args) => {
 | 
				
			||||||
 | 
					        const waifu = await returnWaifu(args[0]);
 | 
				
			||||||
 | 
					        message.channel.send(waifu);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash: async interaction => {
 | 
				
			||||||
 | 
					        const waifu = await returnWaifu(interaction.options.getString('type'));
 | 
				
			||||||
 | 
					        interaction.reply(waifu);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    name: 'who',
 | 
				
			||||||
 | 
					    description: 'Gets data about a user.',
 | 
				
			||||||
 | 
					    help: 'Gets data about a user.',
 | 
				
			||||||
 | 
					    arguments: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 'User',
 | 
				
			||||||
 | 
					            description: 'The user to get data',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    slash: true,
 | 
				
			||||||
 | 
					    text: true,
 | 
				
			||||||
 | 
					    admin: false,
 | 
				
			||||||
 | 
					    requireKick: false,
 | 
				
			||||||
 | 
					    premium: false,
 | 
				
			||||||
 | 
					    requireBan: false,
 | 
				
			||||||
 | 
					    canBeUsedInDm: false,
 | 
				
			||||||
 | 
					    contexts: ['GUILD_TEXT', 'DM'],
 | 
				
			||||||
 | 
					    integration_types: [0,1],
 | 
				
			||||||
 | 
					    options: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            name: 'user',
 | 
				
			||||||
 | 
					            type: 6, // User type
 | 
				
			||||||
 | 
					            description: 'The user to get data',
 | 
				
			||||||
 | 
					            required: false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    execute(message, args) {
 | 
				
			||||||
 | 
					        const user = message.mentions.users.first() || message.author;
 | 
				
			||||||
 | 
					        message.channel.send(`Username: ${user.username}\nID: ${user.id}\nCreated at: ${user.createdAt}\nBot: ${user.bot ? '✅' : '❌'}`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    executeSlash(interaction) {
 | 
				
			||||||
 | 
					        const user = interaction.options.getUser('user') || interaction.user;
 | 
				
			||||||
 | 
					        interaction.reply(`Username: ${user.username}\nID: ${user.id}\nCreated at: ${user.createdAt}\nBot: ${user.bot ? '✅' : '❌'}`);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,230 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 1,
 | 
				
			||||||
 | 
					        "name": "Bulbasaur",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Grass",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.7 m",
 | 
				
			||||||
 | 
					        "weight": "6.9 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Bulbasaur is the first Pokémon in the National Pokédex.",
 | 
				
			||||||
 | 
					            "Bulbasaur is the only dual-type Pokémon in the National Pokédex that is both Poison and Grass type.",
 | 
				
			||||||
 | 
					            "Bulbasaur is the only Pokémon that can learn Frenzy Plant, Blast Burn, and Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/1.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 2,
 | 
				
			||||||
 | 
					        "name": "Ivysaur",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Grass",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.0 m",
 | 
				
			||||||
 | 
					        "weight": "13.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Ivysaur is the evolved form of Bulbasaur.",
 | 
				
			||||||
 | 
					            "Ivysaur is the only Pokémon that can learn Frenzy Plant, Blast Burn, and Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/2.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 3,
 | 
				
			||||||
 | 
					        "name": "Venusaur",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Grass",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "2.0 m",
 | 
				
			||||||
 | 
					        "weight": "100.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Venusaur is the evolved form of Ivysaur.",
 | 
				
			||||||
 | 
					            "Venusaur is the only Pokémon that can learn Frenzy Plant, Blast Burn, and Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/3.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 4,
 | 
				
			||||||
 | 
					        "name": "Charmander",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Fire"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.6 m",
 | 
				
			||||||
 | 
					        "weight": "8.5 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Charmander is the first Fire-type Pokémon in the National Pokédex.",
 | 
				
			||||||
 | 
					            "Charmander is the only Pokémon that can learn Blast Burn."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/4.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 5,
 | 
				
			||||||
 | 
					        "name": "Charmeleon",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Fire"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.1 m",
 | 
				
			||||||
 | 
					        "weight": "19.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Charmeleon is the evolved form of Charmander.",
 | 
				
			||||||
 | 
					            "Charmeleon is the only Pokémon that can learn Blast Burn."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/5.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 6,
 | 
				
			||||||
 | 
					        "name": "Charizard",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Fire",
 | 
				
			||||||
 | 
					            "Flying"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.7 m",
 | 
				
			||||||
 | 
					        "weight": "90.5 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Charizard is the evolved form of Charmeleon.",
 | 
				
			||||||
 | 
					            "Charizard is the only Pokémon that can learn Blast Burn."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/6.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 7,
 | 
				
			||||||
 | 
					        "name": "Squirtle",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Water"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.5 m",
 | 
				
			||||||
 | 
					        "weight": "9.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Squirtle is the first Water-type Pokémon in the National Pokédex.",
 | 
				
			||||||
 | 
					            "Squirtle is the only Pokémon that can learn Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/7.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 8,
 | 
				
			||||||
 | 
					        "name": "Wartortle",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Water"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.0 m",
 | 
				
			||||||
 | 
					        "weight": "22.5 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Wartortle is the evolved form of Squirtle.",
 | 
				
			||||||
 | 
					            "Wartortle is the only Pokémon that can learn Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/8.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 9,
 | 
				
			||||||
 | 
					        "name": "Blastoise",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Water"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.6 m",
 | 
				
			||||||
 | 
					        "weight": "85.5 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Blastoise is the evolved form of Wartortle.",
 | 
				
			||||||
 | 
					            "Blastoise is the only Pokémon that can learn Hydro Cannon."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/9.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 10,
 | 
				
			||||||
 | 
					        "name": "Caterpie",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.3 m",
 | 
				
			||||||
 | 
					        "weight": "2.9 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Caterpie is the first Bug-type Pokémon in the National Pokédex."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/10.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 11,
 | 
				
			||||||
 | 
					        "name": "Metapod",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.7 m",
 | 
				
			||||||
 | 
					        "weight": "9.9 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Metapod is the evolved form of Caterpie."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/11.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 12,
 | 
				
			||||||
 | 
					        "name": "Butterfree",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug",
 | 
				
			||||||
 | 
					            "Flying"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.1 m",
 | 
				
			||||||
 | 
					        "weight": "32.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Butterfree is the evolved form of Metapod."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/12.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 13,
 | 
				
			||||||
 | 
					        "name": "Weedle",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.3 m",
 | 
				
			||||||
 | 
					        "weight": "3.2 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Weedle is the first Bug-type Pokémon in the National Pokédex that is also Poison type."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/13.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 14,
 | 
				
			||||||
 | 
					        "name": "Kakuna",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "0.6 m",
 | 
				
			||||||
 | 
					        "weight": "10.0 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Kakuna is the evolved form of Weedle."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/14.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "number": 15,
 | 
				
			||||||
 | 
					        "name": "Beedrill",
 | 
				
			||||||
 | 
					        "type": [
 | 
				
			||||||
 | 
					            "Bug",
 | 
				
			||||||
 | 
					            "Poison"
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "height": "1.0 m",
 | 
				
			||||||
 | 
					        "weight": "29.5 kg",
 | 
				
			||||||
 | 
					        "first_appeared": 1,
 | 
				
			||||||
 | 
					        "some_facts": [
 | 
				
			||||||
 | 
					            "Beedrill is the evolved form of Kakuna."
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "img": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/15.png"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "id": 1,
 | 
				
			||||||
 | 
					        "name": "Pokémon Red and Blue",
 | 
				
			||||||
 | 
					        "year": 1996
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "id": 2,
 | 
				
			||||||
 | 
					        "name": "Pokémon Yellow",
 | 
				
			||||||
 | 
					        "year": 1998
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "id": 3,
 | 
				
			||||||
 | 
					        "name": "Pokémon Gold and Silver",
 | 
				
			||||||
 | 
					        "year": 1999
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,48 @@
 | 
				
			||||||
 | 
					const { REST, Routes, Integration } = require('discord.js');
 | 
				
			||||||
 | 
					const { clientId, token } = require('./config.json');
 | 
				
			||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const commands = [];
 | 
				
			||||||
 | 
					const commandsPath = path.join(__dirname, 'commands');
 | 
				
			||||||
 | 
					const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const contextsMapping = {
 | 
				
			||||||
 | 
					    GUILD_TEXT: 0, 
 | 
				
			||||||
 | 
					    GUILD_VOICE: 1,
 | 
				
			||||||
 | 
					    DM: 2          
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (const file of commandFiles) {
 | 
				
			||||||
 | 
					    const filePath = path.join(commandsPath, file);
 | 
				
			||||||
 | 
					    const command = require(filePath);
 | 
				
			||||||
 | 
					    if (command.slash) {
 | 
				
			||||||
 | 
					        const slashCommand = {
 | 
				
			||||||
 | 
					            name: command.name,
 | 
				
			||||||
 | 
					            description: command.description,
 | 
				
			||||||
 | 
					            options: command.options || [],
 | 
				
			||||||
 | 
					            default_permission: command.admin ? false : true,
 | 
				
			||||||
 | 
					            contexts: command.contexts.map(context => contextsMapping[context]) || [0],
 | 
				
			||||||
 | 
					            integration_types: command.integration_types || [0],
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        commands.push(slashCommand);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rest = new REST({ version: '10' }).setToken(token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(async () => {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        console.log('Started refreshing application (/) commands.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await rest.put(
 | 
				
			||||||
 | 
					            Routes.applicationCommands(clientId),
 | 
				
			||||||
 | 
					            { body: commands },
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        console.log('Successfully reloaded application (/) commands.');
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					        console.error(error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					const { Events } = require('discord.js');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						name: Events.GuildCreate,
 | 
				
			||||||
 | 
					    once: false,
 | 
				
			||||||
 | 
					    execute(guild) {
 | 
				
			||||||
 | 
					        console.log(`Joined guild ${guild.name}`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					const { Events } = require('discord.js');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						name: Events.ClientReady,
 | 
				
			||||||
 | 
						once: true,
 | 
				
			||||||
 | 
						execute(client) {
 | 
				
			||||||
 | 
							console.log(`Ready! Logged in as ${client.user.tag}`);
 | 
				
			||||||
 | 
							client.user.setActivity('a game', { type: 'PLAYING' });
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					const { Events } = require('discord.js');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						name: Events.NAME,
 | 
				
			||||||
 | 
					    once: false,
 | 
				
			||||||
 | 
					    execute(args) {
 | 
				
			||||||
 | 
					        //TODO
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,128 @@
 | 
				
			||||||
 | 
					const { Client, Events, GatewayIntentBits, Collection, PermissionsBitField } = require('discord.js');
 | 
				
			||||||
 | 
					const { token, prefix, wwwport } = require('./config.json');
 | 
				
			||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					var http = require('http');
 | 
				
			||||||
 | 
					http.createServer(function (req, res) {
 | 
				
			||||||
 | 
					    //res.write('Strona domowa: Bot v2.0, link zaproszenia: https://discord.com/oauth2/authorize?client_id=883390927383724112');
 | 
				
			||||||
 | 
					    var json = {
 | 
				
			||||||
 | 
					        "Strona domowa": "Bot v2.0",
 | 
				
			||||||
 | 
					        "Link zaproszenia": "https://discord.com/oauth2/authorize?client_id=883390927383724112",
 | 
				
			||||||
 | 
					        "Status": "Working"
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    res.write(JSON.stringify(json));
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					  }).listen(wwwport || 8080);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const client = new Client({
 | 
				
			||||||
 | 
					    intents: [
 | 
				
			||||||
 | 
					        GatewayIntentBits.Guilds,
 | 
				
			||||||
 | 
					        GatewayIntentBits.GuildMessages,
 | 
				
			||||||
 | 
					        GatewayIntentBits.MessageContent,
 | 
				
			||||||
 | 
					        GatewayIntentBits.GuildMessageReactions,
 | 
				
			||||||
 | 
					        GatewayIntentBits.GuildMembers,
 | 
				
			||||||
 | 
					        GatewayIntentBits.GuildVoiceStates,
 | 
				
			||||||
 | 
					        GatewayIntentBits.GuildMessageTyping,
 | 
				
			||||||
 | 
					        GatewayIntentBits.DirectMessages,
 | 
				
			||||||
 | 
					        GatewayIntentBits.DirectMessageReactions,
 | 
				
			||||||
 | 
					        GatewayIntentBits.DirectMessageTyping
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					client.commands = new Collection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const commandsPath = path.join(__dirname, 'commands');
 | 
				
			||||||
 | 
					const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (const file of commandFiles) {
 | 
				
			||||||
 | 
					    const filePath = path.join(commandsPath, file);
 | 
				
			||||||
 | 
					    const command = require(filePath);
 | 
				
			||||||
 | 
					    if (!command.text) continue;
 | 
				
			||||||
 | 
					    client.commands.set(command.name, command);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const eventsPath = path.join(__dirname, 'events');
 | 
				
			||||||
 | 
					const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (const file of eventFiles) {
 | 
				
			||||||
 | 
						const filePath = path.join(eventsPath, file);
 | 
				
			||||||
 | 
						const event = require(filePath);
 | 
				
			||||||
 | 
						if (event.once) {
 | 
				
			||||||
 | 
							client.once(event.name, (...args) => event.execute(...args));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							client.on(event.name, (...args) => event.execute(...args));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					client.on(Events.MessageCreate, message => {
 | 
				
			||||||
 | 
					    if (!message.content.startsWith(prefix) || message.author.bot) return;
 | 
				
			||||||
 | 
					    const args = message.content.slice(1).split(/ +/);
 | 
				
			||||||
 | 
					    const commandName = args.shift().toLowerCase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!client.commands.has(commandName)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const command = client.commands.get(commandName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        if(command.admin && !message.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
 | 
				
			||||||
 | 
					            message.reply('You do not have permission to use this command.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!command.canBeUsedInDm && !message.guild) {
 | 
				
			||||||
 | 
					            message.reply('This command can only be used in a server.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.requireKick && !message.member.permissions.has(PermissionsBitField.Flags.KickMembers)) {
 | 
				
			||||||
 | 
					            message.reply('You do not have permission to use this command.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.requireBan && !message.member.permissions.has(PermissionsBitField.Flags.BanMembers)) {
 | 
				
			||||||
 | 
					            message.reply('You do not have permission to use this command.');
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.text) {
 | 
				
			||||||
 | 
					            command.execute(message, args);
 | 
				
			||||||
 | 
					            message.react('✅');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					        console.error(error);
 | 
				
			||||||
 | 
					        message.reply('There was an error trying to execute that command!');
 | 
				
			||||||
 | 
					        //react message with an emoji X
 | 
				
			||||||
 | 
					        message.react('❌');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					client.on(Events.InteractionCreate, async interaction => {
 | 
				
			||||||
 | 
					    if (!interaction.isCommand()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const command = client.commands.get(interaction.commandName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!command) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        if(command.admin && !interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
 | 
				
			||||||
 | 
					            await interaction.reply({ content: 'You do not have permission to use this command!', ephemeral: true });
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!command.canBeUsedInDm && !interaction.guild) {
 | 
				
			||||||
 | 
					            await interaction.reply({ content: 'This command can only be used in a server!', ephemeral: true });
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.requireKick && !interaction.member.permissions.has(PermissionsBitField.Flags.KickMembers)) {
 | 
				
			||||||
 | 
					            await interaction.reply({ content: 'You do not have permission to use this command!', ephemeral: true });
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.requireBan && !interaction.member.permissions.has(PermissionsBitField.Flags.BanMembers)) {
 | 
				
			||||||
 | 
					            await interaction.reply({ content: 'You do not have permission to use this command!', ephemeral: true });
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (command.slash) {
 | 
				
			||||||
 | 
					            await command.executeSlash(interaction);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					        console.error(error);
 | 
				
			||||||
 | 
					        await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					client.login(token);
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "watch": ["commands", "deploy-commands.js", "index.js"],
 | 
				
			||||||
 | 
					    "execMap": {
 | 
				
			||||||
 | 
					      "js": "node"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "events": {
 | 
				
			||||||
 | 
					      "restart": "node deploy-commands.js"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "ignore": ["node_modules"],
 | 
				
			||||||
 | 
					    "ext": "js,json"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "discordjs",
 | 
				
			||||||
 | 
					  "version": "1.0.0",
 | 
				
			||||||
 | 
					  "description": "",
 | 
				
			||||||
 | 
					  "main": "index.js",
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "start": "node deploy-commands.js && nodemon index.js",
 | 
				
			||||||
 | 
					    "test": "nodemon index.js"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "keywords": [],
 | 
				
			||||||
 | 
					  "author": "",
 | 
				
			||||||
 | 
					  "license": "ISC",
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "discord.js": "^14.15.2",
 | 
				
			||||||
 | 
					    "nodemon": "^3.1.0"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue