> For the complete documentation index, see [llms.txt](https://niiroow.gitbook.io/abaddon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://niiroow.gitbook.io/abaddon/commands/custom-commands.md).

# Custom Commands

### Introduction

Custom commands are not the easiest thing to fully understand, so we will explore them a bit in a step by step guide which will teach you to create a couple nice commands.

A couple important things to note upfront:

1. We will assume the prefix ! for the whole tutorial, if you are using a different prefix, you will need to replace the prefix ! with your own prefix.
2. There is a limit for how many custom commands can be created on a single server, namely 15. This limit may change in the future, so when in doubt, listen to what the bot says.
3. Custom commands are, as the name suggests, custom, so they will always only be on one specific server and won't move around servers with the creator.

### A simple greeting command

Our first command will be a simple greeting command, which we will call !greet

```
!ccmd add greet Howdy fella!
```

The bot should respond with an embed, informing you it has created the greet command running as !greet.

<div align="left"><img src="/files/-MhahbzmIdZ40fKcUqtE" alt=""></div>

Now, you can run the command by simply using !greet

<div align="left"><img src="/files/-MhahnLMWIPA8ve6CMoE" alt=""></div>

### Renaming commands

Now, we will create a second command, which we would use to greet a new person joining the community, but !greet is already taken from the command we just created, so we have to rename it

```
!ccmd rename greet howdy
```

To which the bot will once again give us confirmation that the command has been renamed

<div align="left"><img src="/files/-MhailulbSZvOJF6hg1K" alt=""></div>

Now, you can proceed to create a new greet command following the steps from "A simple greeting command"

### Changing command functionality

Changing command functionality is not available out of the box, so instead you have to first delete your old command and then create a new one with the same name. To delete a command, for example our "howdy" command out of the previous section, you would simply execute the following statement

```
!ccmd remove howdy
```

Following that, you can then go ahead and create a new command

### Role Commands

You obviously can't just create commands that make the bot say things, even though that is great fun in itself, but you can also create lots of other commands, including commands to enable your members to give themselves a role.

There is 3 types of role commands, which work interchangably:

1. Addrole: When a user uses the command, they get the role, if they didn't have it before
2. Removerole: When a user uses the command, they lose the role, if they had it before
3. Togglerole: When a user uses the command, they either get the role, if they didn't have it before, or they lose it, if they had it before

So with those types cleared up, you can now create a command doing any of those 3, though a lot of situations you will probably want to use the togglerole one so people can change their mind later on

```
!ccmd add twitternotif togglerole:@Twitter Notifiations
```

In our example, we create a command with which people can toggle a role which the bot would use in the twitter announcement messages. If you want to tag the role, you will need to leave a space between the colon and the at (togglerole: @Twitter) so you get tab completion, the bot will still be able to understand the command, even with that space there. Altearnatively, you can also just type the name (Twitter Notifications) or part of the name for the bot to recognise the role on it's own or, if you have developer mode enabled, copy the role's ID and then just paste that.

### Embed

If you want some really fancy messages with a simple command, this is the right place. The usage is very simple, [simply create an embed](https://abaddon.me/embed/builder), copy the JSON output and then paste it to create an embed command.

```
!ccmd add beautifulEmbed embed:{
  "description": "A very beautiful embed",
  "color": 53380
}
```

You may take out the spaces, but the bot accepts the json over multiple lines just fine, so there is no need to go through the extra steps.

### Execute

Last but not least, the execute command. With this powerful tool, you can call any of the global commands like !play, pass in arguments like your dance playlist and you will never have to go to youtube to copy your playlist's link again.

```
!ccmd add anime execute:play args=https://www.youtube.com/playlist?list=PLg_LXnyvZsrwbm8hTebmhakZ1VEOavKcq
```

With this command, simply running !anime will queue up a bunch of anime intros for you to listen to. If you don't need to pass any arguments, you can just stop right after the name of the command you want to run.

### Additional Commands

A couple commands, that so far went unmentioned:

Enable|Disable\
You can enable/disable either all custom commands at once, or by giving a command name, enable/disable a single command temporarily

List\
If you are either just a member looking to use some custom commands or you forgot all of the custom commands, just run !ccmd list for a quick overview of all of the commands available on each server.

This concludes the tutorial on custom commands. Go ahead and see what cool things you can create with this functionality


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://niiroow.gitbook.io/abaddon/commands/custom-commands.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
