import { Message } from '../../types/Message'; import { Command } from '../Command'; import { localizable, using } from '../CommandDecorators'; import { ResourceLoader } from '../../types/ResourceLoader'; import { BaseStrings as s } from '../../localization/BaseStrings'; import { Lang } from '../../localization/Lang'; import { resolve } from '../middleware/Resolve'; export default class extends Command { public constructor() { super({ name: 'setlang', aliases: ['lang'], desc: 'List languages or set bot language', usage: 'setlang [lang]', callerPermissions: ['ADMINISTRATOR'] }); } @using(resolve({ '[lang]': 'Number' })) @localizable public async action(message: Message, [res, lang]: [ResourceLoader, number]): Promise { let langs: string[] = Lang.langNames; if (typeof lang === 'undefined') { const prefix: string = await this.client.getPrefix(message.guild) || ''; let names: string[] = langs.map(l => Lang.getMetaValue(l, 'name') || l); let currentLang: string = await message.guild.storage.settings.get('lang') || 'en_us'; currentLang = Lang.getMetaValue(currentLang, 'name') || currentLang; names = names .map((l, i) => `${i + 1}: ${l}`) .map(l => l.replace(` ${currentLang}`, `*${currentLang}`)); let output: string = res(s.CMD_SETLANG_LIST, { langList: names.join('\n'), prefix }); return message.channel.send(output); } if (!((lang - 1) in langs)) return message.channel.send(res(s.CMD_SETLANG_ERR_INVALID)); const newLang: string = langs[lang - 1]; await message.guild.storage.settings.set('lang', newLang); res = Lang.createResourceLoader(newLang); return message.channel.send(res(s.CMD_SETLANG_SUCCESS, { lang: Lang.getMetaValue(newLang, 'name') || newLang })); } }