diff --git a/commands/owner/deletetweet.js b/commands/owner/deletetweet.js new file mode 100644 index 00000000..f5842a47 --- /dev/null +++ b/commands/owner/deletetweet.js @@ -0,0 +1,37 @@ +import { SlashCommandBuilder } from '@discordjs/builders'; +import Twit from 'twit'; + +import dotenv from 'dotenv'; +dotenv.config(); +const { twiConsumer, twiConsumerSecret, twiToken, twiTokenSecret } = process.env; + +export default { + data: new SlashCommandBuilder() + .setName('deletewteet') + .setDescription('Delete a tweet') + .addStringOption(option => + option.setName('tweetid') + .setDescription('The id of the tweet you wish to delete.') + .setRequired(true)), + ownerOnly: true, + async execute(interaction) { + await interaction.deferReply(); + try { + const T = new Twit({ + consumer_key: twiConsumer, + consumer_secret: twiConsumerSecret, + access_token: twiToken, + access_token_secret: twiTokenSecret, + }); + + T.post('statuses/destroy', { + id: interaction.options.getString('tweetid'), + }); + return interaction.editReply('Tweet have been deleted!'); + } + catch (err) { + console.error(err); + return interaction.editReply('Oh no, an error has occurred :('); + } + }, +}; diff --git a/commands/owner/die.js b/commands/owner/die.js index 9caf89a8..30a3fb75 100644 --- a/commands/owner/die.js +++ b/commands/owner/die.js @@ -1,17 +1,12 @@ import { SlashCommandBuilder } from '@discordjs/builders'; -import dotenv from 'dotenv'; import process from 'node:process'; -dotenv.config(); -const { ownerId } = process.env; export default { data: new SlashCommandBuilder() .setName('die') .setDescription('Kill the bot'), + ownerOnly: true, async execute(interaction) { - if (interaction.user.id !== ownerId) { - return interaction.reply({ content: '❌ This command is reserved for the owner!', ephemeral: true }); - } console.log('\x1b[31m\x1b[47m\x1b[5mSHUTING DOWN!!!!!\x1b[0m'); await interaction.reply({ content: 'Good bye', ephemeral: true }) .then(() => { diff --git a/commands/owner/ublacklist.js b/commands/owner/ublacklist.js new file mode 100644 index 00000000..889054f0 --- /dev/null +++ b/commands/owner/ublacklist.js @@ -0,0 +1,70 @@ +import { SlashCommandBuilder } from '@discordjs/builders'; +import { MessageButton, MessageActionRow } from 'discord.js'; +import db from '../../models/index.js'; +const Blacklists = db.Blacklists; + +export default { + data: new SlashCommandBuilder() + .setName('ublacklist') + .setDescription('Blacklist a user from the bot') + .addStringOption(option => + option.setName('command') + .setDescription('Which command do you want to get a user blacklisted from?') + .setRequired(true)) + .addStringOption(option => + option.setName('userid') + .setDescription('Who do you want to blacklist?') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('The reason of the blacklist.') + .setRequired(false)), + ownerOnly: true, + async execute(interaction) { + await interaction.deferReply({ ephemeral: true }); + const client = interaction.client; + const command = interaction.options.getString('command'); + const userid = interaction.options.getString('userid'); + const reason = interaction.options.getString('reason'); + + const blacklist = await Blacklists.findOne({ where: { type:command, uid:userid } }); + + if (!blacklist) { + const body = { type:command, uid: userid, reason: reason }; + Blacklists.create(body); + let user = userid; + if (command !== 'guild') {user = client.users.resolve(userid).tag;} + + return interaction.editReply(`${user} has been blacklisted from ${command} with the following reason ${reason}`); + } + else { + const row = new MessageActionRow() + .addComponents( + new MessageButton() + .setCustomId('yes') + .setLabel('Yes') + .setStyle('PRIMARY'), + ) + .addComponents( + new MessageButton() + .setCustomId('no') + .setLabel('No') + .setStyle('DANGER'), + ); + + await interaction.editReply({ content: 'This user is already blacklisted, do you want to unblacklist him?', ephemeral: true, components: [row] }); + + interaction.client.once('interactionCreate', async (interactionMenu) => { + if (!interactionMenu.isButton) return; + interactionMenu.update({ components: [] }); + if (interactionMenu.customId === 'yes') { + Blacklists.destroy({ where: { type:command, uid:userid } }); + return interaction.editReply(`The following ID have been unblacklisted from ${command}: ${userid}`); + } + else { + return interaction.editReply('No one has been unblacklisted.'); + } + }); + } + }, +}; diff --git a/deploy-owner-commands.cjs b/deploy-owner-commands.cjs deleted file mode 100644 index 8351ea84..00000000 --- a/deploy-owner-commands.cjs +++ /dev/null @@ -1,18 +0,0 @@ -const { SlashCommandBuilder } = require('@discordjs/builders'); -const { REST } = require('@discordjs/rest'); -const { Routes } = require('discord-api-types/v9'); -require('dotenv').config(); -const { clientId, guildId, token } = process.env; - -const commands = [ - new SlashCommandBuilder() - .setName('die') - .setDescription('Kill the bot'), -] - .map(command => command.toJSON()); - -const rest = new REST({ version: '9' }).setToken(token); - -rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands }) - .then(() => console.log(`Successfully registered application commands for the guild ${guildId}.`)) - .catch(console.error); diff --git a/deploy-commands.cjs b/scripts/deploy-commands.cjs similarity index 96% rename from deploy-commands.cjs rename to scripts/deploy-commands.cjs index eb3d6e1c..ea27e3ce 100644 --- a/deploy-commands.cjs +++ b/scripts/deploy-commands.cjs @@ -69,6 +69,10 @@ const commands = [ option.setName('board') .setDescription('The board you wish to see') .setRequired(true)), + + new SlashCommandBuilder() + .setName('donator') + .setDescription('All the people who donated for this bot <3'), ] .map(command => command.toJSON()); diff --git a/scripts/deploy-owner-commands.cjs b/scripts/deploy-owner-commands.cjs new file mode 100644 index 00000000..d1fd137c --- /dev/null +++ b/scripts/deploy-owner-commands.cjs @@ -0,0 +1,42 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); +const { REST } = require('@discordjs/rest'); +const { Routes } = require('discord-api-types/v9'); +require('dotenv').config(); +const { clientId, guildId, token } = process.env; + +const commands = [ + new SlashCommandBuilder() + .setName('die') + .setDescription('Kill the bot'), + + new SlashCommandBuilder() + .setName('ublacklist') + .setDescription('Blacklist a user from the bot') + .addStringOption(option => + option.setName('command') + .setDescription('Which command do you want to get a user blacklisted from?') + .setRequired(true)) + .addStringOption(option => + option.setName('userid') + .setDescription('Who do you want to blacklist?') + .setRequired(true)) + .addStringOption(option => + option.setName('reason') + .setDescription('The reason of the blacklist.') + .setRequired(false)), + + new SlashCommandBuilder() + .setName('deletewteet') + .setDescription('Delete a tweet') + .addStringOption(option => + option.setName('tweetid') + .setDescription('The id of the tweet you wish to delete.') + .setRequired(true)), +] + .map(command => command.toJSON()); + +const rest = new REST({ version: '9' }).setToken(token); + +rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands }) + .then(() => console.log(`Successfully registered application commands for the guild ${guildId}.`)) + .catch(console.error);