From 5c79a0e617a4ec7ced20ea5a6dd7186c008bc88b Mon Sep 17 00:00:00 2001 From: Tobiah Date: Mon, 20 Jan 2020 14:11:46 -0600 Subject: [PATCH] feat: role/channel statistics mappings, linting --- commands.json | 2 +- src/EventHandler.js | 3 +- src/bot.js | 3 +- src/commands/Roles/TrackRole.js | 55 +++++++++++++++++++ src/commands/Roles/UntrackRole.js | 48 ++++++++++++++++ src/commands/Settings/Enable.js | 4 +- src/commands/Settings/Settings.js | 13 +++++ src/eventHandlers/Ready.js | 4 +- src/eventHandlers/UpdateGuildStatistics.js | 26 +++++++++ .../DatabaseQueries/StatisticsQueries.js | 37 +++++++++++++ 10 files changed, 188 insertions(+), 7 deletions(-) create mode 100644 src/commands/Roles/TrackRole.js create mode 100644 src/commands/Roles/UntrackRole.js create mode 100644 src/eventHandlers/UpdateGuildStatistics.js create mode 100644 src/settings/DatabaseQueries/StatisticsQueries.js diff --git a/commands.json b/commands.json index cffd887e6..f6d5f4783 100644 --- a/commands.json +++ b/commands.json @@ -1 +1 @@ -[{"id":"core.blacklist.add","call":"bl add","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^bl add\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Blacklist/AddUser.js","usages":[{"description":"Add a user to this server's blacklist, preventing the user from calling commands.","parameters":["user"]},{"description":"Add a user to the global blacklist. Owner only. `--global` or `-g` specify global","parameters":["user","--global","-g"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.blacklist.remove","call":"bl remove","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^bl remove\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Blacklist/DeleteUser.js","usages":[{"description":"Remove a user from this server's blacklist.","parameters":["user"]},{"description":"Remove a user from the global blacklist. Owner only. `--global` or `-g` specify global","parameters":["user","--global","-g"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.blacklist.list","call":"bl ls","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^(?:bl ls?|bl list)"},"path":"Blacklist/ListUsers.js","usages":[{"description":"List users in the blacklist","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"builds.add","call":"add build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:add build|ab)\\s?(.+)?"},"path":"Builds/AddBuild.js","usages":[{"description":"Display instructions for creating a new build with Genesis","parameters":[]},{"description":"Add a build with the provided title, body, and image URL","parameters":["title","body","image url"],"delimBefore":" ","delimAfter":" ","separator":" | "},{"description":"Add one or more builds from a structured json file. [Example file.](https://pastebin.com/raw/EU9ZX1uQ)","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.delete","call":"delete build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:delete build|db)\\s?(.+)?"},"path":"Builds/DeleteBuild.js","usages":[{"description":"Delete an existing build from Genesis","parameters":["build id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.get","call":"get build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:get build|gb)\\s?(.+)?"},"path":"Builds/GetBuild.js","usages":[{"description":"Display information on an existing build from Genesis","parameters":["build id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.list","call":"list builds","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:list builds|lb)\\s?(.+)?"},"path":"Builds/ListBuilds.js","usages":[{"description":"Display information on an existing build from Genesis. `|` separates title, body, and image. `;` separates sections in the body.","parameters":["title | body | image"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.search","call":"search builds","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:search builds|sb)\\s?(.+)?"},"path":"Builds/SearchBuilds.js","usages":[{"description":"Display information on an existing build from Genesis","parameters":["query"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.setpublic","call":"set public build|spb","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:set public build|spb)\\s?(.+)?"},"path":"Builds/SetBuildPublic.js","usages":[{"description":"Set a build or builds to be public","parameters":["build id(s)","on/off"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.set","call":"set build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^set build(?:\\s+(all|title|body|image)\\s+(.+))?"},"path":"Builds/SetField.js","usages":[{"description":"Edit a field on the build. `|` is only between build Id and following parameters.","parameters":["type (all, title, body, image)","buildId","title\\*","body\\*","image\\*"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"core.bug","call":"bug","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^bug\\s*(.*)?"},"path":"Core/Bug.js","usages":[{"description":"Send a bug report to bot owner","parameters":["bug report"]},{"description":"Send a bug report to bot owner with subject, message, and optional screenshot. The `|` are important.","parameters":["subject","body","* screenshot"],"separator":" | "},{"description":"Send a bug report to bot owner with subject, message, and optional screenshot. The `|` are important.","parameters":["subject","body","attached image"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.help","call":"help","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^help(?:\\s(.*)?)?$"},"path":"Core/Help.js","usages":[{"description":"Receive the full welcome data by visiting the provided link.","parameters":[]},{"description":"Query for info about a specific command","parameters":["command search"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.info","call":"info","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^infos?$"},"path":"Core/Info.js","usages":[{"description":"Information about the bot","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.invitation","call":"invitation","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"^invitation$"},"path":"Core/Invite.js","usages":[{"description":"Send Invitation Link to Authorize Bot to Join a Server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.ping","call":"ping","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^pings?$"},"path":"Core/Ping.js","usages":[{"description":"Ping Genesis to test connectivity","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.reset","call":"reset","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^resets?$"},"path":"Core/Reset.js","usages":[{"description":"Reset the settings for this guild","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.support","call":"support","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^supports?$"},"path":"Core/Support.js","usages":[{"description":"Support info about the bot","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"customcommands.add","call":"add cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add cc\\s+(\\w+)?\\s?([\\s\\S]*)"},"path":"CustomCommands/AddCustomCommand.js","usages":[{"description":"Add a custom command","parameters":["command call","command response"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"customcommands.delete","call":"delete cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete cc\\s+(\\w+)?$"},"path":"CustomCommands/DeleteCustomCommand.js","usages":[{"description":"Delete a custom command","parameters":["command call"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.cc.list","call":"list cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^list ccs?$"},"path":"CustomCommands/ListCustomCommand.js","usages":[{"description":"List custom commands for this guild","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.cc.ping","call":"ping cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^ping cc\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"CustomCommands/PingCustomCommand.js","usages":[{"description":"Change if this channel's use custom commands will ping","parameters":["custom commands enabled"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"customcommands.update","call":"update cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^update cc\\s+(?:(call|response)\\s(\\w+)\\s(.*))?$"},"path":"CustomCommands/UpdateCustomCommand.js","usages":[{"description":"Update a custom command","parameters":["param","command call","new param value"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.addDefaultRole","call":"add default role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add default role\\s?undefined?$"},"path":"DefaultRoles/AddDefaultRole.js","usages":[{"description":"Add a new default role for persons joining the server.","parameters":["role id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.clearDefaultRoles","call":"clear default roles","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear default roless?$"},"path":"DefaultRoles/ClearDefaultRoles.js","usages":[{"description":"Clears all default roles for the server.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.deleteDefaultRole","call":"delete default role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete default role\\s?undefined?$"},"path":"DefaultRoles/DeleteDefaultRole.js","usages":[{"description":"Add a new default role for persons joining the server.","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"Destiny2.d2code","call":"d2code","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2codes?$"},"path":"Destiny2/Destiny2Code.js","usages":[{"description":"Outputs a random D2 Grimore card to the specified user","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"dynamicchannels.add","call":"templates add","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates add\\s?(?:(?:<#)?(\\d+)(?:>)?)?(?:\\s+(--relay))?$"},"path":"DynamicChannels/AddTemplateChannel.js","usages":[{"description":"Add a template channel. If `--relay` is specified, it will use relay naming.","parameters":["channel mention","--relay"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.delete","call":"templates delete","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates delete\\s?(?:(?:<#)?(\\d+)(?:>)?)?$"},"path":"DynamicChannels/DeleteTemplateChannel.js","usages":[{"description":"Remove a template channel","parameters":["channel mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.list","call":"templates list","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates lists?$"},"path":"DynamicChannels/ListTemplateChannels.js","usages":[{"description":"List Template Channels","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.template","call":"templates set","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates set\\s?(?:(?:<#)?(\\d{15,20})(?:>)?)?(?:\\s+(.*))?$"},"path":"DynamicChannels/SetTemplate.js","usages":[{"description":"Set a channel template's name template. `$username` is available as a replacement for using the name of the user that generated the channel.","parameters":["channel mention","name template"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"giveaways.add","call":"g start","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^g start"},"path":"Giveaways/StartGiveaway.js","usages":[{"description":"Start a giveaway. Format: `/g start 2w 1 Awesome Prize!`","parameters":["time","winners","*channel","prize"]}],"blacklistable":true,"enabled":true,"game":"GIVEAWAYS"},{"id":"giveaways.stop","call":"g stop","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^g stop\\s(?:(?:<#)?(\\d{15,20})(?:>)?)"},"path":"Giveaways/StopGiveaway.js","usages":[{"description":"Stop a giveaway.","parameters":["giveaway message id"]}],"blacklistable":true,"enabled":true,"game":"GIVEAWAYS"},{"id":"inline.warframe.info","call":"[Query]","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"\\[(.*?)\\]"},"path":"Info/ItemEmbeddedInline.js","usages":[{"description":"Get stats for a Warframe","parameters":["[warframe name]"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"lfg.add","call":"lfg|hosting|lfm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:lfg|hosting|lfm)(?!elp)\\s?(.+)?"},"path":"LFG/LFG.js","usages":[{"description":"Submit an LFG request to this guild's LFG channel.","parameters":["place","time","for","platform\\*","expiry\\*","members\\*"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.lfgChannel","call":"set lfg channel","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set lfg channel(.*)"},"path":"LFG/SetLFGChannel.js","usages":[{"description":"Set the LFG channel","parameters":["platform","channel id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"warframe.misc.arcane","call":"arcane","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^arcane(.+)?"},"path":"Ondemand/Arcane.js","usages":[{"description":"Get information about an Arcane Enhancement","parameters":["enhancement name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.armor","call":"armor","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^armor(?:\\s+([\\d+\\.?\\d*\\s]+))?"},"path":"Ondemand/Armor.js","usages":[{"description":"Display instructions for calculating armor","parameters":[]},{"description":"Display current damage resistance and amount of corrosive procs required to strip it.","parameters":["current armor"]},{"description":"Display the current armor, damage resistance, and necessary corrosive procs to strip armor.","parameters":["base armor","base level","current level"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.buildchart","call":"buildchart","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^buildcharts?$"},"path":"Ondemand/BuildChart.js","usages":[{"description":"Display Weapon Build Flowchart chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.damage","call":"damage","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^damages?$"},"path":"Ondemand/Damage.js","usages":[{"description":"Display Damage 2.0 chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.efficiency","call":"efficiency","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^efficiencys?$"},"path":"Ondemand/Efficiency.js","usages":[{"description":"Display Warframe Efficiency Chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.enemystats","call":"enemy","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^enemy\\s?(.+)?"},"path":"Ondemand/Enemy.js","usages":[{"description":"Get stats for an enemy","parameters":["enemy name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.stats","call":"frame","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^frame\\s?(.+)?"},"path":"Ondemand/FrameStats.js","usages":[{"description":"Get stats for a Warframe","parameters":["warframe name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.mod","call":"mod","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^mod(.+)"},"path":"Ondemand/Mod.js","usages":[{"description":"Search the Warframe Wiki for a mod's image","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.pricecheck","call":"pricecheck","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^p(?:rice)?\\s?c(?:heck)?(?:\\s+([\\w+\\s]+))?"},"path":"Ondemand/Pricecheck.js","usages":[{"description":"Display an items worth from nexus-stats.com","parameters":["item"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.progress","call":"progress","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^progresss?$"},"path":"Ondemand/Progression.js","usages":[{"description":"Display Warframe Progression Chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.rivens","call":"riven","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^riven\\s?(.+)?"},"path":"Ondemand/RivenStats.js","usages":[{"description":"Get stats for a Weapon riven","parameters":["riven name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.calculations.shields","call":"shields","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^shield(?: +([\\d+\\.?\\d* ]+))?"},"path":"Ondemand/Shields.js","usages":[{"description":"Display an enemy's current shields.","parameters":["base shields","base level","current level"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.tutorial","call":"tutorial","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^tutorials?\\s?(.+)?"},"path":"Ondemand/Tutorial.js","usages":[{"description":"Get a Warframe Tutorial Video","parameters":["subject"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.weaponstats","call":"weapon","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^weapon\\s?(.+)?"},"path":"Ondemand/Weapon.js","usages":[{"description":"Get stats for a weapon","parameters":["weapon name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.whatsin","call":"whatsin","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^whatsin(?:\\s+(axi|neo|meso|lith)\\s?(\\w\\d+))?"},"path":"Ondemand/Whatsin.js","usages":[{"description":"Display what drops from a relic","parameters":["relic"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.whereis","call":"whereis","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^where\\s?(?:is\\s?)?(.+)?"},"path":"Ondemand/WhereIs.js","usages":[{"description":"Display where something drops from","parameters":["item"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.wiki","call":"wiki","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^wiki\\s*([\\w\\s-]+)?"},"path":"Ondemand/Wiki.js","usages":[{"description":"Search the Warframe wiki for a specific topic","parameters":["topic"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"core.avatar","call":"avatar","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^avatar\\s*(.*)?"},"path":"Owner/Avatar.js","usages":[{"description":"Set the bot's avatar url","parameters":["avatar url"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.webhooks.delete","call":"delete webhook in","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^delete webhook in\\s*(.*)?"},"path":"Owner/DeleteWebhook.js","usages":[{"description":"Delete the webhook for a given channel id","parameters":["channel id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.diag","call":"diag","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^diags?$"},"path":"Owner/Diag.js","usages":[{"description":"Run some basic diagnostics","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.garbagecollection","call":"fgc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^fgcs?$"},"path":"Owner/ForceGC.js","usages":[{"description":"Force garbage collection","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.kill","call":"kill","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^kills?$"},"path":"Owner/Kill.js","usages":[{"description":"Kill current shard","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.leaveserver","call":"leaveserver","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^leaveserver\\s*(.*)?"},"path":"Owner/LeaveServer.js","usages":[{"description":"Tell the bot to leave a server, if it's cached","parameters":["server id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.reload","call":"reload","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^reloads?$"},"path":"Owner/Reload.js","usages":[{"description":"Reload bot modules","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.restart","call":"restart","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^restarts?$"},"path":"Owner/Restart.js","usages":[{"description":"Restart bot","parameters":[]}],"blacklistable":false,"enabled":true,"game":"CORE"},{"id":"core.servers","call":"servers","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^serverss?$"},"path":"Owner/Servers.js","usages":[{"description":"Get list of bot servers in file","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.username","call":"username","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^username\\s*(.*)?"},"path":"Owner/Username.js","usages":[{"description":"Set the bot's username","parameters":["username"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"promocode.managers.add","call":"glyphs add manager","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs add manager\\s?(?:--pool\\s?(.*))?([0-9]{0,20})?"},"path":"Promocodes/AddManager.js","usages":[{"description":"Add a manager to a glyph pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"glyphs.addCode","call":"glyphs import","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs import\\s*(?:--pool\\s(.*))?\\s?(pc|ps4|xb1|switch)?(.*)?"},"path":"Promocodes/AddPromocode.js","usages":[{"description":"Add a single code","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "},{"description":"Bulk add codes. Export a single code to see the format.","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.claim","call":"glyphs claim","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs claim\\s?(?:--pool\\s(.*))?\\s?(pc|ps4|xb1|switch)?\\s?(?:--password\\s(.*))?"},"path":"Promocodes/ClaimPromocode.js","usages":[{"description":"Claim a code","parameters":["--pool *","--password (required if pool is secured)",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.clearpassword","call":"glyphs clear password","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs clear password\\s?(?:--pool\\s(.*))?"},"path":"Promocodes/ClearPoolPassword.js","usages":[{"description":"Clear a pool's password","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.add","call":"glyphs create pool","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs create pool\\s?(.+)?"},"path":"Promocodes/CreatePool.js","usages":[{"description":"Create a pool from a name","parameters":["new pool name"]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.remove","call":"glyphs del pool","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs del pool\\s?(.*)?"},"path":"Promocodes/DeletePool.js","usages":[{"description":"Remove a glyph pool that you manage","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.export","call":"glyphs export","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"","body":"^glyphs export\\s?(.*)"},"path":"Promocodes/Export.js","usages":[{"description":"Export codes from a pool to a `.csv` file","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.grant","call":"glyphs grant","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs grant\\s?(?:--pool\\s(.*))?\\s?undefined?\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Promocodes/GrantPromocode.js","usages":[{"description":"Grant a code to a user from a specific pool","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.claimed","call":"glyphs list claimed","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^glyphs list claimed"},"path":"Promocodes/ListClaimed.js","usages":[{"description":"List claimed codes.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.managed","call":"glyphs list managed","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^glyphs list managed"},"path":"Promocodes/ListPools.js","usages":[{"description":"List claimed codes.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.managers.remove","call":"glyphs del manager","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs del manager\\s?(?:--pool\\s?(.*))?\\s?(?:<@([0-9]{15,20})>)?"},"path":"Promocodes/RemoveManager.js","usages":[{"description":"Remove a manager from a code pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.restrict","call":"glyphs restrict","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs restrict\\s?(on|off)?\\s*(?:--pool\\s?(.*))?"},"path":"Promocodes/RestrictPool.js","usages":[{"description":"Restrict or unrestrict a pool","parameters":["","--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.revoke","call":"glyphs revoke","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs revoke\\s?(.*)?"},"path":"Promocodes/RevokePromocode.js","usages":[{"description":"Revoke a claimed promocode from a user","parameters":["code to revoke"]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.guild","call":"glyphs set guild","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set guild\\s?(?:--pool\\s?(.*))?([0-9]{0,20})?"},"path":"Promocodes/SetPoolGuild.js","usages":[{"description":"Set the default guild (server) for a pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.name","call":"glyphs set name","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set name\\s?(?:--pool\\s?(?:.*))?(.*)?"},"path":"Promocodes/SetPoolName.js","usages":[{"description":"Set a pool's name. This doesn't alter the pool Id.","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.password","call":"glyphs set password","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set password\\s?(?:--pool\\s?(?:.*))?\\s?(.*)?"},"path":"Promocodes/SetPoolPassword.js","usages":[{"description":"Set a pool's password.","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.public","call":"glyphs public","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs public\\s?(on|off)?\\s*(?:--pool\\s?(.*))?"},"path":"Promocodes/SetPoolPublic.js","usages":[{"description":"Make a pool public or private","parameters":["","--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"reddit.fun.meme","call":"meme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^memes?$"},"path":"Reddit/DankMeme.js","usages":[{"description":"Generates a random meme from r/dankmemes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.destiny.meme","call":"d2meme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2memes?$"},"path":"Reddit/Destiny2Meme.js","usages":[{"description":"Generates a Destiny 2 meme","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"reddit.destiny.names","call":"d2names","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2namess?$"},"path":"Reddit/Destiny2Names.js","usages":[{"description":"Generates a random funny destiny 2 name from r/destiny2names","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"reddit.fun.foodporn","call":"foodporn","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^foodporns?$"},"path":"Reddit/FoodPorn.js","usages":[{"description":"Generates a random food porn item from r/foodporn","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.fun.steamdeals","call":"steamdeals","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^steamdealss?$"},"path":"Reddit/SteamDeals.js","usages":[{"description":"Generates a random steam deal from r/steamdeals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.warmeme","call":"warmeme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^warmemes?$"},"path":"Reddit/WarMeme.js","usages":[{"description":"Generates a random meme from r/warframememes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"Reddit.xboxdeals","call":"xboxdeals","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^xboxdealss?$"},"path":"Reddit/XBoxDeals.js","usages":[{"description":"Generates a random steam deal from r/xboxdeals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"settings.addRole","call":"add role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add role\\s?(.*)?\\s?(--create)?\\s?(--mentionable)?"},"path":"Roles/AddRole.js","usages":[{"description":"Show instructions for adding joinable roles","parameters":[]},{"description":"Add a role","parameters":["Role/Role id to add","--create","--mentionable","--leavable (on | off)","--requires @Role Mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.joinRole","call":"join","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^join\\s?(.*)?"},"path":"Roles/JoinRole.js","usages":[{"description":"Show instructions for joining roles","parameters":[]},{"description":"Joining a role","parameters":["Role/Role id to join."]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.leaveRole","call":"leave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^leave\\s?(.*)?"},"path":"Roles/LeaveRole.js","usages":[{"description":"Show instructions for leaving roles","parameters":[]},{"description":"Leave a role","parameters":["Role/Role id to leave"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.removeRole","call":"remove role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^remove role\\s?(.*)?"},"path":"Roles/RemoveRole.js","usages":[{"description":"Show instructions for removing joinable roles","parameters":[]},{"description":"Remove a role","parameters":["Role/Role id to add","--delete"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.roleids","call":"roleids","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^roleidss?$"},"path":"Roles/RoleIds.js","usages":[{"description":"Get list of role ids","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.ranks","call":"roles","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^roless?$"},"path":"Roles/Roles.js","usages":[{"description":"Get list of joinable roles","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.allowprivateroom","call":"allow private room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow private room\\s?(on|off)?$"},"path":"Rooms/AllowRoomCreation.js","usages":[{"description":"Change if the bot is allowed to create private channels","parameters":["private rooms allowed"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.create","call":"create","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^create\\s?(room|raid|team|chat)?(\\w|-)?(?:-n(.+))?(--no-text)?(--public)?(--text)?(--hidden)?(--shown)?"},"path":"Rooms/Create.js","usages":[{"description":"Display instructions for creating temporary rooms","parameters":[]},{"description":"Create temporary text and voice channels for the calling user.","parameters":["room | raid | team"]},{"description":"Create temporary text and voice channels for the calling user and any mentioned users/roles.","parameters":["room | raid | team","users and/or role"]},{"description":"Create temporary text and voice channels for the calling user and any mentioned users/roles, with a custom name","parameters":["room | raid | team","users and/or role","-n name","--no-text","--public","--text","--locked"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.destry","call":"destroy room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^destroy room$"},"path":"Rooms/Destroy.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.hide","call":"hide","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^hide$"},"path":"Rooms/Hide.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.invite","call":"invite","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^invite"},"path":"Rooms/Invite.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.lock","call":"lock","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^lock$"},"path":"Rooms/Lock.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.lurk","call":"lurk","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^lurk$"},"path":"Rooms/Lurkable.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.rename","call":"rename room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^rename room\\s?(.+)?"},"path":"Rooms/Rename.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.resize","call":"resize room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^resize room\\s?(\\d+)"},"path":"Rooms/ResizeRoom.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultNoText","call":"set rooms notext","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms notext\\s?(on|off)?$"},"path":"Rooms/RoomDefaultNoText.js","usages":[{"description":"Change if the bot should create unlocked channels by default (defaults to off)","parameters":["private notext defaulted"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultroomsunlocked","call":"set rooms unlocked","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms unlocked\\s?(on|off)?$"},"path":"Rooms/RoomPublicDefault.js","usages":[{"description":"Change if the bot should create unlocked channels by default (defaults to off)","parameters":["private rooms defaulted"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultroomsshown","call":"set rooms shown","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms shown\\s?(on|off)?$"},"path":"Rooms/RoomShownDefault.js","usages":[{"description":"Change if the bot should create shown channels by default (defaults to off)","parameters":["shown rooms defaulted"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.defaultcategory","call":"set rooms category","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms category\\s?(\\d+)?$"},"path":"Rooms/SetDefaultCategory.js","usages":[{"description":"Change the bot's default category for temp rooms. Defaults to none.","parameters":["temp room default"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.show","call":"show","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^show$"},"path":"Rooms/Show.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.unlock","call":"unlock","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^unlock$"},"path":"Rooms/Unlock.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.allowCustom","call":"allow custom commands","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow\\s?custom(?:\\s?commands)?\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/AllowCustomCommands.js","usages":[{"description":"Change if this channel can use custom commands","parameters":["custom commands enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.allowinline","call":"allow inline commands","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow\\s?inline(?:\\s?commands)?\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/AllowInlineCommands.js","usages":[{"description":"Change if this channel can use inline commands","parameters":["inline commands enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.clearChannelPerms","call":"clear permissions","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear permissions(?:\\s*((?:(?:<#)?\\d+(?:>)?)|current|all|guild))?$"},"path":"Settings/ClearChannelPermissions.js","usages":[{"description":"Clear channel permisions for this or specified room, or guild","parameters":[]}],"blacklistable":false,"enabled":true,"game":"CORE"},{"id":"settings.clearpings","call":"clear pings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear pingss?$"},"path":"Settings/ClearPings.js","usages":[{"description":"Clears all pings for the server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.deleteafterrespond","call":"delete after respond","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete\\s?after\\s?respond\\s?(all|command|respond|none)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/DeleteAfterRespond.js","usages":[{"description":"Change if the bot to delete commands and/or responses after responding in this channel","parameters":["deleting enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.deleteexpired","call":"delete expired","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete\\s?expired\\s?(on|off)?$"},"path":"Settings/DeleteExpired.js","usages":[{"description":"Change if the bot to deletes expired notifications","parameters":["deleting enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.disable","call":"disable","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^disable"},"path":"Settings/Disable.js","usages":[{"description":"Disable a command for a role in a channel or channels","parameters":["command id> in for "},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^enable"},"path":"Settings/Enable.js","usages":[{"description":"Enable a command for a role in a channel or channels","parameters":["command id> in for "},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^language\\s?(en|de|es|fr|it|ko|pl|pt|ru|zh)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/Language.js","usages":[{"description":"Change this channel's language","parameters":["language"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.platform","call":"platform","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^platform(?:\\s+(pc|ps4|xb1|swi))?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/Platform.js","usages":[{"description":"Change this channel's platform","parameters":["platform"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.prefix","call":"prefix","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^prefix(?:\\s+(.+))?"},"path":"Settings/Prefix.js","usages":[{"description":"Change this channel's prefix","parameters":["prefix (up to 3 characters)"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.respondSettings","call":"respond to settings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^respond(?:\\sto)?\\s?settings\\s?(on|off)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/RespondToSettings.js","usages":[{"description":"Change if this channel has settings changes responded in it","parameters":["response enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.settings","call":"settings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^settings(?:\\s*--expand)?(?:\\s+in\\s+((?:(?:<#)?\\d+(?:>)?)|current|all))?$"},"path":"Settings/Settings.js","usages":[{"description":"Get settings","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"silly.8ball","call":"8ball","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"8ball ?(.*)?"},"path":"Silly/8Ball.js","usages":[{"description":"Get your 8Ball question answered!","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.corgi","call":"corgi","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^corgis?$"},"path":"Silly/Corgi.js","usages":[{"description":"Genesis gets you a corgi","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.echo","call":"echo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^echo\\s?(.+)?"},"path":"Silly/Echo.js","usages":[{"description":"Echo your message","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.hug","call":"hug","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^hugs?$"},"path":"Silly/Hug.js","usages":[{"description":"Hug Genesis","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.joke","call":"joke","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^jokes?$"},"path":"Silly/Joke.js","usages":[{"description":"Genesis tells a joke","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.promocode","call":"promocodes","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^promocodess?$"},"path":"Silly/PromoCodes.js","usages":[{"description":"Get promocodes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"settings.setping","call":"set ping","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set ping\\s*((solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources)(.+)?)?"},"path":"Tracking/SetPing.js","usages":[{"description":"Set ping for an event or item","parameters":["event or reward","@role or user mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.start","call":"start","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^starts?$"},"path":"Tracking/Start.js","usages":[{"description":"Lols","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.stop","call":"stop","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^stop\\s*(?:\\s+in\\s+)?((?:(?:<#)?(\\d{15,20})(?:>)?)|here)?"},"path":"Tracking/Stop.js","usages":[{"description":"Untracks everything in a channel, effectively stopping tracking for the channel","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.track","call":"track","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^track(?:\\s+((solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources))*)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?"},"path":"Tracking/Track.js","usages":[{"description":"Show tracking command for tracking events","parameters":[]},{"description":"Track an event or events","parameters":["event(s) to track"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.untrack","call":"untrack","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^untrack\\s*(solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources)*(?:\\s+in\\s+)?((?:(?:<#)?(\\d{15,20})(?:>)?)|here)?"},"path":"Tracking/Untrack.js","usages":[{"description":"Show tracking command for untracking events","parameters":[]},{"description":"Untrack an event or events","parameters":["event(s) to untrack"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"utilities.dump","call":"dump","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^dumps?$"},"path":"Utilities/Dump.js","usages":[{"description":"Dump a channel config to a channel","parameters":["JSON configuration file"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.getcommandids","call":"getcommandids","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^getcommandidss?$"},"path":"Utilities/GetCommandIds.js","usages":[{"description":"Get list of bot command ids available for you to view","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"inline.poll","call":"poll:","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"poll(?:\\s*\\((\\d*)\\))?:.+"},"path":"Utilities/PollInline.js","usages":[{"description":"Create a simple poll","parameters":["poll statement"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"inline.roll","call":"roll?","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"left or right[:\\?]"},"path":"Utilities/RollInline.js","usages":[{"description":"roll between rivens","parameters":["riven link to vote about rolling"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"util.serverInfo","call":"serverinfo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^serverinfos?$"},"path":"Utilities/ServerInfo.js","usages":[{"description":"Get info about current server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"utilities.transmit","call":"transmit","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^transmits?$"},"path":"Utilities/Transmit.js","usages":[{"description":"Send Solaris-esque transmission to a channel","parameters":["JSON configuration file"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"util.userinfo","call":"userinfo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"^userinfo\\s*(?:(?:<@)(\\d+)(?:>))?"},"path":"Utilities/UserInfo.js","usages":[{"description":"Get info about a user","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.clearwelcomemessage","call":"clear welcome message","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear welcome messages?$"},"path":"Welcoming/ClearWelcome.js","usages":[{"description":"Clears all messages (non-DM) for this guild.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.clearwelcomedm","call":"clear welcome dm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear welcome dms?$"},"path":"Welcoming/ClearWelcomeDM.js","usages":[{"description":"Clears all welcome direct messages for the server.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.setwelcome","call":"set welcome message","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set welcome message\\s?((.+|\\n)+)?$"},"path":"Welcoming/SetWelcome.js","usages":[{"description":"Set welcome message for this server in this channel","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.setwelcomedm","call":"add welcome dm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add welcome dm\\s?((.+|\\n)+)?$"},"path":"Welcoming/SetWelcomeDM.js","usages":[{"description":"Add a welcome message for this server in this channel to send to a user in DM","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"warframe.worldstate.alerts","call":"alert","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^alerts?\\s?(?:(compact))?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Alerts.js","usages":[{"description":"Display the currently active alerts","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.arbitration","call":"arbi","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"^arbi(?:tration)?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Arbitration.js","usages":[{"description":"Display the currently active arbitration","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.baro","call":"baro","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^baro(?:\\s+on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Baro.js","usages":[{"description":"Display the current status of the Void Trader","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"inline.borko","call":"when borko","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"(?:where|when|whe|why|which).*(?:borko|baro|bimjo|bonko|bilbo|bermo|barmo|bruno|borso|borneo|bosnia|beerr?ow)"},"path":"Worldstate/BaroInline.js","usages":[{"description":"Display the current status of the Void Trader","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"warframe.worldstate.conclaveChallenges","call":"conclave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^conclave(?:\\s+(all|day|week))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/ConclaveChallenges.js","usages":[{"description":"Display conclave challenges for a challenge type.","parameters":["conclave category"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.construction","call":"construction","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^construction(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Construction.js","usages":[{"description":"Display current construction progress.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.darvo","call":"darvo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^darvo(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Darvo.js","usages":[{"description":"Displays today's Darvo deal","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.cycle","call":"cycle","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^cycle\\s?(earth)?"},"path":"Worldstate/EarthCycle.js","usages":[{"description":"Display Cetus's current cycle progress","parameters":[]},{"description":"Display Earth's current cycle progress","parameters":["earth"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.acolytes","call":"acolyte","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^acolytes?(?:\\s+on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Enemies.js","usages":[{"description":"Display any currently active acolyte-style enemies.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.events","call":"events","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^events(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Event.js","usages":[{"description":"Display current events.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.featureddeal","call":"featureddeal","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^featured\\s?deals?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/FeaturedDeal.js","usages":[{"description":"Displays current featured deals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.fissures","call":"fissure","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^fissures?(?:\\s?(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Fissures.js","usages":[{"description":"Get the current list of Void Fissure Missions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.invasions","call":"invasion","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^invasions?(?:\\s?(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Invasions.js","usages":[{"description":"Display the currently active Invasions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.kuva","call":"kuva","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^kuvas?$"},"path":"Worldstate/Kuva.js","usages":[{"description":"Display the currently active kuva missions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.news","call":"news","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^news\\s?(?:(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/News.js","usages":[{"description":"Display the currently active news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.nightwave","call":"nightwave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^nightwaves?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Nightwave.js","usages":[{"description":"Display the currently active nightwave season","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.rjoutpost","call":"outpost","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^outpost\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Outpost.js","usages":[{"description":"Display the activity status of the Sentient Outpost","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.populardeals","call":"popular deal","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^popular\\s?deals?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/PopularSale.js","usages":[{"description":"Displays current featured deals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.primeaccess","call":"primeaccess","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^prime\\s?access(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/PrimeAccess.js","usages":[{"description":"Display the currently active prime access news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.simaris","call":"simaris","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"(^simaris(?:\\s+on\\s+(pc|ps4|xb1|swi))?$)|(^simaris(?:\\s+target\\s+([\\sa-zA-Z0-9]+))?$)"},"path":"Worldstate/Simaris.js","usages":[{"description":"Display current Sanctuary status.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.solaris","call":"solaris","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^solariss?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Solaris.js","usages":[{"description":"Display the currently active Solaris bounties","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.sorties","call":"sortie","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^sorties?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Sorties.js","usages":[{"description":"Display the currently active sorties","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.syndicate","call":"syndicate","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^syndicate\\s?(?:(arbiters of hexis|cephalon suda|new loka|perrin sequence|red veil|steel meridian|ostrons|assassins|quills|solaris united|vox solaris|all))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Syndicates.js","usages":[{"description":"Display syndicate nodes for a syndicate.","parameters":["syndicate"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.updates","call":"update","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^updates?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Updates.js","usages":[{"description":"Display the currently active update news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"}] \ No newline at end of file +[{"id":"core.blacklist.add","call":"bl add","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^bl add\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Blacklist/AddUser.js","usages":[{"description":"Add a user to this server's blacklist, preventing the user from calling commands.","parameters":["user"]},{"description":"Add a user to the global blacklist. Owner only. `--global` or `-g` specify global","parameters":["user","--global","-g"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.blacklist.remove","call":"bl remove","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^bl remove\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Blacklist/DeleteUser.js","usages":[{"description":"Remove a user from this server's blacklist.","parameters":["user"]},{"description":"Remove a user from the global blacklist. Owner only. `--global` or `-g` specify global","parameters":["user","--global","-g"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.blacklist.list","call":"bl ls","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"","body":"^(?:bl ls?|bl list)"},"path":"Blacklist/ListUsers.js","usages":[{"description":"List users in the blacklist","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"builds.add","call":"add build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:add build|ab)\\s?(.+)?"},"path":"Builds/AddBuild.js","usages":[{"description":"Display instructions for creating a new build with Genesis","parameters":[]},{"description":"Add a build with the provided title, body, and image URL","parameters":["title","body","image url"],"delimBefore":" ","delimAfter":" ","separator":" | "},{"description":"Add one or more builds from a structured json file. [Example file.](https://pastebin.com/raw/EU9ZX1uQ)","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.delete","call":"delete build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:delete build|db)\\s?(.+)?"},"path":"Builds/DeleteBuild.js","usages":[{"description":"Delete an existing build from Genesis","parameters":["build id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.get","call":"get build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:get build|gb)\\s?(.+)?"},"path":"Builds/GetBuild.js","usages":[{"description":"Display information on an existing build from Genesis","parameters":["build id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.list","call":"list builds","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:list builds|lb)\\s?(.+)?"},"path":"Builds/ListBuilds.js","usages":[{"description":"Display information on an existing build from Genesis. `|` separates title, body, and image. `;` separates sections in the body.","parameters":["title | body | image"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.search","call":"search builds","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:search builds|sb)\\s?(.+)?"},"path":"Builds/SearchBuilds.js","usages":[{"description":"Display information on an existing build from Genesis","parameters":["query"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.setpublic","call":"set public build|spb","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:set public build|spb)\\s?(.+)?"},"path":"Builds/SetBuildPublic.js","usages":[{"description":"Set a build or builds to be public","parameters":["build id(s)","on/off"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"builds.set","call":"set build","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^set build(?:\\s+(all|title|body|image)\\s+(.+))?"},"path":"Builds/SetField.js","usages":[{"description":"Edit a field on the build. `|` is only between build Id and following parameters.","parameters":["type (all, title, body, image)","buildId","title\\*","body\\*","image\\*"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"core.bug","call":"bug","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^bug\\s*(.*)?"},"path":"Core/Bug.js","usages":[{"description":"Send a bug report to bot owner","parameters":["bug report"]},{"description":"Send a bug report to bot owner with subject, message, and optional screenshot. The `|` are important.","parameters":["subject","body","* screenshot"],"separator":" | "},{"description":"Send a bug report to bot owner with subject, message, and optional screenshot. The `|` are important.","parameters":["subject","body","attached image"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.help","call":"help","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^help(?:\\s(.*)?)?$"},"path":"Core/Help.js","usages":[{"description":"Receive the full welcome data by visiting the provided link.","parameters":[]},{"description":"Query for info about a specific command","parameters":["command search"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.info","call":"info","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^infos?$"},"path":"Core/Info.js","usages":[{"description":"Information about the bot","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.invitation","call":"invitation","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"^invitation$"},"path":"Core/Invite.js","usages":[{"description":"Send Invitation Link to Authorize Bot to Join a Server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.ping","call":"ping","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^pings?$"},"path":"Core/Ping.js","usages":[{"description":"Ping Genesis to test connectivity","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.reset","call":"reset","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^resets?$"},"path":"Core/Reset.js","usages":[{"description":"Reset the settings for this guild","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.support","call":"support","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^supports?$"},"path":"Core/Support.js","usages":[{"description":"Support info about the bot","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"customcommands.add","call":"add cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add cc\\s+(\\w+)?\\s?([\\s\\S]*)"},"path":"CustomCommands/AddCustomCommand.js","usages":[{"description":"Add a custom command","parameters":["command call","command response"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"customcommands.delete","call":"delete cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete cc\\s+(\\w+)?$"},"path":"CustomCommands/DeleteCustomCommand.js","usages":[{"description":"Delete a custom command","parameters":["command call"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.cc.list","call":"list cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^list ccs?$"},"path":"CustomCommands/ListCustomCommand.js","usages":[{"description":"List custom commands for this guild","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.cc.ping","call":"ping cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^ping cc\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"CustomCommands/PingCustomCommand.js","usages":[{"description":"Change if this channel's use custom commands will ping","parameters":["custom commands enabled"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"customcommands.update","call":"update cc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^update cc\\s+(?:(call|response)\\s(\\w+)\\s(.*))?$"},"path":"CustomCommands/UpdateCustomCommand.js","usages":[{"description":"Update a custom command","parameters":["param","command call","new param value"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.addDefaultRole","call":"add default role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add default role\\s?undefined?$"},"path":"DefaultRoles/AddDefaultRole.js","usages":[{"description":"Add a new default role for persons joining the server.","parameters":["role id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.clearDefaultRoles","call":"clear default roles","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear default roless?$"},"path":"DefaultRoles/ClearDefaultRoles.js","usages":[{"description":"Clears all default roles for the server.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.deleteDefaultRole","call":"delete default role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete default role\\s?undefined?$"},"path":"DefaultRoles/DeleteDefaultRole.js","usages":[{"description":"Add a new default role for persons joining the server.","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"Destiny2.d2code","call":"d2code","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2codes?$"},"path":"Destiny2/Destiny2Code.js","usages":[{"description":"Outputs a random D2 Grimore card to the specified user","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"dynamicchannels.add","call":"templates add","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates add\\s?(?:(?:<#)?(\\d+)(?:>)?)?(?:\\s+(--relay))?$"},"path":"DynamicChannels/AddTemplateChannel.js","usages":[{"description":"Add a template channel. If `--relay` is specified, it will use relay naming.","parameters":["channel mention","--relay"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.delete","call":"templates delete","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates delete\\s?(?:(?:<#)?(\\d+)(?:>)?)?$"},"path":"DynamicChannels/DeleteTemplateChannel.js","usages":[{"description":"Remove a template channel","parameters":["channel mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.list","call":"templates list","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates lists?$"},"path":"DynamicChannels/ListTemplateChannels.js","usages":[{"description":"List Template Channels","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"dynamicchannels.template","call":"templates set","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^templates set\\s?(?:(?:<#)?(\\d{15,20})(?:>)?)?(?:\\s+(.*))?$"},"path":"DynamicChannels/SetTemplate.js","usages":[{"description":"Set a channel template's name template. `$username` is available as a replacement for using the name of the user that generated the channel.","parameters":["channel mention","name template"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"giveaways.add","call":"g start","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^g start"},"path":"Giveaways/StartGiveaway.js","usages":[{"description":"Start a giveaway. Format: `/g start 2w 1 Awesome Prize!`","parameters":["time","winners","*channel","prize"]}],"blacklistable":true,"enabled":true,"game":"GIVEAWAYS"},{"id":"giveaways.stop","call":"g stop","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^g stop\\s(?:(?:<#)?(\\d{15,20})(?:>)?)"},"path":"Giveaways/StopGiveaway.js","usages":[{"description":"Stop a giveaway.","parameters":["giveaway message id"]}],"blacklistable":true,"enabled":true,"game":"GIVEAWAYS"},{"id":"inline.warframe.info","call":"[Query]","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"\\[(.*?)\\]"},"path":"Info/ItemEmbeddedInline.js","usages":[{"description":"Get stats for a Warframe","parameters":["[warframe name]"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"lfg.add","call":"lfg|hosting|lfm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^(?:lfg|hosting|lfm)(?!elp)\\s?(.+)?"},"path":"LFG/LFG.js","usages":[{"description":"Submit an LFG request to this guild's LFG channel.","parameters":["place","time","for","platform\\*","expiry\\*","members\\*"],"separator":" | "}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.lfgChannel","call":"set lfg channel","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set lfg channel(.*)"},"path":"LFG/SetLFGChannel.js","usages":[{"description":"Set the LFG channel","parameters":["platform","channel id"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"warframe.misc.arcane","call":"arcane","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^arcane(.+)?"},"path":"Ondemand/Arcane.js","usages":[{"description":"Get information about an Arcane Enhancement","parameters":["enhancement name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.armor","call":"armor","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^armor(?:\\s+([\\d+\\.?\\d*\\s]+))?"},"path":"Ondemand/Armor.js","usages":[{"description":"Display instructions for calculating armor","parameters":[]},{"description":"Display current damage resistance and amount of corrosive procs required to strip it.","parameters":["current armor"]},{"description":"Display the current armor, damage resistance, and necessary corrosive procs to strip armor.","parameters":["base armor","base level","current level"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.buildchart","call":"buildchart","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^buildcharts?$"},"path":"Ondemand/BuildChart.js","usages":[{"description":"Display Weapon Build Flowchart chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.damage","call":"damage","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^damages?$"},"path":"Ondemand/Damage.js","usages":[{"description":"Display Damage 2.0 chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.efficiency","call":"efficiency","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^efficiencys?$"},"path":"Ondemand/Efficiency.js","usages":[{"description":"Display Warframe Efficiency Chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.enemystats","call":"enemy","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^enemy\\s?(.+)?"},"path":"Ondemand/Enemy.js","usages":[{"description":"Get stats for an enemy","parameters":["enemy name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.stats","call":"frame","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^frame\\s?(.+)?"},"path":"Ondemand/FrameStats.js","usages":[{"description":"Get stats for a Warframe","parameters":["warframe name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.mod","call":"mod","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^mod(.+)"},"path":"Ondemand/Mod.js","usages":[{"description":"Search the Warframe Wiki for a mod's image","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.pricecheck","call":"pricecheck","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^p(?:rice)?\\s?c(?:heck)?(?:\\s+([\\w+\\s]+))?"},"path":"Ondemand/Pricecheck.js","usages":[{"description":"Display an items worth from nexus-stats.com","parameters":["item"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.progress","call":"progress","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^progresss?$"},"path":"Ondemand/Progression.js","usages":[{"description":"Display Warframe Progression Chart","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.rivens","call":"riven","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^riven\\s?(.+)?"},"path":"Ondemand/RivenStats.js","usages":[{"description":"Get stats for a Weapon riven","parameters":["riven name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.calculations.shields","call":"shields","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^shield(?: +([\\d+\\.?\\d* ]+))?"},"path":"Ondemand/Shields.js","usages":[{"description":"Display an enemy's current shields.","parameters":["base shields","base level","current level"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.tutorial","call":"tutorial","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^tutorials?\\s?(.+)?"},"path":"Ondemand/Tutorial.js","usages":[{"description":"Get a Warframe Tutorial Video","parameters":["subject"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.weaponstats","call":"weapon","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^weapon\\s?(.+)?"},"path":"Ondemand/Weapon.js","usages":[{"description":"Get stats for a weapon","parameters":["weapon name"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.whatsin","call":"whatsin","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^whatsin(?:\\s+(axi|neo|meso|lith)\\s?(\\w\\d+))?"},"path":"Ondemand/Whatsin.js","usages":[{"description":"Display what drops from a relic","parameters":["relic"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.whereis","call":"whereis","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^where\\s?(?:is\\s?)?(.+)?"},"path":"Ondemand/WhereIs.js","usages":[{"description":"Display where something drops from","parameters":["item"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.wiki","call":"wiki","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^wiki\\s*([\\w\\s-]+)?"},"path":"Ondemand/Wiki.js","usages":[{"description":"Search the Warframe wiki for a specific topic","parameters":["topic"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"core.avatar","call":"avatar","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^avatar\\s*(.*)?"},"path":"Owner/Avatar.js","usages":[{"description":"Set the bot's avatar url","parameters":["avatar url"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.webhooks.delete","call":"delete webhook in","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^delete webhook in\\s*(.*)?"},"path":"Owner/DeleteWebhook.js","usages":[{"description":"Delete the webhook for a given channel id","parameters":["channel id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.diag","call":"diag","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^diags?$"},"path":"Owner/Diag.js","usages":[{"description":"Run some basic diagnostics","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.garbagecollection","call":"fgc","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^fgcs?$"},"path":"Owner/ForceGC.js","usages":[{"description":"Force garbage collection","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.kill","call":"kill","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^kills?$"},"path":"Owner/Kill.js","usages":[{"description":"Kill current shard","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.leaveserver","call":"leaveserver","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^leaveserver\\s*(.*)?"},"path":"Owner/LeaveServer.js","usages":[{"description":"Tell the bot to leave a server, if it's cached","parameters":["server id"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.reload","call":"reload","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^reloads?$"},"path":"Owner/Reload.js","usages":[{"description":"Reload bot modules","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.restart","call":"restart","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^restarts?$"},"path":"Owner/Restart.js","usages":[{"description":"Restart bot","parameters":[]}],"blacklistable":false,"enabled":true,"game":"CORE"},{"id":"core.servers","call":"servers","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^serverss?$"},"path":"Owner/Servers.js","usages":[{"description":"Get list of bot servers in file","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"core.username","call":"username","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":true,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^username\\s*(.*)?"},"path":"Owner/Username.js","usages":[{"description":"Set the bot's username","parameters":["username"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"promocode.managers.add","call":"glyphs add manager","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs add manager\\s?(?:--pool\\s?(.*))?([0-9]{0,20})?"},"path":"Promocodes/AddManager.js","usages":[{"description":"Add a manager to a glyph pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"glyphs.addCode","call":"glyphs import","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs import\\s*(?:--pool\\s(.*))?\\s?(pc|ps4|xb1|switch)?(.*)?"},"path":"Promocodes/AddPromocode.js","usages":[{"description":"Add a single code","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "},{"description":"Bulk add codes. Export a single code to see the format.","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.claim","call":"glyphs claim","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs claim\\s?(?:--pool\\s(.*))?\\s?(pc|ps4|xb1|switch)?\\s?(?:--password\\s(.*))?"},"path":"Promocodes/ClaimPromocode.js","usages":[{"description":"Claim a code","parameters":["--pool *","--password (required if pool is secured)",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.clearpassword","call":"glyphs clear password","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs clear password\\s?(?:--pool\\s(.*))?"},"path":"Promocodes/ClearPoolPassword.js","usages":[{"description":"Clear a pool's password","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.add","call":"glyphs create pool","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs create pool\\s?(.+)?"},"path":"Promocodes/CreatePool.js","usages":[{"description":"Create a pool from a name","parameters":["new pool name"]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.remove","call":"glyphs del pool","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs del pool\\s?(.*)?"},"path":"Promocodes/DeletePool.js","usages":[{"description":"Remove a glyph pool that you manage","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.export","call":"glyphs export","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"","body":"^glyphs export\\s?(.*)"},"path":"Promocodes/Export.js","usages":[{"description":"Export codes from a pool to a `.csv` file","parameters":["--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.grant","call":"glyphs grant","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs grant\\s?(?:--pool\\s(.*))?\\s?undefined?\\s?(?:(?:<@!?)?(\\d{15,20})(?:>)?)?"},"path":"Promocodes/GrantPromocode.js","usages":[{"description":"Grant a code to a user from a specific pool","parameters":["--pool *","",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.claimed","call":"glyphs list claimed","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^glyphs list claimed"},"path":"Promocodes/ListClaimed.js","usages":[{"description":"List claimed codes.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pools.managed","call":"glyphs list managed","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^glyphs list managed"},"path":"Promocodes/ListPools.js","usages":[{"description":"List claimed codes.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.managers.remove","call":"glyphs del manager","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs del manager\\s?(?:--pool\\s?(.*))?\\s?(?:<@([0-9]{15,20})>)?"},"path":"Promocodes/RemoveManager.js","usages":[{"description":"Remove a manager from a code pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.restrict","call":"glyphs restrict","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs restrict\\s?(on|off)?\\s*(?:--pool\\s?(.*))?"},"path":"Promocodes/RestrictPool.js","usages":[{"description":"Restrict or unrestrict a pool","parameters":["","--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.code.revoke","call":"glyphs revoke","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs revoke\\s?(.*)?"},"path":"Promocodes/RevokePromocode.js","usages":[{"description":"Revoke a claimed promocode from a user","parameters":["code to revoke"]}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.guild","call":"glyphs set guild","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set guild\\s?(?:--pool\\s?(.*))?([0-9]{0,20})?"},"path":"Promocodes/SetPoolGuild.js","usages":[{"description":"Set the default guild (server) for a pool","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.name","call":"glyphs set name","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set name\\s?(?:--pool\\s?(?:.*))?(.*)?"},"path":"Promocodes/SetPoolName.js","usages":[{"description":"Set a pool's name. This doesn't alter the pool Id.","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.password","call":"glyphs set password","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs set password\\s?(?:--pool\\s?(?:.*))?\\s?(.*)?"},"path":"Promocodes/SetPoolPassword.js","usages":[{"description":"Set a pool's password.","parameters":["--pool *",""],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"promocode.pool.public","call":"glyphs public","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^glyphs public\\s?(on|off)?\\s*(?:--pool\\s?(.*))?"},"path":"Promocodes/SetPoolPublic.js","usages":[{"description":"Make a pool public or private","parameters":["","--pool *"],"delimBefore":" ","delimAfter":" "}],"blacklistable":true,"enabled":true,"game":"CODES"},{"id":"reddit.fun.meme","call":"meme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^memes?$"},"path":"Reddit/DankMeme.js","usages":[{"description":"Generates a random meme from r/dankmemes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.destiny.meme","call":"d2meme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2memes?$"},"path":"Reddit/Destiny2Meme.js","usages":[{"description":"Generates a Destiny 2 meme","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"reddit.destiny.names","call":"d2names","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^d2namess?$"},"path":"Reddit/Destiny2Names.js","usages":[{"description":"Generates a random funny destiny 2 name from r/destiny2names","parameters":[]}],"blacklistable":true,"enabled":true,"game":"DESTINY2"},{"id":"reddit.fun.foodporn","call":"foodporn","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^foodporns?$"},"path":"Reddit/FoodPorn.js","usages":[{"description":"Generates a random food porn item from r/foodporn","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.fun.steamdeals","call":"steamdeals","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^steamdealss?$"},"path":"Reddit/SteamDeals.js","usages":[{"description":"Generates a random steam deal from r/steamdeals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"reddit.warmeme","call":"warmeme","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^warmemes?$"},"path":"Reddit/WarMeme.js","usages":[{"description":"Generates a random meme from r/warframememes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"Reddit.xboxdeals","call":"xboxdeals","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^xboxdealss?$"},"path":"Reddit/XBoxDeals.js","usages":[{"description":"Generates a random steam deal from r/xboxdeals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"settings.addRole","call":"add role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add role\\s?(.*)?\\s?(--create)?\\s?(--mentionable)?"},"path":"Roles/AddRole.js","usages":[{"description":"Show instructions for adding joinable roles","parameters":[]},{"description":"Add a role","parameters":["Role/Role id to add","--create","--mentionable","--leavable (on | off)","--requires @Role Mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.joinRole","call":"join","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^join\\s?(.*)?"},"path":"Roles/JoinRole.js","usages":[{"description":"Show instructions for joining roles","parameters":[]},{"description":"Joining a role","parameters":["Role/Role id to join."]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.leaveRole","call":"leave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^leave\\s?(.*)?"},"path":"Roles/LeaveRole.js","usages":[{"description":"Show instructions for leaving roles","parameters":[]},{"description":"Leave a role","parameters":["Role/Role id to leave"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.removeRole","call":"remove role","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^remove role\\s?(.*)?"},"path":"Roles/RemoveRole.js","usages":[{"description":"Show instructions for removing joinable roles","parameters":[]},{"description":"Remove a role","parameters":["Role/Role id to add","--delete"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.roleids","call":"roleids","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^roleidss?$"},"path":"Roles/RoleIds.js","usages":[{"description":"Get list of role ids","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.ranks","call":"roles","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^roless?$"},"path":"Roles/Roles.js","usages":[{"description":"Get list of joinable roles","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.roles.track","call":"r track","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^r track (?:(?:<#)?(\\d{15,20})(?:>)?) (?:(?:<@&)?(\\d{15,20})(?:>)?)"},"path":"Roles/TrackRole.js","usages":[{"description":"Add a new channel <-> role stats binding","parameters":["channel","role"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.roles.untrack","call":"r untrack","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^r untrack (?:(?:<@&)?(\\d{15,20})(?:>)?)"},"path":"Roles/UntrackRole.js","usages":[{"description":"Remove an existing role channel binding","parameters":["channel","role"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.allowprivateroom","call":"allow private room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow private room\\s?(on|off)?$"},"path":"Rooms/AllowRoomCreation.js","usages":[{"description":"Change if the bot is allowed to create private channels","parameters":["private rooms allowed"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.create","call":"create","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^create\\s?(room|raid|team|chat)?(\\w|-)?(?:-n(.+))?(--no-text)?(--public)?(--text)?(--hidden)?(--shown)?"},"path":"Rooms/Create.js","usages":[{"description":"Display instructions for creating temporary rooms","parameters":[]},{"description":"Create temporary text and voice channels for the calling user.","parameters":["room | raid | team"]},{"description":"Create temporary text and voice channels for the calling user and any mentioned users/roles.","parameters":["room | raid | team","users and/or role"]},{"description":"Create temporary text and voice channels for the calling user and any mentioned users/roles, with a custom name","parameters":["room | raid | team","users and/or role","-n name","--no-text","--public","--text","--locked"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.destry","call":"destroy room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^destroy room$"},"path":"Rooms/Destroy.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.hide","call":"hide","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^hide$"},"path":"Rooms/Hide.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.invite","call":"invite","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^invite"},"path":"Rooms/Invite.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.lock","call":"lock","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^lock$"},"path":"Rooms/Lock.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.lurk","call":"lurk","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^lurk$"},"path":"Rooms/Lurkable.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.rename","call":"rename room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^rename room\\s?(.+)?"},"path":"Rooms/Rename.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.resize","call":"resize room","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^resize room\\s?(\\d+)"},"path":"Rooms/ResizeRoom.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultNoText","call":"set rooms notext","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms notext\\s?(on|off)?$"},"path":"Rooms/RoomDefaultNoText.js","usages":[{"description":"Change if the bot should create unlocked channels by default (defaults to off)","parameters":["private notext defaulted"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultroomsunlocked","call":"set rooms unlocked","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms unlocked\\s?(on|off)?$"},"path":"Rooms/RoomPublicDefault.js","usages":[{"description":"Change if the bot should create unlocked channels by default (defaults to off)","parameters":["private rooms defaulted"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.defaultroomsshown","call":"set rooms shown","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms shown\\s?(on|off)?$"},"path":"Rooms/RoomShownDefault.js","usages":[{"description":"Change if the bot should create shown channels by default (defaults to off)","parameters":["shown rooms defaulted"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.defaultcategory","call":"set rooms category","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set rooms category\\s?(\\d+)?$"},"path":"Rooms/SetDefaultCategory.js","usages":[{"description":"Change the bot's default category for temp rooms. Defaults to none.","parameters":["temp room default"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.show","call":"show","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^show$"},"path":"Rooms/Show.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"rooms.unlock","call":"unlock","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":false,"regex":{"flags":"i","body":"^unlock$"},"path":"Rooms/Unlock.js","usages":[],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.allowCustom","call":"allow custom commands","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow\\s?custom(?:\\s?commands)?\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/AllowCustomCommands.js","usages":[{"description":"Change if this channel can use custom commands","parameters":["custom commands enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.allowinline","call":"allow inline commands","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^allow\\s?inline(?:\\s?commands)?\\s?(on|off)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/AllowInlineCommands.js","usages":[{"description":"Change if this channel can use inline commands","parameters":["inline commands enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.clearChannelPerms","call":"clear permissions","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear permissions(?:\\s*((?:(?:<#)?\\d+(?:>)?)|current|all|guild))?$"},"path":"Settings/ClearChannelPermissions.js","usages":[{"description":"Clear channel permisions for this or specified room, or guild","parameters":[]}],"blacklistable":false,"enabled":true,"game":"CORE"},{"id":"settings.clearpings","call":"clear pings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear pingss?$"},"path":"Settings/ClearPings.js","usages":[{"description":"Clears all pings for the server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.deleteafterrespond","call":"delete after respond","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete\\s?after\\s?respond\\s?(all|command|respond|none)?(?:\\s+in\\s+((?:\\<\\#)?\\d+(?:\\>)?|here))?$"},"path":"Settings/DeleteAfterRespond.js","usages":[{"description":"Change if the bot to delete commands and/or responses after responding in this channel","parameters":["deleting enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.deleteexpired","call":"delete expired","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^delete\\s?expired\\s?(on|off)?$"},"path":"Settings/DeleteExpired.js","usages":[{"description":"Change if the bot to deletes expired notifications","parameters":["deleting enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.disable","call":"disable","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^disable"},"path":"Settings/Disable.js","usages":[{"description":"Disable a command for a role in a channel or channels","parameters":["command id> in for "},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^enable"},"path":"Settings/Enable.js","usages":[{"description":"Enable a command for a role in a channel or channels","parameters":["command id> in for "},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^language\\s?(en|de|es|fr|it|ko|pl|pt|ru|zh)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/Language.js","usages":[{"description":"Change this channel's language","parameters":["language"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.platform","call":"platform","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^platform(?:\\s+(pc|ps4|xb1|swi))?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/Platform.js","usages":[{"description":"Change this channel's platform","parameters":["platform"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.prefix","call":"prefix","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^prefix(?:\\s+(.+))?"},"path":"Settings/Prefix.js","usages":[{"description":"Change this channel's prefix","parameters":["prefix (up to 3 characters)"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.respondSettings","call":"respond to settings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^respond(?:\\sto)?\\s?settings\\s?(on|off)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?$"},"path":"Settings/RespondToSettings.js","usages":[{"description":"Change if this channel has settings changes responded in it","parameters":["response enabled"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.settings","call":"settings","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^settings(?:\\s*--expand)?(?:\\s+in\\s+((?:(?:<#)?\\d+(?:>)?)|current|all))?$"},"path":"Settings/Settings.js","usages":[{"description":"Get settings","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"silly.8ball","call":"8ball","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"8ball ?(.*)?"},"path":"Silly/8Ball.js","usages":[{"description":"Get your 8Ball question answered!","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.corgi","call":"corgi","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^corgis?$"},"path":"Silly/Corgi.js","usages":[{"description":"Genesis gets you a corgi","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.echo","call":"echo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^echo\\s?(.+)?"},"path":"Silly/Echo.js","usages":[{"description":"Echo your message","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.hug","call":"hug","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^hugs?$"},"path":"Silly/Hug.js","usages":[{"description":"Hug Genesis","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.joke","call":"joke","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^jokes?$"},"path":"Silly/Joke.js","usages":[{"description":"Genesis tells a joke","parameters":[]}],"blacklistable":true,"enabled":true,"game":"FUN"},{"id":"silly.promocode","call":"promocodes","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^promocodess?$"},"path":"Silly/PromoCodes.js","usages":[{"description":"Get promocodes","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"settings.setping","call":"set ping","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set ping\\s*((solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources)(.+)?)?"},"path":"Tracking/SetPing.js","usages":[{"description":"Set ping for an event or item","parameters":["event or reward","@role or user mention"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.start","call":"start","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^starts?$"},"path":"Tracking/Start.js","usages":[{"description":"Lols","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.stop","call":"stop","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^stop\\s*(?:\\s+in\\s+)?((?:(?:<#)?(\\d{15,20})(?:>)?)|here)?"},"path":"Tracking/Stop.js","usages":[{"description":"Untracks everything in a channel, effectively stopping tracking for the channel","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.track","call":"track","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^track(?:\\s+((solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources))*)?(?:\\s+in\\s+((?:(?:<#)?(\\d{15,20})(?:>)?)|here))?"},"path":"Tracking/Track.js","usages":[{"description":"Show tracking command for tracking events","parameters":[]},{"description":"Track an event or events","parameters":["event(s) to track"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.untrack","call":"untrack","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^untrack\\s*(solaris\\.warm\\.[0-9]?[0-9]|solaris\\.cold\\.[0-9]?[0-9]|cetus\\.day\\.[0-1]?[0-9]?[0-9]?|cetus\\.night\\.[0-1]?[0-9]?[0-9]?|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|alerts|invasions|news|sorties|baro|darvo|deals.featured|deals.popular|enemies.departed|enemies|conclave.weeklies|conclave.dailies|syndicate.arbiters|syndicate.suda|syndicate.loka|syndicate.perrin|syndicate.veil|syndicate.meridian|syndicate.ostrons|syndicate.assassins|updates|primeaccess|streams|cetus.day|cetus.night|earth.day|earth.night|operations|solaris.warm|solaris.cold|solaris|nightwave.daily|nightwave.elite|nightwave.weekly|twitch|outposts|players_helping_players|forum.updates.pc|forum.updates.ps4|forum.updates.xb1|forum.updates.switch|forum.announcements.pc|forum.announcements.ps4|forum.announcements.xb1|forum.announcements.switch|forum.news|forum.workshop|forum.staff.megan|forum.staff.rebecca|forum.staff.danielle|forum.staff.drew|forum.staff.glen|forum.staff.taylor|forum.staff.steve|forum.staff.helen|forum.staff.saske|forum.staff.syncrasis|forum.staff.pablo|forum.staff.connor|forum.staff.marcus|forum.staff.george|forum.staff.bear|twitter.tweet.warframe|twitter.tweet.digitalextremes|twitter.tweet.pablo|twitter.tweet.cameron|twitter.tweet.rebecca|twitter.tweet.steve|twitter.tweet.danielle|twitter.tweet.megan|twitter.tweet.maciej|twitter.tweet.sheldon|twitter.tweet.narc|twitter.tweet.helen|twitter.tweet.tobiah|twitter.tweet.wfdiscord|twitter.retweet.warframe|twitter.retweet.digitalextremes|twitter.retweet.pablo|twitter.retweet.cameron|twitter.retweet.rebecca|twitter.retweet.steve|twitter.retweet.danielle|twitter.retweet.megan|twitter.retweet.maciej|twitter.retweet.sheldon|twitter.retweet.narc|twitter.retweet.helen|twitter.retweet.tobiah|twitter.retweet.wfdiscord|twitter.reply.warframe|twitter.reply.digitalextremes|twitter.reply.pablo|twitter.reply.cameron|twitter.reply.rebecca|twitter.reply.steve|twitter.reply.danielle|twitter.reply.megan|twitter.reply.maciej|twitter.reply.sheldon|twitter.reply.narc|twitter.reply.helen|twitter.reply.tobiah|twitter.reply.wfdiscord|twitter.quote.warframe|twitter.quote.digitalextremes|twitter.quote.pablo|twitter.quote.cameron|twitter.quote.rebecca|twitter.quote.steve|twitter.quote.danielle|twitter.quote.megan|twitter.quote.maciej|twitter.quote.sheldon|twitter.quote.narc|twitter.quote.helen|twitter.quote.tobiah|twitter.quote.wfdiscord|fissures.t1.excavation|fissures.t2.excavation|fissures.t3.excavation|fissures.t4.excavation|fissures.t5.excavation|fissures.t1.mobiledefense|fissures.t2.mobiledefense|fissures.t3.mobiledefense|fissures.t4.mobiledefense|fissures.t5.mobiledefense|fissures.t1.extermination|fissures.t2.extermination|fissures.t3.extermination|fissures.t4.extermination|fissures.t5.extermination|fissures.t1.assassination|fissures.t2.assassination|fissures.t3.assassination|fissures.t4.assassination|fissures.t5.assassination|fissures.t1.rescue|fissures.t2.rescue|fissures.t3.rescue|fissures.t4.rescue|fissures.t5.rescue|fissures.t1.sabotage|fissures.t2.sabotage|fissures.t3.sabotage|fissures.t4.sabotage|fissures.t5.sabotage|fissures.t1.defense|fissures.t2.defense|fissures.t3.defense|fissures.t4.defense|fissures.t5.defense|fissures.t1.disruption|fissures.t2.disruption|fissures.t3.disruption|fissures.t4.disruption|fissures.t5.disruption|fissures.t1.survival|fissures.t2.survival|fissures.t3.survival|fissures.t4.survival|fissures.t5.survival|fissures.t1.spy|fissures.t2.spy|fissures.t3.spy|fissures.t4.spy|fissures.t5.spy|fissures.t1.arena|fissures.t2.arena|fissures.t3.arena|fissures.t4.arena|fissures.t5.arena|fissures.t1.capture|fissures.t2.capture|fissures.t3.capture|fissures.t4.capture|fissures.t5.capture|fissures.t1.defection|fissures.t2.defection|fissures.t3.defection|fissures.t4.defection|fissures.t5.defection|fissures.t1.hijack|fissures.t2.hijack|fissures.t3.hijack|fissures.t4.hijack|fissures.t5.hijack|fissures.t1.infestedsalvage|fissures.t2.infestedsalvage|fissures.t3.infestedsalvage|fissures.t4.infestedsalvage|fissures.t5.infestedsalvage|fissures.t1.interception|fissures.t2.interception|fissures.t3.interception|fissures.t4.interception|fissures.t5.interception|fissures.t1.sanctuaryonslaught|fissures.t2.sanctuaryonslaught|fissures.t3.sanctuaryonslaught|fissures.t4.sanctuaryonslaught|fissures.t5.sanctuaryonslaught|arbitration.grineer.excavation|arbitration.corpus.excavation|arbitration.corrupted.excavation|arbitration.orokin.excavation|arbitration.infested.excavation|arbitration.grineer.defense|arbitration.corpus.defense|arbitration.corrupted.defense|arbitration.orokin.defense|arbitration.infested.defense|arbitration.grineer.disruption|arbitration.corpus.disruption|arbitration.corrupted.disruption|arbitration.orokin.disruption|arbitration.infested.disruption|arbitration.grineer.survival|arbitration.corpus.survival|arbitration.corrupted.survival|arbitration.orokin.survival|arbitration.infested.survival|arbitration.grineer.arena|arbitration.corpus.arena|arbitration.corrupted.arena|arbitration.orokin.arena|arbitration.infested.arena|arbitration.grineer.defection|arbitration.corpus.defection|arbitration.corrupted.defection|arbitration.orokin.defection|arbitration.infested.defection|arbitration.grineer.infestedsalvage|arbitration.corpus.infestedsalvage|arbitration.corrupted.infestedsalvage|arbitration.orokin.infestedsalvage|arbitration.infested.infestedsalvage|arbitration.grineer.interception|arbitration.corpus.interception|arbitration.corrupted.interception|arbitration.orokin.interception|arbitration.infested.interception|arbitration.grineer.sanctuaryonslaught|arbitration.corpus.sanctuaryonslaught|arbitration.corrupted.sanctuaryonslaught|arbitration.orokin.sanctuaryonslaught|arbitration.infested.sanctuaryonslaught|kuva.excavation|kuva.mobiledefense|kuva.extermination|kuva.assassination|kuva.rescue|kuva.sabotage|kuva.defense|kuva.disruption|kuva.survival|kuva.spy|kuva.arena|kuva.capture|kuva.defection|kuva.hijack|kuva.infestedsalvage|kuva.interception|kuva.sanctuaryonslaught|vauban|vandal|wraith|skin|helmet|nitain|mutalist|weapon|fieldron|detonite|mutagen|aura|neuralSensors|orokinCell|alloyPlate|circuits|controlModule|ferrite|gallium|morphics|nanoSpores|oxium|rubedo|salvage|plastids|polymerBundle|argonCrystal|cryotic|tellurium|neurodes|nightmare|endo|reactor|catalyst|forma|synthula|exilus|riven|kavatGene|kubrowEgg|traces|other|credits|events|syndicates|conclave|deals|cetus|ostrons|earth|vallis|nightwave|rss|arbitration|kuva|opts|forum.staff|twitter.tweet|twitter.retweet|twitter.reply|twitter.quote|twitter|fissures.t1|fissures.excavation|fissures.t2|fissures.t3|fissures.t4|fissures.t5|fissures.mobiledefense|fissures.extermination|fissures.assassination|fissures.rescue|fissures.sabotage|fissures.defense|fissures.disruption|fissures.survival|fissures.spy|fissures.arena|fissures.capture|fissures.defection|fissures.hijack|fissures.infestedsalvage|fissures.interception|fissures.sanctuaryonslaught|fissures|all|items|syndicates|clantech|deals|resources)*(?:\\s+in\\s+)?((?:(?:<#)?(\\d{15,20})(?:>)?)|here)?"},"path":"Tracking/Untrack.js","usages":[{"description":"Show tracking command for untracking events","parameters":[]},{"description":"Untrack an event or events","parameters":["event(s) to untrack"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"utilities.dump","call":"dump","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^dumps?$"},"path":"Utilities/Dump.js","usages":[{"description":"Dump a channel config to a channel","parameters":["JSON configuration file"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.getcommandids","call":"getcommandids","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":true,"regex":{"flags":"i","body":"^getcommandidss?$"},"path":"Utilities/GetCommandIds.js","usages":[{"description":"Get list of bot command ids available for you to view","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"inline.poll","call":"poll:","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"poll(?:\\s*\\((\\d*)\\))?:.+"},"path":"Utilities/PollInline.js","usages":[{"description":"Create a simple poll","parameters":["poll statement"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"inline.roll","call":"roll?","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"left or right[:\\?]"},"path":"Utilities/RollInline.js","usages":[{"description":"roll between rivens","parameters":["riven link to vote about rolling"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"util.serverInfo","call":"serverinfo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^serverinfos?$"},"path":"Utilities/ServerInfo.js","usages":[{"description":"Get info about current server","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"utilities.transmit","call":"transmit","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^transmits?$"},"path":"Utilities/Transmit.js","usages":[{"description":"Send Solaris-esque transmission to a channel","parameters":["JSON configuration file"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"util.userinfo","call":"userinfo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"^userinfo\\s*(?:(?:<@)(\\d+)(?:>))?"},"path":"Utilities/UserInfo.js","usages":[{"description":"Get info about a user","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.clearwelcomemessage","call":"clear welcome message","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear welcome messages?$"},"path":"Welcoming/ClearWelcome.js","usages":[{"description":"Clears all messages (non-DM) for this guild.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"settings.clearwelcomedm","call":"clear welcome dm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^clear welcome dms?$"},"path":"Welcoming/ClearWelcomeDM.js","usages":[{"description":"Clears all welcome direct messages for the server.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.setwelcome","call":"set welcome message","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^set welcome message\\s?((.+|\\n)+)?$"},"path":"Welcoming/SetWelcome.js","usages":[{"description":"Set welcome message for this server in this channel","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"settings.setwelcomedm","call":"add welcome dm","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":false,"requiresAuth":true,"regex":{"flags":"i","body":"^add welcome dm\\s?((.+|\\n)+)?$"},"path":"Welcoming/SetWelcomeDM.js","usages":[{"description":"Add a welcome message for this server in this channel to send to a user in DM","parameters":["message"]}],"blacklistable":true,"enabled":true,"game":"UTIL"},{"id":"warframe.worldstate.alerts","call":"alert","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^alerts?\\s?(?:(compact))?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Alerts.js","usages":[{"description":"Display the currently active alerts","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.arbitration","call":"arbi","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"","body":"^arbi(?:tration)?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Arbitration.js","usages":[{"description":"Display the currently active arbitration","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.baro","call":"baro","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^baro(?:\\s+on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Baro.js","usages":[{"description":"Display the current status of the Void Trader","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"inline.borko","call":"when borko","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":true,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"gi","body":"(?:where|when|whe|why|which).*(?:borko|baro|bimjo|bonko|bilbo|bermo|barmo|bruno|borso|borneo|bosnia|beerr?ow)"},"path":"Worldstate/BaroInline.js","usages":[{"description":"Display the current status of the Void Trader","parameters":[]}],"blacklistable":true,"enabled":true,"game":"CORE"},{"id":"warframe.worldstate.conclaveChallenges","call":"conclave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^conclave(?:\\s+(all|day|week))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/ConclaveChallenges.js","usages":[{"description":"Display conclave challenges for a challenge type.","parameters":["conclave category"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.construction","call":"construction","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^construction(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Construction.js","usages":[{"description":"Display current construction progress.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.darvo","call":"darvo","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^darvo(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Darvo.js","usages":[{"description":"Displays today's Darvo deal","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.misc.cycle","call":"cycle","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^cycle\\s?(earth)?"},"path":"Worldstate/EarthCycle.js","usages":[{"description":"Display Cetus's current cycle progress","parameters":[]},{"description":"Display Earth's current cycle progress","parameters":["earth"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.acolytes","call":"acolyte","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^acolytes?(?:\\s+on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Enemies.js","usages":[{"description":"Display any currently active acolyte-style enemies.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.events","call":"events","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^events(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Event.js","usages":[{"description":"Display current events.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.featureddeal","call":"featureddeal","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^featured\\s?deals?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/FeaturedDeal.js","usages":[{"description":"Displays current featured deals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.fissures","call":"fissure","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^fissures?(?:\\s?(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Fissures.js","usages":[{"description":"Get the current list of Void Fissure Missions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.invasions","call":"invasion","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^invasions?(?:\\s?(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Invasions.js","usages":[{"description":"Display the currently active Invasions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.kuva","call":"kuva","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^kuvas?$"},"path":"Worldstate/Kuva.js","usages":[{"description":"Display the currently active kuva missions","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.news","call":"news","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^news\\s?(?:(compact))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/News.js","usages":[{"description":"Display the currently active news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.nightwave","call":"nightwave","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^nightwaves?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Nightwave.js","usages":[{"description":"Display the currently active nightwave season","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.rjoutpost","call":"outpost","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^outpost\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Outpost.js","usages":[{"description":"Display the activity status of the Sentient Outpost","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.populardeals","call":"popular deal","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^popular\\s?deals?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/PopularSale.js","usages":[{"description":"Displays current featured deals","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.primeaccess","call":"primeaccess","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^prime\\s?access(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/PrimeAccess.js","usages":[{"description":"Display the currently active prime access news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.simaris","call":"simaris","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"(^simaris(?:\\s+on\\s+(pc|ps4|xb1|swi))?$)|(^simaris(?:\\s+target\\s+([\\sa-zA-Z0-9]+))?$)"},"path":"Worldstate/Simaris.js","usages":[{"description":"Display current Sanctuary status.","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.solaris","call":"solaris","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^solariss?\\s?(?:on\\s+(pc|ps4|xb1|swi))?"},"path":"Worldstate/Solaris.js","usages":[{"description":"Display the currently active Solaris bounties","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.sorties","call":"sortie","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^sorties?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Sorties.js","usages":[{"description":"Display the currently active sorties","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.syndicate","call":"syndicate","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^syndicate\\s?(?:(arbiters of hexis|cephalon suda|new loka|perrin sequence|red veil|steel meridian|ostrons|assassins|quills|solaris united|vox solaris|all))?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Syndicates.js","usages":[{"description":"Display syndicate nodes for a syndicate.","parameters":["syndicate"]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"},{"id":"warframe.worldstate.updates","call":"update","delimiters":{"begin":"<","end":">"},"isCustomCommand":false,"isInline":false,"ownerOnly":false,"allowDM":true,"requiresAuth":false,"regex":{"flags":"i","body":"^updates?(?:\\s+on\\s+(pc|ps4|xb1|swi))?$"},"path":"Worldstate/Updates.js","usages":[{"description":"Display the currently active update news","parameters":[]}],"blacklistable":true,"enabled":true,"game":"WARFRAME"}] \ No newline at end of file diff --git a/src/EventHandler.js b/src/EventHandler.js index faccdb96d..aa72a45e1 100644 --- a/src/EventHandler.js +++ b/src/EventHandler.js @@ -78,7 +78,8 @@ class EventHandler { * @returns {Promise} resolution of handlers execution */ async handleEvent(args) { - return Promise.all(this.handlers.filter(handler => handler.event === args.event) + return Promise.all(this.handlers + .filter(handler => handler.event === args.event) .map(async handler => handler.execute(...args.args))); } } diff --git a/src/bot.js b/src/bot.js index 62b754da4..e0ff9ad09 100644 --- a/src/bot.js +++ b/src/bot.js @@ -57,7 +57,7 @@ class Genesis { * @private */ this.client = new Client({ - fetchAllMembers: false, + fetchAllMembers: true, ws: { compress: true, }, @@ -192,6 +192,7 @@ class Genesis { this.client.on('messageDelete', async message => this.eventHandler.handleEvent({ event: 'messageDelete', args: [message] })); this.client.on('messageDeleteBulk', async messages => this.eventHandler.handleEvent({ event: 'messageDeleteBulk', args: [messages] })); + this.client.on('guildMemberUpdate', async (oldMember, newMember) => this.eventHandler.handleEvent({ event: 'guildMemberUpdate', args: [oldMember, newMember] })); this.client.on('guildMemberAdd', async guildMember => this.eventHandler.handleEvent({ event: 'guildMemberAdd', args: [guildMember] })); this.client.on('guildMemberRemove', async guildMember => this.eventHandler.handleEvent({ event: 'guildMemberRemove', args: [guildMember] })); this.client.on('guildBanAdd', async (guild, user) => this.eventHandler.handleEvent({ event: 'guildBanAdd', args: [guild, user] })); diff --git a/src/commands/Roles/TrackRole.js b/src/commands/Roles/TrackRole.js new file mode 100644 index 000000000..bec099f1e --- /dev/null +++ b/src/commands/Roles/TrackRole.js @@ -0,0 +1,55 @@ +'use strict'; + +const Command = require('../../models/Command.js'); +const { captures: { channel: cc, role: rc } } = require('../../CommonFunctions'); + +class TrackRole extends Command { + /** + * Constructs a callable command + * @param {Genesis} bot The bot object + */ + constructor(bot) { + super(bot, 'settings.roles.track', 'r track', 'Track a role in a server', 'UTIL'); + this.requiresAuth = true; + this.allowDM = false; + this.regex = new RegExp(`^${this.call} ${cc} ${rc}`, 'i'); + this.usages = [ + { + description: 'Add a new channel <-> role stats binding', + parameters: ['channel', 'role'], + }, + ]; + } + + /** + * Run the command + * @param {Message} message Message with a command to handle, reply to, + * or perform an action based on parameters. + * @returns {string} success status + */ + async run(message) { + const { guild } = message; + const channelId = (message.strippedContent.match(cc) || [])[0] + .replace('<#', '') + .replace('>', ''); + + if (!channelId) return this.messageManager.statuses.FAILURE; + const channel = guild.channels.get(channelId); + if (!channel) return this.messageManager.statuses.FAILURE; + + const roleId = (message.strippedContent.replace(channelId, '') + .match(rc) || [])[0] + .replace('<@&', '') + .replace('>', ''); + + if (!roleId) return this.messageManager.statuses.FAILURE; + const role = guild.roles.get(roleId); + if (!role) return this.messageManager.statuses.FAILURE; + + await this.settings.trackRole(guild, channel, role); + this.messageManager.notifySettingsChange(message, true, true); + return this.messageManager.statuses.SUCCESS; + } +} + +module.exports = TrackRole; diff --git a/src/commands/Roles/UntrackRole.js b/src/commands/Roles/UntrackRole.js new file mode 100644 index 000000000..5bbdc569a --- /dev/null +++ b/src/commands/Roles/UntrackRole.js @@ -0,0 +1,48 @@ +'use strict'; + + +const Command = require('../../models/Command.js'); +const { captures: { role: rc } } = require('../../CommonFunctions'); + +class UntrackRole extends Command { + /** + * Constructs a callable command + * @param {Genesis} bot The bot object + */ + constructor(bot) { + super(bot, 'settings.roles.untrack', 'r untrack', 'Untrack a role in a server', 'UTIL'); + this.requiresAuth = true; + this.allowDM = false; + this.regex = new RegExp(`^${this.call} ${rc}`, 'i'); + this.usages = [ + { + description: 'Remove an existing role channel binding', + parameters: ['channel', 'role'], + }, + ]; + } + + /** + * Run the command + * @param {Message} message Message with a command to handle, reply to, + * or perform an action based on parameters. + * @returns {string} success status + */ + async run(message) { + const { guild } = message; + + const roleId = (message.strippedContent.match(rc) || [])[0] + .replace('<@&', '') + .replace('>', ''); + + if (!roleId) return this.messageManager.statuses.FAILURE; + const role = guild.roles.get(roleId); + if (!role) return this.messageManager.statuses.FAILURE; + + await this.settings.untrackRole(guild, role); + this.messageManager.notifySettingsChange(message, true, true); + return this.messageManager.statuses.SUCCESS; + } +} + +module.exports = UntrackRole; diff --git a/src/commands/Settings/Enable.js b/src/commands/Settings/Enable.js index 43026f7ff..4e15f828f 100644 --- a/src/commands/Settings/Enable.js +++ b/src/commands/Settings/Enable.js @@ -1,8 +1,8 @@ 'use strict'; const Command = require('../../models/Command.js'); -const EnableUsageEmbed = require('../../embeds/EnableUsageEmbed.js'); -const EnableInfoEmbed = require('../../embeds/EnableInfoEmbed.js'); +const EnableUsageEmbed = require('../../embeds/EnableUsageEmbed'); +const EnableInfoEmbed = require('../../embeds/EnableInfoEmbed'); const { getTarget, getChannels, captures, createGroupedArray, } = require('../../CommonFunctions.js'); diff --git a/src/commands/Settings/Settings.js b/src/commands/Settings/Settings.js index 6efa31b44..f16eecdf9 100644 --- a/src/commands/Settings/Settings.js +++ b/src/commands/Settings/Settings.js @@ -1,6 +1,8 @@ 'use strict'; const { MessageEmbed } = require('discord.js'); + +const BaseEmbed = require('../../embeds/BaseEmbed'); const Command = require('../../models/Command.js'); const { getChannels, setupPages, constructTypeEmbeds, constructItemEmbeds, @@ -165,6 +167,17 @@ class Settings extends Command { .map(obj => `**${obj.command}** ${obj.isAllowed ? 'allowed' : 'denied'} for ${this.evalAppliesTo(obj.type, obj.appliesToId, message)}`).join('\n'); checkAndMergeEmbeds(pages, createChunkedEmbed(guildParts, 'Guild Permissions', '\n')); + const trackedRoles = await this.settings.getTrackedRoles(message.guild); + const trackedRolePage = new BaseEmbed(); + trackedRolePage.setTitle('Role Stats Channels'); + Object.keys(trackedRoles).forEach((role) => { + trackedRolePage.addField( + message.guild.roles.get(role).name, + message.guild.channels.get(trackedRoles[role]).name, + ); + }); + pages.push(trackedRolePage); + pages = pages.filter(page => JSON.stringify(page) !== '{}'); if (pages.length) { diff --git a/src/eventHandlers/Ready.js b/src/eventHandlers/Ready.js index f8520aa3a..28750a7d2 100644 --- a/src/eventHandlers/Ready.js +++ b/src/eventHandlers/Ready.js @@ -9,7 +9,7 @@ const FeedsNotifier = require('../notifications/FeedsNotifier'); const TwitchNotifier = require('../notifications/TwitchNotifier'); const MessageManager = require('../settings/MessageManager'); -const { timeDeltaToMinutesString, fromNow, games, giveawayDefaults } = require('../CommonFunctions'); +const { timeDeltaToMinutesString, fromNow, games } = require('../CommonFunctions'); const max = { cetus: { @@ -101,7 +101,7 @@ class OnReadyHandle extends Handler { embedColor: '#748BD7', embedColorEnd: '#FF0000', reaction: '🎉', - } + }, }); this.logger.info('Giveaways initialized!'); } diff --git a/src/eventHandlers/UpdateGuildStatistics.js b/src/eventHandlers/UpdateGuildStatistics.js new file mode 100644 index 000000000..b9cf5d50a --- /dev/null +++ b/src/eventHandlers/UpdateGuildStatistics.js @@ -0,0 +1,26 @@ +'use strict'; + +const { games } = require('../CommonFunctions'); + +class UpdateGuildStatistics extends require('../models/BaseEventHandler') { + constructor(bot) { + super(bot, 'handlers.statsupdate', 'guildMemberUpdate'); + } + + async execute(...[, newMember]) { + if (!games.includes('UTIL')) return; + this.logger.debug(`Running ${this.id} for ${this.event}. Params: ${newMember.guild}`); + + const { guild } = newMember; + const mappedRoles = await this.settings.getTrackedRoles(guild); + + guild.roles + .filter(r => Object.keys(mappedRoles).includes(r.id)) + .each((role) => { + const channel = guild.channels.get(mappedRoles[role.id]); + channel.setName(`${role.name} :: ${role.members.size}`); + }); + } +} + +module.exports = UpdateGuildStatistics; diff --git a/src/settings/DatabaseQueries/StatisticsQueries.js b/src/settings/DatabaseQueries/StatisticsQueries.js new file mode 100644 index 000000000..1f668a685 --- /dev/null +++ b/src/settings/DatabaseQueries/StatisticsQueries.js @@ -0,0 +1,37 @@ +'use strict'; + +const SQL = require('sql-template-strings'); + +class StatisticsQueries { + constructor(db) { + this.db = db; + } + + async trackRole(guild, channel, role) { + return this.db.query(SQL` + INSERT IGNORE INTO role_stats + (guild_id, channel_id, role_id) + VALUES (${guild.id}, ${channel.id}, ${role.id}) + `); + } + + async untrackRole(guild, role) { + return this.db.query(SQL` + DELETE FROM role_stats + WHERE guild_id = ${guild.id} + AND role_id = ${role.id} + `); + } + + async getTrackedRoles(guild) { + const q = SQL`SELECT role_id, channel_id FROM role_stats WHERE guild_id = ${guild.id}`; + const map = {}; + const res = (await this.db.query(q))[0]; + res.forEach(({ role_id: roleId, channel_id: channelId }) => { + map[roleId] = channelId; + }); + return map; + } +} + +module.exports = StatisticsQueries;