[ { "id": "splitinputseparator", "name": "split", "url": "https://docs.atlas.bot/tags/arrays-and-objects#splitinputseparator", "signature": "{split;input;separator}", "longDescription": "Splits `input` into an array at `separator`. `separator` can be an arbitrary string or regex pattern.\n\n```pella\n{split;one,two,three;,} // {[one;two;three]}\r\n{split;woah party tricks;/ +/g} // {[woah;party;tricks]}\r\n{split;one,two,three;/(,)/g} // {[one;,;two;,;three]}, you can use groups to keep the separator in the output array.\n```\n", "shortDescription": "Split a string into an array of strings.", "expensive": false, "disableInLoop": false }, { "id": "joinarrayseparator", "name": "join", "url": "https://docs.atlas.bot/tags/arrays-and-objects#joinarrayseparator", "signature": "{join;array;separator}", "longDescription": "Join the items of an array together with the given separator.\n\n```pella\n{=array;{[one;two;three]}}\r\n{join;{$array};,} // one,two,three\n```\n", "shortDescription": "Join an array into a string", "expensive": false, "disableInLoop": false }, { "id": "push-returnarrayvalue", "name": "push", "url": "https://docs.atlas.bot/tags/arrays-and-objects#push-returnarrayvalue", "signature": "{push return?;array;value}", "longDescription": "Adds an item to the end of an array.\n\nThis will mutate the original array, which is why nothing is returned by default.\n\n```pella\n{=array;{[one]}}\r\n{push;{$array};two} // no output\r\n{$array} // {[one;two]}\r\n{push return;{$array};three} // {[one;two;three]}\n```\n", "shortDescription": "Add an item to an array", "expensive": false, "disableInLoop": false }, { "id": "pop", "name": "pop", "url": "https://docs.atlas.bot/tags/arrays-and-objects#pop", "signature": "{pop}", "longDescription": "Returns and deletes the last item of an array.\n\n```pella\n{=array;{[one;two;three]}}\r\n{pop;{$array}} // three\r\n{$array} // {[onw;two]}\n```\n", "shortDescription": "Get the last item in an array", "expensive": false, "disableInLoop": false }, { "id": "shift", "name": "shift", "url": "https://docs.atlas.bot/tags/arrays-and-objects#shift", "signature": "{shift}", "longDescription": "Returns and deletes the first item of an array.\n\n```pella\n{=array;{[one;two;three]}}\r\n{shift;{$array}} // one\r\n{$array} // {[two;three]}\n```\n", "shortDescription": "Get the first item in an array", "expensive": false, "disableInLoop": false }, { "id": "unshift-returnarrayvalue", "name": "unshift", "url": "https://docs.atlas.bot/tags/arrays-and-objects#unshift-returnarrayvalue", "signature": "{unshift return?;array;value}", "longDescription": "Adds an item to the front of an array. Essentially the same as `{push}` but the item is added to the beginning of the array.\n\n```pella\n{=array;{[three]}}\r\n{unshift;{$array};two} // no output\r\n{$array} // {[two;three]}\r\n{unshift return;{$array};one} // {[one;two;three]}\n```\n", "shortDescription": "Add an item to the beginning of an array", "expensive": false, "disableInLoop": false }, { "id": "forinititerablebody", "name": "for", "url": "https://docs.atlas.bot/tags/arrays-and-objects#forinititerablebody", "signature": "{for;init;iterable;body}", "longDescription": "Iterates over array items until `{break}` is encountered or it reaches the end of the array.\n\n```pella\n{=array;{[one;two;three]}}\r\n\r\n// regular format\r\n{for;{=item};{$array};{$item}} // one two three\r\n\r\n// block format\r\n[#for;{=item};{$array}]\r\n {$item}\r\n[/for]\n```\n", "shortDescription": "Iterate over array items or loop however many times is necessary.", "aliases": [ "#for" ], "expensive": true, "disableInLoop": true }, { "id": "keysobject", "name": "keys", "url": "https://docs.atlas.bot/tags/arrays-and-objects#keysobject", "signature": "{keys;object}", "longDescription": "Get the keys of an object. Useful when you want to iterate over the keys or values of an object. Only top-level keys are returned\n\n```pella\n{=object.key;value}\r\n{=object.nested.key;value}\r\n{keys;{$object}} // {[key;nested]}\n```\n", "shortDescription": "Get the keys of an object", "expensive": false, "disableInLoop": false }, { "id": "includesarrayitem", "name": "includes", "url": "https://docs.atlas.bot/tags/arrays-and-objects#includesarrayitem", "signature": "{includes;array;item}", "longDescription": "Check whether an array includes an item.\n\n```pella\n{=array;{[one;two;three]}}\r\n{includes;{$array};two} // true\n```\n", "shortDescription": "Check whether the target contains the value", "expensive": false, "disableInLoop": false }, { "id": "sortarraykey", "name": "sort", "url": "https://docs.atlas.bot/tags/arrays-and-objects#sortarraykey", "signature": "{sort;array;key?}", "longDescription": "Sort an array. Returns a new array and does not mutate the original.\n\n* `array` the array to sort\n* `key` the key to sort by if the array is an array of objects.\n", "shortDescription": "Sort an array. Will not mutate the original array", "expensive": false, "disableInLoop": false }, { "id": "slicetargetstartend", "name": "slice", "url": "https://docs.atlas.bot/tags/arrays-and-objects#slicetargetstartend", "signature": "{slice;target;start;end}", "longDescription": "Get a slice of an array or string. If `end` is not specified, it is assumed to be the length of the target.\n\n```pella\n{=array;{[one;two;three]}}\r\n{slice;{$array};1} // {[two;three]}\r\n{slice;{$array};1;2} // {[two]}\n```\n", "shortDescription": "Get a slice of an array or string", "expensive": false, "disableInLoop": false }, { "id": "index-modearrayvalue", "name": "index", "url": "https://docs.atlas.bot/tags/arrays-and-objects#index-modearrayvalue", "signature": "{index mode?;array;value}", "longDescription": "Return the index at which a given element can be found in the array. Defaults to the first instance.\n\n* `mode?` an option mode for indexing the array. Can be `last` or `all`.\n* `array` the array to index\n* `value` the value to look for\n", "shortDescription": "Return the index at which a given element can be found in the array", "expensive": false, "disableInLoop": false }, { "id": "filterarrayvalueoperator", "name": "filter", "url": "https://docs.atlas.bot/tags/arrays-and-objects#filterarrayvalueoperator", "signature": "{filter;array;value;operator?}", "longDescription": "Return an array with just the elements that pass a check.\n\n* `array` the array to filter\n* `value` the value to filter by\n* `operator` the operator to filter by\n\nThe available operators are `==`, `===`, `!=`, `!==`, `>`, `>=`, `<`, `<=`, `startswith`, `endswith`, `contains`, `includes`, `has` and `matches`.\n", "shortDescription": "Return an array with just the elements that pass a check.", "expensive": false, "disableInLoop": false }, { "id": "splicearrayarray", "name": "splice", "url": "https://docs.atlas.bot/tags/arrays-and-objects#splicearrayarray", "signature": "{splice;array;array...}", "longDescription": "Combines two or more arrays into one.\n\n```pella\n{=first_array;{[one;two;three]}}\r\n{=second_array;{[four;five;six]}}\r\n\r\n{splice;{$first_array};{$second_array}} // {[one;two;three;four;five;six]}\n```\n", "shortDescription": "Combine multiple arrays or strings together.", "aliases": [ "concat", "combine" ], "expensive": false, "disableInLoop": false }, { "id": "channelmentionchannel", "name": "channel.mention", "url": "https://docs.atlas.bot/tags/channel#channelmentionchannel", "signature": "{channel.mention;channel}", "longDescription": "Returns a string with a channel mention.\n", "shortDescription": "Get the #mention for the channel", "aliases": [ "channel" ], "expensive": false, "disableInLoop": false }, { "id": "channelidchannel", "name": "channel.id", "url": "https://docs.atlas.bot/tags/channel#channelidchannel", "signature": "{channel.id;channel}", "longDescription": "Returns the ID of a channel.\n", "shortDescription": "Get the id of the channel", "expensive": false, "disableInLoop": false }, { "id": "channeltypechannel", "name": "channel.type", "url": "https://docs.atlas.bot/tags/channel#channeltypechannel", "signature": "{channel.type;channel}", "longDescription": "Returns an integer for the [channel type](https://discord.com/developers/docs/resources/channel#channel-object-channel-types).\n", "shortDescription": "Get the type of the channel. ", "expensive": false, "disableInLoop": false }, { "id": "channelcreatedatchannel", "name": "channel.createdAt", "url": "https://docs.atlas.bot/tags/channel#channelcreatedatchannel", "signature": "{channel.createdAt;channel}", "longDescription": "Returns a [timestamp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#description) for the creation date of a channel that can be used with [{time}](https://documentation.atlas.bot/en/scripts/tags/global#time-formattime).\n", "shortDescription": "Get the time that this channel was created at.", "expensive": false, "disableInLoop": false }, { "id": "channelnsfwchannel", "name": "channel.nsfw", "url": "https://docs.atlas.bot/tags/channel#channelnsfwchannel", "signature": "{channel.nsfw;channel}", "shortDescription": "Check whether this channel contains explicit content.", "expensive": false, "disableInLoop": false }, { "id": "channelnamechannel", "name": "channel.name", "url": "https://docs.atlas.bot/tags/channel#channelnamechannel", "signature": "{channel.name;channel}", "longDescription": "Returns the name of a channel.\n", "shortDescription": "Get the name of the channel", "expensive": false, "disableInLoop": false }, { "id": "channelpositionchannel", "name": "channel.position", "url": "https://docs.atlas.bot/tags/channel#channelpositionchannel", "signature": "{channel.position;channel}", "longDescription": "Returns the position of the channel.\n\nDiscord sorts channels by their category, then their type, then their position. Two channels can have the same position and a channel at the bottom of the list can have a higher position than a channel at the top of the list, because of the category-first sorting.\n", "shortDescription": "Get the position of a channel", "expensive": false, "disableInLoop": false }, { "id": "channellastmessageidchannel", "name": "channel.lastMessageId", "url": "https://docs.atlas.bot/tags/channel#channellastmessageidchannel", "signature": "{channel.lastMessageId;channel}", "longDescription": "Returns the ID of the last message sent in a channel.\n", "shortDescription": "Get the last message sent in a channel.", "expensive": false, "disableInLoop": false }, { "id": "channeltopicchannel", "name": "channel.topic", "url": "https://docs.atlas.bot/tags/channel#channeltopicchannel", "signature": "{channel.topic;channel}", "longDescription": "Returns a channel topic, also known as channel description.\n", "shortDescription": "Get the topic of a channel", "aliases": [ "channel.description" ], "expensive": false, "disableInLoop": false }, { "id": "channelparentid", "name": "channel.parentId", "url": "https://docs.atlas.bot/tags/channel#channelparentid", "signature": "{channel.parentId}", "longDescription": "Get the parent ID of the channel. For regular channels this is the category ID. For threads this is the ID of the parent channel.\n\n```pella\n{channel.parentId} // \"\", a channel with no parent\n{channel.parentId} // \"532902705404837888\", a regular channel with a parent\n{channel.parentId} // \"532902728834351115\", a thread channel with a parent\n```\n", "shortDescription": "Get the parent of a channel.", "expensive": false, "disableInLoop": false }, { "id": "channelisthread", "name": "channel.isThread", "url": "https://docs.atlas.bot/tags/channel#channelisthread", "signature": "{channel.isThread}", "shortDescription": "Determine whether the channel is a thread", "expensive": false, "disableInLoop": false }, { "id": "channelisvoice", "name": "channel.isVoice", "url": "https://docs.atlas.bot/tags/channel#channelisvoice", "signature": "{channel.isVoice}", "shortDescription": "Determine whether the channel is a voice channel", "expensive": false, "disableInLoop": false }, { "id": "channelistextable", "name": "channel.isTextable", "url": "https://docs.atlas.bot/tags/channel#channelistextable", "signature": "{channel.isTextable}", "shortDescription": "Determine whether a channel can accept text messages", "expensive": false, "disableInLoop": false }, { "id": "channeledit-name-topic-nsfw-archived-ratelimit-parentchannel", "name": "channel.edit", "url": "https://docs.atlas.bot/tags/channel#channeledit-name-topic-nsfw-archived-ratelimit-parentchannel", "signature": "{channel.edit name? topic? nsfw? archived? ratelimit? parent?;channel}", "longDescription": "Updates a channel.\n\n#### Arguments\n\n* `name`: The new name of the channel.\n* `topic`: The new topic of the channel.\n* `nsfw`: Whether the channel is NSFW or not.\n* `archived`: Whether this channel is archived; channel must be a thread.\n* `ratelimit`: How often users can send messages in this channel, for example `1m`.\n* `parent`: The category to move the channel to.\n", "shortDescription": "Edit the options for a channel", "expensive": true, "disableInLoop": false }, { "id": "channelstartthread-auto_archive_duration-ratelimit-invitable-is_private-return_id-channelnamemessage", "name": "channel.startThread", "url": "https://docs.atlas.bot/tags/channel#channelstartthread-auto_archive_duration-ratelimit-invitable-is_private-return_id-channelnamemessage", "signature": "{channel.startThread auto_archive_duration? ratelimit? invitable? is_private? return_id? channel?;name;message?}", "longDescription": "Creates a new thread.\n\n* `name` the name of the thread.\n* `message` the message the thread is created from.\n* `auto_archive_duration` the time until threads are archived after inactivity. Can be `one_hour`, `one_day`, `three_days` or `one_week`.\n* `ratelimit` how often users can send messages in the thread, for example `1m`.\n* `invitable` whether non-moderators can add other non-moderators to the thread; only available on private threads.\n* `is_private` whether the read is private, must not have a message to be private.\n* `return_id` whether to return the ID of the created thread.\n* `channel` the channel to create the thread on.\n", "shortDescription": "Create a new thread channel", "expensive": true, "disableInLoop": false }, { "id": "channelgetpinschannel", "name": "channel.getPins", "url": "https://docs.atlas.bot/tags/channel#channelgetpinschannel", "signature": "{channel.getPins;channel?}", "longDescription": "Returns a list of pinned message IDs in a channel.\n\n* `channel` The channel to get the pins from. If not provided, the context channel is used.\n", "shortDescription": "Get the pins for a channel", "expensive": true, "disableInLoop": false }, { "id": "channelcreate-name-type-topic-nsfw-parent-return_idchannel", "name": "channel.create", "url": "https://docs.atlas.bot/tags/channel#channelcreate-name-type-topic-nsfw-parent-return_idchannel", "signature": "{channel.create name type topic nsfw parent return_id;channel}", "longDescription": "Creates a new channel.\n\n#### Arguments\n\n* `name`: The name of the channel.\n* `type`: The [type](https://discord.com/developers/docs/resources/channel#channel-object-channel-types) of the channel. `guildtext`, `guild_text`, `GUILD_TEXT`, and `GuildText` are all valid and will all resolve to a guild text channel. IDs are also supported but the name is preferred.\n* `topic`: The topic of the channel.\n* `nsfw`: Whether the channel is NSFW or not.\n* `parent`: The parent channel, if any.\n* `return_id`: Whether to return the created channels ID or not.\n", "shortDescription": "Create a new channel", "expensive": true, "disableInLoop": false }, { "id": "channeldeletechannel", "name": "channel.delete", "url": "https://docs.atlas.bot/tags/channel#channeldeletechannel", "signature": "{channel.delete;channel}", "longDescription": "> This tag can do serious damage if you are not extremely careful with validating inputs. {.is-warning}\n\nDeletes a channel.\n", "shortDescription": "Delete a channel", "expensive": true, "disableInLoop": false }, { "id": "channelpurgechannel", "name": "channel.purge", "url": "https://docs.atlas.bot/tags/channel#channelpurgechannel", "signature": "{channel.purge;channel}", "longDescription": "Purge messages from a channel with various parameters.\n\n#### Arguments\n\n* `limit?` default: 100: The number of messages to purge, applied before filtering.\n\n* `channel?`: The channel to purge messages in.\n\n* `includePinned?` default: false: Whether to include pinned messages.\n\n* `newerThan?`: Messages that are newer than this time will be purged. Accepts a time value.\n\n* `olderThan?`: Messages that are older than this time will be purged. Accepts a time value.\n\n* `beforeMessage?`: Purge messages sent before this message.\n\n* `afterMessage?`: Purge messages sent after this message.\n\n* `including?`: Purge messages including this message. Can be a regex pattern.\n\n* `excluding?`: Purge messages excluding this message. Can be a regex pattern.\n\n* `author?`: Purge messages that were sent by this user.\n\n* `notAuthor?`: Purge messages that were not sent by this user.\n\n* `hasImage?`: Purge messages that do or do not contain an image.\n\n* `hasLink?`: Purge messages that do or do not contain a link.\n\n* `hasInvite?`: Purge messages that do or do not contain a server invite.\n\n* `hasAttachment?`: Purge messages that do or do not have an attachment.\n\n* `reason?`: The reason for deleting the channel.\n\n* `return_bool?` default: false: Whether to return true if messages were purged.\n", "shortDescription": "Purge messages from a channel with various parameters", "expensive": true, "disableInLoop": false }, { "id": "emojiidemoji", "name": "emoji.id", "url": "https://docs.atlas.bot/tags/emoji#emojiidemoji", "signature": "{emoji.id;emoji}", "longDescription": "The ID of the emoji. For guild emojis, this is the emoji snowflake. For native emojis this is the native emoji character.\n", "shortDescription": "Gets the guild emoji ID or native emoji character", "expensive": false, "disableInLoop": false }, { "id": "emojimarkdownemoji", "name": "emoji.markdown", "url": "https://docs.atlas.bot/tags/emoji#emojimarkdownemoji", "signature": "{emoji.markdown;emoji}", "longDescription": "Get the emoji formatted for a Discord message. This will return the custom guild emoji format for guild emojis and the native emoji character for native emojis.\n", "shortDescription": "Formats the emoji for Discord", "aliases": [ "emoji", "emoji.char" ], "expensive": false, "disableInLoop": false }, { "id": "emojinameemoji", "name": "emoji.name", "url": "https://docs.atlas.bot/tags/emoji#emojinameemoji", "signature": "{emoji.name;emoji}", "shortDescription": "Gets the name of an emoji", "expensive": false, "disableInLoop": false }, { "id": "emojiurlemoji", "name": "emoji.url", "url": "https://docs.atlas.bot/tags/emoji#emojiurlemoji", "signature": "{emoji.url;emoji}", "longDescription": "The URL to the emoji. For guild emojis, this is the .gif or .png link. For native emojis, this is a .png link to the twemoji image.\n", "shortDescription": "Gets the url of an emoji", "expensive": false, "disableInLoop": false }, { "id": "emojianimatedemoji", "name": "emoji.animated", "url": "https://docs.atlas.bot/tags/emoji#emojianimatedemoji", "signature": "{emoji.animated;emoji}", "longDescription": "Whether the emoji is animated. False for native emojis.\n", "shortDescription": "Gets whether an emoji is animated", "expensive": false, "disableInLoop": false }, { "id": "emojicategoryemoji", "name": "emoji.category", "url": "https://docs.atlas.bot/tags/emoji#emojicategoryemoji", "signature": "{emoji.category;emoji}", "longDescription": "Get the category of an emoji. For native emojis this matches the lowercase name of categories from the emoji picker in Discord, for example `people` or `objects`. For guild emojis this will be `guild`.\n", "shortDescription": "Gets the category of an emoji", "expensive": false, "disableInLoop": false }, { "id": "emojialiasesemoji", "name": "emoji.aliases", "url": "https://docs.atlas.bot/tags/emoji#emojialiasesemoji", "signature": "{emoji.aliases;emoji}", "longDescription": "Get the aliases for an emoji. Native emojis only.\n", "shortDescription": "Gets the aliases of an emoji", "expensive": false, "disableInLoop": false }, { "id": "optionname", "name": "option", "url": "https://docs.atlas.bot/tags/global#optionname", "signature": "{option;name}", "longDescription": "Get the value of a defined option.\n\n\"Example\n\nFor this example, we'll assume the user ran the command as `/inspect input:example text user:@Sylver#1058`\n\n {option;input} // \"example text\"\n {option;user} // \"111372124383428608\"\n {user.username;{option;user}} // \"Sylver\"\n\nAnd for this example, we'll assume the user ran the command as `/inspect input:example text`\n\n {option;input} // \"example text\"\n {option;user} // \"\", because the user didn't provide a user option\n", "shortDescription": "Get an interaction option", "expensive": false, "disableInLoop": false }, { "id": "time-format-totime", "name": "time", "url": "https://docs.atlas.bot/tags/global#time-format-totime", "signature": "{time format to;time}", "longDescription": "Formats time as a string. Is compatible with any of the `.createdAt` tags.\n\n#### Arguments\n\n* `time` Can be any time that the bot can parse. This includes millisecond timestamps `1644856250309`, unix timestamps `1644856250`, relative times `5 hours`, ISO timestamps `2022-02-14T16:31:26.725Z` and many others. Defaults to the current time.\n* `format` Can be a [timestamp style](https://discord.com/developers/docs/reference#message-formatting-timestamp-styles) - names or descriptions both work. If no style is provided, unix timestamp is returned. This should only be used when outputting time to users as it returns the time formatted with Discord's timestamp markdown.\n* `to` The Luxon format to use. Incompatible with `format`. See [Luxon's documentation](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens) for a list of all available formats.\n\n```pella\n{time} // 1636084903\n{time format=relative_time;5 hours ago} // 5 hours ago\n{time;2021-11-05T04:01:43.661Z} // 1636084903\n{time format=relative_time;2022-08-21} // in 10 months\n```\n", "shortDescription": "Get the current time, format it or return it in unix milliseconds.", "aliases": [ "utils.time" ], "expensive": false, "disableInLoop": false }, { "id": "casing-modeinput", "name": "casing", "url": "https://docs.atlas.bot/tags/global#casing-modeinput", "signature": "{casing mode;input}", "longDescription": "Changes the casing of a string.\n\nAccepted modes:\n`lower` for lowercase\n`upper` for uppercase\n`first` to capitalise the first letter\n`title` for \"Title Case\"\n`camel` for camelCase\n`constant` for CONSTANT\\_CASE\n", "shortDescription": "Change the casing of a string", "aliases": [ "case" ], "expensive": false, "disableInLoop": false }, { "id": "lengthstring_or_array", "name": "length", "url": "https://docs.atlas.bot/tags/global#lengthstring_or_array", "signature": "{length;string_or_array}", "longDescription": "Returns the number of characters in a string and the number of elements in an array.\n\n```pella\n{length;pog} // 3\n{length;{[one;two;three]}} // 3\n```\n", "shortDescription": "Get the length of a string or array.", "expensive": false, "disableInLoop": false }, { "id": "issnowflake-lax-return_idtarget", "name": "isSnowflake", "url": "https://docs.atlas.bot/tags/global#issnowflake-lax-return_idtarget", "signature": "{isSnowflake lax return_id;target}", "longDescription": "Determines whether the target string is a snowflake.\n\n#### Arguments\n\n* `lax`: Whether to accept snowflakes surrounded by characters or not.\n* `return_id`: Whether to return a boolean or an ID. If the target is not a snowflake and `return_id` is set to true, the tag outputs nothing.\n\n```pella\n{isSnowflake;111372124383428608} // true\n{isSnowflake;hello} // false\n{isSnowflake;123098123} // false\n{isSnowflake lax=true; hello 355876124779347968} // true\n{isSnowflake lax=true return_id=true;<@111372124383428608>} // 111372124383428608\n```\n", "shortDescription": "Determine whether the input string is a snowflake", "expensive": false, "disableInLoop": false }, { "id": "snippet-maxlength100-suffix-extratarget", "name": "snippet", "url": "https://docs.atlas.bot/tags/global#snippet-maxlength100-suffix-extratarget", "signature": "{snippet maxLength=100 suffix=… extra;target}", "longDescription": "Create a snippet of a string, truncating it if it is over the max length.\n\n#### Arguments\n\n* `maxLength`: The maximum length of the snippet.\n* `suffix`: The suffix to add to the end of the snippet if it is truncated.\n* `extra`: The extra text to add to the end of the snippet, regardless of whether its truncated.\n* `target`: The string to create a snippet from.\n", "shortDescription": "Create a short snippet of a string", "expensive": false, "disableInLoop": false }, { "id": "settingsplugincodesettingskey", "name": "settings", "url": "https://docs.atlas.bot/tags/global#settingsplugincodesettingskey", "signature": "{settings;pluginCode;settingsKey}", "longDescription": "Get a settings value from a plugin. This tag is intended mostly for internal use and as such there is no official list of all the settings keys available.\n\n#### Arguments\n\n* `pluginCode`: The code of the plugin to get settings of, for example `suggestions`.\n* `settingsKey`: The settings key to get, for example `anonymousSuggestions` would check if the bot should make suggestions anonymous for the suggestions plugin.\n", "shortDescription": "Get the settings for a plugin", "expensive": true, "disableInLoop": false }, { "id": "find-case_insensitivetrue-return_allfalsetargetpattern", "name": "find", "url": "https://docs.atlas.bot/tags/global#find-case_insensitivetrue-return_allfalsetargetpattern", "signature": "{find case_insensitive=true return_all=false;target;pattern}", "longDescription": "Finds `pattern` in `target` and returns the first match or all matches if specified. [Regular expressions](https://regexr.com/) are supported.\n\n#### Arguments\n\n* `case_insensitive`: Whether the search should ignore case or not. Is incompatible with regex; use the flag `i` instead.\n* `return_all`: Whether to return an array of all matches or only the first one. Cannot be used without `/regex/g`.\n* `target`: The string to search.\n* `pattern`: The string or regex pattern to find.\n\n```pella\n{find;hello world;hello} // hello\n{find;hello world;nothing}\n{find case_insensitive=false;hello world;HELLO} // HELLO\n{find;hello world;/hello/i} // hello\n{find return_all=true;hello hello hello world;/hello/ig} // {[hello;hello;hello]}\n```\n", "shortDescription": "Find a value in a string.", "expensive": false, "disableInLoop": false }, { "id": "replace-replace_alltrue-case_insensitivetruetargetpatternreplacement", "name": "replace", "url": "https://docs.atlas.bot/tags/global#replace-replace_alltrue-case_insensitivetruetargetpatternreplacement", "signature": "{replace replace_all=true case_insensitive=true;target;pattern;replacement}", "longDescription": "Replaces matches of `pattern` in `target` by `replacement`. [Regular expressions](https://regexr.com/) are supported.\n\n#### Arguments\n\n* `case_insensitive`: Whether the search should ignore case or not. Is incompatible with regex; use the flag `i` instead.\n* `replace_all`: Whether to replace all matches or only the first one. Is incompatible with regex; use the flag `g` instead.\n* `target`: The string to search.\n* `pattern`: The string or regex pattern to find.\n* `replacement`: The string to put in place of the pattern.\n\n```pella\n{replace replace_all=false;hello hello;hell;hey} // heyo hello\n{replace;hello hello;hell;hey} // heyo heyo\n{replace;hello hello;/hell/;hey} // heyo hello\n{replace;hello hello;/hell/g;hey} // heyo heyo\n```\n", "shortDescription": "Find and replace a value in a string.", "expensive": false, "disableInLoop": false }, { "id": "sleepduration", "name": "sleep", "url": "https://docs.atlas.bot/tags/global#sleepduration", "signature": "{sleep;duration}", "longDescription": "Holds up processing. This does not schedule execution for later, it pauses execution until the sleep duration is up. You should only use this in very specific cases and avoid it entirely if possible.\n", "shortDescription": "Temporarily hold up processing. Tags before it will run normally, tags after it will have to wait.", "expensive": false, "disableInLoop": true }, { "id": "math-precision_fixtrueexpr", "name": "math", "url": "https://docs.atlas.bot/tags/global#math-precision_fixtrueexpr", "signature": "{math precision_fix=true;expr}", "longDescription": "Evaluates math. `precision_fix` enables a hack that fixes floating point precision errors, but may cause issues in very specific circumstances. Realistically nothing you do with actions should require disabling `precision_fix`.\n\nValid operators are `+`, `-`, `*`, `/`, `%`, `&`, `|`, and `^`\nValid functions are `sqrt`, `log`, `sin`, `cos`, `tan`, `sign`, `round`, `floor`, `ceil`, and `abs`\n", "shortDescription": "Evaluate math expressions", "expensive": false, "disableInLoop": false }, { "id": "random-length1-return_arrayfalsehaystack", "name": "random", "url": "https://docs.atlas.bot/tags/global#random-length1-return_arrayfalsehaystack", "signature": "{random length=1 return_array=false;haystack}", "longDescription": "Gets a random item from a list. `length` is the number of items to return. When `length` is true, you can choose to return the random items in an array with `return_array`.\n\n```pella\n{random;123} // 2\n{random;{[1;2;3]}} // 1\n{random length=2;123} // 21\n{random length=2 return_array=true;123} // {[2;1]}\n```\n", "shortDescription": "Get a random item from the list.", "aliases": [ "choose" ], "expensive": false, "disableInLoop": false }, { "id": "fetchlink", "name": "fetch", "url": "https://docs.atlas.bot/tags/global#fetchlink", "signature": "{fetch;link}", "longDescription": "Performs a HTTP request to a URL.\n\n`application/json` will be parsed as JSON.\n`application/xml`, `text/xml`, `application/rss+xml` and `application/atom+xml` will be parsed as XML.\n\n {=data;{fetch;https://atlas.bot/api/status}}\\n{$data.body.ok} // true\n", "shortDescription": "Fetch a URL and return the response data.", "expensive": true, "disableInLoop": true }, { "id": "or-boolean", "name": "or", "url": "https://docs.atlas.bot/tags/global#or-boolean", "signature": "{or boolean?;...}", "longDescription": "Gets the first parameter that is not empty or falsy. The `boolean` option can be used to return a boolean instead of the first valid value.\n\n```pella\n{or;;two} // \"two\"\n{or;;} // no output\n{or;false;two} // \"two\"\n{or;one;two} // \"one\", \"two\" is never evaluated\n{or boolean;one;two} // true\n{or boolean;;} // false\n```\n", "shortDescription": "Check if any parameters are truthy", "expensive": false, "disableInLoop": false }, { "id": "and-boolean", "name": "and", "url": "https://docs.atlas.bot/tags/global#and-boolean", "signature": "{and boolean?;...}", "longDescription": "Ensures all parameters are present, returning the last parameter if all are valid. The `boolean` option can be used to return a boolean instead of the last parameter if all are valid.\n\n```pella\n{and;;two} // no output, \"two\" is never evaluated\n{and;one;two} // \"one\", \"two\" is evaluated\n{and;;} // no output\n{and boolean;one;two} // true\n{and boolean;one;} // false\n```\n", "shortDescription": "Check of all parameters are truthy", "expensive": false, "disableInLoop": false }, { "id": "formatnumbernumber", "name": "formatNumber", "url": "https://docs.atlas.bot/tags/global#formatnumbernumber", "signature": "{formatNumber;number}", "longDescription": "Formats a number. [Formats using the context locale if possible](https://en.wikipedia.org/wiki/Decimal_separator) (for example, the guild language).\n\n```pella\n{formatNumber;1000.5} // 1,000.5\n{formatNumber;1000.5} // 1 000,5 for some other languages\n```\n", "shortDescription": "Format a number to the servers locale", "aliases": [ "formatNum" ], "expensive": false, "disableInLoop": false }, { "id": "if", "name": "if", "url": "https://docs.atlas.bot/tags/global#if", "signature": "{if}", "longDescription": "Compares different values and executes instructions based on the result. Syntax is `{if;condition;run_if_true;run_if_false}`. `condition` is either a boolean or a comparison with two elements and an operator.\n\nThe available operators are `==`, `===`, `!=`, `!==`, `>`, `>=`, `<`, `<=`, `startswith`, `endswith`, `contains`, `includes`, `has` and `matches`.\n\n```pella\n// \"==\" is used for case-insensitive comparison\n{if;word;==;WORD;yay;nay} // yay\n\n// \"===\" is for case-sensitive comparison\n{if;word;===;WORD;yay;nay} // nay\n\n// \"matches\" can be used for matching regex\n{if;word;matches;/[a-z]+/gu;yay;nay} // yay\n\n// Boolean-like values are coerced to booleans before comparison\n{if;true;===;yes;yay;nay} // yay\n\n// Numbers are compared as numbers\n{if;5;<;10;yay;nay} // yay\n\n// Conditional parsing is used, so in this example only \"yay\" is ever sent.\n// This is an exception instead of a rule as most other tags will parse all parameters regardless.\n{if;true;{channel.send;yay};{channel.send;nay}} // yay\n```\n", "shortDescription": "Compare different values and do things based on the result.", "aliases": [ "#if" ], "expensive": false, "disableInLoop": false }, { "id": "break", "name": "break", "url": "https://docs.atlas.bot/tags/global#break", "signature": "{break}", "longDescription": "Breaks for-loops early. In this example, only the first item would ever be output.\n\n```pella\n{=array;{[one;two;three]}}\n[#for;{=item};{$array}]\n\t{$item}\n\t{break}\n[/for]\n```\n", "shortDescription": "Break out of a loop early", "aliases": [ "#break" ], "expensive": false, "disableInLoop": false }, { "id": "throwmessage", "name": "throw", "url": "https://docs.atlas.bot/tags/global#throwmessage", "signature": "{throw;message}", "longDescription": "Throws an engine error. Depending on your action setup, these will be shown to the user and logged just as regular engine errors would be.\n", "shortDescription": "Throw an error that stops processing unless it is handled by a {catch} tag.", "aliases": [ "#throw" ], "expensive": false, "disableInLoop": false }, { "id": "catchbodymessage", "name": "catch", "url": "https://docs.atlas.bot/tags/global#catchbodymessage", "signature": "{catch;body;message}", "longDescription": "Catches a thrown error.\n\n```pella\n{catch;{throw;Test error};Oh no! Something went wrong} // Oh no! Something went wrong\n{catch;{throw;Oopsy poopsy!}}\n{catch;{user.id}} // 111372124383428608\n```\n", "shortDescription": "Catch an engine error thrown by tags or a {throw} tag.", "aliases": [ "#catch" ], "expensive": false, "disableInLoop": false }, { "id": "repeatstrtimes", "name": "repeat", "url": "https://docs.atlas.bot/tags/global#repeatstrtimes", "signature": "{repeat;str;times}", "longDescription": "Repeats a string a given number of times.\n\n```pella\n{repeat;Hello;3} // HelloHelloHello\n```\n", "shortDescription": "Repeat a string a certain number of times.", "expensive": false, "disableInLoop": false }, { "id": "return", "name": "return", "url": "https://docs.atlas.bot/tags/global#return", "signature": "{return}", "longDescription": "Used to return early or to return rich data that may be butchered otherwise. Can be used in functions and the top-level scope. See more in the [returning](../scripts/returning.md) or [functions](../scripts/functions.md) sections.\n" }, { "id": "void", "name": "void", "url": "https://docs.atlas.bot/tags/global#void", "signature": "{void;...}", "longDescription": "Used to void the output of its children.\n\n```pella\nHello {void;World} // \"Hello \"\n```\n" }, { "id": "randomintminmax", "name": "randomInt", "url": "https://docs.atlas.bot/tags/global#randomintminmax", "signature": "{randomInt;min;max}", "longDescription": "Get a random number between `min` and `max`. If `max` is not specified, `min` is used as the maximum and `0` is used as the minimum.\n", "shortDescription": "Get a random integer between the given range.", "expensive": false, "disableInLoop": false }, { "id": "isurlinput", "name": "isUrl", "url": "https://docs.atlas.bot/tags/global#isurlinput", "signature": "{isUrl;input}", "longDescription": "Determine if `input` is a valid URL. This will not query the domain to see if it is registered, but it will check for a valid protocol and top-level domain.\n", "shortDescription": "Check if a string is a valid URL.", "aliases": [ "utils.isUrl" ], "expensive": false, "disableInLoop": false }, { "id": "slicetargetstartend", "name": "slice", "url": "https://docs.atlas.bot/tags/global#slicetargetstartend", "signature": "{slice;target;start;end}", "longDescription": "Get a slice of an array or string. If `end` is not specified, it is assumed to be the length of the target.\n\n```pella\n{=array;{[one;two;three]}}\n{slice;{$array};1} // {[two;three]}\n{slice;{$array};1;2} // {[two]}\n```\n" }, { "id": "randomstringlengthalphabet", "name": "randomString", "url": "https://docs.atlas.bot/tags/global#randomstringlengthalphabet", "signature": "{randomString;length;alphabet?}", "longDescription": "Generate a random string.\n\n* `length` is the length of the string to generate\n* `alphabet` is the alphabet to use. If not specified, it is `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`\n", "shortDescription": "Generate a random string", "expensive": false, "disableInLoop": false }, { "id": "importscriptid", "name": "import", "url": "https://docs.atlas.bot/tags/global#importscriptid", "signature": "{import;scriptId}", "longDescription": "Import a `script` action. View more information on the [imports](../scripts/imports.md) guide.\n\n```pella\n// In the script\n[#function;my_function]\n\tHello World!\n[/function]\n```\n\n```pella\n// In another action\n{import;action/6c306503-adaf-48ae-b724-40b78d0edd28}\n{my_function} // \"Hello World!\"\n```\n", "shortDescription": "Import a script or action", "aliases": [ "#import" ], "expensive": true, "disableInLoop": false }, { "id": "encodeuricomponentinput", "name": "encodeURIComponent", "url": "https://docs.atlas.bot/tags/global#encodeuricomponentinput", "signature": "{encodeURIComponent;input}", "longDescription": "Encodes text using [encodeURIComponent](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent).\n", "shortDescription": "Encode a URI component", "expensive": false, "disableInLoop": false }, { "id": "decodeuricomponentinput", "name": "decodeURIComponent", "url": "https://docs.atlas.bot/tags/global#decodeuricomponentinput", "signature": "{decodeURIComponent;input}", "longDescription": "Encodes text using [decodeURIComponent](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent).\n", "shortDescription": "Decode a URI component", "expensive": false, "disableInLoop": false }, { "id": "encodebase64input", "name": "encodeBase64", "url": "https://docs.atlas.bot/tags/global#encodebase64input", "signature": "{encodeBase64;input}", "longDescription": "Encodes text to [base64](https://developer.mozilla.org/en-US/docs/Glossary/Base64).\n", "shortDescription": "Encode a string to base64", "expensive": false, "disableInLoop": false }, { "id": "decodebase64input", "name": "decodeBase64", "url": "https://docs.atlas.bot/tags/global#decodebase64input", "signature": "{decodeBase64;input}", "longDescription": "Decodes text from [base64](https://developer.mozilla.org/en-US/docs/Glossary/Base64).\n", "shortDescription": "Decode a base64 string", "expensive": false, "disableInLoop": false }, { "id": "rangestartorstopstopstep", "name": "range", "url": "https://docs.atlas.bot/tags/global#rangestartorstopstopstep", "signature": "{range;startOrStop;stop?;step?}", "longDescription": "Creates a range of numbers.\n\n* `startOrStop` The start of the range or the stop value if no 'start' is provided.\n* `stop` The end of the range.\n* `step` The step size.\n\nThis tag generates an array of numbers starting from `startOrStop` up to (but not including) `stop`, with a step size of `step`. If `stop` is not provided, `startOrStop` is interpreted as the stop value and the start is set to 0. If `step` is not provided, the step size defaults to 1 if `start` is less than `stop`, and -1 if `start` is greater than `stop`.\n\n {range;10;20;2} \n\n### Limitations\n\n* The maximum number of numbers in the range is 5000.\n* `start` and `stop` must be valid numbers.\n* `step` must be a non-zero number.\n", "shortDescription": "Create a range of numbers", "expensive": false, "disableInLoop": false }, { "id": "limitstier", "name": "limits", "url": "https://docs.atlas.bot/tags/global#limitstier", "signature": "{limits;tier?}", "longDescription": "Gets the limits for the current server. These are things like the amount of actions you can have, which plugins you can use, etc.\nThe output from this is not guaranteed to be stable, use at your own risk!\n\n* `tier` The tier to get the limits for. Defaults to the current server's tier.\n", "shortDescription": "Get the prime limits", "expensive": true, "disableInLoop": false }, { "id": "messageidmessage", "name": "message.id", "url": "https://docs.atlas.bot/tags/message#messageidmessage", "signature": "{message.id;message}", "longDescription": "Returns the ID of a message.\n", "shortDescription": "Get the ID of the message", "expensive": false, "disableInLoop": false }, { "id": "messagecontentmessage", "name": "message.content", "url": "https://docs.atlas.bot/tags/message#messagecontentmessage", "signature": "{message.content;message}", "longDescription": "Returns a string with the content of a message.\n", "shortDescription": "Get the content of the message", "aliases": [ "message" ], "expensive": false, "disableInLoop": false }, { "id": "messagedeletemessage", "name": "message.delete", "url": "https://docs.atlas.bot/tags/message#messagedeletemessage", "signature": "{message.delete;message}", "shortDescription": "Delete the message", "aliases": [ "delete" ], "expensive": true, "disableInLoop": false }, { "id": "messagepinnedmessage", "name": "message.pinned", "url": "https://docs.atlas.bot/tags/message#messagepinnedmessage", "signature": "{message.pinned;message}", "shortDescription": "Check whether the message is pinned", "expensive": false, "disableInLoop": false }, { "id": "messagepin-reasonmessage", "name": "message.pin", "url": "https://docs.atlas.bot/tags/message#messagepin-reasonmessage", "signature": "{message.pin reason;message}", "longDescription": "Pins a message.\n\n#### Arguments\n\n* `{reason}`: The reason for the action that will be displayed in the Audit Log.\n", "shortDescription": "Pin the message", "expensive": true, "disableInLoop": false }, { "id": "messageunpin-reasonmessage", "name": "message.unpin", "url": "https://docs.atlas.bot/tags/message#messageunpin-reasonmessage", "signature": "{message.unpin reason;message}", "longDescription": "Unpins a message.\n\n#### Arguments\n\n* `{reason}`: The reason for the action that will be displayed in the Audit Log.\n", "shortDescription": "Unpin the message", "expensive": true, "disableInLoop": false }, { "id": "messagepublishmessage", "name": "message.publish", "url": "https://docs.atlas.bot/tags/message#messagepublishmessage", "signature": "{message.publish;message}", "longDescription": "Publishes a message. Only works in news channels.\n", "shortDescription": "Publish a message in an announcemnent channel", "expensive": true, "disableInLoop": false }, { "id": "messageembed-index0message", "name": "message.embed", "url": "https://docs.atlas.bot/tags/message#messageembed-index0message", "signature": "{message.embed index=0;message}", "longDescription": "Get an embed from the message. The index is optional and will default to the first embed if its not provided.\n\n {=embed;{message.embed}}\n {$embed.title}\n", "shortDescription": "Get the embed of a message", "expensive": false, "disableInLoop": false }, { "id": "messagereferenceidmessage", "name": "message.referenceId", "url": "https://docs.atlas.bot/tags/message#messagereferenceidmessage", "signature": "{message.referenceId;message}", "shortDescription": "Get the ID of the message this message is referencing", "expensive": false, "disableInLoop": false }, { "id": "messageaddreactionemojimessage", "name": "message.addReaction", "url": "https://docs.atlas.bot/tags/message#messageaddreactionemojimessage", "signature": "{message.addReaction;emoji;message}", "longDescription": "Adds a reaction to a message.\n\n#### Arguments\n\n* `{emoji}`: The emoji to add as the reaction.\n", "shortDescription": "Add a reaction to the message", "aliases": [ "message.reactionAdd" ], "expensive": true, "disableInLoop": false }, { "id": "messageremovereactionemojiusermessage", "name": "message.removeReaction", "url": "https://docs.atlas.bot/tags/message#messageremovereactionemojiusermessage", "signature": "{message.removeReaction;emoji;user;message}", "longDescription": "Removes a reaction from a message.\n\n#### Arguments\n\n* `{emoji}`: The emoji to remove as the reaction.\n", "shortDescription": "Remove a reaction from the message", "aliases": [ "message.reactionRemove" ], "expensive": true, "disableInLoop": false }, { "id": "messageremovereactionsemojimessage", "name": "message.removeReactions", "url": "https://docs.atlas.bot/tags/message#messageremovereactionsemojimessage", "signature": "{message.removeReactions;emoji;message}", "longDescription": "Removes all reactions, optionally for a specific emoji.\n\n {message.removeReactions} // Will remove all reactions\n {message.removeReaction;emoji} // Will remove all reactions for a specific emoji\n", "shortDescription": "Remove all reactions from the message, optionally for a specific emoji.", "aliases": [ "message.reactionsRemove" ], "expensive": true, "disableInLoop": false }, { "id": "messagelinkmessage", "name": "message.link", "url": "https://docs.atlas.bot/tags/message#messagelinkmessage", "signature": "{message.link;message}", "longDescription": "Returns a string with the jump URL of a message.\n", "shortDescription": "Get the link to a message", "aliases": [ "message.shareLink" ], "expensive": false, "disableInLoop": false }, { "id": "messageauthoridmessage", "name": "message.authorId", "url": "https://docs.atlas.bot/tags/message#messageauthoridmessage", "signature": "{message.authorId;message}", "longDescription": "Returns the ID of the author of a message.\n", "shortDescription": "Get the ID of the author of the message", "expensive": false, "disableInLoop": false }, { "id": "messagechannelidmessage", "name": "message.channelId", "url": "https://docs.atlas.bot/tags/message#messagechannelidmessage", "signature": "{message.channelId;message}", "shortDescription": "Get the ID of the channel the message was sent in", "expensive": false, "disableInLoop": false }, { "id": "messagettsmessage", "name": "message.tts", "url": "https://docs.atlas.bot/tags/message#messagettsmessage", "signature": "{message.tts;message}", "longDescription": "Checks if a message was sent as text to speech.\n" }, { "id": "messagementionsmessage", "name": "message.mentions", "url": "https://docs.atlas.bot/tags/message#messagementionsmessage", "signature": "{message.mentions;message}", "longDescription": "Get a list of mentions from a message. Returns an array of IDs that includes roles, channels and users.\n", "shortDescription": "Get the mentions of a message", "expensive": false, "disableInLoop": false }, { "id": "messagereactions", "name": "message.reactions", "url": "https://docs.atlas.bot/tags/message#messagereactions", "signature": "{message.reactions}", "longDescription": "Get a list of reactions from a message. Returns an array of objects. For example, this message\n\n\"A\n\nWould result in this\n\n```pella\n[\n {\n \"count\": 1,\n \"me\": false,\n \"emoji\": {\n \"id\": null,\n \"animated\": false,\n \"name\": \"🍆\"\n }\n },\n {\n \"count\": 1,\n \"me\": false,\n \"emoji\": {\n \"id\": \"538224338269372438\",\n \"animated\": true,\n \"name\": null\n }\n }\n]\n```\n\n {=reactions;{message.reactions}}\n {$reactions.0.count} // 1\n {$reactions.0.me} // false (whether the bot has reacted with this message)\n {$reactions.0.emoji.id} // null\n {$reactions.0.emoji.animated} // false\n {$reactions.0.emoji.name} // 🍆\n\nSee [objects](../scripts/objects.md) for information on working with objects.\n", "shortDescription": "Returns an array of reactions for the message", "expensive": false, "disableInLoop": false }, { "id": "messageattachments-singletrue-objectsfalsemessage", "name": "message.attachments", "url": "https://docs.atlas.bot/tags/message#messageattachments-singletrue-objectsfalsemessage", "signature": "{message.attachments single=true objects=false;message}", "longDescription": "Get the attachments from a message. Returns the first attachments url by default.\n\n`single` is whether to return the first attachment or an array of attachments.\n`objects` is whether to return the [attachment objects](https://discord.com/developers/docs/resources/channel#attachment-object-attachment-structure) or just their urls.\n", "shortDescription": "Get the attachments of a message", "aliases": [ "message.attachment" ], "expensive": false, "disableInLoop": false }, { "id": "messagecreatedatmessage", "name": "message.createdAt", "url": "https://docs.atlas.bot/tags/message#messagecreatedatmessage", "signature": "{message.createdAt;message}", "longDescription": "Returns a [timestamp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#description) for the creation date of a message that can be used with [{time}](https://documentation.atlas.bot/en/scripts/tags/global#time-formattime).\n", "shortDescription": "Get the time at which the message was created", "expensive": false, "disableInLoop": false }, { "id": "suggestionauthorid", "name": "suggestion.authorId", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionauthorid", "signature": "{suggestion.authorId}", "shortDescription": "Get the author ID of the context suggestion", "aliases": [ "suggestion.author" ], "expensive": false, "disableInLoop": false }, { "id": "suggestioncontent", "name": "suggestion.content", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestioncontent", "signature": "{suggestion.content}", "shortDescription": "Get the content of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestiondeniedreason", "name": "suggestion.deniedReason", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestiondeniedreason", "signature": "{suggestion.deniedReason}", "longDescription": "Why the suggestion was denied. Takes the input from the text input component.\n", "shortDescription": "Get the denied reason of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionid", "name": "suggestion.id", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionid", "signature": "{suggestion.id}", "longDescription": "The unique ID of the suggestion. Globably incremented.\n", "shortDescription": "Get the ID of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionmessagelink", "name": "suggestion.messageLink", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionmessagelink", "signature": "{suggestion.messageLink}", "shortDescription": "Get a link to the suggestion message", "expensive": false, "disableInLoop": false }, { "id": "suggestioncreatedat", "name": "suggestion.createdAt", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestioncreatedat", "signature": "{suggestion.createdAt}", "shortDescription": "Get the creation date of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionmessageid", "name": "suggestion.messageId", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionmessageid", "signature": "{suggestion.messageId}", "longDescription": "The message for the current state of the Suggestion.\n\nIf the suggestion is waiting to be verified its the verification message. Once verified its the message in the suggestions channel. etc;\n", "shortDescription": "Get the message ID of the context suggestion", "aliases": [ "suggestion.message" ], "expensive": false, "disableInLoop": false }, { "id": "suggestionupdatedat", "name": "suggestion.updatedAt", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionupdatedat", "signature": "{suggestion.updatedAt}", "shortDescription": "Get the creation date of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionstate", "name": "suggestion.state", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionstate", "signature": "{suggestion.state}", "longDescription": "The state of the suggestion.\n\n`Pending`\n`Approved`\n`Denied`\n", "shortDescription": "Get the state of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionkeywords", "name": "suggestion.keywords", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionkeywords", "signature": "{suggestion.keywords}", "shortDescription": "Get a list of extracted keywords for the suggestion", "expensive": false, "disableInLoop": false }, { "id": "suggestionlabels", "name": "suggestion.labels", "url": "https://docs.atlas.bot/tags/plugins/suggestion#suggestionlabels", "signature": "{suggestion.labels}", "shortDescription": "Get the labels of the context suggestion", "expensive": false, "disableInLoop": false }, { "id": "ticketauthorchannel", "name": "ticket.authorId", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketauthorchannel", "signature": "{ticket.author;channel}", "longDescription": "Gets the ID of the ticket's author, if one is in context.\n", "shortDescription": "Get the tickets author id", "aliases": [ "ticket.author" ], "expensive": false, "disableInLoop": false }, { "id": "ticketchannel", "name": "ticket.channelId", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketchannel", "signature": "{ticket.channel}", "longDescription": "Gets the ID of the ticket's channel, if one is in context.\n", "shortDescription": "Get the tickets channel id", "aliases": [ "ticket.channel" ], "expensive": false, "disableInLoop": false }, { "id": "ticketclosechannel", "name": "ticket.close", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketclosechannel", "signature": "{ticket.close;channel}", "longDescription": "Close the ticket channel.\n", "shortDescription": "Close a ticket", "expensive": true, "disableInLoop": false }, { "id": "ticketcreate", "name": "ticket.create", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketcreate", "signature": "{ticket.create}", "longDescription": "Open the ticket channel.\n\n#### Arguments\n\n`reason`: Set the reason for the ticket.\n`user`: Set the ticket author.\n`prefix`: Set the ticket prefix.\n", "shortDescription": "Create a new ticket", "expensive": true, "disableInLoop": false }, { "id": "ticketprefixchannelprefix", "name": "ticket.prefix", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketprefixchannelprefix", "signature": "{ticket.prefix;channel;prefix}", "longDescription": "Add a prefix to the beinging of the ticket channel's name. Leave `prefix` blank to return the current prefix.\n", "shortDescription": "Set or get a tickets prefix", "expensive": true, "disableInLoop": false }, { "id": "ticketreason", "name": "ticket.reason", "url": "https://docs.atlas.bot/tags/plugins/ticket#ticketreason", "signature": "{ticket.reason}", "longDescription": "Gets the reason of the ticket, if one is in context.\n", "shortDescription": "Get the reason a ticket was created", "expensive": false, "disableInLoop": false }, { "id": "respondertextmessage", "name": "responder.text", "url": "https://docs.atlas.bot/tags/responder#respondertextmessage", "signature": "{responder.text;message}", "longDescription": "Appends text to the output message. If there is more text, it will be appended to the existing text.\n\n`{responder.text;Hello World}` will make the output message \"Hello World\"\n`{responder.text;Hello}{responder.text;World}` will make the output message \"Hello World\"\n`{responder.text;Hello}{responder.text;}` empty text will clear existing text.\n", "shortDescription": "Add text to the output message.", "expensive": false, "disableInLoop": false }, { "id": "responderdm-fallbackfalsemember", "name": "responder.dm", "url": "https://docs.atlas.bot/tags/responder#responderdm-fallbackfalsemember", "signature": "{responder.dm fallback=false;member}", "longDescription": "Set the responder to dm a user. This tag can be hit and miss if the user has their direct-messages closed.\n\n`{responder.dm;{user.id}}` will make the message direct-message the user in context.\n`{responder.dm fallback=true;{user.id}}` will send a message to the user and will fall back to the context channel if the user has their direct-mesage closed.\n", "shortDescription": "Configure the output message to go to a specific user", "expensive": true, "disableInLoop": false }, { "id": "responderembed", "name": "responder.embed", "url": "https://docs.atlas.bot/tags/responder#responderembed", "signature": "{responder.embed}", "longDescription": "This tag is used to add embeds to the message. Calling it multiple times will add multiple embeds to the message, up to a maximum of 10.\n\n`{responder.embed title=\"Hello world\"}`\n`{responder.embed title=Test timestamp=\"5 hours ago\"}`\n\nEmbed Elements\n`author-image`\n`author-name`\n`author-url`\n`color`\n`description`\n`footer`\n`footer-icon`\n`image`\n`thumbnail`\n`timestamp`\n`title`\n`url`\n\nUse the [Embed Builder](https://staging.atlas.bot/tools/embed-builder) to quickly build an embed.\n\n
\n Color Defaults\n

Black: #000000\nDark Mode: #36393f\nWhite: #FFFFFF\nRed: #ED4245\nPink: #EB459E\nFuchsia: #EB459E\nPurple: #9C27B0\nBlurple: #5865F2\nBlurple Classic: #7289DA\nDeep Purple: #673AB7\nIndigo: #3F51B5\nBlue: #2196F3\nLight Blue: #03A9F4\nCyan: #00BCD4\nTeal: #009688\nGreen: #57F287\nLight Green: #8BC34A\nLime: #CDDC39\nYellow: #FEE75C\nAmber: #FFC107\nOrange: #FF9800\nDeep Orange: #FF5722\nBrown: #795548\nGrey: #9E9E9E\nBlue Grey: #607D8B\nRole Default: #4f545c\nMagenta: #E91E63

\n
\n", "shortDescription": "Attach an embed to the output message.", "expensive": false, "disableInLoop": false }, { "id": "responderembedfieldnamevalueinline", "name": "responder.embedField", "url": "https://docs.atlas.bot/tags/responder#responderembedfieldnamevalueinline", "signature": "{responder.embedField;name;value;inline}", "longDescription": "Add a field to the last created embed.\n\n {responder.embed title=\"My Embed\" description=\"Fortnite or something idk\"}\n {responder.embedField name=\"My Field\" value=\"very cool\" inline=true}\n {responder.embedField name=\"Another One\" value=\"even cooler\" inline=true}\n", "shortDescription": "Add a field to an embed", "expensive": false, "disableInLoop": false }, { "id": "responderchannelchannel", "name": "responder.channel", "url": "https://docs.atlas.bot/tags/responder#responderchannelchannel", "signature": "{responder.channel;channel}", "longDescription": "Set the channel the message will be sent to. Setting a channel with a context interaction will have the responder ignore that interaction when sending a message. **The context interaction must still be replied to or it will be marked as failed**.\n\n```pella\n// Do some weird logging stuff to a separate channel that the user will never see\n{responder.channel;MY_LOG_CHANNEL}\n{responder.text;{user.mention} ran our command!}\n{responder.send} // Send the log message to the log channel\n\n// Now we reply to the slash command (context interaction). This is required,\n// not replying will have Discord mark the interaction as failed. Depending on a few factors,\n// if we don't reply Atlas will automatically send a \"The action did not output anything\" message\n// to stop it being marked as failed.\n{responder.text;Hi {user.mention}! This is a reply to the context interaction that is required for it not to fail}\n// No need for {responder.send} as it is automatically once the script finishes executing if its configured\n```\n", "shortDescription": "Configure the output channel for the responder content", "expensive": false, "disableInLoop": false }, { "id": "responderreset", "name": "responder.reset", "url": "https://docs.atlas.bot/tags/responder#responderreset", "signature": "{responder.reset}", "longDescription": "Reset any options already applied to the responder.\n\n```\n\n{responder.text;Hello}\n{responder.reset}\n{responder.text;Something bad happened!}\n\n```\n\nThis would output \"Something bad happened!\"\n", "shortDescription": "Reset the responder settings to its initial state", "expensive": false, "disableInLoop": false }, { "id": "responderephemeral", "name": "responder.ephemeral", "url": "https://docs.atlas.bot/tags/responder#responderephemeral", "signature": "{responder.ephemeral}", "shortDescription": "Interaction-only; Whether the output message should be only viewable by the user who created the interaction.", "expensive": false, "disableInLoop": false }, { "id": "respondererrormessage", "name": "responder.error", "url": "https://docs.atlas.bot/tags/responder#respondererrormessage", "signature": "{responder.error;message}", "shortDescription": "The same as {responder.text} except it does some error-related things, like making embeds red and making the message ephemeral. You should use this whenever sending an error message.", "expensive": false, "disableInLoop": false }, { "id": "respondersend-return_idfalse-ignore_interactionfalse", "name": "responder.send", "url": "https://docs.atlas.bot/tags/responder#respondersend-return_idfalse-ignore_interactionfalse", "signature": "{responder.send return_id=false ignore_interaction=false}", "longDescription": "Send the message immediately. This will automatically call `{responder.reset}` if the message is sent successfully.\n\n`return_id` can be used to get the output message ID. **return\\_id does not work when replying to an interaction**. Discord does not give us message data when we send an interaction, however because the responder will assume you mean the context interaction, leaving out the ID should do effectively the same thing.\n\n`ignore_interaction` can be set to have the responder ignore the context interaction and reply with a regular message in the context channel. **The interaction still needs a reply or it will be marked as failed**, you should only use this to send off a separate message.\n\nIf the responder is configured when the script finishes, it will be sent automatically. This means you probably don't need `{responder.send}` unless you're sending multiple messages.\n", "shortDescription": "Send the configured responder message", "expensive": true, "disableInLoop": false }, { "id": "respondereditmessage", "name": "responder.edit", "url": "https://docs.atlas.bot/tags/responder#respondereditmessage", "signature": "{responder.edit;message}", "longDescription": "Set the responder to edit the given message. Atlas must have sent the message to edit it.\nPlace after the new message content.\n", "shortDescription": "Edit a message with the configured responder message", "expensive": false, "disableInLoop": false }, { "id": "responderbutton-label-handler-stateless-state-url-emoji-styleprimary-actionrowindex-disabledfalse", "name": "responder.button", "url": "https://docs.atlas.bot/tags/responder#responderbutton-label-handler-stateless-state-url-emoji-styleprimary-actionrowindex-disabledfalse", "signature": "{responder.button label handler? stateless? state? url? emoji? style=primary actionRowIndex? disabled=false}", "longDescription": "Add a button to the message.\n\n#### Arguments\n\n* `label` is the button text.\n* `handler` is the value of the component callback action to call when the button is clicked\n* `state` is an optional payload that will be accessible in the component callback action\n* `url` can be used to link to external resources\n* `emoji` is the name of an emoji to add to the button. Can be a guild emoji or a native emoji.\n* `stateless` Whether this button should be forced to be a stateless interaction. Required if you don't want the button to expire.\n* `style` can change the [button style](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles), which defaults to `Primary`. This will be ignored if `url` is present.\n* `disabled` can be set to `true` to disable the button.\n* `actionRowIndex` can be used to set the row the button is in. This is useful if you want to have multiple buttons in a row.\n\nIf you want a button to only have an emoji, here is a fun hack. Copy this empty space and paste it into the button label.\n\n ‎\n", "shortDescription": "Add a button to the message", "expensive": false, "disableInLoop": false }, { "id": "responderselect-handler-statelessfalse-state-disabledfalse-placeholder-minvalues-maxvalues-actionrowindex-typestringselectoptions", "name": "responder.select", "url": "https://docs.atlas.bot/tags/responder#responderselect-handler-statelessfalse-state-disabledfalse-placeholder-minvalues-maxvalues-actionrowindex-typestringselectoptions", "signature": "{responder.select handler stateless=false state? disabled=false placeholder? minValues? maxValues? actionRowIndex? type=StringSelect;options}", "longDescription": "Create a new select menu with the given options.\n\n#### Arguments\n\n* `handler` is the value of the component callback action to call when the menu is interacted with\n* `state` is an optional payload that will be accessible in the component callback action\n* `stateless` Whether this menu should be forced to be a stateless interaction. Required if you don't want the menu to expire.\n* `disabled` can be set to `true` to disable the menu.\n* `placeholder` is the text to show when no option is selected\n* `minValues` is the minimum number of options that must be selected\n* `maxValues` is the maximum number of options that can be selected\n* `type` can be `StringSelect`, `UserSelect`, `RoleSelect`, `MentionableSelect`, or `ChannelSelect`.\n* `actionRowIndex` can be used to set the row the menu is in. This is useful if you want to have multiple menus on a message.\n\n`options` is an array of [select options](https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-option-structure), and is required for `StringSelect` menus.\n\n {=options;{{\n \"value\": [\n {\n \"label\": \"Option One\",\n \"value\": \"1\"\n },\n {\n \"label\": \"Option Two\",\n \"value\": \"2\"\n }\n ]\n }}}\n\n {responder.select handler=my_callback placeholder=\"Select an option\";{$options.value}}\n", "shortDescription": "Add a select menu to the message", "expensive": false, "disableInLoop": false }, { "id": "responderreferencemessage", "name": "responder.reference", "url": "https://docs.atlas.bot/tags/responder#responderreferencemessage", "signature": "{responder.reference;message?}", "longDescription": "Set the responder to reference the given message. Call with no params, `{responder.reference}`, to stop the bot replying to the context message.\n", "shortDescription": "Reference a message or remove the existing reference", "expensive": false, "disableInLoop": false }, { "id": "respondersendmodaltitlehandlerstatelesscomponentsstate", "name": "responder.sendModal", "url": "https://docs.atlas.bot/tags/responder#respondersendmodaltitlehandlerstatelesscomponentsstate", "signature": "{responder.sendModal;title;handler;stateless?;components;state?}", "longDescription": "Replies to an interaction with a modal.\n\n* `title` The title of the modal.\n* `handler` The name of the component callback handler to use for the modal.\n* `stateless` Whether the custom id should be forced to stateless. Defaults to `false`.\n* `components` The components to add to the modal.\n* `state` The state to pass to the callback.\n\nThis tag will create a modal with the given title and components, and send it to the user who initiated the interaction. The modal will be associated with the provided handler, which will be called when the user submits the modal.\n\n**Example:**\n\n {=data;{{\n \"components\": [\n {\n \"type\": 1,\n \"components\": [\n {\n \"type\": 4,\n \"custom_id\": \"my_input\",\n \"style\": \"short\",\n \"label\": \"Your Name\",\n \"required\": true\n }\n ]\n }\n ]\n }}}\n\n {responder.sendModal \n title=\"Example Modal\" \n handler=\"my_modal_handler\" \n components={$data.components}\n }\n\nThis tag will create a modal with the title \"Example Modal\" and a single input field labelled \"Your Name\". The handler action \"my\\_modal\\_handler\" will be called when the user submits the modal. The values will be available in the callback action as `{$fields}`.\n", "shortDescription": "Reply to an interaction with a modal", "expensive": false, "disableInLoop": false }, { "id": "roleidrole", "name": "role.id", "url": "https://docs.atlas.bot/tags/role#roleidrole", "signature": "{role.id;role}", "shortDescription": "Get the id of the given role.", "expensive": false, "disableInLoop": false }, { "id": "rolenamerole", "name": "role.name", "url": "https://docs.atlas.bot/tags/role#rolenamerole", "signature": "{role.name;role}", "shortDescription": "Get the name of the given role.", "expensive": false, "disableInLoop": false }, { "id": "rolemention-allow_mentionrole", "name": "role.mention", "url": "https://docs.atlas.bot/tags/role#rolemention-allow_mentionrole", "signature": "{role.mention allow_mention;role}", "longDescription": "Returns the role @mention.\n\n`allow_mention` is whether to ping the role.\n", "shortDescription": "Get the @mention of the given role.", "aliases": [ "role" ], "expensive": false, "disableInLoop": false }, { "id": "rolepositionrole", "name": "role.position", "url": "https://docs.atlas.bot/tags/role#rolepositionrole", "signature": "{role.position;role}", "shortDescription": "Get the position of the given role.", "expensive": false, "disableInLoop": false }, { "id": "rolecolorrole", "name": "role.colour", "url": "https://docs.atlas.bot/tags/role#rolecolorrole", "signature": "{role.color;role}", "shortDescription": "Get the color of the given role.", "aliases": [ "role.color" ], "expensive": false, "disableInLoop": false }, { "id": "rolemanagedrole", "name": "role.managed", "url": "https://docs.atlas.bot/tags/role#rolemanagedrole", "signature": "{role.managed;role}", "longDescription": "Returns `true` for managed roles. ex: Server Boost and Bot roles.\n", "shortDescription": "Get whether the given role is managed.", "expensive": false, "disableInLoop": false }, { "id": "rolementionablerole", "name": "role.mentionable", "url": "https://docs.atlas.bot/tags/role#rolementionablerole", "signature": "{role.mentionable;role}", "longDescription": "Returns a boolean indicating whether the role can be mentioned.\n", "shortDescription": "Get whether the given role is mentionable.", "expensive": false, "disableInLoop": false }, { "id": "rolecreatedat", "name": "role.createdAt", "url": "https://docs.atlas.bot/tags/role#rolecreatedat", "signature": "{role.createdAt}", "shortDescription": "Get the created at date of the given role.", "expensive": false, "disableInLoop": false }, { "id": "rolehaspermissionpermission_namerole", "name": "role.hasPermission", "url": "https://docs.atlas.bot/tags/role#rolehaspermissionpermission_namerole", "signature": "{role.hasPermission;permission_name;role}", "longDescription": "Check whether the role has the specified permission.\n\n`{role.hasPermission;administrator}`\n", "shortDescription": "Check whether the role has the given permission", "expensive": false, "disableInLoop": false }, { "id": "rolehoisted", "name": "role.hoisted", "url": "https://docs.atlas.bot/tags/role#rolehoisted", "signature": "{role.hoisted}", "longDescription": "Returns a boolean indicating whether the role is hoisted above other roles in the member list.\n", "shortDescription": "Get whether the given role is hoisted.", "expensive": false, "disableInLoop": false }, { "id": "roleedit-name-color-reasonrole", "name": "role.edit", "url": "https://docs.atlas.bot/tags/role#roleedit-name-color-reasonrole", "signature": "{role.edit name color reason;role}", "longDescription": "Edit the role.\n\n`name` is the new role name\n`color` is the new colour of the role\n`reason` is the reason for editing this role\n\n {role.edit name=\"Very cool\" colour=teal}\n\n
\n Color Defaults\n

Black: #000000\nDark Mode: #36393f\nWhite: #FFFFFF\nRed: #ED4245\nPink: #EB459E\nFuchsia: #EB459E\nPurple: #9C27B0\nBlurple: #5865F2\nBlurple Classic: #7289DA\nDeep Purple: #673AB7\nIndigo: #3F51B5\nBlue: #2196F3\nLight Blue: #03A9F4\nCyan: #00BCD4\nTeal: #009688\nGreen: #57F287\nLight Green: #8BC34A\nLime: #CDDC39\nYellow: #FEE75C\nAmber: #FFC107\nOrange: #FF9800\nDeep Orange: #FF5722\nBrown: #795548\nGrey: #9E9E9E\nBlue Grey: #607D8B\nRole Default: #4f545c\nMagenta: #E91E63

\n
\n", "shortDescription": "Edit a roles settings", "expensive": true, "disableInLoop": false }, { "id": "rolecreate-name-color-reason-return_idrole", "name": "role.create", "url": "https://docs.atlas.bot/tags/role#rolecreate-name-color-reason-return_idrole", "signature": "{role.create name color reason return_id;role}", "longDescription": "Create a new role.\n\n`name` is the name of the role\n`color` is the colour of the role\n`reason` is the reason for creating the role\n`return_id` is whether to return the created roles ID.\n\n
\n Color Defaults\n

Black: #000000\nDark Mode: #36393f\nWhite: #FFFFFF\nRed: #ED4245\nPink: #EB459E\nFuchsia: #EB459E\nPurple: #9C27B0\nBlurple: #5865F2\nBlurple Classic: #7289DA\nDeep Purple: #673AB7\nIndigo: #3F51B5\nBlue: #2196F3\nLight Blue: #03A9F4\nCyan: #00BCD4\nTeal: #009688\nGreen: #57F287\nLight Green: #8BC34A\nLime: #CDDC39\nYellow: #FEE75C\nAmber: #FFC107\nOrange: #FF9800\nDeep Orange: #FF5722\nBrown: #795548\nGrey: #9E9E9E\nBlue Grey: #607D8B\nRole Default: #4f545c\nMagenta: #E91E63

\n
\n", "shortDescription": "Create a guild role", "expensive": true, "disableInLoop": false }, { "id": "roledelete-reasonrole", "name": "role.delete", "url": "https://docs.atlas.bot/tags/role#roledelete-reasonrole", "signature": "{role.delete reason;role}", "longDescription": "> This tag can do serious damage. Make sure you are properly restricting access to any scripts using this tag. {.is-warning}\n\nDelete a role.\n\n`reason` is why you are deleting this role.\n", "shortDescription": "Delete a role", "expensive": true, "disableInLoop": false }, { "id": "roleiconsizehash", "name": "role.icon", "url": "https://docs.atlas.bot/tags/role#roleiconsizehash", "signature": "{role.icon;size;hash}", "shortDescription": "Get the icon of the given role.", "expensive": false, "disableInLoop": false }, { "id": "serverid", "name": "server.id", "url": "https://docs.atlas.bot/tags/server#serverid", "signature": "{server.id}", "shortDescription": "Get the id of the context server", "aliases": [ "guild.id" ], "expensive": false, "disableInLoop": false }, { "id": "servername", "name": "server.name", "url": "https://docs.atlas.bot/tags/server#servername", "signature": "{server.name}", "shortDescription": "Get the name of the context server", "aliases": [ "guild.name" ], "expensive": false, "disableInLoop": false }, { "id": "servericonsizehash", "name": "server.icon", "url": "https://docs.atlas.bot/tags/server#servericonsizehash", "signature": "{server.icon;size;hash}", "longDescription": "Gets the icon of the server.\n\n#### Arguments\n\n* `size`: The size of the image to get. Must be a valid [CDN size](https://discord.com/developers/docs/reference#image-formatting).\n* `hash`: Whether to return the hash directly instead of a URL.\n", "shortDescription": "Get the icon of the context server", "aliases": [ "guild.icon", "guild.iconURL", "server.icon_url", "server.iconURL" ], "expensive": false, "disableInLoop": false }, { "id": "serversplashsizehash", "name": "server.splash", "url": "https://docs.atlas.bot/tags/server#serversplashsizehash", "signature": "{server.splash;size;hash}", "longDescription": "Gets the splash image of the server.\n\n#### Arguments\n\n* `size`: The size of the splash to get. Must be a valid [CDN size](https://discord.com/developers/docs/reference#image-formatting).\n* `hash`: Whether to return the hash directly instead of a URL.\n", "shortDescription": "Get the splash image of the context server", "aliases": [ "guild.splash" ], "expensive": false, "disableInLoop": false }, { "id": "serverbannersizesplash", "name": "server.banner", "url": "https://docs.atlas.bot/tags/server#serverbannersizesplash", "signature": "{server.banner;size;splash}", "longDescription": "Gets the banner of the server.\n\n#### Arguments\n\n* `size`: The size of the banner to get. Must be a valid [CDN size](https://discord.com/developers/docs/reference#image-formatting).\n* `hash`: Whether to return the hash directly instead of a URL.\n" }, { "id": "serverchannels", "name": "server.channels", "url": "https://docs.atlas.bot/tags/server#serverchannels", "signature": "{server.channels}", "shortDescription": "Get a list of all the channels in the server as a list of ids.", "aliases": [ "guild.channels" ], "expensive": false, "disableInLoop": false }, { "id": "serverroles", "name": "server.roles", "url": "https://docs.atlas.bot/tags/server#serverroles", "signature": "{server.roles}", "shortDescription": "Get a list of all the roles in the server as a list of ids.", "aliases": [ "guild.roles" ], "expensive": false, "disableInLoop": false }, { "id": "servershardid", "name": "server.shardId", "url": "https://docs.atlas.bot/tags/server#servershardid", "signature": "{server.shardId}", "longDescription": "Returns the ID of the shard the bot is running on in the server.\n", "shortDescription": "Get the id of the shard the server is on", "aliases": [ "guild.shardId" ], "expensive": false, "disableInLoop": false }, { "id": "serverownerid", "name": "server.ownerId", "url": "https://docs.atlas.bot/tags/server#serverownerid", "signature": "{server.ownerId}", "shortDescription": "Get the id of the owner of the context server", "aliases": [ "guild.ownerId", "server.owner_id" ], "expensive": false, "disableInLoop": false }, { "id": "servermembercount", "name": "server.memberCount", "url": "https://docs.atlas.bot/tags/server#servermembercount", "signature": "{server.memberCount}", "longDescription": "Returns the total count of members in the server. This should be almost exactly accurate and is not subject to caching issues.\n", "shortDescription": "Get how many members are currently in the server", "aliases": [ "guild.memberCount", "server.member_count" ], "expensive": false, "disableInLoop": false }, { "id": "servercreatedat", "name": "server.createdAt", "url": "https://docs.atlas.bot/tags/server#servercreatedat", "signature": "{server.createdAt}", "longDescription": "Returns a [timestamp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#description) for the creation date of a server that can be used with [{time}](https://documentation.atlas.bot/en/scripts/tags/global#time-formattime).\n", "shortDescription": "Get the time the server was created as a unix millisecond timestamp.", "aliases": [ "guild.createdAt" ], "expensive": false, "disableInLoop": false }, { "id": "serverprefix", "name": "server.prefix", "url": "https://docs.atlas.bot/tags/server#serverprefix", "signature": "{server.prefix}", "longDescription": "Gets the legacy prefix of the server. This tag is only available for compatibility reasons and is not recommended in new actions. This tag is deprecated and may be removed in a future release.\n", "shortDescription": "Get the prefix of the server", "aliases": [ "guild.prefix" ], "expensive": false, "disableInLoop": false }, { "id": "serversubscriptiontier", "name": "server.subscriptionTier", "url": "https://docs.atlas.bot/tags/server#serversubscriptiontier", "signature": "{server.subscriptionTier}", "longDescription": "Returns the subscription tier level of the server.\n\n`0 = Prime`, `1 = PrimeClassic`, `2 = PrimeCommunity`\n", "shortDescription": "Get the subscription level of the server", "aliases": [ "guild.subscriptionTier", "server.primeTier", "guild.primeTier" ], "expensive": false, "disableInLoop": false }, { "id": "serversubscriptionuser", "name": "server.subscriptionUser", "url": "https://docs.atlas.bot/tags/server#serversubscriptionuser", "signature": "{server.subscriptionUser}", "longDescription": "Returns the ID of the user who added the subscription to the server.\n", "shortDescription": "Get the user who added the subscription of the server", "aliases": [ "guild.subscriptionUser", "server.primeUser", "guild.primeUser" ], "expensive": false, "disableInLoop": false }, { "id": "serverbotid", "name": "server.botId", "url": "https://docs.atlas.bot/tags/server#serverbotid", "signature": "{server.botId}", "longDescription": "Returns the ID of the bot.\nNormally this will always be the Id for Atlas, but when using custom bots this may return the ID of the custom bot.\n", "shortDescription": "Get the id of the bot", "aliases": [ "guild.botId", "guild.applicationId", "server.applicationId" ], "expensive": false, "disableInLoop": false }, { "id": "storesetkeyvalue", "name": "store.set", "url": "https://docs.atlas.bot/tags/store#storesetkeyvalue", "signature": "{store.set;key;value}", "longDescription": "Adds an item to the store. `value` can be an object, array, string, number, etc. `key` will be coerced to a string.\n", "shortDescription": "Store a persistent value by a key", "expensive": true, "disableInLoop": false }, { "id": "storegetkey", "name": "store.get", "url": "https://docs.atlas.bot/tags/store#storegetkey", "signature": "{store.get;key}", "shortDescription": "Get a persistent value by a key", "expensive": true, "disableInLoop": false }, { "id": "storedeletekey", "name": "store.delete", "url": "https://docs.atlas.bot/tags/store#storedeletekey", "signature": "{store.delete;key}", "shortDescription": "Delete a persistent value by a key", "expensive": true, "disableInLoop": false }, { "id": "usermentionuser", "name": "user.mention", "url": "https://docs.atlas.bot/tags/user#usermentionuser", "signature": "{user.mention;user}", "longDescription": "Returns a string with a user mention.\n", "shortDescription": "Get the @mention for the user.", "aliases": [ "user", "mention" ], "expensive": false, "disableInLoop": false }, { "id": "useriduser", "name": "user.id", "url": "https://docs.atlas.bot/tags/user#useriduser", "signature": "{user.id;user}", "longDescription": "Returns the ID of a user.\n", "shortDescription": "Get the users id", "expensive": false, "disableInLoop": false }, { "id": "userusernameuser", "name": "user.username", "url": "https://docs.atlas.bot/tags/user#userusernameuser", "signature": "{user.username;user}", "longDescription": "Returns the username of a user.\n", "shortDescription": "Get the users username", "aliases": [ "user.name" ], "expensive": false, "disableInLoop": false }, { "id": "userbotuser", "name": "user.bot", "url": "https://docs.atlas.bot/tags/user#userbotuser", "signature": "{user.bot;user}", "longDescription": "Returns a boolean whether a user is a bot account.\n", "shortDescription": "Check whether this user is a bot", "expensive": false, "disableInLoop": false }, { "id": "usertaguser", "name": "user.tag", "url": "https://docs.atlas.bot/tags/user#usertaguser", "signature": "{user.tag;user}", "longDescription": "Returns the tag of a user with the username and discriminator, for example `DracoClaw#0065`.\n", "shortDescription": "Get the username#discriminator combination for the user.", "aliases": [ "user.idname" ], "expensive": false, "disableInLoop": false }, { "id": "userdiscriminatoruser", "name": "user.discriminator", "url": "https://docs.atlas.bot/tags/user#userdiscriminatoruser", "signature": "{user.discriminator;user}", "longDescription": "Returns the discriminator of a user, which is the four digits at the end of the username.\n", "shortDescription": "Get the users discriminator.", "expensive": false, "disableInLoop": false }, { "id": "useravataruser", "name": "user.avatar", "url": "https://docs.atlas.bot/tags/user#useravataruser", "signature": "{user.avatar;user}", "longDescription": "Returns the avatar URL of a user. Their server avatar will take priority if they have one.\n", "shortDescription": "Get the users avatar url.", "aliases": [ "user.avatarURL", "user.avatar_url", "user.icon", "user.iconURL", "user.icon_url" ], "expensive": false, "disableInLoop": false }, { "id": "userrolesmember", "name": "user.roles", "url": "https://docs.atlas.bot/tags/user#userrolesmember", "signature": "{user.roles;member}", "longDescription": "Returns an array of IDs for all the roles of a user.\n\n {choose;{user.roles}} // A random role the user has\n", "shortDescription": "Get an array of ids corresponding to roles the user has.", "expensive": false, "disableInLoop": false }, { "id": "usernicknamemember", "name": "user.nickname", "url": "https://docs.atlas.bot/tags/user#usernicknamemember", "signature": "{user.nickname;member}", "longDescription": "Returns the display name of a user. This will be their nickname if they have one set and their username otherwise.\n", "shortDescription": "Get the users nickname. Returns the users username if they have no nickname.", "expensive": false, "disableInLoop": false }, { "id": "userjoinedatmember", "name": "user.joinedAt", "url": "https://docs.atlas.bot/tags/user#userjoinedatmember", "signature": "{user.joinedAt;member}", "longDescription": "Returns a [timestamp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#description) for the join date of a user that can be used with [{time}](https://documentation.atlas.bot/en/scripts/tags/global#time-formattime).\n", "shortDescription": "Get the time the user joined the server at.", "aliases": [ "user.joined_at" ], "expensive": false, "disableInLoop": false }, { "id": "usercreatedatuser", "name": "user.createdAt", "url": "https://docs.atlas.bot/tags/user#usercreatedatuser", "signature": "{user.createdAt;user}", "longDescription": "Returns a [timestamp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#description) for the creation date of a user's Discord account that can be used with [{time}](https://documentation.atlas.bot/en/scripts/tags/global#time-formattime).\n", "shortDescription": "Get the time the user created their account.", "expensive": false, "disableInLoop": false }, { "id": "useredit-nick-mute-deaf-channelmember", "name": "user.edit", "url": "https://docs.atlas.bot/tags/user#useredit-nick-mute-deaf-channelmember", "signature": "{user.edit nick mute deaf channel;member}", "longDescription": "Edits a user.\n\n#### Arguments\n\n* `nick`: The user's new nickname. Leave empty to clear.\n* `mute`: Whether the user will be server muted in voice channels.\n* `deaf`: Whether the user will be server deafened in voice channels.\n* `channel`: The new channel to move the user to if they are in voice channel.\n", "shortDescription": "Edit the state or options for a user.", "expensive": true, "disableInLoop": false }, { "id": "useraddrole-reasonrolemember", "name": "user.addRole", "url": "https://docs.atlas.bot/tags/user#useraddrole-reasonrolemember", "signature": "{user.addrole reason;role;member}", "longDescription": "Gives a user a role.\n\n#### Arguments\n\n* `reason`: The reason for the action that will be displayed in the Audit Log.\n* `role`: The role to add to the user.\n", "shortDescription": "Give the user a role", "aliases": [ "user.roleAdd" ], "expensive": true, "disableInLoop": false }, { "id": "userremoverole-reasonrolemember", "name": "user.removeRole", "url": "https://docs.atlas.bot/tags/user#userremoverole-reasonrolemember", "signature": "{user.removerole reason;role;member}", "longDescription": "Removes a role from a user.\n\n#### Arguments\n\n* `reason`: The reason for the action that will be displayed in the Audit Log.\n* `role`: The role to remove from the user.\n", "shortDescription": "Take a role from a user", "aliases": [ "user.roleRemove" ], "expensive": true, "disableInLoop": false }, { "id": "usercolourmember", "name": "user.colour", "url": "https://docs.atlas.bot/tags/user#usercolourmember", "signature": "{user.colour;member}", "longDescription": "Gets a user's colour based on their highest non-default (#99aab5) role.\n", "shortDescription": "Get the colour of the user based on their highest role", "aliases": [ "user.color" ], "expensive": false, "disableInLoop": false }, { "id": "userhaspermissionpermissionsmember", "name": "user.hasPermission", "url": "https://docs.atlas.bot/tags/user#userhaspermissionpermissionsmember", "signature": "{user.hasPermission;permissions;member?}", "longDescription": "Checks whether a user has the given permissions.\n\n* `permissions` can be a permissions number or name, for example `create_instant_invite`. A full list of permissions can be seen [here](https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags).\n* `member` the member to check the permissions of. Defaults to the context user.\n", "shortDescription": "Check if the user has a permission", "aliases": [ "user.hasPermissions" ], "expensive": false, "disableInLoop": false }, { "id": "userleveluser", "name": "user.level", "url": "https://docs.atlas.bot/tags/user#userleveluser", "signature": "{user.level;user?}", "longDescription": "Gets the level of a user.\n\n* `user` the user to get the level of. Defaults to the context user.\n", "shortDescription": "Get the users level", "expensive": false, "disableInLoop": false }, { "id": "userxpuserscoped", "name": "user.xp", "url": "https://docs.atlas.bot/tags/user#userxpuserscoped", "signature": "{user.xp;user?;scoped?}", "longDescription": "* `user` the user to get the XP of. Defaults to the context user.\n* `scoped` whether to get XP on the current level or total XP, defaults to total XP.\n", "shortDescription": "Get the users xp amount", "aliases": [ "user.levelXP", "user.totalXP" ], "expensive": false, "disableInLoop": false }, { "id": "usersetxpxptargetaddfalsesyncfalse", "name": "user.setXP", "url": "https://docs.atlas.bot/tags/user#usersetxpxptargetaddfalsesyncfalse", "signature": "{user.setXP;xp;target?;add=false;sync=false}", "longDescription": "Sets the users XP to the given amount.\n\n* `xp` the amount of XP to set.\n* `target` the user to set the XP of. Defaults to the context user.\n* `add` whether to add the XP to their existing total.\n* `sync` whether to sync level rewards for the user.\n", "shortDescription": "Set the users XP amount", "expensive": true, "disableInLoop": false }, { "id": "usersetlevelleveltargetaddfalsesyncfalse", "name": "user.setLevel", "url": "https://docs.atlas.bot/tags/user#usersetlevelleveltargetaddfalsesyncfalse", "signature": "{user.setLevel;level;target?;add=false;sync=false}", "longDescription": "Sets the users level to the given amount.\n\n* `level` the amount of levels to set.\n* `target` the user to set the level of. Defaults to the context user.\n* `add` whether to add the levels to their existing total.\n* `sync` whether to sync level rewards for the user.\n", "shortDescription": "Set the users level", "expensive": true, "disableInLoop": false }, { "id": "usernextleveluser", "name": "user.nextLevel", "url": "https://docs.atlas.bot/tags/user#usernextleveluser", "signature": "{user.nextLevel;user?}", "shortDescription": "Get the next level the user will achieve", "expensive": false, "disableInLoop": false }, { "id": "usernextlevelxpuser", "name": "user.nextLevelXP", "url": "https://docs.atlas.bot/tags/user#usernextlevelxpuser", "signature": "{user.nextLevelXP;user?}", "shortDescription": "Get the xp required for the user's next level", "expensive": false, "disableInLoop": false }, { "id": "userremainingxpuser", "name": "user.remainingXP", "url": "https://docs.atlas.bot/tags/user#userremainingxpuser", "signature": "{user.remainingXP;user?}", "longDescription": "Gets the amount of XP a user needs to level up to the next level.\n", "shortDescription": "Get the amount of xp the user needs to level up", "expensive": false, "disableInLoop": false }, { "id": "userrankuser", "name": "user.rank", "url": "https://docs.atlas.bot/tags/user#userrankuser", "signature": "{user.rank;user?}", "shortDescription": "Get the rank of the user", "expensive": false, "disableInLoop": false }, { "id": "userreward-filterachieved-firsttrue-rawfalse", "name": "user.reward", "url": "https://docs.atlas.bot/tags/user#userreward-filterachieved-firsttrue-rawfalse", "signature": "{user.reward filter=achieved first=true raw=false}", "longDescription": "Returns the reward the user achieved by levelling up. Returns nothing if there was no reward. **This tag is only available in level-up scripts** and cannot be used elsewhere.\n\n`first` is whether to return only the first reward in the filtered list. Some levels can have multiple rewards, so this might be useful for displaying all of them. An empty array will be returned if there are no rewards and `first=false`\n\n`raw` is whether to return a raw rewards object with more information about the reward. The object looks something like `{ level, roleId, stack }`\n\n`filter` is the kind of reward to return. The default, `achieved`, is recommended if you just want to tell the user of new roles they got by levelling up.\n\n* `achieved`: Filters to roles the user achieved by levelling up.\n* `entitled`: Filters to all roles the user is entitled to.\n* `added`: Filters to roles that were added to the user by levelling up. If the user levels up to level 10 and that level has a reward but the user already has that reward, it would not be included in this filter. `achieved` on the other hand would have included it.\n* `removed`: Filters to rewards that were removed by levelling up.\n* `existing`: Filters to rewards that the user had before levelling up.\n\nAs an example, you could set your level-up notification to this\n\n {if;{user.reward};Congratulations {user.mention}! You levelled up to level {user.level} and got the {role.mention allow_mention=false;{user.reward}} role!}\n\nWhich would send a level-up message only if the user got a new role.\n", "shortDescription": "Get the list of the rewards the user is entitled to, were added, were removed or already had. Only available in level-up messages.", "aliases": [ "user.rewards" ], "expensive": false, "disableInLoop": false }, { "id": "userkick-nodmfalse-returncaseidfalse-moderatortargetreason", "name": "user.kick", "url": "https://docs.atlas.bot/tags/user#userkick-nodmfalse-returncaseidfalse-moderatortargetreason", "signature": "{user.kick noDM=false returnCaseId=false moderator?;target;reason}", "longDescription": "Kicks a user from the server.\n\n* `noDM` whether to send the user a DM about the kick. Defaults to `false`.\n* `returnCaseId` whether to return the case ID of the kick. Defaults to `false`.\n* `moderator` the moderator who is kicking the user. Defaults to the context user.\n* `target` the user to kick.\n* `reason` the reason for the kick.\n", "shortDescription": "Kick a member from the server.", "expensive": true, "disableInLoop": false }, { "id": "userban-nodmfalse-purgedays-returncaseidfalse-moderatortargetdurationreason", "name": "user.ban", "url": "https://docs.atlas.bot/tags/user#userban-nodmfalse-purgedays-returncaseidfalse-moderatortargetdurationreason", "signature": "{user.ban noDM=false purgeDays returnCaseId=false moderator?;target;duration;reason}", "longDescription": "Bans a user from the server.\n\n* `noDM` whether to send the user a DM about the ban. Defaults to `false`.\n* `purgeDays` the number of days of messages to delete from the user. Does not purge by default.\n* `returnCaseId` whether to return the case ID of the ban. Defaults to `false`.\n* `moderator` the moderator who is banning the user. Defaults to the context user.\n* `target` the user to ban.\n* `duration` the duration of the ban in milliseconds. Defaults to a permanent ban.\n* `reason` the reason for the ban.\n", "shortDescription": "Ban a member from the server.", "expensive": true, "disableInLoop": false }, { "id": "userwarn-nodmfalse-returncaseidfalse-moderatortargetreasonduration", "name": "user.warn", "url": "https://docs.atlas.bot/tags/user#userwarn-nodmfalse-returncaseidfalse-moderatortargetreasonduration", "signature": "{user.warn noDM=false returnCaseId=false moderator?;target;reason;duration}", "longDescription": "Warns a user.\n\n* `noDM` whether to send the user a DM about the warn. Defaults to `false`.\n* `returnCaseId` whether to return the case ID of the warn. Defaults to `false`.\n* `moderator` the moderator who is warning the user. Defaults to the context user.\n* `target` the user to warn.\n* `reason` the reason for the warn.\n* `duration` the duration of the warn (ex `1d`), permanent by default.\n", "shortDescription": "Add a warning to a user", "expensive": true, "disableInLoop": false }, { "id": "usercasecountmembertype", "name": "user.caseCount", "url": "https://docs.atlas.bot/tags/user#usercasecountmembertype", "signature": "{user.caseCount;member?;type?}", "longDescription": "Gets the amount of cases a user has.\n\n* `member` the user to get the case count of, defaults to the context user.\n* `type` the type of cases to count. One of `Mute`, `Unmute`, `Kick`, `Ban`, `Unban`, `Warning`.\n", "shortDescription": "Get the amount of cases a user has", "expensive": true, "disableInLoop": false } ]