A free Discord bot that tracks CTFtime events and sends configurable notifications to Discord.
- New and upcoming CTF events from CTFtime
- 24-hour, 1-hour, started, and ending-soon reminders
- Per-server channels, roles, filters, and message preferences
- Interactive setup with slash commands, buttons, and select menus
- Event search, autocomplete, calendar, status, and test notifications
- Persistent SQLite settings and duplicate protection
- One shared CTFtime cache and scheduler
- Safe Discord mentions and permission validation
- Node.js 20 or newer
- A Discord application and bot token
npm ci
cp .env.example .envAdd your Discord credentials to .env:
DISCORD_TOKEN=
DISCORD_CLIENT_ID=
DEVELOPMENT_GUILD_ID=
DATABASE_PATH=./data/ctftime-bot.sqlite
CTFTIME_CHECK_INTERVAL=*/10 * * * *
NODE_ENV=production
LOG_LEVEL=infoDeploy commands to a development server:
npm run deploy:guildStart the bot:
npm startDeploy commands globally when the bot is ready:
npm run deploy:globalInvite the bot, then run this command in the channel that should receive CTF notifications:
/set ctf notify
Use the interactive settings panel to choose notifications, filters, roles, and message content.
Disable notifications without deleting the saved settings:
/remove ctf notify
| Command | Description |
|---|---|
/set ctf notify |
Enable notifications in the current channel |
/remove ctf notify |
Disable notifications |
/ctf settings |
Open the settings panel |
/ctf active |
Show active events |
/ctf upcoming |
Show upcoming events |
/ctf next |
Show the next event |
/ctf info |
Find an event by name or ID |
/ctf calendar |
Show a 7-day or 30-day calendar |
/ctf status |
Show the server notification status |
npm run dev
npm test
npm run checkThe optional React landing page is in landing/:
cd landing
npm ci
npm run devRuntime settings, cached events, ignored events, and notification history are stored in SQLite. The database and .env files are excluded from Git.
This project is provided as-is. No support is offered.
