RingBot is a Discord bot that can call phone numbers using Twilio.
The bot provides bi-directional audio, allowing either side to hear and speak to the other.
This bot is in no way meant to be used on an already public bot. This is meant to be a proof of concept, as exposing it to other users can result in unintended consequences with the numbers they could call.
To use the bot, you need a Twilio account with funds added.
You also need an active number, purchasable here. The bot will currently select the first number in the list.
Once setup, fill out username
and password
in settings.json with the Account SID and Auth Token respectfully. Both are found on the Twilio console.
To allow Twilio to contact the /mediastream
websocket within the bot (to hear voice audio and speak), you will need a publically exposed IP.
This is available locally by port-forwarding :8000
and using your IPv4 IP.
Another available tool is downloading ngrok, running ngrok http 8000
and copying everything except https://
from the URL.
Create a Discord bot, or use an existing one from the Developer Portal and grab the token from there.
Starting a call is as easy as typing /call {number}
. Any normal phone formatting will work (e.g. (123) 456-7890 or 123-456-7890).
To start a call, you must be in a voice channel the bot can see.
To prevent overlapping audio, the bot only listens to the person who typed the call command.
If another member of the voice channel wants to speak through the phone, clicking 'Get Speaker' will then only listen to the user who clicked it.
If you wish to send a keypad number over the phone, clicking on 'Key pad' will popup a modal to enter any number of digits to play.
01234567890*#w
are all acceptable to input. w
gives a 0.5 second delay. All inputted numbers already have this 0.5 second delay between each.
If you wish for the other side to stop hearing you, clicking the 'Mute/unmute call' button will stop the other side from hearing you until you unmute.
Self-explanatory. The call will end and the bot will leave the voice channel.
PRs are highly encouraged. This code was a result of a roughly 48-hour challenge to create a tool like this, and with that multiple bugs are sure to show.
If you are less tech-savvy or don't understand Golang that well, please open an issue and a contributor or I will attempt to solve the issue. Include any relevant logging found in the console.