initial commit

This commit is contained in:
2024-10-13 14:50:19 +00:00
commit dbdbf16bfe
34 changed files with 3035 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
import discord, {
CommandInteraction,
CommandInteractionOptionResolver,
SlashCommandBuilder,
SlashCommandRoleOption,
SlashCommandStringOption,
InteractionResponse,
} from 'discord.js';
import {HydratedDocument} from 'mongoose';
import {Command} from '../../classes/command';
import {logger} from '../../logger';
import {AutoroleMsg, autoroleMsgModel} from '../../models/AutoroleMsg';
import {Guild, guildModel} from '../../models/Guild';
type CIOR = CommandInteractionOptionResolver;
class Autorole extends Command{
get name(){return "autorole";}
get description(){return "Setup a autorole message.";}
async execute(interaction: CommandInteraction): Promise<void>{
try{
let role = (interaction.options as CIOR).getRole('role');
if(!role)
throw Error('role not exist');
const title: string | null =
(interaction.options as CIOR).getString('title');
if(!title)
throw Error('title not exist');
const message: string | null =
(interaction.options as CIOR).getString('message');
if(!message)
throw Error('message not exist');
if(!interaction.guild || !interaction.guild.id || !interaction.guild.name)
throw Error('guildId not exist');
if(!interaction.channelId)
throw Error('channelId not exist');
let content: string = `>> **Auto Role: ${title}** <<\n`;
content += '*React to give yourself a role.*\n\n';
content += `${message}`;
let msg: discord.Message =
await (await interaction.reply({content: content})).fetch();
const guild: HydratedDocument<Guild> | null =
await guildModel.findOneAndUpdate(
{id: interaction.guild.id},
{$set: {name: interaction.guild.name}},
{upsert: true, new: true}
);
if(!guild)
throw Error('guild not exist');
const autoroleMsg: HydratedDocument<AutoroleMsg> | null =
await autoroleMsgModel.findOneAndUpdate(
{guild: guild, messageId: msg.id, roleId: role.id},
{}, {upsert: true, new: true}
);
if(!autoroleMsg)
throw Error('autoroleMsg not exist');
}catch(err: unknown){
let message;
if(err instanceof Error) message = err.message;
else message = String(message);
logger.error(`While executing "/autorole", ${message}`);
await interaction.reply({content: `While executing "/autorole", ${message}`});
}
}
override build(): SlashCommandBuilder |
Omit<SlashCommandBuilder, "addSubcommand" | "addSubcommandGroup">{
return new SlashCommandBuilder()
.setName(this.name)
.setDescription(this.description)
.addRoleOption((option: SlashCommandRoleOption) => option
.setName('role')
.setDescription('The role that autorole gives when reacted.')
.setRequired(true)
)
.addStringOption((option: SlashCommandStringOption) => option
.setName('title')
.setDescription('The title displayed with the autorole message.')
.setRequired(true)
)
.addStringOption((option: SlashCommandStringOption) => option
.setName('message')
.setDescription('The additional message displayed with the autorole message.')
.setRequired(true)
)
}
};
export const command = new Autorole();