galactic-bot/structure/client/components/settings/logging/NicknameLogs.js

102 lines
3.0 KiB
JavaScript
Raw Normal View History

2021-05-08 19:42:30 +02:00
const { Setting } = require('../../../../interfaces');
2020-05-24 23:43:27 +02:00
class NicknameLogs extends Setting {
constructor(client) {
super(client, {
name: 'nicknameLog',
2021-05-08 19:42:30 +02:00
module: 'logging',
2020-05-24 23:43:27 +02:00
aliases: [
'nicknameLogs',
'nickLog',
'nickLogs'
],
2020-08-04 11:35:28 +02:00
tags: ['log', 'logs', 'logging'],
2020-05-24 23:43:27 +02:00
usage: '<value>',
resolve: 'GUILD',
examples: [
'nicklogs reset',
'nicklogs off',
2020-05-24 23:43:27 +02:00
'nicklogs #channel'
],
default: {
nicknameLog: {
channel: null
2020-05-24 23:43:27 +02:00
}
}
});
}
async handle(message, params) {
// eslint-disable-next-line init-declarations
let index, changes, action;
// eslint-disable-next-line prefer-const
2021-05-10 21:20:29 +02:00
let [method] = params;
2020-05-24 23:43:27 +02:00
method = method.toLowerCase();
const setting = message.guild._settings[this.index] || this.default[this.index];
const { guild } = message;
if (this.client.resolver.resolveBoolean(method) === false) {
2020-05-24 23:43:27 +02:00
setting.channel = null;
index = 'S_NICKNAMELOG_TOGGLE';
2020-05-24 23:43:27 +02:00
changes = message.format('ON_OFF_TOGGLE', { toggle: false }, true);
} else {
const channel = await guild.resolveChannel(method);
2020-05-24 23:43:27 +02:00
if (!channel) return {
msg: message.format('ERR_CHANNEL_RESOLVE', { resolveable: method }),
error: true
};
2020-06-19 20:29:54 +02:00
if(channel.type !== 'text') return {
error: true,
msg: message.format('ERR_CHANNEL_TYPE', { type: channel.type })
};
const perms = channel.permissionsFor(guild.me);
const missingPerms = [];
if(!perms.has('SEND_MESSAGES')) missingPerms.push('SEND_MESSAGES');
if(!perms.has('VIEW_CHANNEL')) missingPerms.push('VIEW_CHANNEL');
if(missingPerms.length) return {
error: true,
msg: message.format('ERR_CHANNEL_PERMS', { channel: channel.name, perms: missingPerms.join(', ') })
};
2020-05-24 23:43:27 +02:00
index = 'S_NICKNAMELOG_CHANNEL';
changes = channel.name;
setting.channel = channel.id;
}
await message.guild._updateSettings({ [this.index]: setting });
return {
msg: message.format(index, { changed: changes || '', action: message.format(action) })
};
}
async fields(guild) {
const setting = guild._settings[this.index];
return [
{
name: '》 Status',
value: guild.format('SETTING_STATUS', { bool: Boolean(setting?.channel) }, true),
inline: true
},
{
name: '》 Channel',
value: await guild.resolveChannel(setting?.channel) || '`N/A`',
2020-05-24 23:43:27 +02:00
inline: true
}
];
}
}
module.exports = NicknameLogs;