Standalone Discord bot for VRChat group moderation logging, blacklist tooling, and staff/admin workflows. This build runs as a single bot instance and connects to a VRChat backend service plus a MySQL datastore.
- VRChat group moderation actions (ban, unban, kick, request handling)
- User, avatar, and group blacklist management
- Staff/admin role management with access controls
- API key management for VRChat staff workflows
- VRChat user lookup and group membership checks
- Helpdesk ticket submission integration (optional, FlareSolverr supported)
- Multi-language i18n support
- Node.js 20.x
- Discord bot application + token
- MySQL database (auto-migrated via Sequelize)
- VRChat backend API service reachable by the bot
- Optional: FlareSolverr (for helpdesk ticket submission)
- Install dependencies
npm install- Create config file
copy config\settings-template.json config\settings.json-
Fill in
config/settings.json(see "Configuration" below). -
Run the bot
npm startOn Windows you can also use:
run-dev.batThe bot reads config/settings.json. A template exists at config/settings-template.json.
Minimum values to start:
clienttokenor env varclienttokenclientidTestingServerID(for slash command registration during development)SQLconnection fieldsVRCAPIgroup info and backend URLs
Key settings (summary):
clienttoken: Discord bot token (prefer env varclienttoken)clientid: Discord application IDTestingServerID: dev guild ID for quick slash command updatesprefix: legacy prefix (slash commands are primary)developerID: array of Discord user IDsembedcfg: embed colors and footerbotsettings: metadata,flaresolverrUrl, display infotags.names: blacklist tag choicesSQL: MySQL connection infohelpdesk: email + default moderation categoryVRCAPI: group IDs, access roles, log channels, backend URLs
Environment variables:
clienttoken: Discord bot tokenFLARESOLVERR_URL: overridesbotsettings.flaresolverrUrl
The bot uses privileged intents (GuildMembers, GuildPresences, MessageContent). Enable them in the Discord Developer Portal for the application.
General:
/ping- Websocket ping/help- Command list/aboutbot- Bot info
Bot owners:
/uptime- Bot uptime/restart- Restart bot/reloadcmd- Reload commands
VRChat:
/vrccheck- Lookup VRChat account/vrcban- Ban group member/vrcunban- Unban group member/vrcuserbl- Manage user blacklist/vrcavibl- Manage avatar blacklist/vrcgroupsbl- Manage group blacklist/vrcaddstaff- Add staff with role/vrcremovestaff- Disable staff/vcrupdatestaff- Update staff role/vrcaddadmin- Add admin/vrcremoveadmin- Disable admin/vrcmanageapikey- Create/remove/regenerate API keys
- MySQL: primary storage for blacklists, staff lists, and API keys.
- SQLite: local per-group cache in
vrcgroup/(auto-created).
- Invalid token: set
clienttokeninconfig/settings.jsonor env varclienttoken. - Slash commands not appearing: set
TestingServerIDor wait for global registration to propagate. - Backend errors: verify
VRCAPI.VRCBackEndURLand connectivity.
index.js: entry point and client setuphandler/: event and slash command loaderevents/: Discord event handlersSlashCommands/: slash command definitionsconfig/: settings template, emojis, help configlib/: datastores (Sequelize + SQLite)utils/: VRChat API helpers and helpdesk integrationslocales/: i18n strings
MIT License. See LICENSE.