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
- /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 npm, to run the Supabase CLI (it is a devDependency; run
npm installfirst, then use it asnpx 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
npx 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
Older versions of the bot stored data in data/data.txt. To import it into your Supabase database, run
npx 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
npmdirectly instead of docker -
Start a local Supabase stack (uses Docker; applies migrations and
supabase/seed.sqlautomatically)npx supabase start
and point
SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEYin.envat the values it prints -
To re-apply migrations and seed data from scratch, run
npx supabase db reset
-
After changing the schema (adding a migration), regenerate the database types
npx supabase gen types typescript --local > src/main/db/database.types.ts -
To deploy commands, run
npm run deploy-commands
-
To start bot with hot reloading, run
npm run dev