🦜 A hassle-free, highly performant, host it yourself Discord music bot built with Serenity in Rust. Powered by youtube-dl and Genius.

Overview

🦜

A hassle-free, highly performant and fast evolving Discord music bot built with Serenity in Rust.

Deployment

Usage

Just create a bot account, copy its token into the DISCORD_TOKEN environment variable within .env.

Docker

For the hassle free deployment:

docker run -d --env-file .env ghcr.io/aquelemiguel/parrot:latest

Development

Make sure you've installed Rust. You can install Rust and its package manager, cargo by following the instructions on https://rustup.rs/. After installing the requirements below, simply run cargo run.

Linux / MacOS

The command below installs a C compiler, GNU autotools, Opus (Discord's audio codec), youtube-dl, FFmpeg and the SSL library for development.

apt install build-essential autoconf automake libtool m4 libopus-dev youtube-dl ffmpeg libssl-dev

Windows

If you are using the MSVC toolchain, a prebuilt DLL for Opus is already provided for you.
You will only need to download FFmpeg, and install youtube-dl which can be done through Python's package manager, pip.

pip install youtube_dl

If you are using Windows Subsystem for Linux (WSL), you should follow the Linux/MacOS guide, and, in addition to the other required packages, install pkg-config, which you may do by running:

apt install pkg-config

Testing

Tests are available inside the src/tests folder. They can be ran via cargo test. It's recommended that you run the tests before submitting your Pull Request. Increasing the test coverage is also welcome.

Docker

Within the project folder, simply run the following:

docker build -t parrot .
docker run -d --env-file .env parrot
Comments
  • feat: `/play` subcommands (next, all, reverse, shuffle)

    feat: `/play` subcommands (next, all, reverse, shuffle)

    Setup basic play flags leveraging current PlayFlag enum system. Hopefully a good starting point for #51

    This adds the flags for:

    • PLAYALL which overrides the URL logic to force the playlist to unravel for any URL that ytdl can interpret as a playlist
    • PLAYTOP which replaces the current /playtop command

    Please let me know if anything looks odd. This is my first real attempt at rust.

    ✨ feature 
    opened by StaticRocket 20
  • Allow streaming from other yt-dlp supported sources

    Allow streaming from other yt-dlp supported sources

    πŸ“ Description

    yt-dlp allows for streaming from multiple other sources other than YouTube. A lot more actually.

    In the play command, we check the query/url in this fashion:

    let query_type = if url.contains("spotify.com") {
      // extract metadata from the spotify link and search it on youtube
    }
    else if url.contains("youtube.com") {
      // pass the link directly to yt-dlp
    }
    else {
      // pass the provided query to yt-dlp
    }
    

    There are a few issues with this approach:

    • It limits the source to YouTube, meaning a user would not be able to stream from SoundCloud, Twitter or any other media providing website supported by yt-dlp.
    • It does not take into account shortened links that redirect to YouTube (like bit.ly or more flagrant, youtu.be) and searches the link in YouTube, which is pretty dumb.
    • It does not include URL validation. "/play query: ftp://youtube.com" isn't a valid link to pass to yt-dlp, for instance. We should ensure the link is valid before passing it to yt-dlp.

    πŸͺœ Reproduction Steps

    N/A

    β„Ή Environment / Computer Info

    • Parrot version: v1.4.2
    • Operating System: Windows 11

    πŸ“Έ Screenshots

    No response

    πŸ”§ improvement 
    opened by aquelemiguel 17
  • Only able to use queue modifying commands if you have the DJ role

    Only able to use queue modifying commands if you have the DJ role

    | - | - | | --- | --- | | Issue | https://github.com/aquelemiguel/parrot/issues/47 | | Dependencies | | | Decisions | Added a new utility function that checks if the user has the DJ role. Also added a new string to use with send_simple_message utility. I did not create an add_role and delete_role command because that is already built into discord server settings really well. A moderator can just click the user's name and add the role. I can add it if requested :) |

    ✨ feature 
    opened by Antonio-Bennett 17
  • Play command flags

    Play command flags

    Rationale

    When playing a playlist, you sometimes want to shuffle the playlist before playing it. Sometimes you might even want to play it right after the current track, or even interrupt the current track and skip right away. These can be all achieved via flags and it was a much appreciated feature from Groovy.

    Description

    When using the play command, adding a flag modifies the behavior of the play command.

    These were the available flags in Groovy (with the exception of -choose, which seems more appropriate as a search command). They were also available as shorthand flags with the first letter only:

    • [x] -all: This instructs Groovy to queue all returned songs (...) when you queue a YouTube video in a playlist.
    • [x] -shuffle: (...) randomize the order of songs in the playlist before it's added to the queue (...)
    • [x] -next: (...) the song you queued is placed directly after the playing track in the queue. (...)
    • [x] -jump: Instantly jumps to the track you just queued. (...)
    • [x] -reverse: Queue the playlist in reverse order.
    ✨ feature 
    opened by rafaeldamasceno 17
  • Allow prefix change

    Allow prefix change

    Forcing users to use the ! prefix can cause conflicts with other bots on the server.

    Should this be an environment variable (easier but requires redeploying) or does it justify a whole new !prefix command usable only by admins (harder but allows for changing on the fly)? Requesting your inputs here, @afonsojramos and @joao-conde.

    Regardless of the chosen approach:

    • The bot's activity should also reflect the prefix change.
    • Existing messages that reference the exclamation mark prefix should now use the current prefix.
    ✨ feature πŸ€ good first issue πŸ’¬ discussion 
    opened by aquelemiguel 15
  • Skip current song on `/remove 0`

    Skip current song on `/remove 0`

    Rationale

    /remove 0 currently replies with an error message. Should this behaviour change?

    Description

    I propose that a /remove 0 skips the current song, as the tooltip even suggests that 0 is the currently playing song.

    Reference

    image

    πŸ’¬ discussion 
    opened by afonsojramos 13
  • Unresponsiveness with long songs

    Unresponsiveness with long songs

    Description

    When playing long songs, such as radios or playlists (which usually run about an hour long), the bot suddenly stops playing audio and stops responding to commands.

    Expected vs. Observed

    | - | - | | --- | --- | | Expected | The song plays until the end, and users can input commands. | | Observed | The audio playback stops (around the 30-minute mark) and the bot does not respond to commands. |

    Repro Steps

    1. !play a long video (for example, this one)
    2. Listen until the video ends
    3. Attempt to add commands later in the video's runtime

    Environment

    | Key | Value | | --- | --- | | Operating System | Ubuntu 21.10 impish | | Kernel | x86_64 Linux 5.13.0-23-generic | | CPU | Intel Core i5-6500 @ 4x 3,6GHz [22.0Β°C] | | RAM | 7866MiB / 15893MiB |

    πŸ› bug 
    opened by danrpinho 13
  • chore: fix versions in cargo.toml

    chore: fix versions in cargo.toml

    We should ALWAYS lock patch versions in cargo.toml.

    Unless you can make sure that all the libraries that we depend on follow semver and that they won't introduce new features in a patch (spoiler alert, you can't - and we've actually done it more than once on our package because you don't want to bump the minor), then you should always lock the versions that you are using.

    Please read more about this here or in another post related to this problem in any other language.

    opened by afonsojramos 10
  • Add queue track number to `/forceskip`

    Add queue track number to `/forceskip`

    Rationale

    Sometimes you want to skip to a certain track in the queue.

    Description

    Add an optional positive integer to the /forceskip command that the bot will skip to if the track exists.

    ✨ feature πŸ€ good first issue πŸ’¬ discussion 
    opened by rafaeldamasceno 10
  • Improve remove index's tooltip and parameter type

    Improve remove index's tooltip and parameter type

    Rationale

    Currently, when selecting a track to be removed from the queue, it isn't immediately obvious how it is going to work.

    Description

    The UX of selecting the track to be removed could be improved with a tooltip that better clarifies how the queue indexing works. Additionally, the index parameter could be converted to an INTEGER option.

    Reference

    Application Command Option Type

    πŸ”§ improvement 
    opened by rafaeldamasceno 10
  • Rebase for serenity:0.11.4 and songbird:0.3.0

    Rebase for serenity:0.11.4 and songbird:0.3.0

    Well, we should be good to go. There's a lot here. Needs some reviews before I'm comfortable with it.

    This just rips out the permission system entirely right now. We should set some safe defaults later.

    Resolves #196 Resolves #146

    πŸ”§ improvement 
    opened by StaticRocket 9
  • Embed response not updated when using superplay

    Embed response not updated when using superplay

    πŸ“ Description

    When using superplay, the bot doesn't update the embed with the result of the command.

    πŸͺœ Reproduction Steps

    1. Use superplay jump or all

    β„Ή Environment / Computer Info

    • Parrot version: 1.5.1
    • Operating System: Official Docker image

    πŸ“Έ Screenshots

    image

    πŸ‘“ triage 
    opened by rafaeldamasceno 0
  • Cannot have empty whitelist AND blacklist

    Cannot have empty whitelist AND blacklist

    πŸ“ Description

    If you try to have empty whitelist AND blacklist at the same time to allow all sources, the bot fills the whitelist with youtube.com, effectively only allowing YouTube as a source.

    πŸͺœ Reproduction Steps

    1. Run /managesources and leave both lists empty.
    2. Run /play with a non YouTube source
    3. The "source not allowed" message is printed

    β„Ή Environment / Computer Info

    • Parrot version: 1.5.0
    • Operating System: Official Docker image

    πŸ“Έ Screenshots

    No response

    πŸ’¬ discussion πŸ”§ improvement 
    opened by rafaeldamasceno 3
  • Youtube searches lead to erroneous results

    Youtube searches lead to erroneous results

    πŸ“ Description

    Well, not really sure what's up, but giving the bot a search query in the latest release can occasionally lead to it reporting that it's now playing a song that's completely different than the song that actually gets played.

    πŸͺœ Reproduction Steps

    1. /play yooo
    2. Occasionally the bot will either take the first or second result but every once in a while it displays the metadata of the first result while playing the second result (it would be some dumb meme that catches this)

    β„Ή Environment / Computer Info

    • Parrot version: ghcr.io/aquelemiguel/parrot latest f16a53a69ca6
    • Operating System: Arch

    πŸ“Έ Screenshots

    No response

    πŸ‘“ triage 
    opened by StaticRocket 0
  • Allow users without DJ role to skip songs they've requested.

    Allow users without DJ role to skip songs they've requested.

    🧐 Rationale

    Often, users request songs using a query string, and the video that the bot selects is not the one that they intended, and it would be nice the bot kept track of which user requested the songs in the queue, so that if the same user that requested a song requests to remove or skip that song, the DJ role requirement is ignored.

    πŸ“ Description

    The bot keeps track of which user requested each song. When the skip or remove command is used, check to the user ID and their roles. If the user ID is the same as that of the user who requested the song OR the user has the DJ role, remove/skip the song.

    βž• Additional Information & References

    No response

    ✨ feature πŸ‘“ triage 
    opened by LiftedStarfish 4
  • Using miette as a diagnostic library

    Using miette as a diagnostic library

    🧐 Rationale

    miette has existed for quite a while and is a really good tool to debug. Previous bug reports could have been validated much faster with it for example. However, it is not plug and play and it does take some implementation.

    πŸ“ Description

    Implementing miette.

    βž• Additional Information & References

    Is this something that we are interested in doing?

    ✨ feature πŸ‘“ triage 
    opened by afonsojramos 0
  • Spotify source has issues if service is ran for an extended duration

    Spotify source has issues if service is ran for an extended duration

    πŸ“ Description

    The Spotify source has issues looking up queries after the service has been running for a few days. I believe this is related to the auth routine but I haven't had time to properly debug this yet.

    This may straight up be a byproduct of me running this on a machine without ECC memory, but it seems a little too consistent for that.

    πŸͺœ Reproduction Steps

    1. Leave parrot running for a few days
    2. Attempt to play something from Spotify
    3. Response will be failed to fetch track

    β„Ή Environment / Computer Info

    • Parrot version: main
    • Operating System: archlinux

    πŸ“Έ Screenshots

    No response

    πŸ› bug 
    opened by StaticRocket 4
Releases(v1.5.1)
  • v1.5.1(Dec 29, 2022)

    What's Changed

    • bump: rspotify 0.11.6 by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/231
    • fix: readd autopause by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/230
    • ci: keep Cargo.lock by @rafaeldamasceno in https://github.com/aquelemiguel/parrot/pull/232
    • chore: bump version to 1.5.1 by @github-actions in https://github.com/aquelemiguel/parrot/pull/233

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.5.0...v1.5.1

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Nov 30, 2022)

    What's Changed

    • refactor: parrot message types by @joao-conde in https://github.com/aquelemiguel/parrot/pull/198
    • bump: Rebase for serenity:0.11.4 and songbird:0.3.0 by @StaticRocket in https://github.com/aquelemiguel/parrot/pull/197
    • fix: make errors follow up messages by @StaticRocket in https://github.com/aquelemiguel/parrot/pull/202
    • docs: fix broken link to Linux/MacOS section by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/205
    • bump: serenity to 0.11.5 by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/206
    • fix: address error logging regression by @StaticRocket in https://github.com/aquelemiguel/parrot/pull/204
    • fix: /superplay next with an empty queue throws ParrotError::NotInRange by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/208
    • ci: apply clippy suggestions for rust 1.65.0 by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/214
    • chore: deprecate docker deployment workflow by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/212
    • docs: small readme improvements by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/216
    • ci: implement usage of stepped workflow by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/215
    • docs: fix readme links & update rust version by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/218
    • feat: add bump action by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/219
    • feat: add bump action by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/221
    • feat: allow streaming from other yt-dlp supported sources by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/223
    • chore: bump version to 1.5.0 by @github-actions in https://github.com/aquelemiguel/parrot/pull/225

    New Contributors

    • @github-actions made their first contribution in https://github.com/aquelemiguel/parrot/pull/225

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.4.2...v1.5.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Apr 21, 2022)

    What's Changed

    • fix: explicitly handle track not found error by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/193
    • fix: handle age restricted videos by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/194

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.4.1...v1.4.2

    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Apr 8, 2022)

    What's Changed

    • chore: bug label by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/187
    • fix: leaving channel alongside other users by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/189

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.4.0...v1.4.1

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Mar 31, 2022)

    What's Changed

    • feat: Spotify support by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/168
    • feat: better error handling by @joao-conde in https://github.com/aquelemiguel/parrot/pull/166
    • fix: self_deafen's get_current_user by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/174
    • fix: idle disconnect based on top track status by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/176
    • fix: clear queue after disconnect by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/178
    • fix(bug template): removed placeholders by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/182
    • fix: unexpected idle disconnects by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/184
    • refactor: improve verify by @joao-conde in https://github.com/aquelemiguel/parrot/pull/169
    • chore: implement issue form templates by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/175
    • chore: update dependencies by @joao-conde in https://github.com/aquelemiguel/parrot/pull/179
    • chore: fix versions in cargo.toml by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/180
    • chore: add new badges by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/183
    • docs: add dependency badge by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/177

    ⚠️ The DISCORD_APPID variable has been changed to DISCORD_APP_ID. Don't forget to change your env file as well.
    ⚠️ If you want to support Spotify, create your own app here and update the environment file.

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.3.1...v1.4.0

    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Mar 6, 2022)

    What's Changed

    • fix: hidden songs not enqueued by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/164
    • fix: unresponsiveness with long songs by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/165

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.3.0...v1.3.1

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Feb 25, 2022)

    What's Changed

    • fix: better env loading error message by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/132
    • fix: panic on Option unwrap in skip.rs by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/134
    • fix: skip accounting users connected to guild by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/137
    • refactor: custom Restartables for unique sources by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/135
    • feat: /play subcommands (next, all, reverse, shuffle) by @StaticRocket in https://github.com/aquelemiguel/parrot/pull/140
    • feat: play jump subcommand by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/144
    • fix: queue messages not live updating with playlist enqueue by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/143
    • chore: moved PlayMode and QueryType to play by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/152
    • fix: enqueue playlists by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/150
    • fix: revert audio format back to webm[abr>0]/bestaudio/best by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/156
    • improve: play perms & responsibility splitting by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/157
    • feat: skip-to optional parameter by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/158
    • feat: remove range of tracks by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/160
    • refactor: superplay logic by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/161
    • fix: clippy for rust 1.59.0 by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/162

    New Contributors ❀️

    • @StaticRocket made their first contribution in https://github.com/aquelemiguel/parrot/pull/140

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.2.1...v1.3.0

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Feb 2, 2022)

    What's Changed

    • feat: add forceskip and voting system to skip by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/127
    • feat: custom DJ Role for parrot commands by @joao-conde in https://github.com/aquelemiguel/parrot/pull/115
    • docs: added MacOS build requirements by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/113
    • build: prune unused Docker dependencies by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/114
    • ci: Optimised CI workflows by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/112
    • fix: /play panic in outside channel by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/118
    • fix: force play on same voice channel by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/119
    • fix: better error messaging by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/122
    • fix: add check_voice_connections to np command by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/125
    • fix: queue & np check by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/130

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.1.0...v1.2.1

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jan 24, 2022)

    What's Changed

    • remove command UX enhancement by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/95
    • #42: Command /autopause by @joao-conde in https://github.com/aquelemiguel/parrot/pull/98
    • embeds & message refactor and tweaks by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/99
    • feat: live update /queue by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/96
    • fix: use now playing string from strings.rs by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/105
    • deps: lock songbird version by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/108
    • feat: use built-in input parsing & add cargo.lock by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/109
    • feat: drop youtube_dl crate by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/106
    • bump: version 1.1.0 by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/111

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.0.1...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jan 19, 2022)

    What's Changed

    • fix: switched docker ps flag by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/91

    v1.0.0 major changes

    feat: slash commands by @aquelemiguel in #89

    ⚠️ Already deployed bots need to be re-invited to the servers with the updated scopes. ⚠️ New scope applications.commands (alongside bot) should be added. ⚠️ For a visual guide of the required scopes and permissions, check out our Create Your Discord Bot wiki page.

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v1.0.0...v1.0.1

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jan 19, 2022)

    Major changes

    • feat: slash commands by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/89

    ⚠️ Already deployed bots need to be re-invited to the servers with the updated scopes. ⚠️ New scope applications.commands (alongside bot) should be added. ⚠️ For a visual guide of the required scopes and permissions, check out our Create Your Discord Bot wiki page.

    Small changes

    • feat: add docker prune to docker workflow by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/85

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v0.5.0...v1.0.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Jan 10, 2022)

    What's Changed

    • fix: docker build by @joao-conde in https://github.com/aquelemiguel/parrot/pull/81
    • feat: Implement docker deployment fallback by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/82
    • bump: version 0.5.0 by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/84

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v0.4.0...v0.5.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jan 9, 2022)

    What's Changed

    • refactor: serenity and idle handlers in their modules & commands struct by @joao-conde in https://github.com/aquelemiguel/parrot/pull/73
    • fix: bot activity using configured prefix by @joao-conde in https://github.com/aquelemiguel/parrot/pull/74
    • test: util module tests by @joao-conde in https://github.com/aquelemiguel/parrot/pull/75
    • refactor: transfer main binary to lib code by @joao-conde in https://github.com/aquelemiguel/parrot/pull/77
    • Update Cargo.toml by @joao-conde in https://github.com/aquelemiguel/parrot/pull/78
    • Deployment by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/79
    • Update cargo.toml by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/80

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v0.3.0...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jan 7, 2022)

    Added

    • Auto-leave on idle by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/68
    • Version command by @joao-conde in https://github.com/aquelemiguel/parrot/pull/72
    • Allow prefix change by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/69

    Fixed

    • Fix clippy warnings and add it to workflow by @joao-conde in https://github.com/aquelemiguel/parrot/pull/67

    Docs

    • Update linux's youtube-dl installation by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/70

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v0.2.0...v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jan 4, 2022)

    What's Changed

    • Add link to Create-Your-Discord-Bot wiki page by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/41
    • README.md refresh by @Dannyps in https://github.com/aquelemiguel/parrot/pull/48
    • Genius lyrics and song summaries by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/52
    • Refactor play by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/55
    • Fix leave and summon commands by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/57
    • Fix incorrect estimated time until play by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/58
    • Replace youtube-dl dependency with yt-dlp by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/61
    • docs: add changelog file by @joao-conde in https://github.com/aquelemiguel/parrot/pull/62
    • refactor: commands by @joao-conde in https://github.com/aquelemiguel/parrot/pull/64
    • feat: split workflows by @joao-conde in https://github.com/aquelemiguel/parrot/pull/63
    • fix: publish action not running on pull request merge by @joao-conde in https://github.com/aquelemiguel/parrot/pull/65
    • version: 0.2.0 by @joao-conde in https://github.com/aquelemiguel/parrot/pull/66

    New Contributors

    • @Dannyps made their first contribution in https://github.com/aquelemiguel/parrot/pull/48

    Full Changelog: https://github.com/aquelemiguel/parrot/compare/v0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jan 4, 2022)

    What's Changed

    • Add development requirements to README.md by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/2
    • Fix bad duration until play by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/8
    • Feat: Setup CI and test structure by @joao-conde in https://github.com/aquelemiguel/parrot/pull/17
    • Feature/remove command by @VenturaPereira in https://github.com/aquelemiguel/parrot/pull/18
    • Feature/14 implement shuffle command by @giladwo in https://github.com/aquelemiguel/parrot/pull/16
    • Revamp queue command by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/19
    • Implement playtop command by @Antonio-Bennett in https://github.com/aquelemiguel/parrot/pull/24
    • Improve command asynchronicity by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/26
    • feat: cargo fmt in CI to enforce style by @joao-conde in https://github.com/aquelemiguel/parrot/pull/28
    • Feature/self deafen by @VenturaPereira in https://github.com/aquelemiguel/parrot/pull/25
    • Create Dockerfile by @rafaeldamasceno in https://github.com/aquelemiguel/parrot/pull/33
    • Genius integration by @aquelemiguel in https://github.com/aquelemiguel/parrot/pull/30
    • Fix Docker image build by @rafaeldamasceno in https://github.com/aquelemiguel/parrot/pull/35
    • Docker image publish by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/38
    • Reduce size of Docker image by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/37
    • Docker CI Build fix by @afonsojramos in https://github.com/aquelemiguel/parrot/pull/40

    New Contributors

    • @VenturaPereira made their first contribution in https://github.com/aquelemiguel/parrot/pull/18
    • @giladwo made their first contribution in https://github.com/aquelemiguel/parrot/pull/16
    • @Antonio-Bennett made their first contribution in https://github.com/aquelemiguel/parrot/pull/24
    • @rafaeldamasceno made their first contribution in https://github.com/aquelemiguel/parrot/pull/33

    Full Changelog: https://github.com/aquelemiguel/parrot/commits/v0.1.0

    Source code(tar.gz)
    Source code(zip)
Owner
Miguel Mano
sex, drugs and centering divs
Miguel Mano
This is a Discord bot written in Rust to translate to and from the Bottom Encoding Standard using bottom-rs and Serenity.

bottom-bot This is a Discord bot written in Rust to translate to and from the Bottom Encoding Standard using bottom-rs and Serenity. Ever had this pro

Bottom Software Foundation 11 Dec 10, 2022
An experimental Discord bot using Serenity.

VoidBot An experimental Discord bot using Serenity. Environment Variables Can be set with a .env file. DISCORD_TOKEN: The token for your bot. (require

null 1 May 21, 2022
A multipurpose (including music) Discord bot written in Rust

filloabot-rs A multipurpose (including music) Discord bot. This is a full rewrite using Rust of the original FilloaBot. Some features that were consid

FilloaBot 2 Oct 21, 2022
beat saber is a strongly typed, self-documenting and highly performant programming language

beatsaber beat saber is a strongly typed, self-documenting and highly performant programming language. With beat saber we aimed to create a language t

Untitled 4 Jan 17, 2022
Serenity is a Rust library for the Discord API

serenity Serenity is a Rust library for the Discord API. View the examples on how to make and structure a bot. Serenity supports bot login via the use

serenity 3.3k Jan 2, 2023
Chains - a bot written in Rust using the serenity crate

Chains (Rusty) Chains is a bot written in Rust using the serenity crate. Chains primarily focuses on easy to set up, easy to use moderation tools such

Quin 3 Mar 28, 2022
A Discord bot focused on addressing the inherent problems with Discord, to allow a more socialist/anarchist organization of servers.

ACABot A Discord bot focused on addressing the inherent problems with Discord, to allow a more socialist/anarchist organization of servers (or "guilds

null 4 May 3, 2022
Rewrite of the Discord Bot used for Managing the Infinity Bot List Servers.

Arcadia Rewrite of the Discord Bot used for Managing the Infinity Bot List Servers. Contributing Always run fmt.sh before making a Pull Request! MacOS

InfinityBotList 3 Dec 15, 2022
dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle!

dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle (such as rewriting/refactroing your DM code).

SS220 20 Dec 13, 2022
Pass cloudflare IUAM using headless chrome without hassle.

FlarelessHeadlessChrome Pass cloudflare turnstile challenge using patched chrome binary (Windows/Linux x64). How it works Currently, with new headless

makin 3 Oct 24, 2023
Music bot written in Rust

Akasuki What is Akasuki? Akasuki is a simple discord music bot written in rust. Highlights Select your music using discord's new select menu feature,

Forbidden A 0 Dec 19, 2021
A library for creating/parsing Serenity slash commands.

Serenity Commands A library for creating/parsing Serenity slash commands. Usage See the examples directory for more examples. use serenity::all::{

Vidhan Bhatt 4 Dec 9, 2023
This is a Telegram bot I'm working on in my free time to learn Rust.

Maldness Bot This is a Telegram bot I'm working on in my free time to learn Rust. Building docker build -t . should be enough.

Sergey Kislyakov 10 May 13, 2022
A Robo Lawyer Slack bot, powered by ChatGPT

Robo Lawyer for your slack channel, powered by ChatGPT Deploy this function on flows.network, and you will get a Slack bot that uses ChatGPT to respon

flows.network 6 Mar 26, 2023
A Discord bot for lichess and Rosen related things

liro Liro is a Discord bot that follows in the footsteps of Lichess-discord-bot, without necessarily aiming to replace it. The main pain point that th

Sebastian Lauwers 5 Feb 16, 2022
A Discord bot for control and decentralization of threads management

Threadripper-bot A Discord bot for control and decentralization of threads management About Threadripper aims to serve some extra utilities to take be

S0ra 15 Dec 27, 2022
A Discord bot for sending GeoGuessr challenge links that uses the GeoGuessr API written in rust.

GeoGuessr-bot-rs This is a simple implementation of a discord bot that send GeoGuessr-challenge links on demand. Features: Slash-commands Lightning-fa

Luukas PΓΆrtfors 6 Nov 18, 2022
A discord bot that safely executes whatever rust you throw at it. Remote code execution as a service

RustBot Bot is still under development and not ready for production use RustBot is a discord bot that executes whatever rust code you throw at it. In

Conner Bradley 7 Jan 3, 2022
A blazingly fast πŸ”₯ Discord bot written in Rust

rusty-bot ?? A blazingly fast ?? Discord bot written in Rust. Commands name use !rm <count> deletes old messages !meme <subreddit> sends a random meme

Asandei Stefan 2 Oct 14, 2022