invite filter setting
This commit is contained in:
parent
2675cafef4
commit
9013dbe5ee
201
structure/client/components/settings/moderation/InviteFilter.js
Normal file
201
structure/client/components/settings/moderation/InviteFilter.js
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
const { FilterSetting } = require('../../../../interfaces/');
|
||||||
|
|
||||||
|
module.exports = class InviteFilter extends FilterSetting {
|
||||||
|
|
||||||
|
constructor(client) {
|
||||||
|
|
||||||
|
super(client, {
|
||||||
|
name: 'inviteFilter',
|
||||||
|
module: 'moderation',
|
||||||
|
aliases: [],
|
||||||
|
resolve: 'GUILD',
|
||||||
|
usage: '<option> <method> <value..>',
|
||||||
|
examples: [
|
||||||
|
|
||||||
|
],
|
||||||
|
default: {
|
||||||
|
inviteFilter: {
|
||||||
|
enabled: false,
|
||||||
|
silent: false,
|
||||||
|
bypass: [],
|
||||||
|
ignore: [],
|
||||||
|
actions: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async handle(message, params) {
|
||||||
|
|
||||||
|
const [_method, ...args] = params;
|
||||||
|
const method = _method.toLowerCase();
|
||||||
|
|
||||||
|
const { resolver } = this.client;
|
||||||
|
const { guild } = message;
|
||||||
|
const setting = guild._settings[this.index];
|
||||||
|
|
||||||
|
let index = null,
|
||||||
|
langParams = {};
|
||||||
|
|
||||||
|
const bool = resolver.resolveBoolean(method);
|
||||||
|
|
||||||
|
if (bool === null && !args.length) return {
|
||||||
|
error: true,
|
||||||
|
msg: message.format('MISSING_ARGS')
|
||||||
|
};
|
||||||
|
|
||||||
|
if (bool || bool === false) {
|
||||||
|
|
||||||
|
index = 'S_INVITEFILTER_TOGGLE';
|
||||||
|
langParams.toggle = message.format('ON_OFF_TOGGLE', { toggle: bool }, true);
|
||||||
|
setting.enabled = bool;
|
||||||
|
|
||||||
|
} else if (['ignore', 'channelignore', 'ignorechannel'].includes(method)) {
|
||||||
|
|
||||||
|
const resolved = await resolver.resolveMethod(args, {
|
||||||
|
existing: setting.ignore,
|
||||||
|
resolver: resolver.resolveChannels.bind(resolver),
|
||||||
|
guild,
|
||||||
|
allowedMethods: ['add', 'remove', 'set', 'reset']
|
||||||
|
});
|
||||||
|
if (!resolved) return {
|
||||||
|
error: true,
|
||||||
|
msg: message.format('ERR_INVALID_METHOD', { method: args[0] })
|
||||||
|
};
|
||||||
|
index = 'S_INVITEFILTER_IGNORE_' + resolved.method.toUpperCase();
|
||||||
|
langParams.changed = resolved.resolved.join(', ');
|
||||||
|
setting.ignore = resolved.result;
|
||||||
|
|
||||||
|
} else if (['bypass', 'roleignore', 'ignorerole'].includes(method)) {
|
||||||
|
|
||||||
|
const resolved = await resolver.resolveMethod(args, {
|
||||||
|
existing: setting.bypass,
|
||||||
|
resolver: resolver.resolveRoles.bind(resolver),
|
||||||
|
guild,
|
||||||
|
allowedMethods: ['add', 'remove', 'set', 'reset']
|
||||||
|
});
|
||||||
|
if (!resolved) return {
|
||||||
|
error: true,
|
||||||
|
msg: message.format('ERR_INVALID_METHOD', { method: args[0] })
|
||||||
|
};
|
||||||
|
index = 'S_INVITEFILTER_BYPASS_' + resolved.method.toUpperCase();
|
||||||
|
langParams.changed = resolved.resolved.map((role) => role.name).join('**, **');
|
||||||
|
setting.bypass = resolved.result;
|
||||||
|
|
||||||
|
} else if (['silent', 'shutup'].includes(method)) {
|
||||||
|
|
||||||
|
const bool = resolver.resolveBoolean(args[0]);
|
||||||
|
|
||||||
|
if (bool === null) return {
|
||||||
|
error: true,
|
||||||
|
msg: message.format('ERR_INVALID_METHOD', { method: args[0] })
|
||||||
|
};
|
||||||
|
index = 'S_INVITEFILTER_SILENT_TOGGLE';
|
||||||
|
langParams.toggle = message.format('ON_OFF_TOGGLE', { toggle: bool }, true);
|
||||||
|
setting.silent = bool;
|
||||||
|
|
||||||
|
} else if (['action', 'actions'].includes(method)) {
|
||||||
|
|
||||||
|
const submethod = args.shift().toLowerCase();
|
||||||
|
const resolved = await resolver.resolveMethod([submethod], {
|
||||||
|
allowedMethods: ['add', 'remove', 'edit', 'list', 'reset']
|
||||||
|
});
|
||||||
|
if (!resolved) return { error: true, msg: message.format('ERR_INVALID_METHOD', { method: submethod }) };
|
||||||
|
|
||||||
|
let result = null;
|
||||||
|
if (resolved.method === 'add') {
|
||||||
|
if (setting.actions.length > 0) return {
|
||||||
|
error: true,
|
||||||
|
msg: message.format('S_INVITEFILTER_ACTION_EXISTS')
|
||||||
|
};
|
||||||
|
result = await this._createAction(message, setting);
|
||||||
|
index = 'S_FILTER_ACTION_ADD';
|
||||||
|
} else if (resolved.method === 'edit') {
|
||||||
|
result = await this._editAction(message, setting);
|
||||||
|
index = 'S_FILTER_ACTION_EDIT';
|
||||||
|
} else if (resolved.method === 'remove') {
|
||||||
|
result = await this._removeAction(message, setting);
|
||||||
|
index = 'S_FILTER_ACTION_REMOVE';
|
||||||
|
} else if (resolved.method === 'list') {
|
||||||
|
this._listActions(message, setting);
|
||||||
|
return;
|
||||||
|
} else if (resolved.method === 'reset') {
|
||||||
|
result = {};
|
||||||
|
setting.actions = [];
|
||||||
|
index = 'S_FILTER_ACTION_RESET';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.error) return result;
|
||||||
|
|
||||||
|
//setting.actions.push(result);
|
||||||
|
//console.log(result);
|
||||||
|
langParams = {
|
||||||
|
type: result.type,
|
||||||
|
duration: result.duration ? resolver.timeAgo(result.duration) : 'INF',
|
||||||
|
points: result.points || message.format('ON_OFF_TOGGLE', { toggle: false }, true),
|
||||||
|
force: message.format('ON_OFF_TOGGLE', { toggle: result.force }, true),
|
||||||
|
prune: message.format('ON_OFF_TOGGLE', { toggle: result.prune }, true),
|
||||||
|
trigger: result.trigger instanceof Array ? '||' + result.trigger.join(', ') + '||' : result.trigger
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.guild._updateSettings({ [this.index]: setting });
|
||||||
|
return {
|
||||||
|
error: false,
|
||||||
|
msg: message.format(index, langParams)
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async _createTrigger(message, action, actionObject) {
|
||||||
|
|
||||||
|
actionObject.trigger = 'generic';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async fields(guild) {
|
||||||
|
|
||||||
|
const setting = guild._settings[this.index];
|
||||||
|
const { resolver } = this.client;
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
name: "》 Status",
|
||||||
|
value: guild.format('SETTING_STATUS', { bool: Boolean(setting.enabled) }, true),
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '》 Silent',
|
||||||
|
value: guild.format('SETTING_STATUS', { bool: Boolean(setting.silent) }, true),
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '》 Ignored channels',
|
||||||
|
value: setting.ignore.map((channel) => `<#${channel}>`).join(', ') || '`N/A`',
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '》 Role bypass',
|
||||||
|
value: setting.bypass.map((role) => `<@&${role}>`).join(', ') || '`N/A`',
|
||||||
|
inline: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '》 Actions',
|
||||||
|
value: setting.actions.reduce((acc, val) => {
|
||||||
|
let str = `**${val.type}**`;
|
||||||
|
if (val.points) str += ` (${val.points} points)`;
|
||||||
|
if (val.duration) str += ` for ${resolver.timeAgo(val.duration, true, true, true)}`;
|
||||||
|
if (val.force) str += ` - **FORCE**`;
|
||||||
|
if (val.prune) str += ` - **PRUNE**`;
|
||||||
|
str += `\n__**Triggers:**__ ${val.trigger instanceof Array ? val.trigger.join(', ') : '`' + val.trigger + '`'}`; //result.trigger instanceof Array ? result.trigger.join(', ') : result.trigger
|
||||||
|
acc.push(str);
|
||||||
|
return acc;
|
||||||
|
}, []).join('\n') || '`N/A`'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user