Files
Yumi/src/discord/Settings/index.ts
T

115 lines
3.9 KiB
TypeScript
Raw Normal View History

2022-06-07 17:32:32 +07:00
import {
Message,
CommandInteraction,
2022-07-04 21:28:04 +07:00
Guild,
PermissionsBitField,
PermissionResolvable
2022-06-07 17:32:32 +07:00
} from 'discord.js';
import { I18n } from 'i18n';
import DiscordProvider from '../../providers/Discord';
import Locale from '../../services/Locale';
import DiscordModule, { HybridInteractionMessage } from '../../utils/DiscordModule';
import {
makeInfoEmbed,
makeErrorEmbed,
makeProcessingEmbed,
sendHybridInteractionMessageResponse
} from '../../utils/DiscordMessage';
import * as PrefixModule from './Prefix';
2022-06-29 22:13:37 +07:00
import * as LanguageModule from './Language';
2022-06-07 17:32:32 +07:00
import * as ServiceAnnouncementModule from './ServiceAnnouncement';
export const COMMON_EMBEDS = {
2022-07-04 21:28:04 +07:00
NO_PERMISSION: (data: HybridInteractionMessage, locale: I18n, permissions: PermissionResolvable[]) => {
let allPermissions = [];
for(const value of permissions) {
allPermissions.push(new PermissionsBitField(value).toArray());
}
2022-06-07 17:32:32 +07:00
return makeErrorEmbed({
title: locale.__('common.no_permissions'),
2022-07-04 21:28:04 +07:00
description: locale.__('common.no_permissions_description', { PERMISSIONS: allPermissions.join(', ')}),
2022-06-07 17:32:32 +07:00
user: data.getUser()
});
},
PROCESSING: (data: HybridInteractionMessage, locale: I18n) => {
return makeProcessingEmbed({
icon: data.isMessage() ? undefined : '⌛',
title: locale.__('common.processing'),
2022-06-28 14:38:16 +07:00
description: locale.__('common.processing_description'),
2022-06-07 17:32:32 +07:00
user: data.getUser()
});
}
}
const EMBEDS = {
SETTINGS_INFO: (data: HybridInteractionMessage, locale: I18n, guild: Guild) => {
return makeInfoEmbed({
title: locale.__('settings.title'),
2022-06-27 20:28:01 +07:00
description: locale.__('settings.description', {
BOT_NAME: DiscordProvider.client.user!.username,
GUILD_NAME: guild.name
}),
2022-06-07 17:32:32 +07:00
fields: [
{
name: locale.__('common.available_args'),
value: locale.__('settings.valid_args'),
}
],
user: data.getUser()
});
}
};
export default class Settings extends DiscordModule {
public id = 'Discord_Settings';
public commands = ['settings'];
public commandInteractionName = 'settings';
async GuildOnModuleCommand(args: any, message: Message) {
await this.run(new HybridInteractionMessage(message), args);
}
async GuildModuleCommandInteractionCreate(interaction: CommandInteraction) {
await this.run(new HybridInteractionMessage(interaction), interaction.options);
}
async run(data: HybridInteractionMessage, args: any) {
const guild = data.getGuild();
if (!guild) return;
const locale = await Locale.getGuildLocale(guild.id);
let query;
if (data.isMessage()) {
if (args.length === 0)
return await sendHybridInteractionMessageResponse(data, {
embeds: [EMBEDS.SETTINGS_INFO(data, locale, guild)]
});
query = args[0].toLowerCase();
2022-06-29 15:27:42 +07:00
} else if (data.isApplicationCommand()) {
2022-06-07 17:32:32 +07:00
query = args.getSubcommand();
}
switch (query) {
case 'info':
return await sendHybridInteractionMessageResponse(data, {
embeds: [EMBEDS.SETTINGS_INFO(data, locale, guild)]
});
case 'prefix':
return await PrefixModule.default(data, args, guild, locale);
2022-06-29 22:13:37 +07:00
case 'language':
return await LanguageModule.default(data, args, guild, locale);
2022-06-07 17:32:32 +07:00
case 'enableserviceannouncement':
return await ServiceAnnouncementModule.setEnableServiceAnnouncement(data, args, guild, locale);
case 'serviceannouncementchannel':
return await ServiceAnnouncementModule.setServiceAnnouncementChannel(data, args, guild, locale);
}
}
}