# Discord Bot Commands
The following commands are available for interacting with the Discord bot in designated channels (queue channels or the chat channel). Commands are prefixed with `!` and are case-insensitive. Some commands are restricted to specific users (e.g., staff or registered players), and certain commands are only available in the chat channel.
## General Commands
| Command | Alias | Description | Usage | Restrictions |
|---------|-------|-------------|-------|--------------|
| `!help` | - | Displays a placeholder message about upcoming documentation. | `!help` | None |
| `!register` | - | Registers a new player with a name, MMR, and Dota ID. MMR must be between 0 and 9999. | `!register <name> <mmr> <dota_id>`<br>Example: `!register Uvs 3000 444510529` | Cannot be used if already registered, name is taken, or Dota ID is in use. |
| `!whois` | `!wh`, `!who`, `!profile`, `!stats` | Displays information about a player (MMR, games played, roles, etc.). If no name is provided, shows the caller's info. | `!whois [name]`<br>Example: `!whois Uvs` | Available in chat channel only. |
| `!top` | - | Shows the top players by score (default 10). | `!top [limit]`<br>Example: `!top 5` | Available in chat channel only. Disabled in casual mode. |
| `!bottom` | `!bot` | Shows the bottom players by score (default 10). | `!bottom [limit]`<br>Example: `!bottom 5` | Available in chat channel only. Disabled in casual mode. |
| `!streak` | - | Shows a player's current and longest win/loss streak. If no name is provided, shows the caller's streak. | `!streak [name]`<br>Example: `!streak Uvs` | Available in chat channel only. |
| `!recent` | - | Shows a player's recent matches (default 5, max 9). If no name is provided, shows the caller's matches. | `!recent [name] [number]`<br>Example: `!recent Uvs 3` | Available in chat channel only. |
## Queue Management Commands
| Command | Alias | Description | Usage | Restrictions |
|---------|-------|-------------|-------|--------------|
| `!q+` | `!join` | Joins the queue in the current channel. | `!q+` | Requires vouched player, sufficient MMR, and not in a full queue. |
| `!q-` | `!leave` | Leaves the queue in the current channel. | `!q-` | Cannot leave a full queue (10 players). |
| `!q` | `!list` | Shows details of all active queues. | `!q` | None |
| `!add` | - | Adds a player to the queue in the current channel. | `!add <name>`<br>Example: `!add Uvs` | Staff-only. Player must not be in another queue. |
| `!kick` | - | Kicks a player from the queue in the current channel. | `!kick <name>`<br>Example: `!kick Uvs` | Staff-only. |
| `!votekick` | `!vk` | Initiates a vote to kick a player from a full queue. Requires a set number of votes. | `!votekick <name>`<br>Example: `!votekick Uvs` | Must be in a full queue with the target player. Available in chat channel. |
| `!close` | - | Closes a specified queue by ID. | `!close <queue_id>`<br>Example: `!close 454` | Staff-only. |
## Player Management Commands
| Command | Alias | Description | Usage | Restrictions |
|---------|-------|-------------|-------|--------------|
| `!vouch` | - | Vouches a player, allowing them to queue. | `!vouch <name>`<br>Example: `!vouch Uvs` | Staff-only. |
| `!ban` | - | Bans a player from playing. | `!ban <name>`<br>Example: `!ban Uvs` | Staff-only. Available in chat channel. |
| `!unban` | - | Unbans a player. | `!unban <name>`<br>Example: `!unban Uvs` | Staff-only. Available in chat channel. |
| `!set-name` | `!rename` | Changes a player's name using their Discord mention. | `!set-name <@mention> <new_name>`<br>Example: `!set-name @Uvs Napster` | Staff-only. Available in chat channel. |
| `!set-mmr` | `!adjust` | Sets a player's MMR and logs the change. | `!set-mmr <name> <mmr>`<br>Example: `!set-mmr Uvs 6500` | Staff-only. Available in chat channel. |
| `!set-dota-id` | - | Updates a player's Dota ID. | `!set-dota-id <name> <dota_id>`<br>Example: `!set-dota-id Uvs 111886427` | Staff-only. Available in chat channel. |
| `!role` | `!roles` | Sets or displays a player's role preferences (1-5 for carry, mid, offlane, pos4, pos5). | `!role [role] [value]` or `!role <carry> <mid> <offlane> <pos4> <pos5>`<br>Examples: `!role mid 5`, `!role 1 4 2 5 3` | Available in chat channel only. |
| `!afk-ping` | `!afkping` | Sets or displays the player's AFK ping preference for queue kicks. | `!afk-ping [on/off]`<br>Example: `!afk-ping on` | Available in chat channel only. |
## Match Management Commands
| Command | Alias | Description | Usage | Restrictions |
|---------|-------|-------------|-------|--------------|
| `!record-match` | - | Records a match with 10 player mentions and a winner (radiant or dire). | `!record-match <winner> <@mention1> ... <@mention10>`<br>Example: `!record-match radiant @Uvs @Nappa ...` | Staff-only. Available in chat channel. |
## Queue Channel Management Commands
| Command | Alias | Description | Usage | Restrictions |
|---------|-------|-------------|-------|--------------|
| `!mmr` | - | Sets the minimum MMR requirement for the queue channel. | `!mmr <mmr>`<br>Example: `!mmr 4000` | Staff-only. Cannot be used if active queues exist in the channel. |
## Fun Responses
The bot responds to certain phrases in queue or chat channels (case-insensitive):
| Phrase | Response (Randomly Chosen) |
|--------|----------------------------|
| `stupid bot`, `bot is stupid` | `Smarter than you.` or `You are stupid.` |
| `fu bot`, `fuck you bot`, `fuck u bot` | `Bite my shiny metal ass!` or `Fuck you too.` |
| Mentioning the bot (e.g., `@Bot`) | `Imagine thinking inhouse-bot and inhouse-ping are same thing :thinking:` or `Ping your mum.` |
## Notes
- **Staff-Only Commands**: Commands like `!vouch`, `!add`, `!kick`, `!mmr`, `!ban`, `!unban`, `!set-name`, `!set-mmr`, `!set-dota-id`, `!record-match`, and `!close` require the user to have `bot_access` permission in the database.
- **Chat Channel Restrictions**: Commands such as `!whois`, `!top`, `!bottom`, `!streak`, `!recent`, `!role`, `!afk-ping`, `!votekick`, `!ban`, `!unban`, `!set-name`, `!set-mmr`, `!set-dota-id`, and `!record-match` are only available in the designated chat channel.
- **Free-for-All Commands**: The `!register` and `!help` commands can be used by anyone, even unregistered players, provided they meet the criteria (e.g., unique name, valid MMR).
- **Queue Restrictions**: Players must be vouched and meet MMR requirements to join a queue. They cannot join if already in a full queue (10 players) or leave a full queue without risking a dodge warning.
- **Reaction-Based Queue Joining**: Players can join a queue by reacting with ✅ to the queue message in the queues channel. Removing the reaction leaves the queue, unless the queue is full.