Skip to main content

Chess

Play chess against other server members or the AI, right in Discord!

Play chess against other members or an AI in async Discord thread games
This module is currently only available to users with Early-Access.
This module is storing data in your bot's database.
This module creates one top-level Slash-Command on your server.
This module has one configuration file.
This module is being actively used on over 100 other servers on SCNX.
This module is included for free in every plan. Learn more about prices.

Features

  • Challenge another member to a PvP chess game or start a game against the AI (Easy, Medium, Hard).
  • Games run in dedicated Discord threads for clean, asynchronous gameplay. Threads are automatically archived when the game ends.
  • Three ways to make moves: type a move directly in the game thread, use algebraic notation via a popup modal (e.g. e2e4, Nf3, O-O), or use guided select menus to pick your piece and destination square.
  • Full castling support — use standard notation (O-O, O-O-O) or coordinate notation (e1g1). Castling moves are labeled in the select menus.
  • Pawn promotion picker — when a pawn reaches the last rank, choose which piece to promote to (Queen, Rook, Bishop, or Knight) from a dropdown instead of always being forced to a queen.
  • Material balance indicator — the game embed shows who is ahead on material (e.g. White +3) after every move.
  • Visual board images generated for every move, with check and last-move highlighting. The board is automatically rendered from the perspective of whoever is about to move, so asynchronous games always show your own pieces at the bottom.
  • Draw offers, resignations, and move history built in. Draw offers are only available in PvP games, not against the AI.
  • Completed games include a Moves button on the final board embed to quickly review the full game history.
  • Configurable move timeout with automatic reminders and forfeit on inactivity.
  • Multiple concurrent games per player (no duplicate games between the same two players).
  • Games are automatically forfeited when a player leaves the server.

Setup

  1. Enable the module on your server.
  2. Optionally open the Configuration to adjust the Move Timeout, Forfeit Timeout, Max Concurrent Games, and AI Opponent Enabled settings.

Game threads are created in the channel where the /chess command is used — no dedicated game channel needs to be configured.

Usage

Challenging a player

Use /chess challenge to challenge another member. The challenged user has 2 minutes to accept or decline the invitation. Once accepted, a new thread is created in the current channel with the board and action buttons.

Playing against the AI

Use /chess challenge-ai to start a game against the AI. Choose a difficulty: Easy, Medium, or Hard. You always play as white.

Making moves

On your turn, you have three options:

  • Type in thread — Simply type your move as a message in the game thread (e.g. e2e4, Nf3, O-O). The message is automatically deleted and the move is processed.
  • Move button — Click "Move" to open a popup where you type your move in algebraic notation (e.g. e2e4, e2-e4, Nf3).
  • Select menus — The bot shows a piece select menu. Pick a piece, then pick the destination square from the next menu. Castling moves are labeled when available.

When a pawn reaches the last rank, the bot replaces the board controls with a promotion dropdown. Pick the piece you want (Queen, Rook, Bishop, or Knight) and the move is finalized with your choice.

After your move, the board image updates and the opponent is pinged.

Draw, resign, and history

  • Offer Draw — Click the "Offer Draw" button (PvP games only, not available against AI). Your opponent will see an "Accept Draw" button on their next turn. If they make a move instead, the draw offer is implicitly declined.
  • Resign — Click "Resign" and confirm. The opponent wins immediately.
  • Moves — Click "Moves" to view the full move history of the game.

Timeouts

If a player does not move within the configured timeout, they receive a reminder ping in the thread. If they still do not move within the forfeit timeout, the game is automatically forfeited.

Commands

Understand the documentation
In these docs, name:<Type> is an option of a slash-command with name name and the type Type. Options that not required, are described as [name:<Type>]. If the action of a command is vastly different between required and not-required options, we might list them separately.
Examples
  • /moderate ban user:<Member>: This command (/moderate ban) has an required option with the name "user" that only accepts one member as a value.
  • /moderate ban victim:<Member> reason:<Text>: This command (/moderate ban) has an required option with the name "victim" that only accepts one member as a value and another required option with the name "reason" that accepts any text as an value.
  • /moderate ban victim:<Member> reason:<Text> [proof:<Attachment>]: This command (/moderate ban) has an required option with the name "victim" that only accepts one member as a value, another required option with the name "reason" that accepts any text as an value and a not-required option with the name "proof" which allows one attachment as its value.
CommandDescription
/chess challenge user:<User>Challenge another member to a chess game.
/chess challenge-ai [difficulty:<Easy/Medium/Hard>]Start a chess game against the AI (default difficulty: Medium).
/chess gamesList your active chess games.
/chess history [user:<User>]View completed chess game history (yours or another player's).

Configuration

Open the configuration in your dashboard.

FieldDescriptionDefault
Move Timeout (hours)Hours before a reminder ping is sent in the game thread.24
Forfeit Timeout (hours)Hours of inactivity before automatic forfeit.48
Max Concurrent GamesMaximum number of active games per player.5
AI Opponent EnabledAllow players to start games against the AI. When disabled, the /chess challenge-ai command is hidden.true

Troubleshooting

The board image is not showing
  • The board image is generated by an external API. If the API is temporarily unavailable, the game still works — the image will simply be missing from the embed.
My move was rejected as invalid
  • Make sure you are entering a legal move. The error message will list all legal moves for your current position.
  • If using notation like Nf3 and multiple knights can reach f3, use coordinate notation instead (e.g. G1F3).

Stored data

The following data is stored by this module:

  • Game records: Player IDs, board state (FEN), move count, game status, thread/channel IDs, and timestamps for each game. Completed games are retained indefinitely for history.

To remove all data stored by this module, purge the module database.

Need more help?
Can't find what you're looking for? Our team is happy to help.