diff --git a/src/commands/guilds/register.ts b/src/commands/guilds/register.ts new file mode 100644 index 0000000..7addb2b --- /dev/null +++ b/src/commands/guilds/register.ts @@ -0,0 +1,38 @@ +import { SlashCommandBuilder, CommandInteraction, PermissionsBitField } from "discord.js"; +import { connectToDb, getguild, addGuild } from "../../libs/mysql.js" +import { errorEmbed, successEmbed } from "../../libs/discord.js"; + +export default { + data: new SlashCommandBuilder() + .setName("register") + .setDescription("Register the guild to the bot.") + .setDMPermission(false), + async execute(interaction: CommandInteraction) { + const guild_id: string = interaction.guildId ? interaction.guildId : ""; + const member = interaction.guild?.members.cache.get(interaction.user.id); + + if (! member?.permissions.has(PermissionsBitField.Flags.ManageGuild)) { + const embed = errorEmbed("You are not allowed to use that command.", interaction.client.user.displayAvatarURL()); + + return await interaction.reply({embeds: [embed]}); + } + + const connection = await connectToDb(); + + const guild: any[] = await getguild(connection, guild_id); + + if (guild[0]) { + const embed = await errorEmbed("Your server is already registered.", interaction.client.user.displayAvatarURL()); + + return await interaction.reply({embeds: [embed]}); + } + + await addGuild(connection, guild_id); + + connection.end(); + + const embed = await successEmbed("your server has been added to the bot.", interaction.client.user.displayAvatarURL()); + + await interaction.reply({embeds: [embed]}); + }, +}; diff --git a/src/events/guildCreate.ts b/src/events/guildCreate.ts new file mode 100644 index 0000000..d47f82a --- /dev/null +++ b/src/events/guildCreate.ts @@ -0,0 +1,18 @@ +import { Events, Guild } from "discord.js"; +import { connectToDb, getguild, addGuild } from "../libs/mysql.js"; + +export default { + name: Events.GuildCreate, + async execute(guild: Guild) { + const connection = await connectToDb(); + const guild_obj: any[] = await getguild(connection, guild.id); + + connection.end() + + if (guild_obj[0]) { + return; + } + + addGuild(connection, guild.id); + }, +}; \ No newline at end of file diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index f83f783..cc5bbed 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -18,4 +18,4 @@ export default { } } }, -}; +}; \ No newline at end of file diff --git a/src/libs/discord.ts b/src/libs/discord.ts index db5dcea..0f9e7f0 100644 --- a/src/libs/discord.ts +++ b/src/libs/discord.ts @@ -37,6 +37,14 @@ export function errorEmbed(error: string, iconURL: string) { .setColor("#000000"); } +export function successEmbed(message: string, iconURL: string) { + return new EmbedBuilder() + .setTitle("Success") + .setDescription(message) + .setFooter({ text: "Bot by @ninja_jambon.", iconURL: iconURL}) + .setColor("#000000"); +} + export function quotaEmbed(quota: number, iconURL: string) { return new EmbedBuilder() .setTitle("Quota left") diff --git a/src/libs/mysql.ts b/src/libs/mysql.ts index 7f0bfc3..a20b5b0 100644 --- a/src/libs/mysql.ts +++ b/src/libs/mysql.ts @@ -73,3 +73,27 @@ export function resetQuota(connection: mysql.Connection) { }) }) } + +export function getguild(connection: mysql.Connection, guild_id: string): Promise { + return new Promise((resolve, reject) => { + connection.query(`SELECT * FROM guilds WHERE guild_id = "${guild_id}"`, (error, result) => { + if (error) { + reject(error); + } + + resolve(result); + }) + }) +} + +export function addGuild(connection: mysql.Connection, guild_id: string) { + return new Promise((resolve, reject) => { + connection.query(`INSERT INTO guilds (guild_id) VALUES ("${guild_id}")`, (error, result) => { + if (error) { + reject(error); + } + + resolve(result); + }) + }) +}