├── .gitbook └── assets │ └── w2kaapa-1.png ├── .gitignore ├── README.md ├── SUMMARY.md ├── basic-bot-setup.md ├── config ├── managing-commands.md └── prefixes.md ├── faq.md ├── logging ├── logging.md ├── modlogs.md └── welcome-and-leave-messages.md ├── misc ├── animals.md └── silly-useless.md ├── moderation ├── automod.md └── moderation.md ├── premium └── music.md ├── roles ├── autoroles-and-delayed-autoroles.md ├── reaction-roles.md └── role-management.md ├── tags-and-responses ├── autoresponses-trigger-words.md ├── tags-advanced-usage.md └── tags.md └── utilities ├── announcements.md ├── embeds.md ├── highlights-pager.md ├── reminders-timers.md ├── starboard.md ├── suggestions.md ├── twitch-notifications.md └── uncategorized-utilities.md /.gitbook/assets/w2kaapa-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarlGroth/carlbot-docs/501dd8bcd9487b3f9b8da7a5d4f9b4057b591a50/.gitbook/assets/w2kaapa-1.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This is a dead repo 2 | 3 | I (Carl) no longer own carlbot, so this is not the repo you should make PRs to. Instead, go to [botlabs-gg/mkdocs-carlbot](https://github.com/botlabs-gg/mkdocs-carlbot) 4 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [Home](README.md) 4 | * [FAQ](faq.md) 5 | * [Basic bot setup](basic-bot-setup.md) 6 | 7 | ## Roles 8 | 9 | * [Reaction Roles](roles/reaction-roles.md) 10 | * [Role management](roles/role-management.md) 11 | * [Autoroles and delayed autoroles](roles/autoroles-and-delayed-autoroles.md) 12 | 13 | ## Logging 14 | 15 | * [Logging](logging/logging.md) 16 | * [Modlogs](logging/modlogs.md) 17 | * [Welcome and leave messages](logging/welcome-and-leave-messages.md) 18 | 19 | ## Moderation 20 | 21 | * [Moderation](moderation/moderation.md) 22 | * [Automod](moderation/automod.md) 23 | 24 | ## Tags and responses 25 | 26 | * [Autoresponses \(trigger words\)](tags-and-responses/autoresponses-trigger-words.md) 27 | * [Tags \(custom commands\)](tags-and-responses/tags.md) 28 | * [Tags - Advanced usage](tags-and-responses/tags-advanced-usage.md) 29 | 30 | ## Config 31 | 32 | * [Prefixes](config/prefixes.md) 33 | * [Managing commands](config/managing-commands.md) 34 | 35 | ## Utilities 36 | 37 | * [Announcements](utilities/announcements.md) 38 | * [Reminders/Timers](utilities/reminders-timers.md) 39 | * [Highlights/pager](utilities/highlights-pager.md) 40 | * [Suggestions](utilities/suggestions.md) 41 | * [Starboard](utilities/starboard.md) 42 | * [Uncategorized utilities](utilities/uncategorized-utilities.md) 43 | * [Twitch notifications](utilities/twitch-notifications.md) 44 | * [Embeds](utilities/embeds.md) 45 | 46 | ## Premium 47 | 48 | * [Music](premium/music.md) 49 | 50 | ## Misc 51 | 52 | * [Animals](misc/animals.md) 53 | * [Silly/useless](misc/silly-useless.md) 54 | 55 | -------------------------------------------------------------------------------- /basic-bot-setup.md: -------------------------------------------------------------------------------- 1 | # Basic bot setup 2 | 3 | {% hint style="info" %} 4 | This is much easier done on the website at [https://carl.gg](https://carl.gg) 5 | {% endhint %} 6 | 7 | This guide will cover everything you need to do to get started with everything carlbot offers. 8 | 9 | **1. Setting up the prefix** 10 | 11 | I want the bot to respond when I use the prefix `-` to do that, I can type `!prefix set -`. Carlbot offers up to 15 prefixes at once, so I could also add a second prefix by typing `!prefix add .` 12 | 13 | **2. Setting up all the channels** 14 | 15 | `!log channel <#channel>` Sets the channel where carlbot will log things such as message deletions, name changes, role updates. More on that later. 16 | 17 | `!set twitch <#channel>` Sets the channel where twitch notifications are sent. 18 | 19 | `!set bot <#channel>` Sets the channel where restricted commands go. 20 | 21 | `!set welcome <#channel>` Decides where join/leave/ban messages go, more on that later. 22 | 23 | **3. Setting up reaction roles** 24 | 25 | Reaction roles work best in their own channels, so carlbot offers a command to create a channel specifically for reaction roles with some permissions that most people will find useful. We can create this channel by typing `!rr channel` 26 | 27 | It's recommended that you use `!rr make` for this if you are new. 28 | 29 | ![](https://i.imgur.com/W2KAAPa.png) 30 | 31 | **4. Setting up modlogs** 32 | 33 | Since we're doing this from a clean slate, I will use `!modlogs create` to create a channel with the appropriate permissions. If we already had a channel where moderation actions were sent, we could have used `!modlogs set <#channel>` 34 | 35 | **5. Setting up starboard** 36 | 37 | `!starboard` will create the starboard 38 | 39 | `!star limit ` will change the required number of stars for a post to show up in the starboard. 40 | 41 | **6. Configuring the log to log what you care about** 42 | 43 | By default, the log will log everything every member does in every channel, this isn't always what we want. 44 | 45 | Let's say we don't care about message edits, the way we stop those from showing up in the log is by typing `!log edit`. The `!log` command takes an event as its argument and tries to figure out what you want toggled. Another thing we can do is ignore messages deleted in certain channels. Maybe we don't care about messages deleted in mod channels. `!log ignore #illuminati` is how we'd ignore events from the channel \#illuminati. Read the full page for more info, it's _very_ customizable. 46 | 47 | **7. Setting up a mute role** 48 | 49 | By typing `!muterole create` we can create a role with the permission "send messages" denied in every channel. Please note that any future channels created will not be covered by the bot. Users can now mute with the `!mute <@member> [time] [reason]` command 50 | 51 | **8. Adding twitch streamers** 52 | 53 | No point setting up a twitch channel if you don't have any streamers to track. I enjoy watching b0aty, so I'll add him by typing `!twitch b0aty`. Now any time b0aty comes online I will be notified. 54 | 55 | **9. Setting up join messages** 56 | 57 | First we will set the message sent to the previously set channel with `!welcome Hello there $user, glad to have you in the tutorial server`. Next up, we can also set a different message to be sent directly to the member upon joining by typing `!joindm Hello and welcome to the tutorial server, please read #rules and respect the other members` 58 | 59 | This is far from everything carlbot has to offer, but at this point you will have set up most of the things that you can set up. 60 | 61 | -------------------------------------------------------------------------------- /config/managing-commands.md: -------------------------------------------------------------------------------- 1 | # Managing commands 2 | 3 | {% hint style="info" %} 4 | Please consider using the website at [https://carl.gg](https://carl.gg) it is much, much easier for this 5 | {% endhint %} 6 | 7 | {% hint style="info" %} 8 | Restricted commands require a bot channel to be set up with `!set bot ` 9 | {% endhint %} 10 | 11 | | Name | Example | Usage | 12 | | :--- | :--- | :--- | 13 | | **ignore \[channels...\]\[commands...\]** | !ignore \#general \#log \#adminsonly "temp home" ping activity | If no channel is specified, the current channel is ignored. If a command is supplied, it will ignore that command in the specified channel. Manage server bypasses this. You can supply more than one channel and or command. | 14 | | **ignore server** | -- | This is essentially the same as making the entire bot mod-only | 15 | | **ignore all \[commands...\]** | !ignore all "pc top" ping | This is equal to typing !ignore channel command subcommand in all channels the bot can see, useful if you want to ignore a command in all channels except for one. This will not work for channels created in the future. If the command is already ignored in a channel, this will unignore it. | 16 | | **unignore \[channels...\] \[command...\]** | !unignore \#general \#log temp ping | Reverses what !ignore does | 17 | | **unignore all** | -- | Unignores all channels \(this does not take ignored commands into account\) | 18 | | **disable <commands...>** | !disable "pc top" rr temp | This really disables the command globally from the server, not even manage server bypasses this. | 19 | | **enable <commands...>** | !enable "pc top" ping "tag info" | Enables one or more previously disabled commands. | 20 | | **enable all** | -- | Sets all commands to enabled. | 21 | | **disable all** | -- | Sets all commands to disabled. | 22 | | **enable mod** | -- | Enables all moderation commands | 23 | | **disable mod** | -- | Disables all moderation commands | 24 | | enable list | -- | Shows all enabled/disabled commands. | 25 | | **plonk** | !plonk @Carl\#0080 tag create | This works almost exactly like !ignore but for users instead. If no command is specified, the user is banned from using the bot completely. | 26 | | **unplonk <@member> \[command\]** | !unplonk @Carl\#0080 | Unbans the user from using the bot | 27 | | **plonks** | -- | Displays all plonked users. | 28 | | **restrict <command>** | !restrict define | This requires a bot channel to utilize. Makes it so that if the command is used outside of the bot channel, the bot will ping the user in the botchannel and give the results there instead. | 29 | | **unrestrict <command>** | !unrestrict d | Unrestricts it. Like all commands where you pass in a command, aliases work just as well. | 30 | | **set bot <channel>** | !set bot \#botspam | Sets the channel used for restricted commands to be redirected to. | 31 | | **modonly <command>** | !modonly echo | Makes a command usable by mods only | 32 | | **unmodonly <command>** | !unmodonly dog | Removes a command from the modonly list | 33 | | **modrole <role>** | !modrole bot commander | Makes it so that any member with the specified role is seen as a moderator by the bot. This does not allow members with this role to kick, ban, mute, warn or any variation of these commands. | 34 | | **modrole clear** | | Removes the modrole | 35 | 36 | -------------------------------------------------------------------------------- /config/prefixes.md: -------------------------------------------------------------------------------- 1 | # Prefixes 2 | 3 | ​ 4 | 5 | {% hint style="danger" %} 6 | **!prefix clear** leaves you without a prefix meaning you have to mention the bot to set a new one. **!prefix set <prefix>** is most likely a better choice in most cases 7 | {% endhint %} 8 | 9 | 10 | 11 | By default this is set to ! and ? 12 | 13 | | Name | Example | Usage | 14 | | :--- | :--- | :--- | 15 | | !prefix | -- | Lists the prefixes currently in use by the server | 16 | | **!prefix add <prefix>** | !prefix add "sudo " | Adds a prefix to be used by the bot \(limited to 10\) **NOTE** if you want a two word prefix or a prefix with a space after it or an emoji you **must** use quotes, this is a discord limitation and can't be fixed | 17 | | **!prefix set <prefix>** | !prefix set "haha " | Sets the specified prefix to be the ONLY prefix in the server | 18 | | **!prefix remove <prefix>** | !prefix remove ! | Removes a prefix, same limits as !prefix add applies here, can't remove mentioning the bot. | 19 | | **!prefix clear** | -- | Removes all prefixes except mentioning the bot. This \(obviously\) means you need to mention the bot to register more prefixes | 20 | 21 | ![](https://i.imgur.com/tSvDMVy.png) 22 | 23 | -------------------------------------------------------------------------------- /faq.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | **How do I create reaction roles?** 4 | 5 | Most people are probably best off using `!rr make` simply because it guides you through the process and tries to tell you what went wrong if any. Other ways of doing it includes using `!rr aio` which results in the same result as `!rr make` but with just a single command, it uses some weird syntax if you are unfamiliar, so I would recommend sticking to `!rr make` until you are familiar with the bot. 6 | 7 | [Here is a screenshot of me setting up unique reaction roles for my bot help server](https://i.imgur.com/W2KAAPa.png) 8 | 9 | **Why does the bot complain about requiring more permissions? I've given it manage roles already!** 10 | 11 | The way discord decides if you can add a role or not is based on two things: 12 | 13 | 1. Does the member adding the role have 'manage roles' 14 | 2. Is the member trying to add the role higher in the role hierarchy than the role they're trying to add? 15 | 16 | Just assign the bot a role that is higher than highest role it has to assign, the role being hoisted does not have to have any special permissions. 17 | 18 | **How do I get a message ID?** 19 | 20 | Discord settings -> Appearance -> Developer mode 21 | 22 | ![](https://i.imgur.com/lBh0b0f.png) 23 | 24 | For reaction roles already set up you can also use `!rr show` 25 | 26 | **How do I get the bot to announce new members joining?** 27 | 28 | Use the dashboard! [https://carl.gg](https://carl.gg) 29 | 30 | **I don't want normal users creating tags, but I obviously can't disable tag, what do I do?** 31 | 32 | `!tag modonly` will make it so that only mods can manage tags, while anyone can still use them 33 | 34 | **I set up a highlight word but it's not working** 35 | 36 | Yes it is. The bot tries to detect when you're reading the chat and not spam you with unnecessary pings. If you wish to see if a message would have triggered any of your words, use `!hl match ` 37 | 38 | **Another bot has the same command and they both respond, what do I do?** 39 | 40 | Depends on what you're after. If you need to use both, you're pretty much forced to change the prefix of either bot. If you're after just the non-carlbot command, you can disable it with `!disable `. If you just want carlbot's command, I suppose you could create an alias using tags and `{cmd:cmdname {args}}` see the "Advanced tag usage" section for more information. 41 | 42 | -------------------------------------------------------------------------------- /logging/logging.md: -------------------------------------------------------------------------------- 1 | # Logging 2 | 3 | ## Quick start 4 | 5 | 1. Choose a channel with **!log channel <\#channel>** 6 | 2. Select which events you want logged with **!log <event>** where event is an event found at the bottom of this page 7 | 3. Split up logging into separate channels by using the commands found below 8 | 9 | {% hint style="info" %} 10 | The command **!log aio** automatically creates a category, fills it with five channels and splits up logging into them. 11 | {% endhint %} 12 | 13 | {% hint style="info" %} 14 | Consider using the website at [https://carl.gg](https://carl.gg) 15 | {% endhint %} 16 | 17 | | Command | Example | Usage | 18 | | :--- | :--- | :--- | 19 | | **log channel \[\#channel\]** | !log channel \#logs | Sets the default channel where logged events go. Leave empty to clear the channel. | 20 | | **log \[event\]** | !log channelcreate | Toggles an event from being logged or not. Leave blank to see current settings. | 21 | | **log messagechannel \[\#channel\]** | !log messagechannel \#msglog | Sets the channel where message events are logged to. | 22 | | **log memberchannel \[\#channel\]** | !log memberchannel \#member-logs | Sets the channel where member events are logged to. | 23 | | **log joinchannel \[\#channel\]** | !log joinchannel \#hello-bye | Sets the channel where the bot logs members joining and leaving to. | 24 | | **log serverchannel \[\#channel\]** | !log serverchannel \#server-updates | Sets the channel where updates to the server itself are logged. | 25 | | **log voicechannel \[\#channel\]** | !log voicechannel \#spying | Sets the channel where members joining/moving between/leaving voice channels are logged. | 26 | | **log ignore <channels/members...>** | !log ignore @Carl\#0001 \#bilderberg \#secret-shhh | Ignores message events posted in the channels or by the members. | 27 | | **log unignore <channels/members...>** | !log unignore @Carl\#0001 \#bilderberg | Unignores the previous ignores. | 28 | | **log \[prefix\|ip\] <prefix>** | !log ip ! | Ignores message deletions, edits and messages within purges starting with the prefixes. | 29 | | **log \[removeprefix\|up\] <prefix>** | !log up ? | Unignores previously added prefixes. | 30 | | **log export** | | Exports the settings used in this server to be used with the next command. | 31 | | **log \[import\|custom\] <perms>** | !log import 1337 | Imports some settings. | 32 | | **log aio** | | Creates a category, fills it with five channels and splits up logging into them. | 33 | 34 | ## Event list 35 | 36 | Each event that Carl-bot logs has an associated value and channel. The values are only there for ultra-nerds, don't worry about it. 37 | 38 | 39 | 40 | | Event | Associated logging | Value | Channel | 41 | | :--- | :--- | ---: | :---: | 42 | | delete | Deleted messages | 1 | messagechannel | 43 | | edit | Message edits | 2 | messagechannel | 44 | | purge | Bulk message deletion | 4 | messagechannel | 45 | | discord | Discord invites posted | 2097152 | messagechannel | 46 | | role | Member role updates | 8 | memberchannel | 47 | | avatar | Avatar updates | 32 | memberchannel | 48 | | bans | Bans and unbans | 192 | memberchannel | 49 | | ban | Just bans | 64 | memberchannel | 50 | | unban | Just unbans | 128 | memberchannel | 51 | | join | Name or nickname updates | 256 | joinchannel | 52 | | leave | Name or nickname updates | 512 | joinchannel | 53 | | channels | Channel creations, updates and deletions | 7168 | serverchannel | 54 | | channelcreate | Channel creation | 1024 | serverchannel | 55 | | channelupdate | Channel updates | 2048 | serverchannel | 56 | | channeldelete | Channel deletion | 4096 | serverchannel | 57 | | rolecreate | Roles created | 65536 | serverchannel | 58 | | roleupdate | Updates to roles | 131072 | serverchannel | 59 | | roledelete | Roles deleted | 262144 | serverchannel | 60 | | allroles | Roles being created, updated or deleted | 458752 | serverchannel | 61 | | emoji | Emojis being created, updated or deleted | 1048576 | serverchannel | 62 | | server | Updates to the server itself | 524288 | serverchannel | 63 | | voicejoin | Members joining voice channels | 8192 | voicechannel | 64 | | voicemove | Members changing voice channels | 16384 | voicechannel | 65 | | voiceleave | Members leaving voice channels | 32768 | voicechannel | 66 | | voice | All voice events | 57344 | voicechannel | 67 | | everything | Every single event | 4194303 | depends | 68 | | nothing | Nothing! | 0 | -- | 69 | | default | Some messages and member events | 1019 | depends | 70 | 71 | -------------------------------------------------------------------------------- /logging/modlogs.md: -------------------------------------------------------------------------------- 1 | # Modlogs 2 | 3 | 4 | 5 | | Name | Example | Usage | 6 | | :--- | :--- | :--- | 7 | | **modlog create \[name='modlog'\]** | !modlog create auditlog | Creates a modlog where moderation actions will be logged. | 8 | | **modlog set <\#channel>** | !modlog set \#modlog | Sets an already existing channel to send actions to \(make sure the bot has the permissions required to post in the channel\) | 9 | | **modlog clear** | -- | Makes the bot stop logging actions to the channel | 10 | | **modlog from <@member or ID>** | !modlog from @Carl\#0001 | Retrieves all infractions for a member with the responsible moderator. | 11 | | **reason <case\_id>** | !reason 17 Spamming nazi imagery | Sets a reason for a modlog entry, useful for cases where you either banned manually or forgot to specify a reason | 12 | | **modlog highscores** | -- | Shows the moderators ranked by how many actions they've taken. | 13 | 14 | Useful for transparency and organizing 15 | 16 | ![](https://i.imgur.com/QXEG0Cr.png) 17 | 18 | -------------------------------------------------------------------------------- /logging/welcome-and-leave-messages.md: -------------------------------------------------------------------------------- 1 | # Welcome and leave messages 2 | 3 | {% hint style="info" %} 4 | Use the dashboard! It allows for easier setup and embeds 5 | {% endhint %} 6 | 7 | {% hint style="info" %} 8 | These commands do nothing before using set welcome <\#channel> 9 | {% endhint %} 10 | 11 | | Name | Example | Usage | 12 | | :--- | :--- | :--- | 13 | | **set welcome <\#channel>** | !set welcome \#join-say-hi | Sets the channel where welcome/leave/banmsg messages will be posted. | 14 | | **\[welcome\|greet\] <text>** | !greet Welcome {mention}, we've been expecting you | Sets up a welcome message that will be sent when a new user joins. | 15 | | **\[leave\|farewell\] <text>** | !farewell Goodbye {user}, maybe it wasn't meant to be... | Like !greet but for people leaving | 16 | | **banmsg <text>** | !banmsg **{user}** just got blown the fuck out | Like !greet but for people getting banned | 17 | | **\[dmjoin\|pmjoin\|joindm\|joinpm\] <text>** | !dmjoin Hello and welcome to {server}, before chatting you need to assign roles in \#get-roles | Like !greet except it dms the message to the user upon joining | 18 | | **testgreet** | !testgreet | Not sure how your welcome/farewell/dm messages actually look? Just type !testgreet and have the bot spit out all of them. | 19 | 20 | All these messages will be sent to the channel saved with `!set welcome`. **Use a command without any text to remove the message.** Supports the following variables: 21 | 22 | `{mention}` - Pings the user 23 | 24 | `{user}` - The name of the user 25 | 26 | `{server}` - The name of the server 27 | 28 | `{user(id)}` - The ID of the user 29 | 30 | `{user(proper)}` - The name including the last four digits \(Carl\#0001\). 31 | 32 | `{server(members)}` - The number of members on the server \(after the event has happened\). Use `{ord:{server(members)}}` to turn 8102 into 8,102nd etc. 33 | 34 | Also supports `{random: lists, separated by commas}` and `{math: 1 + 1} math blocks` not sure when you'd ever want a math block but random lists are pretty useful. 35 | 36 | -------------------------------------------------------------------------------- /misc/animals.md: -------------------------------------------------------------------------------- 1 | # Animals 2 | 3 | {% hint style="info" %} 4 | Do not underestimate how spammy your users will be with these commands, restricting them is recommended. 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | cat | -- | Gives you a random cat. All of these commands use a database of images collected by scraping reddit, this means you won't get the same 150 dogs that most bots offer through that one popular website. Currently I have about 15000 animal pictures saved. | 10 | | dog | -- | ^ | 11 | | aww | -- | ^ | 12 | | catbomb | -- | Gives you 5 links instead of just one, only use this if you LOVE cats! | 13 | | dogbomb | -- | ^ but dogs | 14 | | awwbomb | -- | ^ but just cute animals | 15 | 16 | -------------------------------------------------------------------------------- /misc/silly-useless.md: -------------------------------------------------------------------------------- 1 | # Silly/useless 2 | 3 | | Name | Example | Usage | 4 | | :--- | :--- | :--- | 5 | | \[pc\|postcount\] \[@member\] | !pc @Carl\#0080 | Shows the amount of messages the bot has seen the member post. | 6 | | postcount top | -- | Shows the all time 20 most active members as far as the bot's concerned. | 7 | | \[aesthetics\|ae\] | !ae 600 iq | Returns your text as fullwidth. The example would return "600iq" | 8 | | \[smallcaps\|sc\] | !sc neumann | Returns your text as smallcaps. The example would return "ɴᴇᴜᴍᴀɴɴ" | 9 | | 8ball | !8ball will anyone ever love me? | It's like any other 8ball command on discord. Annoying, useless and unreasonably popular. | 10 | | echo \[\#channel\] | !echo \#general Is this enough to pass the turing test? | Makes the bot say the message in the mentioned channel or in the channel the comand was used in if no channel is supplied. | 11 | | speak \[@member\] | !speak @Yenni\#2794 | Uses [Markov chains](https://github.com/jsvine/markovify) to generate sentences based on what that person has said in the past. | 12 | | space | !space ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)This is a test. | ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)This ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)is ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)a ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)test ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg)sentence. ![:white\_check\_mark:](https://discordapp.com/assets/c6b26ba81f44b0c43697852e1e1d1420.svg) | 13 | 14 | -------------------------------------------------------------------------------- /moderation/automod.md: -------------------------------------------------------------------------------- 1 | # Automod 2 | 3 | {% hint style="info" %} 4 | It's **Highly** recommended to use the dashboard for setting up automod. [https://carl.gg/](https://carl.gg) 5 | {% endhint %} 6 | 7 | {% hint style="danger" %} 8 | Invitespam and linkspam does not work without setting a rate limit with **!linkspam/invitespam <rate> \[per=1\]** 9 | {% endhint %} 10 | 11 | {% hint style="info" %} 12 | The punishments available are 13 | 14 | * **delete** - Deletes the message 15 | * **warn** - Warns the offender 16 | * **tempmute <duration>** - Temporarily mutes for the duration, format the time like 3h42m 17 | * **mute** - Indefinitely mutes 18 | * **kick** - Kicks the offender 19 | * **tempban <duration>** - Temporarily bans the offender for the duration 20 | * **ban** - Bans the offender 21 | * **defer** - Sends the context to the drama channel and lets mods vote on it 22 | * **message** - Sends a message to the channel warning the member 23 | * **dm/pm** - Sends a private message to the offender 24 | 25 | You can add more than one punishment by separating them with commas. 26 | {% endhint %} 27 | 28 | | Name | Example | Usage | 29 | | :--- | :--- | :--- | 30 | | **\[sm\|slowmode\] \[rate\] \[per\]** | !slowmode 5 25 | Rate is the number of messages you can post in each time frame. Per is the timeframe. If you only supply one value, it sets that value as the per. \(1/x\) | 31 | | **slowmode \[punishment\|punish\|p\] <punishments...>** | !sm p delete, tempmute 20m | Sets the punishment\(s\) for hitting the rate limit. | 32 | | **attachmentspam \[rate\] \[per=1\]** | !attachmentspam 3 5 | Rate limits the number of attachment a member can post in a specific timeframe | 33 | | **attachmentspam punishment <punishments...>** | !attachmentspam p mute, defer | Sets the punishment\(s\) for hitting the rate limit. | 34 | | **mentionspam <rate> \[per=1\]** | !mentionspam 25 5 | Enables the bot to automatically punish mentionspammers. By default this action is muting, but it can be changed using the next command. | 35 | | **mentionspam punishment <punishments...>** | !mentionspam p tempban 20h | Sets the punishment\(s\) for hitting the rate limit. | 36 | | **linkspam <rate> \[per=1\]** | !linkspam 1 | Sets the link rate limit. Use the example command to block all links. | 37 | | **linkspam bl <links...>** | !linkspam bl reddit.com twitter.com | Blacklists one or more links. | 38 | | **linkspam wl <links...>** | !linkspam wl discordapp.com facebook.com | Whitelists one or more links | 39 | | **linkspam unbl <links...>** | !linkspam unbl reddit.com | Removes one ore more links from the blacklist | 40 | | **linkspam unwl <links...>** | !linkspam unwl discordapp.com | Removes one or more links from the whitelist | 41 | | **linkspam clearwl** | -- | Clears the whitelist | 42 | | **linkspam clearbl** | -- | Clears the blacklist | 43 | | **linkspam block** | -- | Block means it punishes all non-whitelisted links | 44 | | **linkspam off** | -- | Off means it only punishes blacklisted links | 45 | | **linkspam norole** | -- | Like on except it only punishes those without roles | 46 | | **linkspam punishment <punishments...>** | !linkspam p delete, mute, defer | Sets the punishment\(s\) for posting links. | 47 | | **linkspam** | -- | Shows the current settings | 48 | | **invitespam <rate> \[per=1\]** | !invitespam 1 | Sets the link rate limit. Use the example command to block all invites. | 49 | | **invitespam bl <invites...>** | !invitespam bl discord.gg/wow | Adds the server the invite goes to to the blacklist. | 50 | | **invitespam wl <invites...>** | !invitespam wl discord.gg/xd | Adds the server the invite goes to to the whitelist. | 51 | | **invitespam unbl <invites...>** | !invitespam unbl discord.gg/xd discord.gg/wow | Removes the servers the invites point to from the blacklist | 52 | | **invitespam unwl <invites...>** | !invitespam unwl discord.gg/xd discord.gg/wow | Removes the servers the invites point to from the whitelist | 53 | | **invitespam clearbl** | -- | Removes all servers from the blacklist | 54 | | **invitespam clearwl** | -- | Removes all servers from the whitelist | 55 | | **!invitespam \[on\|block\]** | -- | Block means it punishes all non-whitelisted invites | 56 | | **invitespam off** | -- | Off means it only punishes blacklisted links. | 57 | | **invitespam norole** | -- | Same as setting it to 'on' except it only affects members without roles. | 58 | | **invitespam punishment <punishments...>** | !invitespam p mute, delete, defer, message | Sets the punishment\(s\) for posting invites. | 59 | | **invitespam** | -- | Shows the invitespam settings. | 60 | | **\[am\|automod\]** | -- | Shows an overview of the current automod settings | 61 | | **automod drama <channel>** | !automod drama \#watcher | Lets you set up a channel where mods can make decisions on rule breakers through reactions. This channel should obviously not be made public. | 62 | | **automod log <channel>** | !automod log \#automod | Automod actions are pretty different in nature compared to normal modlogs, so with this command you can set the command where automatic actions go. | 63 | | **automod \[media\|mo\] <channels...>** | !am mo \#show-off | Some servers have channels where you're just meant to post images/links, this command lets you enforce that. | 64 | | **automod \[unmedia\|umo\|unmo**\] **<channels...>** | !am umo \#show-off | Removes the media-only restriction from one or more channels. | 65 | | **automod \[whitelist\|wl\] <roles/channels>** | !am wl mods \#bilderberg | Whitelists roles and or channels so that automod ignores messages posted in/by them. | 66 | | **automod \[unwhitelist\|unwl\| <roles/channels>** | -- | Undoes what the above command does. | 67 | | **automod \[warn\|threshold\] <limit>** | !am warn 5 | Sets the warn threshold for a punishment to be made | 68 | | **!automod \[warnpunish\|wp\] <punishments...>** | !am wp kick | Sets the punishment for hitting the threshold | 69 | | **!deletefiles** | -- | Toggles between deleting files and not. "Safe" formats include png, jpg, jpeg, webm, mp4, gif, bmp, pdf, txt, tif, svg, webp | 70 | | **censor <words...>** | !censor dick | Adds one or more words to the list of blacklisted words | 71 | | **censor add <words...>** | !censor add dick | Same as above | 72 | | **censor remove <words...>** | !censor remove dick | Removes a word from the blacklist | 73 | | **censor list** | -- | Lists all censored words | 74 | | **censor clear** | -- | Clears all censored words | 75 | | **censor punish <punishments...>** | !censor p mute, delete, defer | Sets up punishments for the words. Defaults to delete and defer | 76 | | **capslimit <percentage>** | !capslimit 70 | Punishes messages with x% of its characters being uppercase. The message has to be at least 6 characters long. | 77 | | **\[capspunish\|capsp\]** | !capsp delete | Sets the punishment for sending a message which hits the threshold | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /moderation/moderation.md: -------------------------------------------------------------------------------- 1 | # Moderation 2 | 3 | {% hint style="info" %} 4 | Purge Commands ignore pinned messages. 5 | {% endhint %} 6 | 7 | {% hint style="warning" %} 8 | Locking down a channel denies the @everyone role 'send messages' as an override in the specified channel. Any roles explicitly granting send messages will override this for anyone with that role. Locking down the server removes 'send messages' from the @everyone role. You set up your server correctly by removing send messages from all non-mod roles. 9 | {% endhint %} 10 | 11 | | Name | Example | Usage | 12 | | :--- | :--- | :--- | 13 | | **ban <@member/ID> \[days=2\] \[reason\]** | !ban 102130103012 raiding | Bans the member from the server. This works even if the member isn't on the server. If you supply a reason, it will show up in the modlogs and in discord's built in audit log. Days refer to the amount of days to purge messages from them. | 14 | | **muterole <role>** | !muterole kids table | Selects a role to use for the mute command | 15 | | **muterole create \[name='muted'\]** | !muterole create shhh | Creates a new role, adds the role as a channel override with "send messages" turned off for all text channels and sets it as the server's muterole. | 16 | | **muterole update** | | Updates the channel overwrites for the currently chosen muterole in any channels that miss them | 17 | | **mute <@member> \[time \[reason\]\]** | !mute @Carl\#0001 20h45m spamming | Mutes a member \(using the muterole, read above\) for the specified time. If no time is given, it will mute indefinitely. If a reason is given, it shows up in the mod logs. | 18 | | **unmute <@member>** | !unmute @Carl\#0001 | Unmutes a member | 19 | | **kick <@member> \[reason\]** | !kick @Carl\#0001 racism | Kicks a member. Reason shows up in the modlogs and in audit logs | 20 | | **softban <@member> \[days=2\]\[reason\]** | !softban @Carl\#0001 go away | Bans and immediately unbans a member to clear 48 hours of message history. | 21 | | **tempban <@user> \[days=2\]\[reason\]** | !tempban @Carl\#0001 20h big ugly | Bans a user for the specified duration regardless if they're on the server or not. | 22 | | **massban \[days=2\]<@members...>** | !massban 123124151241 @Carl\#0001 12152252634 123123901231 | Bans more than one person, each ban shows up in the modlog. | 23 | | **warn <@member> \[reason\]** | !warn @Carl\#0001 do not spam reactions | Warns a user, pms them the reason and posts it to the modlog. | 24 | | **removewarn <case\_id>** | !removewarn 17 | Removes a warning by its case id. | 25 | | **clearwarn <@member>** | !clearwarn @Carl\#0001 | Removes all warnings from a user. | 26 | | **purge \[count=100\]** | !purge 200 | Purges the last howmany messages. | 27 | | **purge bot \[count=100\]** | !purge bot ? 20 | Purges the bot messages \(and messages with the specified prefix\) from the last howmany messages. | 28 | | **purge contains \[count=100\]** | !purge contains thanos | Purges messages containing the substring | 29 | | **purge user \[count=100\]** | !purge user @Carl\#0001 20 | Purges messages from the user | 30 | | **purge all \[count=100\]** | !purge all 13 | Purges the last howmany messages | 31 | | **purge embeds \[count=100\]** | !purge embeds 12 | Purges the last howmany messages with embeds | 32 | | **purge emoji \[count=100\]** | !purge emoji | Purges the last howmany messages containing custom emoji | 33 | | **purge files \[count=100\]** | !purge files | Purges messages with attachments | 34 | | **purge images \[count=100\]** | !purge images | Purges messages with attachments or embeds | 35 | | **purge links \[count=100\]** | !purge links | Purges messages with links | 36 | | **purge reactions \[count=100\]** | !purge reactions | Purges reactions from messages | 37 | | **cleanup \[count=100\]** | -- | Sort of like !purge bot except just for carlbot and works for all prefixes | 38 | | **lockdown <\#channel> <duration>** | !lockdown \#general 20m | Locks the specified channel \(or the one the command is used in if none is specified\) for \[duration\] if specified else forever. | 39 | | **unlockdown <\#channel>** | !unlockdown \#general | Undoes what !lockdown does. | 40 | | **lockdown server <duration>** | !lockdown server 20m | Locks all channels in the server. | 41 | | **unlockdown server** | !unlockdown server | Undoes what !lockdown server ****does. | 42 | 43 | -------------------------------------------------------------------------------- /premium/music.md: -------------------------------------------------------------------------------- 1 | # Music 2 | 3 | 4 | 5 | Music is \(at least currently\) a premium feature offered to patrons or those who have donated \(see [https://www.paypal.me/carlgr/](https://www.paypal.me/carlgr/) if you don't like patreon, same prices apply\) 6 | 7 | [![become a patron](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/bePatron?u=11251319) 8 | 9 | ### Music management 10 | 11 | | Name | Example | Usage | 12 | | :--- | :--- | :--- | 13 | | **music** | -- | Displays the music settings for the server. | 14 | | **music announce <mode>** | !music announce mention | Changes the bot announcement when a new song is played, settings are off, on and mention which will ping the requester. | 15 | | **music mode <mode>** | !music mode selective | Decides who can use undisruptive music commands. Values are ffa, restrictive, selective and djonly. ffa simply has no rules, everyone can always do anything. Restrictive is what I imagine 99% of servers will want to use as it restricts things like skipping, changing the volume etc. to djs and mods \(manage server\). Selective lets you choose exactly which members can use undisruptive commands. Dj only is what it says on the tin, it only lets mods and djs use any commands. | 16 | | **music \[blacklist\|bl\] <@members...>** | !music bl @Carl\#0001 @Kintark\#0588 | Blacklists some members from using commands, only works for restrictive. | 17 | | **music \[unblacklist\|unbl\] <@members...>** | !music unbl @Kintark\#0588 | Unblacklists some members. | 18 | | **music \[whitelist\|wl\] <@members...>** | !music wl @Carl\#0001 @Kintark\#0588 | Whitelists from members. Only works for selective. | 19 | | **music \[unwhitelist\|unwl\] <@members...>** | !music unwl @Kintark\#0588 | Unwhitelists some members. | 20 | | **music \[dj\|djrole\] \[role\]** | !music dj MUSIC OVERLORD | Sets the role as the dj role, pass no role to remove. | 21 | | **music \[limit\|sl\|skiplimit\]** | !music limit 3 | Total number of voteskips required to skip a song. | 22 | | **music \[ratio\|sr\|skipratio\]** | !music sl 65 | Percentage of non-bot, non-deafened members required to skip a song. | 23 | | **music \[maxqueue\|mq\]** | !music mq 300 | Limits the maximum size of the queue. | 24 | | **music \[userqueue\|uq\]** | !music uq 2 | Limits a member to a specified number of songs queued at once. | 25 | 26 | #### Music commands 27 | 28 | {% hint style="info" %} 29 | Mod commands are as always in **bold**. Unlike normal commands however, these mod only commands are also available to DJs. 30 | {% endhint %} 31 | 32 | | Name | Example | Usage | 33 | | :--- | :--- | :--- | 34 | | play <name or link> | !play despacito | Plays the song or playlist from youtube \(including livestreams\), bandcamp, soundcloud, vimeo, mixer, direct file links. | 35 | | find <query> | !find momoland | Searches youtube for videos matching your query. You can then respond with the number next to the result to enqueue that result. | 36 | | when <index> | !when 3 | Estimates when the song at the specified index will be played | 37 | | queue | -- | Shows the queue, paginated and the full duration of the playlist. | 38 | | np | -- | Shows the current song being played. | 39 | | _**skip**_ | -- | Skips if you're a mod or if you requested the song, voteskips otherwise. | 40 | | oops | -- | Removes your last queued track \(can be used multiple times\) | 41 | | **movetofront <index>** | !movetofront 27 | Moves the specified song to the head of the queue but does not play it | 42 | | **skipto <index>** | !skipto 22 | Skips the song and all songs inbetween to play the specific song | 43 | | **link \[channel\]** | !link \#cool-tunes | The linked channel is where all announcements show up. | 44 | | **seek <time>** | !seek 2:21 seek -27 | If you give it a MM:SS formatted timestamp it will jump to that part of the song, else it works relative to its current position. | 45 | | **stop** | -- | Clears the queue and stops playing the current song. | 46 | | **pause** | -- | Pauses the song. | 47 | | **resume** | -- | Resumes the song. | 48 | | **volume <volume>** | !volume 75 | Changes the volume between 1 and 150% \(100 is pretty loud as you can probably tell\) | 49 | | **shuffle** | -- | Shuffles the playlist. | 50 | | **repeat** | -- | Repeats the playlist \(the normal kind, not just the same song over and over again\) | 51 | | **remove <index>** | !remove 27 | Removes the song at the specified index | 52 | | **disconnect** | -- | Disconnects the bot from the voice channel and clears the queue. | 53 | | **summon \[channel\]** | !summon jamming | Summons the bot to your channel or to the specified one. | 54 | 55 | -------------------------------------------------------------------------------- /roles/autoroles-and-delayed-autoroles.md: -------------------------------------------------------------------------------- 1 | # Autoroles and delayed autoroles 2 | 3 | 4 | 5 | #### Automatic Roles 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | **autorole** | -- | Shows which roles will be added upon joining and if the bot will readd roles when someone leaves and rejoins the server | 10 | | **autoroles \[readd\|reassign\]** | -- | Turns reassigning roles on/off | 11 | | **autorole add <role>** | !autorole add peon | Autoroles are roles that are given to the user upon joining the server. | 12 | | **autorole remove <role>** | !autorole remove admin | -//- | 13 | | **autorole \[bl\|blacklist\] <roles...>** | !autorole bl admin newbie | Prevents the mentioned roles from being reassigned | 14 | | **autorole unblacklist <roles...>** | !autorole unblacklist "fortnite expert" admin | Undoes what !autorole bl does | 15 | 16 | If you have autoroles and reassigned roles, the member will receive the union of both. 17 | 18 | #### Delayed autoroles 19 | 20 | | Name | Example | Usage | 21 | | :--- | :--- | :--- | 22 | | **\[tr\|timedrole\]** | -- | Shows the roles being assigned with their delay | 23 | | **timedrole \[add\|+\] <time> <role>** | !timedrole add 42h19m22s fortnite expert | Adds a role to be added with a delay | 24 | | **timedrole remove <role>** | !tr remove newbie | Removes the role from being automatically assigned and also cancels any pending roles \(Note: all pending delayed roles with the same delay as the removed role will be removed, sorry!\) | 25 | 26 | -------------------------------------------------------------------------------- /roles/reaction-roles.md: -------------------------------------------------------------------------------- 1 | # Reaction Roles 2 | 3 | To remove a bot message, simply delete the message like you would delete any other message, it's handled by the bot automatically. 4 | 5 | | Name | Example | Usage | 6 | | :--- | :--- | :--- | 7 | | **rr \[setup\|make\]** | -- | Starts the interactive setup to get you started with reaction roles | 8 | | rr \[list\|show\] \[msg\_id\] | -- | Shows the emoji-role pairs and their associated message id, useful for rr add. If a message id is specified, it will show additional information about that particular reaction role. | 9 | | **rr edit <msg\_id> <title \| description>** | !rr edit 23094823094823490 Games \| Click on the games you want to be notified by | Edits the title and description, works like it does in the make command | 10 | | **rr remove <msg\_id> <role>** | !rr remove 493018654405951488 fortnite | Removes an emoji-reaction pair from the specified bot message. | 11 | | **rr move <base\_id> <target\_id>** | !rr move 493018654405951488 351050906189692938 | Moves the reaction roles from one message to another. This works even if the message was purged \(using the message id found in !rr show\). | 12 | | **rr clear \[msg\_id\]** | !rr clear 12343323615155 | If you specify a message id, it removes all the roles from the message, if you don't, it will remove **all** reaction roles from the server. | 13 | | **rr add \[channel\] <msg\_id> <emoji> <role>** | !rr add 1238901239812 :angel: pure | Adds the emoji-role pair to the message and the database. **NOTE:** This message id can belong to other people than carlbot, and the same emoji can be used for different messages for different roles \(useful for regional roles\) | 14 | | **rr \[colour\|color\] <msg\_id> <color>** | !rr color 507068806800211969 \#00ee28 | Changes the accent color of the specified bot message | 15 | | **rr addmany \[channel\] <msg\_id> <emoji role...>** | !rr addmany 1238901239812 :angel: pure :poop: fortnite :grin: league of legends | **SEPARATE EACH EMOJI-ROLE PAIR WITH A NEWLINE** Works like **!rr add** except it adds more than one role at a time | 16 | | **rr unique <msg\_id>** | !rr unique 123817349589 | Marks a message as 'unique' meaning a member can only claim one role from this message at a time, this works per message. Automatically removes the old reactions for you | 17 | | **rr binding <msg\_id>** | !rr binding 123817349589 | A combination of rr verify and rr unique. Allowing for members to limit people to one choice ever. | 18 | | **rr link <base\_id> <target\_id>** | !rr link 2389742349827 1239179273791283 | By linking two or more messages together, only one role from either message can be self-assigned. If you have 30 color roles for instance, linking the two messages together \(since the limit is 20/message\) allows a smooth, user-friendly experience when picking up roles. | 19 | | **rr unlink <msg\_id>** | !rr unlink 2389742349827 | This breaks apart the entire group created by `!rr link` This means if you had three messages linked together, none of them will be after using this command. | 20 | | **rr verify <msg\_id>** | !rr verify 123123123123 | With this enabled, reactions can only assign roles, not take them away. Additionally the bot automatically removes the reaction after the user reacts. This is useful for servers that want a verification reaction | 21 | | **rr drop <msg\_id>** | !rr drop 123123123123 | Works sort of like rr verify, except it can only remove roles \(and roles are removed when the emoji is added\). This can be used for servers that automatically assign a role that you wish to remove. | 22 | | **rr normal <msg\_id>** | !rr normal 123123123123 | This returns the reaction role message back to a normal reaction role message. Meaning any commands applied to it such as verify or unique will be removed. | 23 | | **rr temp <msg\_id> <time>** | !rr temp 2389742349827 24h | [Patreon only](https://www.patreon.com/carlbot): This allows for roles to be temporarily be assigned to a member and then removed after the designated amount of time. | 24 | | **rr reversed <msg\_id>** | !rr reversed 2389742349827 | Reacting removes roles, unreacting adds roles. | 25 | | **rr lock <msg\_id>** | !rr lock 2389742349827 | Locks the message preventing any roles from being handed out. | 26 | | **rr limit <msg\_id> <limit>** | !rr limit 2389742349827 5 | Limits members to picking up x amount of roles from a message. | 27 | | **rr bl <msg\_id> <roles...>** | !rr bl 2389742349827 Staff | Prevents members with this role from picking up roles from the message. | 28 | | **rr wl <msg\_id> <roles...>** | !rr wl 2389742349827 Staff | Only members with one of these roles can pick up roles from the message. | 29 | | **rr unbl <msg\_id><roles...>** | !rr unbl 2389742349827 Staff | Removes a blacklisted role from the indicated reaction role message allowing for the role to pick up new roles from the message. | 30 | | **rr unwl <msg\_id><roles...>** | !rr unwl 2389742349827 Staff | Removes a whitelisted role from the indicated reaction role message preventing the role from picking up new roles from the message. | 31 | | **rr clearbl <msg\_id>** | !rr clearbl 2389742349827 | Removes all roles from your blacklist for that set of reaction roles. | 32 | | **rr clearwl <msg\_id>** | !rr clearwl 2389742349827 | Removes all roles from your whitelist for that set of reaction roles. | 33 | | **rr maxroles <msg\_id> \[<role> <number>...\]** | !rr maxroles 2389742349827 DPS 10 | Want to limit the number of x role? With this, you can. **NOTE** This checks for how many people have the role, not how many reactions there are. | 34 | | **rr selfdestruct <msg\_id> <time>** | !rr selfdestruct 2389742349827 7d | Deletes the message and all of its reaction roles after the time is up. | 35 | | **rr aio <channel> <color> <title \| description> <emoji> <role>** | !rr aio \#reaction eeaaee "hello there \| this is a description" :red: hello :purple: there | **SEPARATE EACH EMOJI-ROLE PAIR WITH A NEWLINE** This is meant for power users who wish to create everything with just one command. The title and description have to be enclosed in double quotes. | 36 | | **rr aiou <channel> <color> <title \| description> <emoji> <role>** | -- | Works like **!rr aio** but also marks the message as unique | 37 | | **rr aiov <channel> <color> <title \| description> <emoji> <role>** | -- | All in one command to create a verification reaction role. | 38 | | **rr aioi <channel> <color> <title \| description> <emoji> <role>** | -- | All in one command to create an inverse verification reaction role, i.e. one that only removes roles. | 39 | | **!rr fixforeign <msg\_id>** | !rr fixforeign 351050906189692938 | Super niche command which can be used to have the bot react to emojis the bot doesn't have access to. One reason you might want to use this is because you want to use google's blob emojis. This command isn't required for these emojis to work, it only makes it so that the bot has its reactions added to the message. **YOU HAVE TO REACT TO THE MESSAGE WITH THE EMOJIS YOURSELF BEFORE USING THIS COMMAND** | 40 | | **!embed <channel> <color> <title \| description>** | Pick up a role in \#get-roles to get pinged here | Creates an embed. | 41 | 42 | [The fastest and most reliable unique reaction roles of any bot.](https://i.imgur.com/A7ShLfZ.mp4) 43 | 44 | ![Me setting up reaction roles in my support server.](../.gitbook/assets/w2kaapa-1.png) 45 | 46 | -------------------------------------------------------------------------------- /roles/role-management.md: -------------------------------------------------------------------------------- 1 | # Role management 2 | 3 | These commands are for administrators to manage role assignments in their servers. The permissions required for each of these are simply to be able to assign them normally, with an exception made to !rank and !ranks as they are meant for users. [This page does not go over reaction roles, click this text to go there instead](https://docs.carl.gg/roles/reaction-roles) 4 | 5 | | Name | Example | Usage | 6 | | :--- | :--- | :--- | 7 | | **!role <member> <role>** | !role @Carl\#0001 fortnite pro | Adds/removes a role from the specified member | 8 | | **!role add <member> <role>** | !role add @Carl\#0001 idiot | Adds a role to the specified member | 9 | | **!role remove <member> <role>** | !role remove @Carl\#0001 idiot | Removes a role from the specified member | 10 | | **!role color <role> <color>** | !role color weeb \#eeaaee | Changes the color of a role | 11 | | **!role all <role>** | !role all peon | Adds a role to every single member. | 12 | | **!role bots <role>** | !role bots metallic overlord | Adds a role to every single bot. | 13 | | **!role humans <role>** | !role humans flesh haver | Adds a role to all non-bots | 14 | | **!role in <base\_role> <assigned\_role>** | !role in "movie fan" game of thrones | Adds a role \(<assigned\_role>\) to all members with the <base\_role> role. In the previous example, all members with the movie fan role would be assigned the game of thrones role. | 15 | | **!role rall <role>** | !role rall admin | Removes a role from all members. | 16 | | **!role rbots <role>** | !role rbots people | Removes a role from all bots. | 17 | | **!role rhumans <role>** | !role rhumans metallic | Removes a role from all humans. | 18 | | **!role rin <role>** | !role rin weeb cool dude | Removes a role from all members with the base\_role. Previous example would have removed the "cool dude" role from all weebs. | 19 | | **!role \[removeall\|purge\|clear\] <@member>** | !role removeall @dumbguy\#1337 | Removes all roles from a member. | 20 | | **!temprole <@member> <time> <role>** | !temprole @coolguy\#0001 24h birthday boy | Adds a role for some time and removes it after the time is up. Time can be either before or after the role name. | 21 | | **!addrank <roles...>** | !addrank fortnite weeb "f1 fanatic" "koishi fanboy" "tomato lover" | Adds one or more roles so that **any** member can assign it to themselves. | 22 | | **!removerank <roles...>** | !removerank fortnite "f1 fanatic" | Removes a rank so that it can no longer be self assigned. | 23 | | !rank <role> | !rank fortnite | Adds/removes the role to the person who used the command. | 24 | | !ranks | -- | Lists all whitelisted ranks. | 25 | | **role create <name> \[color\] \[mentionable=False\] \[hoist=False\]** | !role create "cool dude" eeaaee true true | Creates a role. Hoist decides if it shows up in the sidebar or not. | 26 | | **!allroles** | -- | Displays list of roles in the server and member count assigned to the role. | 27 | | !role info <role> | !role info fortnite | Displays the role's Name, Member Count, Color, and when it was created. | 28 | | !role custom <member> <custom\_string> | !role custom @MichaelAus\#9999 +Role 1 -Role 2 | Gives the ability to add and remove roles within a single command, useful for removing a pending role whilst granting a member/joined role. | 29 | | !rank custom <custom\_string> | !rank custom +Role 1 -Role 2 | Adds/removes multiple roles to the person using the command. Requires roles to be whitelisted. | 30 | 31 | -------------------------------------------------------------------------------- /tags-and-responses/autoresponses-trigger-words.md: -------------------------------------------------------------------------------- 1 | # Autoresponses \(trigger words\) 2 | 3 | {% hint style="danger" %} 4 | Autoresponses are not custom commands, if you want things that are triggered by a prefix and a keyword, see the tag section. They offer more functionality, better editing capabilities, will _never_ have a limit to them and are just generally nicer for their intended purpose. 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | **\[ar\|autoresponse\]** | -- | Lists the triggers, and ignores for the server | 10 | | **ar list** | -- | Lists all the triggers in a paginated fashion | 11 | | **ar \[add\|create\] <trigger> <response>** | !ar add "hello there" Hello! I'm a bot created by carl :muscle: | Adds a trigger that carlbot will look for and say/do something when it is said. This command looks for a substring within the message, meaning that if you add _hi_ then _t_**hi**_s_ will also match. See the next command if that is too greedy for you. | 12 | | **ar \[strict\|s\] <trigger> <response>** | !ar strict "its coming home" {reactu: ⚽️} | This works a lot like normal ar add with one vital exception: it looks for exact sequences of words, rather than substrings. What this means is that if you add the strict trigger `hell` and someone says `hello` it will not match, it also means that triggers with more than one word requires an exact match per word \(this is a lot more reasonable to use than this text makes it out to be\). | 13 | | **ar \[exact\|e\] <trigger> <response>** | !ar exact "hey guys" Hello! | This matches if the content of a message is the same as the trigger. Some exceptions such as punctuation and capitalization applies. | 14 | | **ar \[startswith\|sw\] <trigger> <response>** | !ar sw "how do i" read the wiki! | Matches if the start of the message matches | 15 | | **ar \[endswith\|ew\] <trigger> <response>** | !ar ew "i think" no you don't | Like startswith except if it ends with it. | 16 | | **ar \[remove\|del\|-\|delete\] <trigger>** | !ar del its coming home | Removes an autoresponse | 17 | | **ar clear** | -- | Removes all autoresponses \(with a prompt\) | 18 | | **ar \[channel\|cs\] <trigger> <response>** | !ar channel "king crimson" HOW DOES KING CRIMSON WORK I DON'T UNDERSTAND | Like a normal autoresponse except it only listens in the channel you used the command in. **Note:** This will bypass any channel ignores \(member ignores still work\). | 19 | | **ar ignore <members or channels...>** | !ar ignore @Carl\#0001 @Kintark\#0588 \#general @idiotuser\#1337 \#welcome | Blocks channels and or users from triggering responses | 20 | | **ar unignore <members or channels...>** | !ar unignore \#general @Carl\#0001 | Undoes what !ar ignore does | 21 | 22 | Autoreactions support most of tagscript, see [Tags - Advanced usage to learn more](https://docs.carl.gg/tags-and-responses/tags-advanced-usage) 23 | 24 | -------------------------------------------------------------------------------- /tags-and-responses/tags-advanced-usage.md: -------------------------------------------------------------------------------- 1 | # Tags - Advanced usage 2 | 3 | Tags are easy to use, but very powerful. With some ingenuity you can create your own, dynamic commands. To aid with this, dynamic "blocks" can be added. It is for instance entirely possible to create an 8ball command, a !hug command and many other things using just tags. To build a tag you will need to combine various blocks to tell the tag what you want it to do. 4 | 5 | These blocks are split into rough categories based on their behaviour or characteristics: 6 | 7 | **Default Arguments** 8 | 9 | Tagscript comes with a few default arguments. These are: 10 | 11 | * `{unix}` - Unix time, useful for math blocks 12 | * `{uses}` - The amount of times the tag has been used 13 | * `{args}` - The arguments \(words used\) after the tag invocation. `!foo bar baz` means {args}==bar baz 14 | * `{user}` - Nickname of the user that used the tag 15 | * `{target}` - Like user, except if you mention someone, this variable works for the mentioned user. If you do not mention someone, target will act as user and reference the tag user. 16 | * `{server}` - The name of the server 17 | * `{mention}` - Mentions the user of the tag 18 | 19 | **Discord Object Adapters** 20 | 21 | Additionally, tagscript 2.0 has better support for various discord objects like members, channels and servers. We call these 'adapters' and let you access certain properties that previously would have been too specific to justify putting in. To access a property, you put the property name in parens like `{user(id)}` Right now for tags there are four object adapters: {user}, {target}, {channel} and {server}. 22 | 23 | {user} & {target} 24 | 25 | * \(avatar\): The user's avatar 26 | * \(id\): The user's id 27 | * \(mention\): a string to mention the user 28 | * \(created\_at\): yyyy-mm-dd HH.MM.SS 29 | * \(joined\_at\): yyyy-mm-dd HH.MM.SS 30 | * \(color\): hex code 31 | * \(name\): their actual _username_ 32 | * \(position\): their position in the role hierarchy 33 | 34 | {server} 35 | 36 | * \(icon\): server icon link 37 | * \(id\): server id 38 | * \(owner\): name\#discrim format of the server owner 39 | * \(random\): random member 40 | * \(randomonline\): random member who is online 41 | * \(randomoffline\): random member who is offline 42 | * \(members\): number of members: 43 | * \(bots\): number of bots 44 | * \(humans\): number of humans 45 | * \(roles\): number of roles 46 | * \(channels\): number of channels 47 | * \(created\_at\): when the server was created 48 | 49 | {channel} 50 | 51 | * \(id\): the channel id 52 | * \(topic\): the channel topic 53 | * \(slowmode\): the current slowmode delay 54 | * \(position\): the channel's position 55 | * \(mention\): clickable link to the channel 56 | 57 | **Meta Blocks** 58 | 59 | Meta blocks always execute when included in a tag, and thus only one of each block can be included in the tag structure. Additionally because they always execute, they must stay outside of conditional statements, although conditional statements can be _inside_ some of them. 60 | 61 | Command Blocks: 62 | 63 | `{cmd: temp stockholm}` `{c:temprole {args(1)} MediaMute {args(2+)}}` 64 | 65 | Do you think that `!info` really should be called `!whois`? with command blocks you can do just that. 66 | 67 | Example: `!tag + whois {cmd: info {args}}` 68 | 69 | Actions Blocks: 70 | 71 | * `{dm}` Redirects output as a direct message to the user who uses the command. 72 | * `{delete}` Deletes the message or invocation that triggered the tag. 73 | * `{silence}` Silences the output of any command being used. 74 | * `{override}` This is LITERALLY per-command modrole and allows for some neat new commands. 75 | 76 | Redirection blocks: 77 | 78 | `{redirect: channel}` 79 | 80 | Redirects the output of the tag to the specified channel, the tag creator needs to have send message permissions in the pointed channel. 81 | 82 | Example: `{user} says: {args} {redirect:screaming-out-loud}` 83 | 84 | Requirement and Blacklist Blocks: 85 | 86 | `{require:channel, role} {blacklist:channel, role}` 87 | 88 | Both accept roles and channels. Don't include the \# just the channel name. 89 | 90 | Also accepts mention formatted channel or role id's. `<#556675168634798111>` or `<@&554342061428572170>`. 91 | 92 | Require will limit the tag to executing only when it is used by one of the roles listed, or in one of the channels listed. 93 | 94 | Blacklist is the reverse of require. If the tag is used by any role or in any channel listed in the blacklist block, the tag will not execute. 95 | 96 | Example: `{require:Cool kids} Word around the office is that {user} is kind of a big deal` 97 | 98 | Example: `{blacklist:Staff} You have no power here` 99 | 100 | React Blocks: 101 | 102 | `{react: :regional_indicator_f: :cool_roblox_emoji:}` `{reactu: :regional_indicator_f: :cool_roblox_emoji:}` 103 | 104 | This will react to the tag {react:} or original message {reactu:} with the emojis placed inside the brackets after the `:`. Use a space to separate multiple emoji. 105 | 106 | **Control Blocks** 107 | 108 | Control blocks control the flow of your tag. They do so by evaluating conditions you provide inside parentheses, and if the condition is true, it will continue executing the payload, or what follows the `:`. To begin, you need to understand how to form a conditional statement. 109 | 110 | Each tag will take conditions in parentheses like so: `{if(1==1):hello world}` That would output `hello world`. 111 | 112 | In these parentheses you can use the following operators: 113 | 114 | * `==` Checks if the two are the exact same. 115 | * `!=` Checks if the two are different in any way. 116 | * `>` and `>=` checks if the number on the left side is larger than the one on the right. 117 | * `<` and `<=` checks if the number on the left side is smaller than the one on the right. 118 | 119 | There are 4 basic control blocks: 120 | 121 | * `if` - If the condition provided evaluates to true, the payload \(portion after the `:`\) will continue. 122 | * `any` - If any of the conditions provided evaluate to true, the payload will continue. Separate conditions with `|`. 123 | * `all` - If all of the conditions provided evaluate to true, the payload will continue. Separate conditions with `|`. 124 | * `break` - If the condition provided evaluates to true, the tag will stop and output ONLY the payload of the break block. 125 | 126 | Don't use break unless you are sure that is what you want. 127 | 128 | For the `if`, `any`, and `all` control blocks, an else statement can be added after the payload using a `|`. 129 | 130 | Examples: 131 | 132 | * `{if({user(id)}=={target(id)}):You just mentioned yourself or didn't mention anyone.|{user(name)} says {target(name)} is a wuss!}` 133 | * `{any(condition1|condition2|condition3):Will evaluate to true if any of the conditions is true}` 134 | * `{all(condition1|condition2|condition3):Will evaluate to true if all of the conditions are true}` 135 | * `{break(condition):Will return ONLY what's inside this bracket}` 136 | 137 | **Variable assignment** 138 | 139 | Often in a tag you might reference the same string of words, or the same number multiple times. Assigning is your way of assigning a value to a name for reuse across your entire tag. 140 | 141 | You can use the following aliases to assign the example `Content` to `varname`: 142 | 143 | * `{=(varname):Content}` 144 | * `{assign(varname):Content}` 145 | * `{let(varname):Content}` 146 | * `{var(varname):Content}` 147 | 148 | The text inside the parentheses is the identifier for the text beyond the `:`. You can use the value stored in `varname` with brackets: `{varname}` 149 | 150 | Nested variables can be rather useful in some situations. 151 | 152 | Example:`{=(t1):A}{=(t2):B}{=(b1):C}{=(b2):D}{=(1stletter):{if({args}>5):t|b}}{=(2ndnumber):{if({args}<20):1|2}}` 153 | 154 | allows you to use `{{1stletter}{2ndnumber}}` to conditionally reference any one of the first 4 variables. 155 | 156 | Some important information about both variables and `{args}`. You can reference individual elements out of the entire arguments or variable by treating `{args}` or `{example}` like an indexed \(numbered\) list using the spaces as the separators, and putting index \# of the object you want from the list in parentheses following the variable name or args. 157 | 158 | If `{example}==The quick brown fox jumps over the lazy dog`, then `{example(1)}==The`, `{example(5+)}==jumps over the lazy dog`, and `{example(+5)}==The quick brown fox jumps`. 159 | 160 | You can also specify the separator you want used with a `:`. If `{args}==Hello world, What did you expect, this is an example`, then `{args(1):,}==Hello world`, and `{args(2+):,}==What did you expect, this is an example`. 161 | 162 | If the \# you put in the parentheses is out of bounds for the variable or arguments, it will return the full {args}. 163 | 164 | You can also use `{1}` to mean `{args(1)}`, `{2}` to mean `{args(2)}` etc... 165 | 166 | List and Cycle Blocks: `{list(index):elem, elem2...} {cycle(index):elem, elem2...}` 167 | 168 | Lists and cycles are different in the sense that lists that receive an index \(a \#\) out of bounds will return nothing while cycles are basically index = index % elements.length. Both lists and cycles are 0-indexed. 169 | 170 | **RNG Blocks** 171 | 172 | Sometimes you want some random in your tag. The Random block is used to have the tag interpreter pick a random value out of a list of objects you provide. 173 | 174 | You can use `,` to separate simple lists, but if you are using commas as part of actual grammar, you must instead use ~ to separate all the possible choices. 175 | 176 | Random lists: 177 | 178 | * `{random:1,2,3}` 179 | * `{#:Carl,Michael,Viosmic}` 180 | * `{rand:Hello {user}, how are you?~Howdy {user}}` 181 | 182 | Random lists randomly pick an element each time. 183 | 184 | Seeded Random: 185 | 186 | * `{random(seed):a,b,c}` 187 | * `{#(same):Carl,Michael,Viosmic}` 188 | * `{rand({user(id)}):Hello {user}, how are you?~Howdy {user}}` 189 | 190 | The parameter inside the parentheses after random denotes the Seed value. When the Seed value is provided it will 'lock' the choice to be the same every time it is given that same Seed value. Can be anything. 191 | 192 | Weighted Random: `{random:|a,|b,|c}` 193 | 194 | Works as a shortcut for writing the same option many times. `{random:4|a,2|b}` is the same as `{random:a,a,a,a,b,b}`. 195 | 196 | Range Block: `{range:1-200}` 197 | 198 | Picks a random number between 1 and 200 \(inclusive\). Can be seeded just as `{random}`. 199 | 200 | 50/50 blocks: `{50:Will anyone see me?}` 201 | 202 | Has a 50% chance of outputting the payload. 203 | 204 | **Manipulation Blocks** 205 | 206 | These are blocks that manipulate a string in specific ways to achieve different desired results. This can be useful to concatenating a string onto the end of a search URL with the correct encoding for spaces, or to sanitize inputs before using the input in a conditional statement. They have many other potential uses as well as they are very versatile. 207 | 208 | * `{lower:HELLO}` will result in `hello` 209 | * `{upper:hello}` will result in `HELLO` 210 | * `{urlencode:hello there}` will result in `hello%20there` 211 | * `{urlencode(+):hello there}` will result in `hello+there` 212 | * `{join(_):hello friends}` will result in `hello_friends` 213 | * `{replace(a,b):carl bot}` will result in `cbrl bot` 214 | 215 | **Math Blocks** 216 | 217 | Supports basic mathematical operations: 218 | 219 | * `a+b` addition 220 | * `a-b` subtraction 221 | * `a*b` multiplication 222 | * `a/b` division 223 | * `a%b` modulo 224 | * `abs(a)` absolute value 225 | * `a^b` exponent 226 | * `round(a)` rounds numbers with decimals to the nearest whole number 227 | * `trunc(b)` truncates numbers with decimals, i.e: chopping off the decimals 228 | 229 | Examples: 230 | 231 | * `{math:1+1/(3^9)}` 232 | * `{m:round(7.8)+trunc(8.9)}` 233 | 234 | Timedelta Block: `{td({unix}): 2020-01-01 00.00.00}` 235 | 236 | Calculates the difference between two date, time, or datetime instances. The above example would tell you how long until New Years Day. 237 | 238 | **Strf Time Blocks** 239 | 240 | `{strf\(optional datetime\): _strftime_}` 241 | 242 | Returns the current time formatted according to python's strftime, see [http://strftime.org/](http://strftime.org/) for more information. 243 | 244 | Examples: 245 | 246 | * `The current year is {strf:%Y} hehe` 247 | * `Your account was created at {strf({user(created_at)}: %x}` 248 | 249 | -------------------------------------------------------------------------------- /tags-and-responses/tags.md: -------------------------------------------------------------------------------- 1 | # Tags \(custom commands\) 2 | 3 | {% hint style="info" %} 4 | Getting tags after they're created can be done without using !tag <name> simply do !<name> 5 | {% endhint %} 6 | 7 | Tags can get complicated, see [advanced tag usage](https://github.com/CarlGroth/Carl-Bot/wiki/Tags---Advanced-Usage) for a more thorough explanation of the tagscript 8 | 9 | | Name | Example | Usage | 10 | | :--- | :--- | :--- | 11 | | \[tag get\|tag\] <lookup> | !classdiscords | This is how you get tags after they're saved. | 12 | | tag \[create\|add\|+\] <name> <content> | !tag + test Hello world | Makes a tag named test with the content Hello world. | 13 | | tag \[delete\|del\|remove\|-\] <tagname> | !tag - test | Removes a tag | 14 | | tag ++ <name> <pastebin link> | -- | Since tags can have an output shorter than their length, using !tag ++ allows you to make them | 15 | | tag \[+=\|append\] <tagname> <content> | !tag += test and my mom | Adds content to an already existing tag | 16 | | tag \[a\|alias\] <new> <existing> | !tag alias testing test | Creates a link to an already existing tag, changes made to the original tag means the aliased tag will also be changed. The name you want for the alias is the first argument, the already existing tag is the second. | 17 | | tag raw <name> | !tag raw test | retrieves a tag with its markdown \(bold, italic, tagscript etc.\) removed. | 18 | | tag edit <name> <content> | !tag e test bye world | Edits the content of an already existing tag. | 19 | | **tag nsfw <name>** | !tag nsfw test | Restricts the tag so that it can only be used in channels marked as nsfw | 20 | | **tag restrict <name>** | !tag restrict test | To prevent big tags cluttering your chatty channels, this will make the bot post the content in the bot-channel and ping the author. | 21 | | tag stats \[@member\] | !tag stats @Carl\#0080 | Shows information about the servers tags \(uses, top 3, total number of tags\). If you mention someone, it will show their tags instead. | 22 | | tag info <name> | !tag info test | Shows some stats collected about the tag, uses, creation date, last update, owner. | 23 | | **tag ownership** | -- | With this enabled \(disabled by default\) tags are 'owned' meaning that unless you're a mod, you can't edit, append or delete other people's tags \(You can still create aliases to people's tags\) | 24 | | **tag modonly** | -- | With this enabled, only mods can manage tags, non-mods can still use them. | 25 | | **tag prompt** | -- | Know how trying to create a tag that already exists asks you if you want to edit, or append? With this disabled \(enabled by default\) it will default to editing the tag | 26 | | tag claim <name> | !tag claim realms | Claims a tag from a member who has left the server, only relevant if ownership is enabled | 27 | | tag sub <name> <from> <to> | !tag sub invite discord.gg/abc123 discord.gg/xyz999 | Replaces every occurance of from\_string with to\_string in an already existing tag. This can be extremely useful for expired invite links, slightly outdated information, or anything else that allows you to systematically correct your mistakes. | 28 | | \[tag list\|command\|taglist\] | -- | Lists all of the tags on the server | 29 | 30 | -------------------------------------------------------------------------------- /utilities/announcements.md: -------------------------------------------------------------------------------- 1 | # Announcements 2 | 3 | {% hint style="info" %} 4 | Timezones suck, use the dashboard at [https://carl.gg](https://carl.gg) to create autofeeds with your local timezone 5 | {% endhint %} 6 | 7 | {% hint style="info" %} 8 | The id argument is the autofeed id which the bot spits out when you create an autofeed or when you do !af 9 | {% endhint %} 10 | 11 | | Name | Example | Usage | 12 | | :--- | :--- | :--- | 13 | | **feed** | -- | Lists all the feeds that have been set up in the server. | 14 | | **feed create <name> <role>** | !feed create got game of thrones | Creates a feed in the channel the command is used in with a specific name and a specific role that will be mentioned. | 15 | | **announce** | !feed announce got Hey guys, everyone dies | Makes an announcement to the specified feed. | 16 | | **feed \[delete\|-\|del\|remove\]** | !feed delete got | Deletes a feed. Note: This does not delete the associated role, so if you created one specifically for a feed, you need to delete it. | 17 | | **!feed clear** | -- | Deletes ALL feeds from the server. | 18 | | **!feed move** | !feed move bot \#announcements | Moves a feed to a specified channel. Note: You need send messages permissions in the channel you move it to. | 19 | | **\[af\|autofeed\]** | -- | Lists all autofeeds set up in the server. | 20 | | **autofeed <role> <time> <message>** | !autofeed "final fantasy xiv" 18h The servers have been reset, get out there! | Normal autofeeds \(the ones created by this command\) will ping the role specified when setting them up. | 21 | | **autofeed silent <time> <message>** | !autofeed silent 2 hours Vote for carlbot on discord bots! | Like a normal autofeed except it does not have a role associated with it and thus, does not ping anything. | 22 | | **autofeed silence <id>** | !autofeed silence 37 | Silences an already existing normal feed. | 23 | | **autofeed repeat <id>** | !autofeed repeat 13 24h | Marks an autofeed to be repeated. This keeps going until you delete the autofeed. | 24 | | **autofeed remove <id>** | !autofeed remove 77 | Removes an autofeed | 25 | | **autofeed clear** | -- | Removes ALL autofeeds. | 26 | | **autofeed move <id> <\#channel>** | !autofeed move 73 \#general | Moves an autofeed to a specified channel. Note: You need send messages permissions in the channel you move it to. | 27 | 28 | What are feeds? Feeds are a way for you to make announcements and ping a specific role without having to deal with the annoyances and potential abuse from either having a pingable role or manually toggling inbetween pingable and not. 29 | 30 | Automatic feeds on the other hand can be seen as group reminders, and they share a lot of functionality with reminders. 31 | 32 | -------------------------------------------------------------------------------- /utilities/embeds.md: -------------------------------------------------------------------------------- 1 | # Embeds 2 | 3 | {% hint style="info" %} 4 | !cembed and !ecembed take raw json as their arguments. It's recommended to either use [leovoel's embed visualizer](https://leovoel.github.io/embed-visualizer/) or [Nadekobot's embed builder](https://embedbuilder.nadekobot.me/) for these 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | !embed \[channel\] <color> <title \| description> | !embed \#get-roles eeaaee I'm a title \| and I'm the description | Creates a simple embed with the colored strip, a title and a description. | 10 | | **!editembed <msg\_id> <title \| description>** | !editembed 32538901189123 I'm a new title \| and I'm an updated description | Edits a message in the same format you create basic embeds | 11 | | **!rr color \[channel\] <msg\_id> <color>** | !rr color 182923492394927 eeeaaa | Edits the color strip on the left side of the embed. If the embed is not a reaction role embed, you need to either use the command in the same channel as the embed or specify it as the first argument. | 12 | | !cembed \[channel\] <json> | !cembed \#secret {"title": "hello world"} | Also accepts a pastebin link since it can be bigger than 2000 characters. | 13 | | **!ecembed <msg\_id> <channel> <json>** | !ecembed 31203123191 \#secret {"title": "Woah, a new title!"} | Edits ANY embed the bot has posted. | 14 | | !embedsource <msg\_id> \[channel\] | !embedsource 9312838121123 \#bilderberg | Gets the raw json from an embed | 15 | 16 | ## 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /utilities/highlights-pager.md: -------------------------------------------------------------------------------- 1 | # Highlights/pager 2 | 3 | 4 | 5 | ### Highlights 6 | 7 | Highlighting means you will receive a message when your keyword is said in chat. The matching is approximate and works really similarly to discord search \(basically, if you search your keyword in discord search, you will find messages that would trigger the highlight, roughly speaking\). 8 | 9 | {% hint style="warning" %} 10 | It will only notify you if you haven't posted anything in chat for the past 5 minutes. 11 | {% endhint %} 12 | 13 | 14 | 15 | | Name | Example | Usage | 16 | | :--- | :--- | :--- | 17 | | hl \[+\|add\] <word\(s\)> | !hl add carl | Adds a word that will notify you. **IMPORTANT:** The bot tries to guess when you're aware of what's being typed and won't notify you if you've typed in the past 5 minutes, to see if your highlights work, please use `!hl match `. Additionally, when adding a multi-word highlight, it will check for a sequence of words, not a substring. | 18 | | hl \[m\|match\] <sentence> | !hl match carl is cute | Tests a sentence and sees which if any words would notify you. | 19 | | hl block <members/channels> | !hl block @Kintark\#0588 \#general @angryloser\#0001 \#bilderberg | Messages sent in this channel/from this user won't notify you. | 20 | | hl unblock <members/channels> | !hl unblock \#general | Unblocks the user/channel | 21 | | hl show | -- | Shows which words you have set to highlight you | 22 | | hl clear | -- | Removes all of your highlighted words | 23 | | hl del <word> | !hl del math | Removes a word from your highlighted words | 24 | 25 | -------------------------------------------------------------------------------- /utilities/reminders-timers.md: -------------------------------------------------------------------------------- 1 | # Reminders/Timers 2 | 3 | {% hint style="danger" %} 4 | These reminders require you to have dms open from at least one server you share with the bot 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | \[rm\|reminder\|remindme\|timer\] | !rm 1d23h pick up the next mission on your hunter. !rm buy groceries tomorrow at noon. | Sets up a reminder to send a message reminding you about the thing. If you use a human time like "at noon" it uses UTC. | 10 | | rm mine | -- | Shows your reminders. | 11 | | rm \[-\|remove\|del\] <id> | -- | Removes the reminder with that id. | 12 | | sub <id> | !sub 97 | Copies a reminder someone else made. This means you own the reminder, that person deleting their reminder will have no impact. | 13 | | !rm clear | -- | Removes all your reminders from the server \(or ALL if used in DMs\) | 14 | | !rm repeat <id> <interval> | !rm repeat 247 20d | Sets a timer to be repeated. | 15 | | !rm when <id> | !rm when 247 | Shows some information about a timer created in the server \(or from you, if used in DMs\) | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /utilities/starboard.md: -------------------------------------------------------------------------------- 1 | # Starboard 2 | 3 | {% hint style="info" %} 4 | Starboard is a way to 'star' \(think like, upvote etc.\) a message and have it show up in a separate channel. You do this by reacting to the message with ⭐ `(:star:)` 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | **starboard \[name='starboard'\]** | !starboard meme-archive | Creates the starboard. | 10 | | **star limit <number>** | !star limit 3 | Sets the amount of stars required for a post to get posted to the starboard | 11 | | star stats \[@member\] | !star stats @Carl\#0080 | Shows some information about the server's or user's star giving patterns. | 12 | | star top | -- | Returns the most starred posts | 13 | | **star nsfw** | -- | Toggles nsfw stars. With this enabled, posts starred in channels marked as nsfw will embed | 14 | | **star self** | -- | Toggles being able to star your own posts | 15 | | star show <id> | !star show 463069834968825856 | Shows a starred post from the starboard in the channel the command was used in, you can find the id in the footer of each starboard entry. | 16 | | star jump | !star jump | Will add a jump link to the starred message. | 17 | 18 | Star messages, have them posted to a channel. It's a fun way to save funny/interesting messages in a place where everyone can see them. 19 | 20 | ![](https://i.imgur.com/FIpBei2.png) 21 | 22 | -------------------------------------------------------------------------------- /utilities/suggestions.md: -------------------------------------------------------------------------------- 1 | # Suggestions 2 | 3 | {% hint style="info" %} 4 | All commands require !suggestion channel \[\#channel\] to have been used in order to work, please start with that. 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | **suggestion channel \[\#channel\]** | !suggestion channel \#cool-server-feedback | Sets a channel as the suggestion channel or creates a new one if you don't mention one. | 10 | | **suggestion dm** | -- | Toggles between sending the person who suggested something upon a moderator deciding on it. | 11 | | **suggestion limit <number>** | -- | The color of the approved/denied suggestions are based on the difference in upvotes and downvotes on the original post. This threshold is the amount of votes required for the decision to be fully green/red. | 12 | | **suggestion move \[\#channel\]** | -- | This will let you set a secondary channel to announce the suggestions that admins have approved/denied. Just like !suggestion channel this can be left blank to create a channel. | 13 | | **suggestion edit** | -- | Edits the message instead of reposting it in the same channel. If a move channel has been specified, it's posted there and edited in the original channel. | 14 | | **suggestion submit** | -- | Lets you set a single channel where people are allowed to make suggestions. This can be useful if you don't want everyone to be able to make suggestions | 15 | | **suggestion** | -- | Displays the server's current suggestion config. | 16 | | suggest <message> | !suggest The bot should be able to announce new youtube videos | Creates a suggestion | 17 | | **approve <id> \[reason\]** | !approve 5 Great idea man, will add it for sure | Approves of a suggestion. | 18 | | **deny <id> \[reason\]** | !deny 6 This is literally impossible due to how discord works | Denies a suggestion | 19 | | **consider <id> \[reason\]** | !consider 4 I'm not sure if this would really add that much, but if the people want it... | Marks a suggestion as being considered. | 20 | | **implemented <id> \[reason\]** | !implemented 5 the command is !youtubesub \ | Marks a suggestion as implemented | 21 | | **!suggestion anon** | -- | Toggles member's name and avatar not appearing when making a suggestion. \(Not retroactive\) | 22 | 23 | -------------------------------------------------------------------------------- /utilities/twitch-notifications.md: -------------------------------------------------------------------------------- 1 | # Twitch notifications 2 | 3 | {% hint style="danger" %} 4 | You have to set a twitch channel with !set twitch <\#channel> before any notifications will be sent. 5 | {% endhint %} 6 | 7 | | Name | Example | Usage | 8 | | :--- | :--- | :--- | 9 | | **twitch <name> \[alias\]** | !twitch azortharion azor | Adds the user with the alias. In the example given, the stream announcement will say "azor is now live". This command also removes a streamer if used again. | 10 | | twitch list | -- | Shows all registered streamers and when they were last online | 11 | | twitch online | | Shows all currently online streamers | 12 | | **twitch own** | -- | With this enabled, users can't have the streams they themselves added removed by non-mods, this is useful if you want to allow users to add their own streams to a server | 13 | | **twitch mod** | -- | If this is disabled, any user can add a stream of their choice | 14 | | **twitch limit <number>** | !twitch limit 2 | Restricts how many streams non-mods are allowed to add | 15 | 16 | -------------------------------------------------------------------------------- /utilities/uncategorized-utilities.md: -------------------------------------------------------------------------------- 1 | # Uncategorized utilities 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 27 | 28 | 29 | 30 | 31 | 34 | 35 | 36 | 37 | 38 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 67 | 68 | 69 | 70 | 71 | 73 | 74 | 75 | 76 | 77 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 132 | 133 | 134 | 135 | 136 |
NameExampleUsage
poll <question>!poll should I sleep?Creates a yes/no poll where you vote with reactions
quickpoll <question | answers...>!quickpoll best game?| wow | overwatch | only losers play gamesUse pipes | or commas to separate the questions and answers. 24 | The first arg is the question, all after that are individual answers. You 25 | can't mix pipes and commas, pipes are intended for polls where you 26 | want commas in the question or answer.
[d|define] <word>!define wellShows the oxford dictionary's definition for the word. Note: due 32 | to the length of some definitions it might be a good idea to restrict this 33 | command to prevent abuse.
wolfram!wa e ^ (pi * i) + 1This is similar to going to wolframalpha and entering the text yourself. 39 | Doesn't support complicated answers.
[pick|choice|select] <choices>!choose go to sleep, play overwatchPicks one of your specified arguments. Use commas for multiple words.
activity [day/week/month/year]!activity weekDefaults to month, shows the 25 most active members by postcount for the 50 | specified timespan (that the bot has seen)
youngest!youngestRanks members by account creation - Requires Manage Messages
oldest!oldestRanks members by account creation - Requires Manage Messages
[ud|urbandictionary] <word>!ud cleveland steamerReturns the urbandictionary definition for your word. @everyone proof. 66 | (looking at you, b1nzy)
[i|info] [@member]!i @Carl#0080Returns Name, last 5 nicknames, id, postcount (that the bot has seen), 72 | creation date, server join date and some cool information related to these
[weather|temp] [location]!weather stockholmIf no city is specified, it will give you info for your set home. If used 78 | for the first time, that city will be set as your home. Since countries 79 | don't have weather (think about it) you have to be more specific.
temp home <location>!temp home tampaLets you set a city as your home for !temp to default to.
[nicks|nicknames] [@user]--Shows you your nicknames history, duplicates are moved to the end of the 90 | list. The names are ordered from oldest to newest.
setnick <member> <name>!setnick @Carl#0080 Do not pingChanges the user's nickname.
dice [sides] [rolls]!dice 6Rolls a [sides] sided die [rolls] times. Defaults to 6 sides and 1 roll.
roll [lower-[upper]]!roll 100-1100Works just like in wow, defaults to 1 to 100. Changing just one number 106 | will change the upper bound.
[flip|coin]--Flips a coin
avatar <member/ID>!avatarShows the avatar of a mentioned user or yourself if you don't. Works 117 | even if the user doesn't share a server with the bot. Also works in 118 | dms, you creeps.
serverinfo--Displays server information.
127 |

spacemychannel 128 |

129 |

<channel> 130 |

131 |
!spacemychannel #test-channelRemoves the - and _ in channel names replacing with a space.
137 | 138 | --------------------------------------------------------------------------------