🎹 Discord Music Bots Native Support 🥁
At Repl.it we believe programming should useful, fun, and exciting. Discord bots have been something people loved to make with Repl.it ever since we enabled outbound network connections from repls (yes, we used to disable networking).
Discord music bots, however, didn't work very well if at all. At first, OPUS was missing from our Python environment. Then we also inadvertently blocked voice connections from our servers. So all in all it was a pain. However, today, I'm excited to announce that Music Bots natively work on Repl.it.
The only thing that's currently missing from our images is native ffmpeg support, but that can be worked around by installing ffmpeg-static from npm. I just added the following Python repl to templates to make it easy for you to get started.
I know it works in Node.js too but I didn't have the time to make a nice template. If anyone can make a very simple template for Node.js I'd love to include it in our template library.
my bot gives me a error saying 'An error occurred: Command raised an exception: RuntimeError: PyNaCl library needed in order to use voice' isnt pynaci downloaded already?
With native OPUS, networking, and native always up Repls... Repl might just be suitable for hosting a powerful bot.
@firefish I don't know, we run some production work on Repl.it on a single container and it serves lots of users. We also have a lot of big bots already hosted on repl.it.
I would try it. If your code is efficient it should work especially with the hacker plan.
In the future, we'll probably have to introduce an even bigger plan.
@amasad @firefish The biggest problem with most bots hosted here is the actual code and language, usually, they're written in inefficient languages (ex: Python, JS), but what's worse is they're often set up in very inefficient ways.
If you set it up correctly, plan ahead, and know what you're doing, it can perform very well, but this applies even outside of Repl.it.
Tried to create a discord bot to play music (https://repl.it/@PDanielY/EasygoingPlumHashmaps#index.js).
(node:482) UnhandledPromiseRejectionWarning: Error: FFmpeg/avconv not found! at Function.getInfo (/home/runner/EasygoingPlumHashmaps/node_modules/prism-media/src/core/FFmpeg.js:130:11) at Function.create (/home/runner/EasygoingPlumHashmaps/node_modules/prism-media/src/core/FFmpeg.js:143:38) at new FFmpeg (/home/runner/EasygoingPlumHashmaps/node_modules/prism-media/src/core/FFmpeg.js:44:27) at AudioPlayer.playUnknown (/home/runner/EasygoingPlumHashmaps/node_modules/discord.js/src/client/voice/player/BasePlayer.js:47:20) at VoiceConnection.play (/home/runner/EasygoingPlumHashmaps/node_modules/discord.js/src/client/voice/util/PlayInterface.js:71:28) at startPlaying (/home/runner/EasygoingPlumHashmaps/index.js:12:14) at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:97:5)
for me is not working, i tried to play a song, i add at the final
"bot = commands.Bot(command_prefix=("$"))
and i tried to play something with my prefix "$" and doesn't work, do i need to download the packages files that you post it here, or it doesn't matter?
For those people confused with prefix
you can add it yourselves too
in the line:
bot = commands.Bot('music.', description='Yet another music bot.')
change it to
bot = commands.Bot(command_prefix=("!"),'music.', description='Yet another music bot.')
Here the prefix i set was '!'
When the bot tried to play the next song it raises this error
Traceback (most recent call last): File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/player.py", line 598, in run self._do_run() File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/player.py", line 585, in _do_run data = self.source.read() File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/player.py", line 538, in read ret = self.original.read() File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/player.py", line 223, in read ret = self._stdout.read(OpusEncoder.FRAME_SIZE) AttributeError: 'NoneType' object has no attribute 'read' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/player.py", line 611, in _call_after self.after(error) File "main.py", line 393, in play_next_song raise VoiceError(str(error)) VoiceError: 'NoneType' object has no attribute 'read'
@expensivesalt80 From what I see the bot doesn’t have a prefix. To change it go to the bottom of the main.py code and find where it says bot = commands.Bot(‘music.’, description=‘Yet another music bot.’). Once you have found that change it to bot = commands.Bot(‘music.’, description=‘Yet another music bot.’, command_prefix = ‘yourprefix’). I hope this helps you and others that may see this message :)