diff --git a/commands/drop.js b/commands/drop.js index 6f90cbc..88113e3 100644 --- a/commands/drop.js +++ b/commands/drop.js @@ -1,66 +1,68 @@ +const Discord = require("discord.js"); const messages = require("../utils/messages"); module.exports = { + description: "Create a drop giveaway", - description: 'Create a drop giveaway', - - options: [ - { - name: 'winners', - description: 'How many winners the giveaway should have', - type: 'INTEGER', - required: true - }, - { - name: 'prize', - description: 'What the prize of the giveaway should be', - type: 'STRING', - required: true - }, - { - name: 'channel', - description: 'The channel to start the giveaway in', - type: 'CHANNEL', - required: true - } - ], - - run: async (client, interaction) => { - - // If the member doesn't have enough permissions - if(!interaction.member.permissions.has('MANAGE_MESSAGES') && !interaction.member.roles.cache.some((r) => r.name === "Giveaways")){ - return interaction.reply({ - content: ':x: You need to have the manage messages permissions to start giveaways.', - ephemeral: true - }); - } - - const giveawayChannel = interaction.options.getChannel('channel'); - const giveawayWinnerCount = interaction.options.getInteger('winners'); - const giveawayPrize = interaction.options.getString('prize'); - - if(!giveawayChannel.isText()) { - return interaction.reply({ - content: ':x: Selected channel is not text-based.', - ephemeral: true - }); - } - - // Start the giveaway - client.giveawaysManager.start(giveawayChannel, { - // The number of winners for this drop - winnerCount: giveawayWinnerCount, - // The prize of the giveaway - prize: giveawayPrize, - // Who hosts this giveaway - hostedBy: client.config.hostedBy ? interaction.user : null, - // specify drop - isDrop: true, - // Messages - messages - }); - - interaction.reply(`Giveaway started in ${giveawayChannel}!`); + options: [ + { + name: "winners", + description: "How many winners the giveaway should have", + type: Discord.ApplicationCommandOptionType.Integer, + required: true, + }, + { + name: "prize", + description: "What the prize of the giveaway should be", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + { + name: "channel", + description: "The channel to start the giveaway in", + type: Discord.ApplicationCommandOptionType.Channel, + required: true, + }, + ], + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to start giveaways.", + ephemeral: true, + }); } + + const giveawayChannel = interaction.options.getChannel("channel"); + const giveawayWinnerCount = interaction.options.getInteger("winners"); + const giveawayPrize = interaction.options.getString("prize"); + + if (!giveawayChannel.isTextBased()) { + return interaction.reply({ + content: ":x: Selected channel is not text-based.", + ephemeral: true, + }); + } + + // Start the giveaway + client.giveawaysManager.start(giveawayChannel, { + // The number of winners for this drop + winnerCount: giveawayWinnerCount, + // The prize of the giveaway + prize: giveawayPrize, + // Who hosts this giveaway + hostedBy: client.config.hostedBy ? interaction.user : null, + // specify drop + isDrop: true, + // Messages + messages, + }); + + interaction.reply(`Giveaway started in ${giveawayChannel}!`); + }, }; \ No newline at end of file diff --git a/commands/end.js b/commands/end.js index b4eb670..bdfde1f 100644 --- a/commands/end.js +++ b/commands/end.js @@ -1,65 +1,71 @@ -const ms = require('ms'); +const Discord = require("discord.js"); module.exports = { + description: "End a giveaway", - description: 'End a giveaway', - - options: [ - { - name: 'giveaway', - description: 'The giveaway to end (message ID or giveaway prize)', - type: 'STRING', - required: true - } - ], - - run: async (client, interaction) => { - - // If the member doesn't have enough permissions - if(!interaction.member.permissions.has('MANAGE_MESSAGES') && !interaction.member.roles.cache.some((r) => r.name === "Giveaways")){ - return interaction.reply({ - content: ':x: You need to have the manage messages permissions to end giveaways.', - ephemeral: true - }); - } - - const query = interaction.options.getString('giveaway'); - - // try to found the giveaway with prize then with ID - const giveaway = - // Search with giveaway prize - client.giveawaysManager.giveaways.find((g) => g.prize === query && g.guildId === interaction.guild.id) || - // Search with giveaway ID - client.giveawaysManager.giveaways.find((g) => g.messageId === query && g.guildId === interaction.guild.id); - - // If no giveaway was found - if (!giveaway) { - return interaction.reply({ - content: 'Unable to find a giveaway for `'+ query + '`.', - ephemeral: true - }); - } - - if (giveaway.ended) { - return interaction.reply({ - content: 'This giveaway is already ended.', - ephemeral: true - }); - } - - // Edit the giveaway - client.giveawaysManager.end(giveaway.messageId) - // Success message - .then(() => { - // Success message - interaction.reply('Giveaway ended!'); - }) - .catch((e) => { - interaction.reply({ - content: e, - ephemeral: true - }); - }); + options: [ + { + name: "giveaway", + description: "The giveaway to end (message ID or giveaway prize)", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + ], + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to end giveaways.", + ephemeral: true, + }); } + + const query = interaction.options.getString("giveaway"); + + // try to found the giveaway with prize then with ID + const giveaway = + // Search with giveaway prize + client.giveawaysManager.giveaways.find( + (g) => g.prize === query && g.guildId === interaction.guild.id + ) || + // Search with giveaway ID + client.giveawaysManager.giveaways.find( + (g) => g.messageId === query && g.guildId === interaction.guild.id + ); + + // If no giveaway was found + if (!giveaway) { + return interaction.reply({ + content: "Unable to find a giveaway for `" + query + "`.", + ephemeral: true, + }); + } + + if (giveaway.ended) { + return interaction.reply({ + content: "This giveaway is already ended.", + ephemeral: true, + }); + } + + // Edit the giveaway + client.giveawaysManager + .end(giveaway.messageId) + // Success message + .then(() => { + // Success message + interaction.reply("Giveaway ended!"); + }) + .catch((e) => { + interaction.reply({ + content: e, + ephemeral: true, + }); + }); + }, }; \ No newline at end of file diff --git a/commands/help.js b/commands/help.js index 75c0ff6..8dd7a02 100644 --- a/commands/help.js +++ b/commands/help.js @@ -1,41 +1,37 @@ -const message = require('../utils/messages'); -const { - MessageEmbed, - MessageActionRow, - MessageButton -} = require('discord.js'); +const messages = require("../utils/messages"); +const { EmbedBuilder, MessageActionRow, MessageButton } = require("discord.js"); module.exports = { - name: "help", - description: "Get all Bot Commands", - run: async (client, interaction) => { - - let helpembed = new MessageEmbed() - helpembed.setColor("RANDOM") - helpembed.setAuthor( - `Commands of ${client.user.username}` - ) - helpembed.setColor("#2f3136") - helpembed.setThumbnail("https://cdn.discordapp.com/avatars/608119997713350679/d71c7cbb2ba132867367ed47261aea6d.png") - client.commands.map((cmd) => { - helpembed.addField( - `\`${cmd.name}\``, - `${cmd.description}`, - true - ); - }) - helpembed.setTimestamp() - helpembed.setFooter(`© EmotionChild | Have a nice day!`); - - const row = new MessageActionRow() - .addComponents( - new MessageButton() - .setEmoji('865572290065072128') - .setLabel(`Invite ${client.user.username}`) - .setURL(`https://discord.com/api/oauth2/authorize?client_id=726333575091454002&permissions=8&scope=bot%20applications.commands`) - .setStyle('LINK'), - ); - - await interaction.reply({ embeds: [helpembed],components: [row], ephemeral: true }); - }, + name: "help", + description: "Get all Bot Commands", + run: async (client, interaction) => { + let helpembed = new EmbedBuilder(); + helpembed.setColor("RANDOM"); + helpembed.setAuthor({ name: `Commands of ${client.user.username}` }); + helpembed.setColor("#2f3136"); + helpembed.setThumbnail( + "https://cdn.discordapp.com/avatars/608119997713350679/d71c7cbb2ba132867367ed47261aea6d.png" + ); + client.commands.map((cmd) => { + helpembed.addField(`\`${cmd.name}\``, `${cmd.description}`, true); + }); + helpembed.setTimestamp(); + helpembed.setFooter({ text: `© EmotionChild | Have a nice day!` }); + + const row = new MessageActionRow().addComponents( + new MessageButton() + .setEmoji("865572290065072128") + .setLabel(`Invite ${client.user.username}`) + .setURL( + `https://discord.com/api/oauth2/authorize?client_id=726333575091454002&permissions=8&scope=bot%20applications.commands` + ) + .setStyle("LINK") + ); + + await interaction.reply({ + embeds: [helpembed], + components: [row], + ephemeral: true, + }); + }, }; \ No newline at end of file diff --git a/commands/invite.js b/commands/invite.js index d054474..782796a 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -1,29 +1,30 @@ -const messages = require('../utils/messages'); -const { - MessageEmbed, - MessageActionRow, - MessageButton -} = require('discord.js'); +const messages = require("../utils/messages"); +const { EmbedBuilder, MessageActionRow, MessageButton } = require("discord.js"); module.exports = { - name: "invite", - description: "Get Invite Link for Giveaway Child", - run: async (client, interaction) => { - - let invite = new MessageEmbed() - .setAuthor(`Invite of ${client.user.username}`, `${client.user.displayAvatarURL({ format: 'png' })}`) - .setColor("#2f3136") - .setFooter(`© EmotionChild | Have a nice day!`); - - const row = new MessageActionRow() - .addComponents( - new MessageButton() - .setEmoji('865572290065072128') - .setLabel(`Invite ${client.user.username}`) - .setURL(`https://discord.com/api/oauth2/authorize?client_id=726333575091454002&permissions=8&scope=bot%20applications.commands`) - .setStyle('LINK'), - ); - - await interaction.reply({ embeds: [invite],components: [row], ephemeral: true }); - }, + name: "invite", + description: "Get Invite Link for Giveaway Child", + run: async (client, interaction) => { + let invite = new EmbedBuilder() + .setTitle(`${interaction.user.tag}`) + .setDescription("You can invite the bot by clicking on the below button.") + .setColor("#2f3136") + .setFooter({ text: `© EmotionChild | Have a nice day!` }); + + const row = new MessageActionRow().addComponents( + new MessageButton() + .setEmoji("865572290065072128") + .setLabel(`Invite ${client.user.username}`) + .setURL( + `https://discord.com/api/oauth2/authorize?client_id=910559370843131944&permissions=8&scope=bot%20applications.commands` + ) + .setStyle("LINK") + ); + + await interaction.reply({ + embeds: [invite], + components: [row], + ephemeral: true, + }); + }, }; \ No newline at end of file diff --git a/commands/pause.js b/commands/pause.js new file mode 100644 index 0000000..55bd2dd --- /dev/null +++ b/commands/pause.js @@ -0,0 +1,71 @@ +const Discord = require("discord.js"); + +module.exports = { + description: "Pause a giveaway", + + options: [ + { + name: "giveaway", + description: "The giveaway to pause (message ID or giveaway prize)", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + ], + + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to pause giveaways.", + ephemeral: true, + }); + } + + const query = interaction.options.getString("giveaway"); + + // try to found the giveaway with prize then with ID + const giveaway = + // Search with giveaway prize + client.giveawaysManager.giveaways.find( + (g) => g.prize === query && g.guildId === interaction.guild.id + ) || + // Search with giveaway ID + client.giveawaysManager.giveaways.find( + (g) => g.messageId === query && g.guildId === interaction.guild.id + ); + + // If no giveaway was found + if (!giveaway) { + return interaction.reply({ + content: "Unable to find a giveaway for `" + query + "`.", + ephemeral: true, + }); + } + + if (giveaway.pauseOptions.isPaused) { + return interaction.reply({ + content: "This giveaway is already paused.", + ephemeral: true, + }); + } + + // Edit the giveaway + client.giveawaysManager + .pause(giveaway.messageId) + // Success message + .then(() => { + // Success message + interaction.reply("Giveaway paused!"); + }) + .catch((e) => { + interaction.reply({ + content: e, + ephemeral: true, + }); + }); + }, +}; \ No newline at end of file diff --git a/commands/ping.js b/commands/ping.js index 6c7b63a..398811c 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -1,39 +1,39 @@ -const messages = require('../utils/messages'); -const { MessageEmbed } = require("discord.js"); +const messages = require("../utils/messages"); +const { EmbedBuilder } = require("discord.js"); module.exports = { - name: "ping", - description: "Tells the bot's latency,", - run: async (client, interaction) => { - // If the member doesn't have enough permissions - if (!interaction.member.permissions.has("SEND_MESSAGES")) { - return interaction.reply({ - content: - ":x: You need to have the manage messages permissions to start giveaways.", - ephemeral: true, - }); - } + name: "ping", + description: "Tells a bot latency,", + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if (!interaction.member.permissions.has("SEND_MESSAGES")) { + return interaction.reply({ + content: + ":x: You need to have the right permissions to use this command.", + ephemeral: true, + }); + } - let circles = { - green: "<:online:885049752297824276>", - yellow: "<:idle:885049726460899339>", - red: "<:offline:885049312877346817>", - }; + let circles = { + green: "<:online:903711513183940669>", + yellow: "<:idle:903711513490112512> ", + red: "<:dnd:903711513066487851>", + }; - let botping = new MessageEmbed() - .setTitle(`${client.user.name} Ping`) - .setColor("2f3136") - .addFields({ - name: "<:link:911514727375577088> Bot Ping:", - value: `${ - client.ws?.ping <= 200 - ? circles.green - : client.ws?.ping <= 400 - ? circles.yellow - : circles.red - } ${client.ws?.ping}ms`, - }) - .setTimestamp(); - await interaction.reply({ embeds: [botping] }); - }, + let botping = new EmbedBuilder() + .setTitle(`${client.user.username} Ping`) + .setColor("2f3136") + .addFields({ + name: "<:connection2:896715171454677013> Bot Ping:", + value: `${ + client.ws?.ping <= 200 + ? circles.green + : client.ws?.ping <= 400 + ? circles.yellow + : circles.red + } ${client.ws?.ping}ms`, + }) + .setTimestamp(); + await interaction.reply({ embeds: [botping] }); + }, }; \ No newline at end of file diff --git a/commands/reroll.js b/commands/reroll.js index 6bffcfd..108ae6d 100644 --- a/commands/reroll.js +++ b/commands/reroll.js @@ -1,62 +1,70 @@ +const Discord = require("discord.js"); + module.exports = { + description: "Reroll a giveaway", - description: 'Reroll a giveaway', - - options: [ - { - name: 'giveaway', - description: 'The giveaway to reroll (message ID or prize)', - type: 'STRING', - required: true - } - ], - - run: async (client, interaction) => { - - // If the member doesn't have enough permissions - if(!interaction.member.permissions.has('MANAGE_MESSAGES') && !interaction.member.roles.cache.some((r) => r.name === "Giveaways")){ - return interaction.reply({ - content: ':x: You need to have the manage messages permissions to reroll giveaways.', - ephemeral: true - }); - } - - const query = interaction.options.getString('giveaway'); - - // try to found the giveaway with prize then with ID - const giveaway = - // Search with giveaway prize - client.giveawaysManager.giveaways.find((g) => g.prize === query && g.guildId === interaction.guild.id) || - // Search with giveaway ID - client.giveawaysManager.giveaways.find((g) => g.messageId === query && g.guildId === interaction.guild.id); - - // If no giveaway was found - if (!giveaway) { - return interaction.reply({ - content: 'Unable to find a giveaway for `'+ query +'`.', - ephemeral: true - }); - } - - if (!giveaway.ended) { - return interaction.reply({ - content: 'The giveaway is not ended yet.', - ephemeral: true - }); - } - - // Reroll the giveaway - client.giveawaysManager.reroll(giveaway.messageId) - .then(() => { - // Success message - interaction.reply('Giveaway rerolled!'); - }) - .catch((e) => { - interaction.reply({ - content: e, - ephemeral: true - }); - }); + options: [ + { + name: "giveaway", + description: "The giveaway to reroll (message ID or prize)", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + ], + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to reroll giveaways.", + ephemeral: true, + }); } + + const query = interaction.options.getString("giveaway"); + + // try to found the giveaway with prize then with ID + const giveaway = + // Search with giveaway prize + client.giveawaysManager.giveaways.find( + (g) => g.prize === query && g.guildId === interaction.guild.id + ) || + // Search with giveaway ID + client.giveawaysManager.giveaways.find( + (g) => g.messageId === query && g.guildId === interaction.guild.id + ); + + // If no giveaway was found + if (!giveaway) { + return interaction.reply({ + content: "Unable to find a giveaway for `" + query + "`.", + ephemeral: true, + }); + } + + if (!giveaway.ended) { + return interaction.reply({ + content: "The giveaway is not ended yet.", + ephemeral: true, + }); + } + + // Reroll the giveaway + client.giveawaysManager + .reroll(giveaway.messageId) + .then(() => { + // Success message + interaction.reply("Giveaway rerolled!"); + }) + .catch((e) => { + interaction.reply({ + content: e, + ephemeral: true, + }); + }); + }, }; \ No newline at end of file diff --git a/commands/start.js b/commands/start.js index c48a19e..9a9068e 100644 --- a/commands/start.js +++ b/commands/start.js @@ -1,75 +1,77 @@ -const ms = require('ms'); +const Discord = require("discord.js"); +const ms = require("ms"); const messages = require("../utils/messages"); module.exports = { + description: "Start a giveaway", - description: 'Start a giveaway', + options: [ + { + name: "duration", + description: + "How long the giveaway should last for. Example values: 1m, 1h, 1d", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + { + name: "winners", + description: "How many winners the giveaway should have", + type: Discord.ApplicationCommandOptionType.Integer, + required: true, + }, + { + name: "prize", + description: "What the prize of the giveaway should be", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + { + name: "channel", + description: "The channel to start the giveaway in", + type: Discord.ApplicationCommandOptionType.Channel, + required: true, + }, + ], - options: [ - { - name: 'duration', - description: 'How long the giveaway should last for. Example values: 1m, 1h, 1d', - type: 'STRING', - required: true - }, - { - name: 'winners', - description: 'How many winners the giveaway should have', - type: 'INTEGER', - required: true - }, - { - name: 'prize', - description: 'What the prize of the giveaway should be', - type: 'STRING', - required: true - }, - { - name: 'channel', - description: 'The channel to start the giveaway in', - type: 'CHANNEL', - required: true - } - ], + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to start giveaways.", + ephemeral: true, + }); + } - run: async (client, interaction) => { + const giveawayChannel = interaction.options.getChannel("channel"); + const giveawayDuration = interaction.options.getString("duration"); + const giveawayWinnerCount = interaction.options.getInteger("winners"); + const giveawayPrize = interaction.options.getString("prize"); - // If the member doesn't have enough permissions - if(!interaction.member.permissions.has('MANAGE_MESSAGES') && !interaction.member.roles.cache.some((r) => r.name === "Giveaways")){ - return interaction.reply({ - content: ':x: You need to have the manage messages permissions to start giveaways.', - ephemeral: true - }); - } - - const giveawayChannel = interaction.options.getChannel('channel'); - const giveawayDuration = interaction.options.getString('duration'); - const giveawayWinnerCount = interaction.options.getInteger('winners'); - const giveawayPrize = interaction.options.getString('prize'); - - if(!giveawayChannel.isText()) { - return interaction.reply({ - content: ':x: Selected channel is not text-based.', - ephemeral: true - }); - } - - // Start the giveaway - client.giveawaysManager.start(giveawayChannel, { - // The giveaway duration - duration: ms(giveawayDuration), - // The giveaway prize - prize: giveawayPrize, - // The giveaway winner count - winnerCount: giveawayWinnerCount, - // Who hosts this giveaway - hostedBy: client.config.hostedBy ? interaction.user : null, - // Messages - messages - }); - - interaction.reply(`Giveaway started in ${giveawayChannel}!`); - - } + if (!giveawayChannel.isTextBased()) { + return interaction.reply({ + content: ":x: Selected channel is not text-based.", + ephemeral: true, + }); + } + // Start the giveaway + client.giveawaysManager.start(giveawayChannel, { + // The giveaway duration + duration: ms(giveawayDuration), + // The giveaway prize + prize: giveawayPrize, + // The giveaway winner count + winnerCount: giveawayWinnerCount, + // Who hosts this giveaway + hostedBy: client.config.hostedBy ? interaction.user : null, + // Messages + messages, + }); + + interaction.reply(`Giveaway started in ${giveawayChannel}!`); + }, }; \ No newline at end of file diff --git a/commands/stats.js b/commands/stats.js index 3e2c95d..99c5d4b 100644 --- a/commands/stats.js +++ b/commands/stats.js @@ -1,85 +1,87 @@ -const os = require('os'); -const { MessageEmbed } = require('discord.js'); -const feroms = require('fero-ms'); +const os = require("os"); +const { EmbedBuilder } = require("discord.js"); +const feroms = require("fero-ms"); module.exports = { - name: 'stats', - description: 'Sends bot physical statistics', - run: async(client, interaction) => { - let uptime = client.uptime; - let shortUptime = feroms.ms(uptime); - let model = os.cpus()[0].model; - let cores = os.cpus().length; - let platform = os.platform(); - let nodejs = process.version; - let djs = require('discord.js').version; - let botversion = require('../package.json').version; - let server = client.guilds.cache.size; - let user = client.users.cache.size; - let channel = client.channels.cache.size; - - let statsembed = new MessageEmbed() - .addFields( - { - name: '<:live2:896715171882500106> I have been online for?', - value: `\`\`\`${shortUptime}\`\`\`` - }, - { - name: '<:globe:896718155416760340> Guilds', - value: `\`${server}\``, - inline: true - }, - { - name: '<:mention:896718358672707584> Users', - value: `\`${user}\``, - inline: true - }, - { - name: '<:channel:896717996326809641> Channels', - value: `\`${channel}\``, - inline: true - }, - { - name: 'Bot Version', - value: `\`v${botversion}\``, - inline: true - }, - { - name: '<:prime:896718399776886816> Arch', - value: `\`${os.arch()}\``, - inline: true - }, - { - name: '<:info:896718244461826140> Platform', - value: `\`${platform}\``, - inline: true - }, - { - name: '<:desktop:896718080821047346> Cores', - value: `\`${cores}\``, - inline: true - }, - { - name: ' Discord.js Version', - value: `\`v${djs}\``, - inline: true - }, - { - name: '<:jss:896718571491704852> Node.js Version', - value: `\`${nodejs}\``, - inline: true - }, - { - name: '<:ram:896715172029276180> Ram Usage', - value: `\`${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)}MB/ ${(os.totalmem() / 1024 / 1024).toFixed(2)}MB\``, - inline: true - }, - { - name: '<:desktop:896718080821047346> CPU Model', - value: `\`\`\`${model}\`\`\`` - } - ) - .setTimestamp() - await interaction.reply({ embeds: [statsembed] }); - } - } \ No newline at end of file + name: "stats", + description: "Sends bot physical statistics", + run: async (client, interaction) => { + let uptime = client.uptime; + let shortUptime = feroms.ms(uptime); + let model = os.cpus()[0].model; + let cores = os.cpus().length; + let platform = os.platform(); + let nodejs = process.version; + let djs = require("discord.js").version; + let botversion = require("../package.json").version; + let server = client.guilds.cache.size; + let user = client.users.cache.size; + let channel = client.channels.cache.size; + + let statsembed = new EmbedBuilder() + .addFields( + { + name: "<:live2:896715171882500106> I have been online for?", + value: `\`\`\`${shortUptime}\`\`\``, + }, + { + name: "<:globe:896718155416760340> Guilds", + value: `\`${server}\``, + inline: true, + }, + { + name: "<:mention:896718358672707584> Users", + value: `\`${user}\``, + inline: true, + }, + { + name: "<:channel:896717996326809641> Channels", + value: `\`${channel}\``, + inline: true, + }, + { + name: "Bot Version", + value: `\`v${botversion}\``, + inline: true, + }, + { + name: "<:prime:896718399776886816> Arch", + value: `\`${os.arch()}\``, + inline: true, + }, + { + name: "<:info:896718244461826140> Platform", + value: `\`${platform}\``, + inline: true, + }, + { + name: "<:desktop:896718080821047346> Cores", + value: `\`${cores}\``, + inline: true, + }, + { + name: " Discord.js Version", + value: `\`v${djs}\``, + inline: true, + }, + { + name: "<:jss:896718571491704852> Node.js Version", + value: `\`${nodejs}\``, + inline: true, + }, + { + name: "<:ram:896715172029276180> Ram Usage", + value: `\`${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed( + 2 + )}MB/ ${(os.totalmem() / 1024 / 1024).toFixed(2)}MB\``, + inline: true, + }, + { + name: "<:desktop:896718080821047346> CPU Model", + value: `\`\`\`${model}\`\`\``, + } + ) + .setTimestamp(); + await interaction.reply({ embeds: [statsembed] }); + }, +}; \ No newline at end of file diff --git a/commands/unpause.js b/commands/unpause.js new file mode 100644 index 0000000..3f9f511 --- /dev/null +++ b/commands/unpause.js @@ -0,0 +1,71 @@ +const Discord = require("discord.js"); + +module.exports = { + description: "Unpause a giveaway", + + options: [ + { + name: "giveaway", + description: "The giveaway to unpause (message ID or giveaway prize)", + type: Discord.ApplicationCommandOptionType.String, + required: true, + }, + ], + + run: async (client, interaction) => { + // If the member doesn't have enough permissions + if ( + !interaction.member.permissions.has("MANAGE_MESSAGES") && + !interaction.member.roles.cache.some((r) => r.name === "Giveaways") + ) { + return interaction.reply({ + content: + ":x: You need to have the manage messages permissions to unpause giveaways.", + ephemeral: true, + }); + } + + const query = interaction.options.getString("giveaway"); + + // try to found the giveaway with prize then with ID + const giveaway = + // Search with giveaway prize + client.giveawaysManager.giveaways.find( + (g) => g.prize === query && g.guildId === interaction.guild.id + ) || + // Search with giveaway ID + client.giveawaysManager.giveaways.find( + (g) => g.messageId === query && g.guildId === interaction.guild.id + ); + + // If no giveaway was found + if (!giveaway) { + return interaction.reply({ + content: "Unable to find a giveaway for `" + query + "`.", + ephemeral: true, + }); + } + + if (!giveaway.pauseOptions.isPaused) { + return interaction.reply({ + content: "This giveaway is not paused.", + ephemeral: true, + }); + } + + // Edit the giveaway + client.giveawaysManager + .unpause(giveaway.messageId) + // Success message + .then(() => { + // Success message + interaction.reply("Giveaway unpaused!"); + }) + .catch((e) => { + interaction.reply({ + content: e, + ephemeral: true, + }); + }); + }, +}; \ No newline at end of file