From 28884f5d5df5b4a24cefb0620d5224b4874b56e1 Mon Sep 17 00:00:00 2001 From: nolan Date: Sat, 23 May 2020 23:50:35 -0400 Subject: [PATCH 1/2] merging --- language/languages/en_us/en_us_general.lang | 2 +- structure/client/components/commands/utility/Settings.js | 2 +- structure/client/components/observers/CommandHandler.js | 2 +- structure/extensions/Guild.js | 9 +++++---- structure/extensions/Message.js | 5 ++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/language/languages/en_us/en_us_general.lang b/language/languages/en_us/en_us_general.lang index 4ab3f3c..513d465 100644 --- a/language/languages/en_us/en_us_general.lang +++ b/language/languages/en_us/en_us_general.lang @@ -7,7 +7,7 @@ switch({component}) { "setting"; break; case "inhibitor": - "inhibitor": + "inhibitor"; break; } diff --git a/structure/client/components/commands/utility/Settings.js b/structure/client/components/commands/utility/Settings.js index 40e3bcb..c8b52e1 100644 --- a/structure/client/components/commands/utility/Settings.js +++ b/structure/client/components/commands/utility/Settings.js @@ -94,7 +94,7 @@ class SettingsCommand extends Command { _listSettings(message, type, all) { if(!message.guild && type === 'GUILD') type = 'USER'; - const prefix = message.guild?.prefix || this.client._options.bot.prefix; //eslint-disable-line parsing-error + const prefix = message.guild?.prefix; let fields = []; const sorted = this.client.registry.components diff --git a/structure/client/components/observers/CommandHandler.js b/structure/client/components/observers/CommandHandler.js index 3011192..ea5114f 100644 --- a/structure/client/components/observers/CommandHandler.js +++ b/structure/client/components/observers/CommandHandler.js @@ -51,7 +51,7 @@ class CommandHandler extends Observer { async _getCommand(message, [arg1, arg2, ...args]) { if(message.guild) await message.guild.settings(); - const prefix = message.guild?.prefix || this.client._options.bot.prefix; + const prefix = message.guild?.prefix; let command = null; let remains = []; diff --git a/structure/extensions/Guild.js b/structure/extensions/Guild.js index 0573475..8c3e9a7 100644 --- a/structure/extensions/Guild.js +++ b/structure/extensions/Guild.js @@ -127,7 +127,7 @@ const Guild = Structures.extend('Guild', (Guild) => { async resolveMember(member, strict) { - return await this.client.resolver.resolveMembers(member, this, strict); + return this.client.resolver.resolveMembers(member, this, strict); } @@ -145,13 +145,13 @@ const Guild = Structures.extend('Guild', (Guild) => { async resolveRoles(roles, strict = false) { - return await this.client.resolver.resolveRoles(roles, this, strict); + return this.client.resolver.resolveRoles(roles, this, strict); } async resolveRole(role, strict) { - return await this.client.resolver.resolveRole(role, this, strict); + return this.client.resolver.resolveRole(role, this, strict); } @@ -167,7 +167,8 @@ const Guild = Structures.extend('Guild', (Guild) => { } get prefix() { - return this._settings.prefix; + return this._settings.prefix + || this.client._options.bot.prefix; } } diff --git a/structure/extensions/Message.js b/structure/extensions/Message.js index efcbbb6..595e748 100644 --- a/structure/extensions/Message.js +++ b/structure/extensions/Message.js @@ -27,7 +27,7 @@ const Message = Structures.extend('Message', (Message) => { let language = 'en_us'; if(this.guild && this.guild._settings.locale) language = this.guild._settings.locale; - parameters.prefix = this.guild?.prefix || this.client._options.bot.prefix; + parameters.prefix = this.guild?.prefix; let template = this.client.localeLoader.template(language, index); //.languages[language][index]; if(!template) { @@ -125,8 +125,7 @@ const Message = Structures.extend('Message', (Message) => { ? comp : this.command; - const prefix = this.guild?.prefix - || this.client._options.bot.prefix; + const prefix = this.guild?.prefix; let fields = []; if(component.examples.length > 0) { From 0444145e28b7aab2f88fa7a3932adfec3e9a4c48 Mon Sep 17 00:00:00 2001 From: nolan Date: Sun, 24 May 2020 04:54:33 -0400 Subject: [PATCH 2/2] permissionType setting --- language/LocaleLoader.js | 19 +++--- .../en_us/arguments/en_us_utility.lang | 5 +- .../en_us/commands/en_us_utility.lang | 4 ++ .../en_us/settings/en_us_moderation.lang | 46 +++++-------- .../en_us/settings/en_us_utility.lang | 28 ++++++++ structure/client/Resolver.js | 8 --- .../components/commands/utility/Settings.js | 34 ++++++++-- .../moderation/{Chatlogs.js => MessageLog.js} | 68 ++++++++++--------- .../{Modlogs.js => ModerationLog.js} | 39 ++++++----- .../components/settings/moderation/Mute.js | 2 +- .../settings/utility/PermissionType.js | 55 ++++++++------- structure/extensions/Message.js | 2 +- 12 files changed, 177 insertions(+), 133 deletions(-) rename structure/client/components/settings/moderation/{Chatlogs.js => MessageLog.js} (72%) rename structure/client/components/settings/moderation/{Modlogs.js => ModerationLog.js} (64%) diff --git a/language/LocaleLoader.js b/language/LocaleLoader.js index 5b06f98..fa4304a 100644 --- a/language/LocaleLoader.js +++ b/language/LocaleLoader.js @@ -35,7 +35,7 @@ class LocaleLoader { const directory = path.join(process.cwd(), `language/languages/${language}`); const files = Util.readdirRecursive(directory); - let combined = {}; + const combined = {}; for(let file of files) { file = fs.readFileSync(file, { encoding: 'utf8' @@ -57,27 +57,26 @@ class LocaleLoader { let text = ''; for(const line of lines) { if(line.startsWith('//')) continue; - const matches = line.match(/\[([_A-Z0-9]{1,})]/, 'gi'); + const matches = line.match(/\[([_A-Z0-9]{1,})\]/u); if(matches) { if(matched) { parsed[matched] = text; - matched = matches[1]; + [, matched] = matches; text = ''; } else { - matched = matches[1]; + [, matched] = matches; } + } else if(matched) { + text += line; } else { - if(matched) { - text += line; - } else { - continue; - } + continue; } } parsed[matched] = text; for(const [ key, value ] of Object.entries(parsed)) { - parsed[key] = value.replace(/^(\r)|(\r){1,}$/g, ''); + parsed[key] = value.replace(/^(\r)|(\r){1,}$/gu, '') + .replace(/\r/gu, '\n'); } return parsed; diff --git a/language/languages/en_us/arguments/en_us_utility.lang b/language/languages/en_us/arguments/en_us_utility.lang index c59bdb1..17ca7fe 100644 --- a/language/languages/en_us/arguments/en_us_utility.lang +++ b/language/languages/en_us/arguments/en_us_utility.lang @@ -2,4 +2,7 @@ View or edit user-only settings. [A_ALL_SETTINGS_DESCRIPTION] -View all guild, user, or restricted settings. \ No newline at end of file +View all guild, user, or restricted settings. + +[A_RAW_SETTINGS_DESCRIPTION] +Upload a raw JSON file of all of the settings for your user or guild. \ No newline at end of file diff --git a/language/languages/en_us/commands/en_us_utility.lang b/language/languages/en_us/commands/en_us_utility.lang index 4138b8a..45113ca 100644 --- a/language/languages/en_us/commands/en_us_utility.lang +++ b/language/languages/en_us/commands/en_us_utility.lang @@ -47,6 +47,10 @@ Alternatively, you can view user settings by using the command `{prefix}settings [C_SETTINGS_NONEXISTANT] That setting does not exist! +[C_SETTINGS_JSON] +Attached the JSON-formatted settings file in the file below. +You may want to format this file for your viewing pleasure. + //User Command [C_USER_DESCRIPTION] diff --git a/language/languages/en_us/settings/en_us_moderation.lang b/language/languages/en_us/settings/en_us_moderation.lang index 3a6ece6..bf4007b 100644 --- a/language/languages/en_us/settings/en_us_moderation.lang +++ b/language/languages/en_us/settings/en_us_moderation.lang @@ -3,52 +3,52 @@ [S_MODERATIONLOG_DESCRIPTION] Define the channel to which moderation logs are sent. The setting also allows you to exclude types of actions from being logged in the channel. -[S_MODLOGS_CHANNEL404] +[S_MODERATIONLOG_CHANNEL404] {val} does not resolve into a channel. -[S_MODLOGS_CHANNEL_SUCCESS] +[S_MODERATIONLOG_CHANNEL_SUCCESS] Successfully set the modlogs channel to {channel}. -[S_MODLOGS_ARGS404] +[S_MODERATIONLOG_ARGS404] Missing arguments. -[S_MODLOGS_LIST] +[S_MODERATIONLOG_LIST] The following infractions are set to be logged: `{list}` -[S_MODLOGS_REMOVE] +[S_MODERATIONLOG_REMOVE] The followin infraction types will no longer be logged: `{list}` -[S_MODLOGS_ADD] +[S_MODERATIONLOG_ADD] The followin infraction types will now be logged: `{list}` //CHATLOGS SETTING -[S_CHATLOGS_DESCRIPTION] +[S_MESSAGELOG_DESCRIPTION] Configure message logging for your server. -[S_CHATLOGS_ROLES_LIST] +[S_MESSAGELOG_ROLES_LIST] The following roles are ignored by chatlogs: {roles} -[S_CHATLOGS_CHANNELS_LIST] +[S_MESSAGELOG_CHANNELS_LIST] The following channels are ignored by chatlogs: {channels} -[S_CHATLOGS_ROLES] +[S_MESSAGELOG_ROLES] Successfully {action} the following roles: {changed} -[S_CHATLOGS_CHANNELS] +[S_MESSAGELOG_CHANNELS] Successfully {action} the following channels: {changed} -[S_CHATLOGS_ATTACHMENTS] +[S_MESSAGELOG_ATTACHMENTS] Successfully turned attachment logging {changed} -[S_CHATLOGS_TOGGLE] +[S_MESSAGELOG_TOGGLE] switch({toggle}) { case true: 'on'; @@ -58,13 +58,14 @@ switch({toggle}) { break; } -[S_CHATLOGS_RESET] +[S_MESSAGELOG_RESET] Successfully reset the chatlogs setting. //mute Setting [S_MUTE_DESCRIPTION] -Assign or create a muted role and choose mute functionality for your guild. +Assign or create a muted role and choose mute functionality for your guild. Creating permissions for a role could take longer depending on the amount of channels. + __Mute Types__ **`0`:** Mutes only add/remove the muted role. *(default)* **`1`:** Mutes remove all roles except for the muted role. @@ -119,17 +120,4 @@ Successfully {type} the **mute role** to `{role}`. **Permissions have been applied to all possible channels.** [S_MUTE_UNGENERATEDPERMISSIONS] -**None of the permissions have been changed.** - - -[S_MUTEDROLE_MISSINGPERMISSION] -The bot must have the `MANAGE_ROLES` permission to create a new muted role in the guild. - -[S_MUTEDROLE_ERRORCREATE] -There was an issue creating the muted role for your guild. - -[S_MUTEDROLE_CANNOTFIND] -I cannot find a role name with those arguments. If you would like to create a new one, use the command `{prefix}settings mute create`. - -[S_MUTEDROLE_SUCCESS] -Successfully set the muted role to `{role}`. \ No newline at end of file +**None of the permissions have been changed.** \ No newline at end of file diff --git a/language/languages/en_us/settings/en_us_utility.lang b/language/languages/en_us/settings/en_us_utility.lang index 1864f0f..91e37bd 100644 --- a/language/languages/en_us/settings/en_us_utility.lang +++ b/language/languages/en_us/settings/en_us_utility.lang @@ -18,7 +18,35 @@ The guild prefix cannot include spaces. [S_GUILDPREFIX_RESET] Successfully reset the guild prefix to `{prefix}`. +//permissionType Setting +[S_PERMISSIONTYPE_DESCRIPTION] +Changes how permissions will be regarded for bot commands. +__Permission Types__ +**`discord`:** Only discord-based permissions work with bot commands. +**`grant`:** Only grantable permissions from the bot work with bot commands. *(requires you to set everything up yourself)* +**`both`:** Both discord-based and grantable permissions work with bot commands. *(default)* + +[S_PERMISSIONTYPE_INVALIDTYPE] +The provided value is not a valid permission type; try: `discord`, `grant`, or `both`. +Use the command `{prefix}setting permissiontype` for more information. + +[S_PERMISSIONTYPE_SUCCESS] +Successfully set permission type to `{type}`. +**{description}** + +[S_PERMISSIONTYPE_DESCRIPTIONS] +switch('{type}') { + case 'discord': + "Only discord-based permissions will work with bot commands." + break; + case 'grant': + "Only grantable permissions from the bot will work with bot commands." + break; + case 'both': + "Both discord-based and grantable permissions work with bot commands." + break; +} //User Settings \ No newline at end of file diff --git a/structure/client/Resolver.js b/structure/client/Resolver.js index 1a8436a..e28f4f5 100644 --- a/structure/client/Resolver.js +++ b/structure/client/Resolver.js @@ -32,14 +32,6 @@ class Resolver { } - // resolveTrue(input) { - // return [ 'on', 'true' ].includes(input.toLowerCase()); - // } - - // resolveFalse(input) { - // return [].includes(input.toLowerCase()); - // } - /** * Resolves methods used primarily for settings, also deals with appending the arguments into existing lists * diff --git a/structure/client/components/commands/utility/Settings.js b/structure/client/components/commands/utility/Settings.js index 8701d8d..92870c0 100644 --- a/structure/client/components/commands/utility/Settings.js +++ b/structure/client/components/commands/utility/Settings.js @@ -1,3 +1,4 @@ +const { MessageAttachment } = require('discord.js'); const { Command } = require('../../../../interfaces'); const { stripIndents } = require('common-tags'); @@ -26,13 +27,24 @@ class SettingsCommand extends Command { type: 'BOOLEAN', types: ['VERBAL', 'FLAG'], default: true + }, + { + name: 'raw', + aliases: ['json'], + type: 'BOOLEAN', + types: ['VERBAL', 'FLAG'], + default: true } ], showUsage: true, examples: [ 'prefix !', 'modlogs #channel' - ] + ], + throttling: { + usages: 1, + duration: 3 + } }); this.client = client; @@ -44,6 +56,8 @@ class SettingsCommand extends Command { const type = (!message.guild || args.user) ? 'USER' : 'GUILD'; + if(args.raw) return this._showRaw(message, type); + const target = params[0].toLowerCase(); // params[0] should never be null, see showUsage if(target === 'list') { this._listSettings(message, type, Boolean(args.all)); @@ -52,9 +66,6 @@ class SettingsCommand extends Command { if(type === 'GUILD' && !this._checkAdministrator(message)) return undefined; //does not have admin const prompt = await message.prompt(message.format('C_SETTINGS_RESET', { type: type.toLowerCase() }), { emoji: 'warning' }); return await this._handleReset(prompt, message, type); - } else if(target === 'walkthrough') { - //TODO - return undefined; } const settings = this.client.resolver.components(target, 'setting', false).sort(c=>c.resolve === type); @@ -143,7 +154,7 @@ class SettingsCommand extends Command { ${message.format(setting.description)}`; if(setting.examples.length > 0) { - description += `\n\n**${message.format('GENERAL_EXAMPLES')}**`; + description += `\n\n__${message.format('GENERAL_EXAMPLES')}__`; for(let example of setting.examples) { description += `\n\`${prefix}settings ${example}\``; } @@ -181,6 +192,19 @@ class SettingsCommand extends Command { } + async _showRaw(message, type) { + + const settings = type === 'USER' + ? message.author._settings + : message.guild._settings; + + const string = JSON.stringify(settings); + const attachment = new MessageAttachment(Buffer.from(string), "settings.json"); + + return await message.respond(message.format('C_SETTINGS_JSON'), { emoji: 'success', attachments: [ attachment ] }) + + } + _checkAdministrator(message) { const missing = message.channel.permissionsFor(message.member).missing(['ADMINISTRATOR']); if(missing > 0) { diff --git a/structure/client/components/settings/moderation/Chatlogs.js b/structure/client/components/settings/moderation/MessageLog.js similarity index 72% rename from structure/client/components/settings/moderation/Chatlogs.js rename to structure/client/components/settings/moderation/MessageLog.js index b4cc781..43db6e6 100644 --- a/structure/client/components/settings/moderation/Chatlogs.js +++ b/structure/client/components/settings/moderation/MessageLog.js @@ -1,30 +1,32 @@ const { Setting } = require('../../../../interfaces/'); -class Chatlogs extends Setting { +class MessageLogsSetting extends Setting { constructor(client) { super(client, { - name: 'messageLogs', + name: 'messageLog', module: 'moderation', index: 'chatlogs', aliases: [ 'chatLog', 'chatLogs', - 'msgLogs' + 'msgLogs', + 'messageLogs', + 'msgLog' ], guarded: true, resolve: 'GUILD', examples: [ - 'chatlogs roles ', - 'chatlogs channels ', - 'chatlogs reset', - 'chatlogs attachments ', - 'chatlogs #channel' + 'msglog roles ', + 'msglog channels ', + 'msglog reset', + 'msglog attachments ', + 'msglog #channel' ], default: { - chatlogs: { - channel: undefined, + messageLog: { + channel: null, ignoredChannels: [], ignoredRoles: [], attachments: false @@ -44,10 +46,10 @@ class Chatlogs extends Setting { let [method, ...args] = params; method = method.toLowerCase(); - const setting = message.guild._settings.chatlogs || this.default.chatlogs; + const setting = message.guild._settings[this.index]; const { guild } = message; - if (method === 'roles') { + if (['roles', 'role', 'ignoredrole', 'ignoredroles'].includes(method)) { const response = this.resolveMethod(args); @@ -59,7 +61,7 @@ class Chatlogs extends Setting { setting.ignoredRoles = [...setting.ignoredRoles, ...roles.filter(r => !setting.ignoredRoles.includes(r.id)).map(r => r.id)]; action = 'GENERAL_ADDED'; - index = 'S_CHATLOGS_ROLES'; + index = 'S_MESSAGELOG_ROLES'; changes = roles.map(r => r.name); } else if (response.method === 'remove') { @@ -69,14 +71,14 @@ class Chatlogs extends Setting { setting.ignoredRoles = setting.ignoredRoles.filter(r => !_roles.includes(r)); action = 'GENERAL_REMOVED'; - index = 'S_CHATLOGS_ROLES'; + index = 'S_MESSAGELOG_ROLES'; changes = roles.map(r => r.name); } else if (response.method === 'list') { const roles = await guild.resolveRoles(setting.ignoredRoles); return { - msg: message.format('S_CHATLOGS_ROLES_LIST', { roles: roles.map(r => r.name).join(', ') }) + msg: message.format('S_MESSAGELOG_ROLES_LIST', { roles: roles.map(r => r.name).join(', ') }) }; } @@ -87,7 +89,7 @@ class Chatlogs extends Setting { }; } - } else if (method === 'channels') { + } else if (['channels', 'channel', 'ignoredchannels', 'ignoredchannel'].includes(method)) { const response = this.resolveMethod(args); @@ -99,7 +101,7 @@ class Chatlogs extends Setting { setting.ignoredChannels = [...setting.ignoredChannels, ...channels.filter(c => !setting.ignoredChannels.includes(c.id)).map(c => c.id)]; action = 'GENERAL_ADDED'; - index = 'S_CHATLOGS_CHANNELS'; + index = 'S_MESSAGELOG_CHANNELS'; changes = channels.map(c => c.name); } else if (response.method === 'remove') { @@ -109,12 +111,12 @@ class Chatlogs extends Setting { setting.ignoredChannels = setting.ignoredChannels.filter(c => !_channels.includes(c)); action = 'GENERAL_REMOVED'; - index = 'S_CHATLOGS_CHANNELS'; + index = 'S_MESSAGELOG_CHANNELS'; changes = channels.map(c => c.name); } else if (response.method === 'list') { return { - msg: message.format('S_CHATLOGS_LIST') + msg: message.format('S_MESSAGELOG_LIST') }; } @@ -123,12 +125,12 @@ class Chatlogs extends Setting { } else { const channels = guild.resolveChannels(setting.ignoredChannels); return { - msg: message.format('S_CHATLOGS_ROLES_LIST', { roles: channels.map(r => r.name).join(', ') }) + msg: message.format('S_MESSAGELOG_ROLES_LIST', { roles: channels.map(r => r.name).join(', ') }) }; } - } else if (method === 'attachments') { + } else if (['attachments', 'images', 'attachment', 'image'].includes(method)) { if (guild.premium < 2) return { msg: message.format('PREMIUM_2', { tier: guild.premium }), @@ -141,14 +143,14 @@ class Chatlogs extends Setting { if (result) { setting.attachments = true; - index = 'S_CHATLOGS_ATTACHMENTS'; - changes = message.format('S_CHATLOGS_TOGGLE', { toggle: true }, true); + index = 'S_MESSAGELOG_ATTACHMENTS'; + changes = message.format('S_MESSAGELOG_TOGGLE', { toggle: true }, true); } else { setting.attachments = false; - index = 'S_CHATLOGS_ATTACHMENTS'; - changes = message.format('S_CHATLOGS_TOGGLE', { toggle: false }, true); + index = 'S_MESSAGELOG_ATTACHMENTS'; + changes = message.format('S_MESSAGELOG_TOGGLE', { toggle: false }, true); } @@ -156,7 +158,7 @@ class Chatlogs extends Setting { const channel = message.guild.resolveChannel(args[0]); if (!channel) return { - msg: message.format('S_CHATLOGS_CHANNEL404'), + msg: message.format('S_MESSAGELOG_CHANNEL404'), error: true }; @@ -175,18 +177,18 @@ class Chatlogs extends Setting { const roles = guild._settings[this.index]?.ignoredRoles ? await Promise.all(guild._settings[this.index].ignoredRoles.map(async (role) => guild.resolveRole(role))) : undefined; return [ { - name: 'Channel', - value: guild.resolveChannel(guild._settings[this.index]?.channel) || 'N/A', + name: '》Channel', + value: guild.resolveChannel(guild._settings[this.index]?.channel) || '`N/A`', inline: true }, { - name: 'Ignored roles', - value: roles?.map((r) => r.name).join(', ') || 'N/A', + name: '》Ignored Roles', + value: roles?.map((r) => r.name).join(', ') || '`N/A`', inline: true }, { - name: 'Ignored channels', - value: guild._settings[this.index]?.ignoredChannels.map((c) => guild.resolveChannel(c).name).join(', ') || 'N/A', + name: '》Ignored Channels', + value: guild._settings[this.index]?.ignoredChannels.map((c) => guild.resolveChannel(c).name).join(', ') || '`N/A`', inline: true } ]; @@ -194,4 +196,4 @@ class Chatlogs extends Setting { } -module.exports = Chatlogs; \ No newline at end of file +module.exports = MessageLogsSetting; \ No newline at end of file diff --git a/structure/client/components/settings/moderation/Modlogs.js b/structure/client/components/settings/moderation/ModerationLog.js similarity index 64% rename from structure/client/components/settings/moderation/Modlogs.js rename to structure/client/components/settings/moderation/ModerationLog.js index 4f285fd..5e1fbea 100644 --- a/structure/client/components/settings/moderation/Modlogs.js +++ b/structure/client/components/settings/moderation/ModerationLog.js @@ -1,10 +1,10 @@ const { Setting } = require('../../../../interfaces/'); const CONSTANTS = { - INFRACTIONS: ['note', 'warn', 'mute', 'unmute', 'lockdown', 'lockdownend', 'kick', 'ban', 'unban', 'vcmute', 'vcunmute', 'vckick', 'vcban', 'vcunban', 'prune', 'slowmode', 'dehoist', 'addrole', 'removerole', 'nickname'] + INFRACTIONS: ['note', 'warn', 'mute', 'unmute', 'lockdown', 'unlockdown', 'kick', 'ban', 'unban', 'vcmute', 'vcunmute', 'vckick', 'vcban', 'vcunban', 'prune', 'slowmode', 'dehoist', 'addrole', 'removerole', 'nickname'] }; -class Modlogs extends Setting { +class ModerationLogsSetting extends Setting { constructor(client) { @@ -18,16 +18,15 @@ class Modlogs extends Setting { ], guarded: true, resolve: 'GUILD', - index: 'modlogs', examples: [ - 'modlogs ', - 'modlogs #moderation-log', - 'modlogs reset' + 'modlog ', + 'modlog #moderation-log', + 'modlog reset' ], default: { - modlogs: { - channel: undefined, - infractions: ['warn','mute','unmute','lockdown','lockdownend','kick','ban','unban','vcmute','vcunmute','vckick','vcban','vcunban'] + moderationLog: { + channel: null, + infractions: ['warn','mute','unmute','lockdown','unlockdown','kick','ban','unban','vcmute','vcunmute','vckick','vcban','vcunban'] } } }); @@ -44,20 +43,20 @@ class Modlogs extends Setting { if (response) { if (args.length < 2 && response.method !== 'list') return { - msg: message.format('S_MODLOGS_ARGS404'), + msg: message.format('S_MODERATIONLOG_ARGS404'), error: true } let index; if (response.method === 'add') { setting.infractions = response.result; - index = 'S_MODLOGS_ADD'; + index = 'S_MODERATIONLOG_ADD'; } else if (response.method === 'remove') { setting.infractions = response.result; - index = 'S_MODLOGS_REMOVE'; + index = 'S_MODERATIONLOG_REMOVE'; } else if (response.method === 'list') { return { - msg: message.format('S_MODLOGS_LIST', { list: setting.infractions.join('`, `') }) + msg: message.format('S_MODERATIONLOG_LIST', { list: setting.infractions.join('`, `') }) } } @@ -70,13 +69,13 @@ class Modlogs extends Setting { channel = message.guild.resolveChannel(channel); if (!channel) return { - msg: message.format('S_MODLOGS_CHANNEL404', { val: params[0] }), + msg: message.format('S_MODERATIONLOG_CHANNEL404', { val: params[0] }), error: true }; setting.channel = channel.id; await message.guild._updateSettings({ [this.index]: setting }); return { - msg: message.format('S_MODLOGS_CHANNEL_SUCCESS', { channel: channel.name }), + msg: message.format('S_MODERATIONLOG_CHANNEL_SUCCESS', { channel: channel.name }), error: false }; @@ -87,13 +86,13 @@ class Modlogs extends Setting { fields(guild) { return [ { - name: 'Channel', - value: guild.resolveChannel(guild._settings[this.index]?.channel) || 'N/A', + name: '》Channel', + value: guild.resolveChannel(guild._settings[this.index]?.channel) || '`N/A`', inline: true }, { - name: 'Enabled infractions', - value: guild._settings[this.index]?.infractions.join(', ') || 'N/A', + name: '》Logged Infractions', + value: guild._settings[this.index].infractions.map(i=>`\`${i}\``).join(', ') || '`N/A`', inline: true } ]; @@ -101,4 +100,4 @@ class Modlogs extends Setting { } -module.exports = Modlogs; \ No newline at end of file +module.exports = ModerationLogsSetting; \ No newline at end of file diff --git a/structure/client/components/settings/moderation/Mute.js b/structure/client/components/settings/moderation/Mute.js index 2465368..c5eadeb 100644 --- a/structure/client/components/settings/moderation/Mute.js +++ b/structure/client/components/settings/moderation/Mute.js @@ -30,7 +30,7 @@ class MuteSetting extends Setting { default: true } ], - usage: '[test] ', + usage: '[type|role|create] [muted-role|mute-type]', examples: [ 'muterole Muted', 'mutetype 1', diff --git a/structure/client/components/settings/utility/PermissionType.js b/structure/client/components/settings/utility/PermissionType.js index 6af23d2..9858464 100644 --- a/structure/client/components/settings/utility/PermissionType.js +++ b/structure/client/components/settings/utility/PermissionType.js @@ -1,5 +1,13 @@ const { Setting } = require('../../../../interfaces/'); +const Constants = { + Types: { + 'discord': ['discord'], + 'grant': ['grantable', 'grant', 'grants'], + 'both': ['combined, both'] + } +}; + class PermissionTypeSetting extends Setting { constructor(client) { @@ -7,13 +15,17 @@ class PermissionTypeSetting extends Setting { super(client, { name: 'permissionType', module: 'utility', - aliases: ['permission'], + aliases: ['permission', 'permissionTypes', 'permissions', 'perm'], + usage: "[permission-type]", guarded: true, resolve: 'GUILD', default: { - permissionType: 2 + permissionType: 'both' }, - custom: true + examples: [ + 'permissiontype [discord|grant|both]', + 'permissiontype reset' + ] }); this.client = client; @@ -21,23 +33,24 @@ class PermissionTypeSetting extends Setting { } async handle(message, params) { + + const parameters = params.join(' ').toLowerCase(); - const [prefix] = params; - - const MaxCharacters = 6; - if(prefix.length > MaxCharacters) return { - msg: message.format('S_GUILDPREFIX_LENGTH', { length: prefix.length, max: MaxCharacters }), + let type = null; + for(const [ key, value ] of Object.entries(Constants.Types)) { + if(value.includes(parameters)) type = key; + } + + if(!type) return { + msg: message.format('S_PERMISSIONTYPE_INVALIDTYPE'), error: true }; - if(prefix.includes(' ')) return { - msg: message.format('S_GUILDPREFIX_SPACES'), - error: true - }; + await message.guild._updateSettings({ [this.index]: type }); - await message.guild._updateSettings({ [this.index]: prefix }); + const description = message.format('S_PERMISSIONTYPE_DESCRIPTIONS', { type }, true); return { - msg: message.format('S_GUILDPREFIX_SUCCESS', { prefix }), + msg: `${message.format('S_PERMISSIONTYPE_SUCCESS', { type, description })}`, error: false }; @@ -46,20 +59,12 @@ class PermissionTypeSetting extends Setting { fields(guild) { return [ { - name: '》Prefix', - value: `\`${guild.prefix}\`` + name: '》Permission Type', + value: `\`${guild._settings.permissionType}\`` } ]; } } -module.exports = PermissionTypeSetting; - -const Constants = { //eslint-disable-line no-unused-vars - Types: { - 'discord': 0, - 'grants': 1, - 'both': 2 - } -}; \ No newline at end of file +module.exports = PermissionTypeSetting; \ No newline at end of file diff --git a/structure/extensions/Message.js b/structure/extensions/Message.js index 595e748..fb2cb1d 100644 --- a/structure/extensions/Message.js +++ b/structure/extensions/Message.js @@ -52,7 +52,7 @@ const Message = Structures.extend('Message', (Message) => { async resolve() { - if (this.command.showUsage && !this.parameters.length) { + if (this.command.showUsage && !this.parameters.length && !Object.values(this.args).length) { return this._showUsage(); }