A discord bot that tries to replicate Group Chat behavior in server Voice Channels
- Servers can't ring people, like in Group Chats, so bot just pings people in the Voice Channel Text Chats instead
To add the bot to your server, click here
- /help
- A quick description of all the commands
- /signup
- signs you up for a voice channel, so once someone "starts" a call there (joins it when it's empty), you get pinged
- /unsignup
- un-signs you up for a voice channel, so you no longer get pinged
- /ring
- pings someone to join the voice channel you're currently in
- also available by right-clicking someone and picking Apps > Ring
- /block
- blocks someone, which prevents them from ringing you and makes it so you don't get pinged if they start a call
- /unblock
- /mode
- allows you to switch between auto, normal, and stealth modes
- stealth means that you don't ping anyone when "starting" a call
- allows you to switch between auto, normal, and stealth modes
Guide on hosting the bot yourself
- Docker Compose (installation guide)
- Node.js and pnpm, to run the Supabase CLI (it is a devDependency; run
pnpm installfirst, then use it aspnpm exec supabase ...) - Have a Discord bot created (guide)
- Enable required permissions (for auto mode)
- Under settings, on the left side, select Bot
- Scroll down to Privileged Gateway Intents
- Enable Presence Intent
The bot stores its data in a Supabase Postgres database, which you can self-host with Supabase's official Docker setup (guide). Keep it outside this repository — it serves the whole machine, not just this project
-
Apply this repository's database migrations to your instance
pnpm exec supabase db push --db-url <your_postgres_connection_string>
-
Use the instance's API URL and service role key (from your Supabase Docker
.env) asSUPABASE_URLandSUPABASE_SERVICE_ROLE_KEYbelow- Note: the bot runs in its own container, so
SUPABASE_URLmust be reachable from inside it (use the host's address or a shared Docker network, not127.0.0.1)
- Note: the bot runs in its own container, so
The bot only needs Postgres and PostgREST, so you can delete the services it does not use from Supabase's docker-compose.yml (system requirements). Keep db, rest, kong, meta and studio (the last three only for the dashboard); drop realtime, storage, imgproxy, functions, auth and supavisor
functionsis Deno Edge Functions, unrelated to this repository's SQL functions, which run inside Postgressupavisorpublishes the Postgres port, so add aportsentry todbto keepsupabase db push --db-urlworkingkongwaits onstudio, so also remove thatdepends_onif you drop the dashboard
Older versions of the bot stored data in data/data.txt. To import it into your Supabase database, run
pnpm exec tsx scripts/import-data-txt.tswith SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY set (in the environment or .env). The script is idempotent, so it is safe to re-run
-
Clone repository
git clone https://github.com/altrup/RingVC.git
-
Enter newly created folder
cd RingVC -
Copy
.env.exampleto.envin root directory and replace the valuescp .env.example .env
-
Start bot in Docker
docker compose up -d
-
Invite bot to your server (guide)
- Select
bot,applications.commandsandSend Messagespermissions
- Select
-
To stop, run
docker compose down
-
To update, run
docker compose build
-
For development, it may be easier to use
pnpmdirectly instead of docker -
Start a local Supabase stack (uses Docker; applies migrations and
supabase/seed.sqlautomatically)pnpm exec supabase startand point
SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEYin.envat the values it prints -
To re-apply migrations and seed data from scratch, run
pnpm exec supabase db reset -
After changing the schema (adding a migration), regenerate the database types
pnpm exec supabase gen types typescript --local > src/main/db/database.types.ts
-
To deploy commands, run
pnpm run deploy-commands
-
To start bot with hot reloading, run
pnpm run dev