master
Reviewed-on: https://gitea.fernandovideira.com/FernandoJVideira/velox-bot/pulls/10
Velox Bot
A Discord bot written in Go with a PostgreSQL backing store.
It currently includes:
- Fun commands (
/ping,/joke,/dice,/rps, …) - Leveling system (opt-in per server via
/slvl toggle) - Meeting rooms (voice lobby → auto-created temporary voice channels)
- Scheduling (1:1 sessions with DM invites + reaction-based accept/decline/reschedule)
- Projects (list/create projects + helpers)
- Music (Lavalink-powered
/play,/queue,/volume) - Twitch live notifications (per-guild
/configsetup) - Welcome messages, DMs, and default role assignment (per-guild
/configsetup) - Focused moderation tools (
/moderation purge|timeout|untimeout|kick|ban|unban|slowmode) - Server logging system (edits/deletes/joins/leaves/roles/ban/kick/mod actions)
When the bot is added to a new server for the first time, toggleable systems are defaulted to disabled and a setup DM is sent to the inviter (or server owner fallback) with enable instructions.
Requirements
- Go (see
go.mod) - PostgreSQL 16+ (or use the provided
docker-compose.yml) - (Optional) Air for live reload during development
- (Optional) Lavalink if you want music commands
Configuration
The app loads environment variables from .env (see internal/config/config.go).
Required:
BOT_TOKEN: Discord bot tokenAPP_ID: Discord application IDGUILD_ID: Target guild/server ID (commands are registered per-guild)DB_HOST: Postgres connection string (pgx), e.g.postgres://velox:velox_pwd@localhost:5432/velox?sslmode=disable
Optional (music):
LAVALINK_HOST: Lavalink WebSocket/HTTP host (depends on your Lavalink setup)LAVALINK_PASSWORD: Lavalink password
Optional (Twitch live notifications):
TWITCH_CLIENT_ID: Twitch Client ID used to query live status
Database setup
If you use the compose file:
docker compose up -d
Then apply the schema:
psql "postgres://velox:velox_pwd@localhost:5432/velox?sslmode=disable" -f schema.sql
Run
Plain Go:
go run .
With live reload (Air):
air
If you use just, a small workflow is included:
just up # start postgres
just start # start postgres + run air
just down # stop postgres
Commands (high-level)
- Fun
/ping,/joke [type],/coinflip,/dice <expr>/rps <hand>,/rpsstats,/rpsleaderboard(server only)
- Help
/help(sends a DM with command reference)
- Leveling
/slvl ...admin/config/rank,/leaderboard,/rewards
- Meetings (Manage Server)
/meeting set-lobby,/meeting lock,/meeting lock-private,/meeting unlock,/meeting invite,/meeting uninvite
- Timezone
/timezone set,/timezone show
- Scheduling
/schedule create,/schedule list,/schedule reschedule
- Projects
/projects list,/projects create,/projects add-helper
- Music (requires DJ role)
/play,/queue,/volume
- Moderation (focused + practical)
/moderation purge amount:<1-100>— Fast recent message cleanup (Manage Messages)/moderation timeout user:@someone duration:<10m|1h|...> [reason]— Temporary member timeout (Moderate Members)/moderation kick user:@someone [reason]— Kick member (Kick Members)/moderation ban user:@someone [delete_days] [reason]— Ban member (Ban Members)/moderation unban user_id:<id> [reason]— Unban by user ID (Ban Members)/moderation untimeout user:@someone [reason]— Remove timeout (Moderate Members)/moderation slowmode channel:#channel seconds:<0-21600>— Control channel flood (Manage Channels)
- Twitch live notifications (Manage Server)
/config addstreamer username:<twitch-name>— Add a streamer for notifications/config removestreamer username:<twitch-name>— Remove a streamer/config settwitchnotificationchannel channel:#channel— Channel for live pings
- Welcome / onboarding (Manage Server)
/config setwelcomechannel channel:#channel— Channel for welcome messages/config setwelcomemessage message:"..."— Server welcome template (supports{user},{server})/config setwelcomedm message:"..."— DM welcome template (supports{user},{server})/config setwelcomegif url:<image-url>— GIF/image used in welcome embed/config setdefaultrole role:@role— Role automatically granted on join
- Logging (Manage Server)
/config setlogchannel channel:#channel— Set where logs are sent/config enablelogging— Enable event/moderation logs/config disablelogging— Disable event/moderation logs
Notes
- Slash commands are registered to the configured
GUILD_IDon startup. - Some features require server permissions (e.g. Manage Server) or roles (e.g. DJ for music).
Languages
Go
99.9%
Dockerfile
0.1%