Joining a channel returns a future which fires on receipt of two messages from discord (by locally storing a channel). However, joining this same channel again after a success returns only *one* such message, causing the command to hang until another join fires or the channel is left. This alters internal behaviour to correctly cancel an in-progress connection attempt, or return success with known data if such a connection is present. This introduces a breaking change on `Call::update_state` to include the target `ChannelId`. The reason for this is that although the `ChannelId` of a target channel was being stored, server admins may move or kick a bot from its voice channel. This changes the true channel, and may accidentally trigger a "double join" elsewhere. This fix was tested by using an example to have a bot join its channel twice, to do so in a channel it had been moved to, and to move from a channel it had been moved to.
Songbird
Songbird is an async, cross-library compatible voice system for Discord, written in Rust. The library offers:
- A standalone gateway frontend compatible with serenity and twilight using the
"gateway"and"[serenity/twilight]-[rustls/native]"features. You can even run driverless, to help manage your lavalink sessions. - A standalone driver for voice calls, via the
"driver"feature. If you can create aConnectionInfousing any other gateway, or language for your bot, then you can run the songbird voice driver. - And, by default, a fully featured voice system featuring events, queues, RT(C)P packet handling, seeking on compatible streams, shared multithreaded audio stream caches, and direct Opus data passthrough from DCA files.
Intents
Songbird's gateway functionality requires you to specify the GUILD_VOICE_STATES intent.
Dependencies
Songbird needs a few system dependencies before you can use it.
- Opus - Audio codec that Discord uses.
If you are on Windows and you are using the MSVC toolchain, a prebuilt DLL is provided for you, you do not have to do anything.
On other platforms, you will have to install it. You can install the library with
apt install libopus-devon Ubuntu orpacman -S opuson Arch Linux. If you do not have it installed it will be built for you. However, you will need a C compiler and the GNU autotools installed. Again, these can be installed withapt install build-essential autoconf automake libtool m4on Ubuntu orpacman -S base-develon Arch Linux.
This is a required dependency. Songbird cannot work without it.
- FFmpeg - Audio/Video conversion tool.
You can install the tool with
apt install ffmpegon Ubuntu orpacman -S ffmpegon Arch Linux.
This is an optional, but recommended dependency. It allows Songbird to convert from, for instance, .mp4 files to the audio format Discord uses.
- youtube-dl - Audio/Video download tool.
You can install the tool with Python's package manager, pip, which we recommend for youtube-dl. You can do it with the command
pip install youtube_dl. Alternatively, you can install it with your system's package manager,apt install youtube-dlon Ubuntu orpacman -S youtube-dlon Arch Linux.
This is an optional dependency. It allows Songbird to download an audio source from the Internet, which will be converted to the audio format Discord uses.
Examples
Full examples showing various types of functionality and integrations can be found in this crate's examples directory.
Contributing
If you want to help out or file an issue, please look over our contributor guidelines!
Attribution
Songbird's logo is based upon the copyright-free image "Black-Capped Chickadee" by George Gorgas White.
