Add language settings

This commit is contained in:
2022-06-29 22:13:37 +07:00
parent 074bd35bdd
commit 9e408d88f4
2 changed files with 106 additions and 1 deletions
+103
View File
@@ -0,0 +1,103 @@
import { Permissions, Guild, PermissionFlagsBits, PermissionsBitField } from 'discord.js';
import { I18n } from 'i18n';
import DiscordProvider from '../../providers/Discord';
import Prisma from '../../providers/Prisma';
import Cache from '../../providers/Cache';
import { HybridInteractionMessage } from '../../utils/DiscordModule';
import {
makeInfoEmbed,
makeErrorEmbed,
makeSuccessEmbed,
sendHybridInteractionMessageResponse
} from '../../utils/DiscordMessage';
import { COMMON_EMBEDS } from '.';
import Locale from '../../providers/Locale';
const EMBEDS = {
LANGUAGE_INFO: (data: HybridInteractionMessage, locale: I18n, currentLocale: string) => {
return makeInfoEmbed({
title: locale.__('settings_language.info', { LANGUAGE: currentLocale}),
description: locale.__('settings_language.info_description', { LANGUAGES: Locale.getLocaleProvider('en').getLocales().join(', ') }),
user: data.getUser()
});
},
LANGUAGE_INVALID: (data: HybridInteractionMessage, locale: I18n) => {
return makeErrorEmbed({
title: locale.__('settings_language.language_invalid'),
description: locale.__('settings_language.language_invalid_description'),
user: data.getUser()
});
},
LANGUAGE_UPDATED: (data: HybridInteractionMessage, locale: I18n, newLanguage: string) => {
return makeSuccessEmbed({
title: locale.__({ phrase: 'settings_language.language_updated', locale: newLanguage }),
description: locale.__({ phrase: 'settings_language.language_updated_description', locale: newLanguage }, { LANGUAGE: newLanguage }),
user: data.getUser()
});
}
};
export default async (data: HybridInteractionMessage, args: any, guild: Guild, locale: I18n) => {
let member = data.getMember();
if (!member) return;
const GuildCache = await Cache.getCachedGuild(guild.id);
if (!GuildCache) return;
const language = GuildCache.locale;
if (!member.permissions.has([PermissionsBitField.Flags.Administrator]))
return await sendHybridInteractionMessageResponse(data, {
embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale)]
});
let newLanguage: string | null | undefined;
if (data.isMessage()) {
let _name: string;
if (typeof args[1] === 'undefined')
return await sendHybridInteractionMessageResponse(data, {
embeds: [EMBEDS.LANGUAGE_INFO(data, locale, language)]
});
let __name = args;
__name.shift();
_name = __name.join(' ');
newLanguage = _name;
} else if (data.isApplicationCommand()) newLanguage = data.getSlashCommand().options.get('language', true).value?.toString();
if (!newLanguage)
return await sendHybridInteractionMessageResponse(data, {
embeds: [EMBEDS.LANGUAGE_INFO(data, locale, language)]
});
newLanguage = newLanguage.toLowerCase();
if (!Locale.getLocaleProvider('en').getLocales().includes(newLanguage))
return await sendHybridInteractionMessageResponse(data, {
embeds: [EMBEDS.LANGUAGE_INVALID(data, locale)]
});
let placeholder: HybridInteractionMessage | undefined;
let _placeholder = await sendHybridInteractionMessageResponse(data, {
embeds: [COMMON_EMBEDS.PROCESSING(data, locale)]
});
if (_placeholder) placeholder = new HybridInteractionMessage(_placeholder);
await Prisma.client.guild.update({
where: { id: guild.id },
data: { locale: newLanguage }
});
Cache.updateGuildCache(guild.id);
if (data && data.isMessage() && placeholder && placeholder.isMessage())
return placeholder.getMessage().edit({ embeds: [EMBEDS.LANGUAGE_UPDATED(data, locale, newLanguage)] });
else if (data.isApplicationCommand())
return await sendHybridInteractionMessageResponse(
data,
{ embeds: [EMBEDS.LANGUAGE_UPDATED(data, locale, newLanguage)] },
true
);
};
+3 -1
View File
@@ -1,6 +1,5 @@
import {
Message,
Interaction,
CommandInteraction,
Permissions,
ThreadChannel,
@@ -24,6 +23,7 @@ import {
} from '../../utils/DiscordMessage';
import * as PrefixModule from './Prefix';
import * as LanguageModule from './Language';
import * as ServiceAnnouncementModule from './ServiceAnnouncement';
export const COMMON_EMBEDS = {
@@ -102,6 +102,8 @@ export default class Settings extends DiscordModule {
});
case 'prefix':
return await PrefixModule.default(data, args, guild, locale);
case 'language':
return await LanguageModule.default(data, args, guild, locale);
case 'enableserviceannouncement':
return await ServiceAnnouncementModule.setEnableServiceAnnouncement(data, args, guild, locale);
case 'serviceannouncementchannel':