Volte Versions Save

A free, robust, open-source Discord bot written in C# 8 using .NET Core 3.1 and a whole lotta Man Hours.


2 years ago

This release features some exciting additions, namely: Interactivity. In this release we had almost 3x the additions compared to deletions:

As always, you can find prebuilt copies of Volte here.

  • Urban Dictionary command

    • Use $urban <word> and Volte will show you pages of definitions of that word provided by Urban Dictionary's public API.
  • Setup command

    • Use $setup to setup Volte in new guilds (the owner DM on guild join says this now, too). It will reply with questions, to which you just need to send a second message with the information it's asking for.
  • More help upgrades

    • Use $h pager/pages (either pager or pages as the argument) and Volte will reply with a paginator of all of Volte's commands; the public Volte version has around 100 pages at the time of writing this.
  • Various commands upgraded

    • Essentially any command that lists a serious amount of data now uses a paginator.
      • Commands like $selfrole list will send one message with all of the selfroles in it. I kept it that way so the message was still pinnable in your channels.
    • More of these upgrades to come, as I'm personally exploring how else we can utilize interactivity.
  • Emotes command

    • List every single emoji in your guild using this paginator command. Use it with $emotes.
  • Reminder tweak

    • If you make a reminder where its content is just a Discord message jump URL, you'll get an alternate message linking directly to it instead of it being in a codeblock, for ease of use.
  • And more...

    • More code tweaks to make Volte better, more bug fixes that I can't be bothered to list like most developers.

I'm trying a new approach to writing release notes. Were those useful?


2 years ago

We've got some exciting stuff in this release: Reminders! As always, you can find pre-built binaries for this release here.

  • Reminders

    • Use the $remind command to set a reminder for yourself. See $h remind to see how to use it.
      • Example: $remind 2d Go grocery shopping will remind you in 2 days to go grocery shopping. The time format is shown in $h remind.
  • Commands now assume the color of your name on Discord. This is a change that was present on V4 and I liked it so much I moved it here.

  • LoggingService is now a Logger static class; and as a result exception logging on Discord has been removed (it was mostly spammy anyways)

  • Welcoming content placeholders are now shown in commands where it's relevant to see what they are.

  • Removed Context#ReplyAsync and ReactAsync; moved them to EvalEnvironment.

  • Fixed grammatical error in Admin/Mod checks in help messages.

  • Commands will properly show avatar when the command invoker has a default avatar.

  • Using the help command on a group of commands will now show commands you have access to, as opposed to every command.


2 years ago

This update introduces some exciting changes, namely a completely revamped help command courtesy of @abyssal, and their bot Lament. This update will be going live at about midnight CST, or 00:00 3/24/21. As always, you can find a pre-built copy of Volte here.

  • All-new Help command
    • Volte will now give in-depth explanations as to what each command argument means, as well as display what checks are needed; i.e. "You need the Admin role."
  • Volte Addons
    • An experimental feature that may or may not work as intended. Use at your own risk.
  • ShowResponsibleModerator
    • You can now disable Volte's display of the moderator who punished someone when the bot DM'd them. Use the $settings showmod command.
  • Dump Config
    • You can now, using the $settings dump command, post your entire guild settings to https://paste.greemdev.net for getting support with Volte.
  • Fixed Purge modlog entries not being made when ReplyInline was enabled.
  • All Admin commands have been moved; commands that change bot settings for your guild are now in the Settings module.
  • All commands that edit a specific setting, like SelfRoleAdd, SelfRoleRemove, etc have been put in their own modules, allowing for subcommands.
    • This means that, for example, SelfRoleAdd is now SelfRole Add.
  • Eval is no longer a Service, it is now a static helper class.
  • DatabaseService#UpdateData has been renamed to just Save.
  • Many namespaces have been collapsed; for example Volte.Commands.Results is now just in Volte.Commands, while it is still in the Results directory.
  • And more.


2 years ago


Volte is now using .NET 5 and C# 9. If you plan on contributing, you'll need the .NET 5 SDK. End-users can ignore this, as Volte is still a self-contained app; however the Windows version requires a few external DLLs and the Linux version remains the same. We have reverted back to .NET Core 3.1 as issues were arising.

As always, you can find precompiled binaries here.


  • Verification command:
    • Set your roles via $verifyrole command, and verify users via the $verify command.
  • ReplyInline command:
    • Make Volte take advantage of Discord's inline replies feature. (Might be a little wonky with certain commands. Please report any weird behavior via $feedback!)
  • TagEdit command:
    • You can now edit tags. Long overdue, yes I am aware.
  • BlacklistList command:
    • List every entry in the blacklist. Might contain some colorful words if you've configured them to be in there.
  • DeleteMessageOnCommand and DeleteMessageOnTagCommand have been removed entirely.
  • Fixed invalid role mentions when you use $adminrole or $modrole without any arguments.
  • Prefix command removed, instead just @mention the bot, with the mention as the only content in the message.
  • UserInfo now supports custom statuses in the Activity field.
  • Spotify now supports not having spotify as your primary status, e.g. having a custom status and spotify on your profile.
  • IdBan (and its modlog message) now shows who was banned as opposed to effectively just saying "they're banned."
  • You can use channel names in commands that require a channel argument, I missed one (1) line of code like 2 years ago.
  • VolteEventService is deprecated; all Services now use VolteService.
  • Eval's Return Type field is now pretty.
  • ShowColor and Color have been merged into one.
    • You can either provide a hex/rgb or a role and it'll show the color you provided or that role's color.
  • Tree command tweaked to maybe be usable in larger servers, though still breaks if it's too large.
  • Volte.Core.Models and ALL of its sub-namespaces have been moved into Volte.Core.Entities.
    • For example, Volte.Core.Models.EventArgs is simplified to Volte.Core.Entities.


2 years ago

As always, you can find pre-built copies of this Volte release here.

  • Fixed the ClearWarns command showing an incorrect number of warns removed.
  • Color and ShowColor work again.
  • Support for Discord Intents.
  • CountMembers command
    • Will show you how many members have a given role.
  • Account age detection.
    • Volte will now warn you in the ModLog channel, optionally enabled via the VerifyAge command, when a user's account was created within the last 30 days. This requires the ModLog channel to be set.
  • Renamed ModLogService to ModerationService to accomodate the above feature.
  • Updated many dependencies.


2 years ago

Another minor release.

Just like last time, you can get a pre-built copy of this Volte release here.

  • Fix more annoying backticks in Inpect and fix Eval always showing EmojiService for exception type (that was just developer error)
  • Finally support spaces in QuoteService Prelink and Postlink regex capture groups.
  • Move QuoteService logic outside of a foreach considering the pattern never allows for more than one match.
  • A lot of project cleanup; completely removed HandlerService
  • Commands are still partial classes but they have a base class now, in src/Commands/Modules.
  • #43 SetStream and SetGame are now independent from one another.


2 years ago

This release is minor, however important.

NOTE: I am no longer manually uploading binaries to the release page. You can get a pre-built Volte binary here.


  • Offloaded the checks that the bot runs on startup for the config into the Config class; it was too confusing having them in VolteBot.
  • Fixed a crash when using the Reload command and having log_all_commands set to true in the config. Thanks, @BarisYildiz!
  • Enhanced QuoteLinkReply: It now shows images in the message you quoted. It should have done this before but I messed up the code.
  • Removed StringBuilder#Append(Line)If extension methods as they weren't working properly (and actually partially caused the ReloadCommand bug)
  • Fixed Eval Inspect() showing a backtick and then a number on type names.
  • All dependencies (including LiteDB) updated to the latest possible version, including some dependencies which were updated to beta builds.
  • Modified QuoteService (aka QuoteLinkReply) to be able to identify and act upon discord.com message URLs.
  • Added "BigEmote" and "HugeEmote" as aliases to the BigEmoji command.
  • The IAm command now warns you if the guild you're in doesn't have any roles available to apply to yourself.
  • Added some "please report this to the developer" messages for rare errors.
  • Many other extremely minor changes and fixes.


2 years ago

First release in 9 months! What's been changed?

New Features

  • QuoteLinkReply: (This has actually been on public Volte since it was created in October)
    • Automatically parse a Discord Message-Jump URL and post its results in chat. Toggleable via the QuoteLinkReply command.
  • Wiki Command:
    • Instantly see all available wiki pages' URLs. (Cosmetically, needs an upgrade)


  • Volte has been updated to .NET Core 3.1. Keep in mind that this program is self-contained, so you will not need to upgrade your system's .NET Core version.
  • Moved the Guild startup foreach into an unawaited Task.Run to prevent gateway blocking.
  • Fixed Volte never being able to set a Stream activity on startup.
  • Removed the GitHubService.
  • Various XML docs added, as well as method/property renames and QoL improvements.
  • Fixed TagCreate outputting raw .NET Task values if the tag already existed.
  • Added functionality with Tags to choose if they're shown in an embed with the tag requester at the bottom or as plain text.
    • Enable/disable this via the TagShow Admin command.
  • Fix spotify command not embedding the Track URL properly.
  • Purge no longer creates an exception when target messages are older than 14 days.
  • Eval now matches a regex pattern for the syntax highlighting code block, as opposed to StartsWith and EndsWith tests that were error-prone.
  • ModLogs now use shorthand string methods as opposed to repeating the same string.
  • Collapsed PrimitiveExtensions, ProcessExtensions, and TypeExtensions into SystemExtensions and fixed possible nullrefs in CommandExtensions.
  • EvalEnvironment now has an Environment property to get itself, since in Eval you cannot use this. Helpful for reflection.
  • Updated the embed footer on a poll and made the Helpers/PollInfo static methods be less specific about collection type (previously string[], now IEnumerable.)
  • Commands now use more raw argument names, as opposed to "word" or "phrase" it'll be "String" (for example, there's more).
    • Command Help now has an argument type cheatsheet on the wiki embedded in the bold Usage text.


3 years ago

This release is rather small, but it fixes an elusive bug and overhauls one of our commands.


  • Autorole will now work. It didn't previously.
    • A side effect of this may cause Welcome to work consistently now, which is good.
  • The Poll command has been overhauled, and is more user-friendly.
    • The best part is: The syntax to create a poll is THE SAME! You don't need to relearn it.
  • Tree command
    • See a list of channels in your guild and their categories.
  • string#ToEmoji() extension.
  • The Ban command no longer has the daysToDelete parameter, and it defaults to 7 days in the past to delete.
  • Welcome now ignores case on placeholders.
    • This means you can now do {guIldNaME} instead of {GuildName} and it will still work.

That's all for now!

As always, listed below are the binaries for this release. Volte.exe is for Windows, and Volte is for Linux. See the wiki if you need help setting up!


3 years ago


  • Fixed Eval never being able to work.
    • This means PublishTrimmed is no longer used; binaries will be back to their original size, unfortunately.