diff --git a/structure/client/components/settings/moderation/VoiceLogs.js b/structure/client/components/settings/moderation/VoiceLogs.js new file mode 100644 index 0000000..802b751 --- /dev/null +++ b/structure/client/components/settings/moderation/VoiceLogs.js @@ -0,0 +1,98 @@ +const { Setting } = require('../../../../interfaces/'); + +class VoiceLogSettings extends Setting { + + constructor(client) { + + super(client, { + name: 'voiceLog', + module: 'moderation', + aliases: [ + 'vcLog', + 'vcLogs', + 'voiceLogs' + ], + usage: '', + guarded: true, + resolve: 'GUILD', + examples: [ + 'voicelog reset', + 'voicelog on|off', + 'voicelog #channel' + ], + default: { + voiceLog: { + channel: null, + enabled: false + } + } + }); + + this.client = client; + + } + + async handle(message, params) { + + // eslint-disable-next-line init-declarations + let index, changes, action; + // eslint-disable-next-line prefer-const + let [method, ...args] = params; + method = method.toLowerCase(); + + const setting = message.guild._settings[this.index] || this.default[this.index]; + const { guild } = message; + + if (this.client.resolver.resolveBoolean(method)) { + + setting.enabled = setting.channel && true; + index = 'S_VOICELOG_TOGGLE'; + changes = message.format('ON_OFF_TOGGLE', { toggle: true }, true); + + } else if (this.client.resolver.resolveBoolean(method) === false) { + + setting.enabled = false; + index = 'S_VOICELOG_TOGGLE' + changes = message.format('ON_OFF_TOGGLE', { toggle: false }, true); + + } else { + + const channel = guild.resolveChannel(method); + if (!channel) return { + msg: message.format('ERR_CHANNEL_RESOLVE', { resolveable: method }), + error: true + }; + + index = 'S_VOICELOG_CHANNEL'; + changes = channel.name; + setting.channel = channel.id; + setting.enabled = true; + + } + + await message.guild._updateSettings({ [this.index]: setting }); + return { + msg: message.format(index, { changed: changes instanceof Array ? changes?.join(', ') : changes || undefined, action: message.format(action) }) + }; + + } + + async fields(guild) { + const setting = guild._settings[this.index]; + return [ + { + name: '》Enabled', + value: setting?.enabled || false, + inline: true + }, + { + name: '》Channel', + value: guild.resolveChannel(setting?.channel) || '`N/A`', + inline: true + } + ]; + } + +} + +module.exports = VoiceLogSettings; \ No newline at end of file