FernandoJVideira 7a17c55774 feat(music): stable queue identity, remove/reorder, and repeat commands
TrackEntry gets a QueueID generated once when a track is queued and
kept for its whole life there, and musicrepo.ReplaceQueue now upserts
by that ID instead of deleting and reinserting the whole queue on
every sync (which churned every track's database id constantly, even
ones that hadn't moved, and would've made remove/reorder commands
target the wrong track). RemoveFromQueue and Reorder are new Manager
functions built on top of that stable identity. Also adds repeat_song/
repeat_queue to the persisted now-playing state, and makes the two
existing toggle functions actually sync it, they never did before.
2026-08-29 19:22:02 +01:00
2026-03-17 15:17:36 +00:00
2026-08-26 15:05:06 +01:00
2026-08-18 19:22:21 +01:00
2026-03-17 15:17:36 +00:00
2026-03-17 15:17:36 +00:00

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 /config setup)
  • Welcome messages, DMs, and default role assignment (per-guild /config setup)
  • 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 token
  • APP_ID: Discord application ID
  • GUILD_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_ID on startup.
  • Some features require server permissions (e.g. Manage Server) or roles (e.g. DJ for music).
S
Description
No description provided
Readme
27 MiB
Languages
Go 99.9%
Dockerfile 0.1%