QQ and Discord Bots
GOKZ.TOP's QQ and Discord bots share one NoneBot application and the same GOKZ features. QQ replies use Chinese Markdown and keyboards; Discord replies use English embeds and buttons. Discord omits automatic voice compliments.
Connect Steam
Sign in with Steam at Binding Code, generate a code, and send /bind <code> to QQ or /bind code:<code> to Discord. Codes are case-sensitive; use them before the expiry shown on the website. Discord binding replies are private. This flow stores the binding in the bot and does not create or change a website Discord social link.
Default mode and daily map assignments are independent per platform account. Use /mode to select OVR, KZT, SKZ, or VNL. /help lists commands for records, profiles, player cards, rankings, comparisons, daily maps, server status, map reviews, and ratings. On Discord, select named slash options; on QQ, existing aliases and -m, -s, -q, and -u remain available. Button actions belong to the requesting user and expire after ten minutes or a bot restart.
Operators
Both adapters verify binding codes with the existing QQ_BOT_SECRET. No website deployment is required. Configure QQ_BOTS, DISCORD_BOTS, and BOT_PLATFORMS=qq,discord. Discord uses slash commands without Message Content intent. It needs View Channel, Send Messages, Embed Links, and Attach Files in command channels.
Root-only server defaults use QQ group IDs or Discord guild IDs. Configure platform-qualified root identities in SUPERUSERS; existing unqualified QQ IDs remain supported. /set_server changes a conversation's default for /server.
The bot retains its existing SQLite file and deployment on E. CI backs up SQLite and records the previous image before replacing the container, then checks both adapter connections. Backups are under /opt/qqbot-saki-chan/backups/<sha>/. Rollback requires stopping the bot, restoring the matching database backup, and starting the recorded previous image with the same Compose project. Never delete persistent data or volumes.
Discord responses
Commands update their original slash-command reply, so only the result remains visible. Binding and account-connection errors are private. GlobalAPI availability uses green for available and red for unavailable. Record commands (/pr, /wr, /pb) show map images, prominent run times, compact detail fields, and dates rendered in your local Discord time zone. Ban history shows readable ban types, status, notes, server details, and expiry instead of raw identifiers alone.
The bot removes its known obsolete guild-specific commands after verifying global command sync. This prevents duplicate command names left by the old bot; unrelated commands and other Discord applications are preserved.