111 lines
4.4 KiB
TypeScript
111 lines
4.4 KiB
TypeScript
import { SlashCommandBuilder, ChatInputCommandInteraction, PermissionFlagsBits } from "npm:discord.js";
|
|
import { connectToDb, getGuild, getWelcomeConfig, addWelcomeConfig, setFeatureProperty, addGuild } from "../../libs/mysql.ts";
|
|
import { errorEmbed, successEmbed } from "../../libs/discord.ts";
|
|
|
|
export default {
|
|
data: new SlashCommandBuilder()
|
|
.setName("setupwelcomemessage")
|
|
.setDescription("Configure the Welcome message.")
|
|
.setDMPermission(false)
|
|
.addChannelOption(option =>
|
|
option.setName("channel")
|
|
.setDescription("The channel where the embed will be sent.")
|
|
.setRequired(true)
|
|
)
|
|
.addRoleOption(option =>
|
|
option.setName("role")
|
|
.setDescription("The role that will be ping if you put {role} in the message or the embed description.")
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption(option =>
|
|
option.setName("message")
|
|
.setDescription("The message that will be sent with the embed.")
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption(option =>
|
|
option.setName("title")
|
|
.setDescription("The title of the embed.")
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption(option =>
|
|
option.setName("description")
|
|
.setDescription("The description of the embed.")
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption(option =>
|
|
option.setName("background")
|
|
.setDescription("The url of background of the image of the embed.")
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption(option =>
|
|
option.setName("vignette")
|
|
.setDescription("The url of vignette of the embed.")
|
|
.setRequired(false)
|
|
),
|
|
async execute(interaction: ChatInputCommandInteraction) {
|
|
await interaction.deferReply()
|
|
const connection = await connectToDb();
|
|
|
|
const guild_id = interaction.guild?.id ? interaction.guild?.id : ""
|
|
|
|
const guild = await getGuild(connection, guild_id)
|
|
|
|
if (!guild[0]) {
|
|
await addGuild(connection, guild_id);
|
|
}
|
|
|
|
const member = interaction.guild?.members.cache.get(interaction.user.id)
|
|
|
|
if (!member?.permissions.has(PermissionFlagsBits.Administrator) && !member?.roles.cache.has(guild[0]?.admin_role_id)) {
|
|
const embed = errorEmbed("You are not allowed to use that command.", interaction.client.user.displayAvatarURL());
|
|
|
|
return await interaction.editReply({embeds: [embed]});
|
|
}
|
|
|
|
const config = await getWelcomeConfig(connection, guild_id);
|
|
|
|
if (!config[0]) {
|
|
await addWelcomeConfig(connection, guild_id);
|
|
}
|
|
|
|
const channel_id = interaction.options.getChannel("channel")?.id
|
|
const role_id = interaction.options.getRole("role")?.id
|
|
const message = interaction.options.getString("message")
|
|
const title = interaction.options.getString("title")
|
|
const description = interaction.options.getString("description")
|
|
const background_url = interaction.options.getString("background")
|
|
const vignette_url = interaction.options.getString("vignette")
|
|
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "channel_id", channel_id ? channel_id : "");
|
|
|
|
if (role_id) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "role_id", role_id);
|
|
}
|
|
|
|
if (message) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "message_format", message);
|
|
}
|
|
|
|
if (title) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "title", title);
|
|
}
|
|
|
|
if (description) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "description_format", description);
|
|
}
|
|
|
|
if (background_url) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "background_url", background_url);
|
|
}
|
|
|
|
if (vignette_url) {
|
|
await setFeatureProperty(connection, guild_id, "welcome_config", "vignette_url", vignette_url);
|
|
}
|
|
|
|
connection.end();
|
|
|
|
const embed = successEmbed("Your welcome message has been successfully setup.", interaction.client.user.displayAvatarURL());
|
|
|
|
interaction.editReply({embeds: [embed]});
|
|
},
|
|
};
|