mirror of
https://github.com/kirameki-cafe/Yumi.git
synced 2026-09-13 18:59:19 +00:00
Add language settings
This commit is contained in:
@@ -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
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Message,
|
Message,
|
||||||
Interaction,
|
|
||||||
CommandInteraction,
|
CommandInteraction,
|
||||||
Permissions,
|
Permissions,
|
||||||
ThreadChannel,
|
ThreadChannel,
|
||||||
@@ -24,6 +23,7 @@ import {
|
|||||||
} from '../../utils/DiscordMessage';
|
} from '../../utils/DiscordMessage';
|
||||||
|
|
||||||
import * as PrefixModule from './Prefix';
|
import * as PrefixModule from './Prefix';
|
||||||
|
import * as LanguageModule from './Language';
|
||||||
import * as ServiceAnnouncementModule from './ServiceAnnouncement';
|
import * as ServiceAnnouncementModule from './ServiceAnnouncement';
|
||||||
|
|
||||||
export const COMMON_EMBEDS = {
|
export const COMMON_EMBEDS = {
|
||||||
@@ -102,6 +102,8 @@ export default class Settings extends DiscordModule {
|
|||||||
});
|
});
|
||||||
case 'prefix':
|
case 'prefix':
|
||||||
return await PrefixModule.default(data, args, guild, locale);
|
return await PrefixModule.default(data, args, guild, locale);
|
||||||
|
case 'language':
|
||||||
|
return await LanguageModule.default(data, args, guild, locale);
|
||||||
case 'enableserviceannouncement':
|
case 'enableserviceannouncement':
|
||||||
return await ServiceAnnouncementModule.setEnableServiceAnnouncement(data, args, guild, locale);
|
return await ServiceAnnouncementModule.setEnableServiceAnnouncement(data, args, guild, locale);
|
||||||
case 'serviceannouncementchannel':
|
case 'serviceannouncementchannel':
|
||||||
|
|||||||
Reference in New Issue
Block a user