Volte Versions Save

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

V3.1.0.1

4 years ago

A very small release, but important nonetheless. From here on out, these releases will no longer have End-User and Nerd Changes sections. Most people that even look at these releases are nerds so it's pointless.

Changes

  • My Discord.Net fork is broken, so I've reverted to main-line Discord.Net for now.
  • Newtonsoft.Json has been removed and has been replaced by System.Text.Json. (Thanks @MarkusKgit, #34)
  • BotConfig object property setters made public so System.Text.Json can actually function.
  • PublishTrimmed is now set to true in Volte.csproj; this makes the resulting binaries about ~30MB smaller.
    • This was removed in a later update.
  • The LoggingService has been overhauled, and it now looks a lot better, using string padding.
  • The Purge command can now be used to delete messages by ANY Discord user, provided they've messaged in your guild.
  • Added AppendLineIf/AppendIf StringBuilder extensions.
  • Removed the unnecessary Usage: |prefix| prefix on command Remarks. It was ugly in the source code and served no purpose as I could just prepend the correct information to the help message.
    • This change doesn't make a visual difference for end users; all commands' Remarks (aka Usage) remain the same.

That's all for now. As always, thank you for using Volte!

V3.1

4 years ago

Very minor changes, but I should still release this. Volte's GitHub Actions now upload the compiled binaries to the build page when they're complete! This allows you to run your own instance of Volte on the latest version of the branch rather than the most recent release.

End-User Changes:

  • None

Nerd Changes:

  • We now use my own fork of Discord.Net, GreemDev.Discord.Net. This allows me to make my own changes to the library.
  • ConfigFile is now named ConfigFilePath in Config.cs.

You can find Volte's V3.1 compiled binaries here. The files are in the top-right under a tab named Artifacts, and you can download the appropriate binary.

V3.0.3

4 years ago

This release contains mostly bug fixes, but there's some QoL improvements as well. Note that Volte releases will be ONLY executables now, and not .zip files. The file with the .exe extension is for Windows 10, and the extension-less one is for Linux.

End-User Changes

  • Command logs are now sent in a single log message. This change is to prevent this from happening.
  • The Color command now has an image in it that is purely the role's color.
  • ShowColor command: feed the bot an RGB or Hex value and it'll show you what that color looks like.
  • All instance of server have been replaced by guild as that is what the Discord API documentation refers to them as.
  • JoinLeaveLog has been renamed to GuildLogging, you'll have to update your config accordingly. (Literally just change join_leave_log to guild_logging in your volte.json file.
  • Volte now has the ability to send starting notifications to your GuildLogging option.
    • It sends shutdown only if the owner Shutdown command was used, otherwise it's not sent.
  • WelcomeDm feature: DM someone with a message when they join your guild.
    • You can configure this via the WelcomeDmMessage (Wdmm for short) command.
  • Grammar in the TagDelete command has been fixed.
  • The Info command now shows the amount of successful/unsuccessful command invocations since the bot has started.

Nerd Changes

  • Qmmands' implicit operators have been used in TypeParsers.
  • TrySendMessage user & channel extension added.
  • All Discord-related extensions have been moved from different files to one file, DiscordExtensions.cs.

V3.0.2.1

4 years ago

An arguably small release, this one has some rather cool changes.

End-User Changes

  • Volte self-hosters can now optionally enable, on top of printing to the console, writing ALL logs to a file for later use. The file also includes date/time-stamps!
  • You can now specify, on top of DeleteMessageOnCommand, if you want the tag invocation messages to be automatically deleted by the bot (use the DeleteMessageOnTagCommand, or Dmotc). Note, the bot requires MANAGE_MESSAGES in the guild or the channel!
  • example.volte.json updated.

Nerd Changes

  • VolteContext has a new property, Now. Use it to get the current time.
  • LoggingService now has XML docs.
  • WelcomeOptions now has FormatLeavingMessage() and FormatWelcomeMessage(). Both take a SocketGuildUser as their parameter.
  • If DeleteMessageOnCommand is enabled, it no longer prints an exception to the console; but rather a simple 1-liner.

Known Issues

  • The bot doesn't correctly set a stream status even if the config option status_twitch_streamer is set. Might make it a separate config option rather than just doing some checks on status_twitch_streamer. For a workaround, you can always use the bot owner exclusive command SetStream.

V3.0.2.0

4 years ago

Skipped 3.0.1.0 entirely as it was mostly bug fixes, and an altogether small update. These patch notes include 3.0.1.0.

End-User Changes

  • You can now use the Quote command to quote from another server, as the command now searches all channels rather than just the current guild's.
  • DevInfo command: shows information about Volte and the system it's currently hosted on.
  • Bot author (me)'s name is now shown dynamically in the Info command because of the usage of the Discord REST API.
  • Fix silent command failure, fix NullReferenceException in the BigEmojiCommand when the used emoji was not a unicode one.
  • Eval command now has helper methods, as a shortcut to get certain objects.

Nerd Changes

  • Qmmands 3 nightly is now used, as opposed to the 2.x release.
  • Command-related methods in EventService have been moved to a new service, CommandsService.
  • IServiceProvider type is now enforced throughout the bot as opposed to just ServiceProvider.
  • Ok and None command results now have the option to await or not await the function invocation.
  • Added a Tag TypeParser to reduce duplicate code in tag-related commands.
  • C#8 null-coalescing assignment operator used in the UserInfo command.
  • A build script is now included in the bot's source. This script assumes you're using & have the .NET Core 3 preview SDK.
  • A new process is no longer spawned to get the .NET Core version in the Info command.
  • Uptime calculation is now offloaded to a method rather than doing the same calculation multiple times.
  • Discord.Net debug logging is now reliant on Version.ReleaseType as opposed to the config option. This was especially an issue on larger Volte instances, like the public one.
  • All commands use StringBuilder where necessary.
  • LoggingService.Log is now private, use the new shortcut methods instead.

V3.0.0.0

4 years ago

Volte V3 is here! Here's all of the changes, end-user and nerds alike.

Main Changes

  • Configuration is now named volte.json and now uses more-JSON-esque names.
  • Commands now use CommandResults, so command processing should be fractionally faster.
  • .NET Core 3.0/C#8 is now used, and you NO LONGER need to install .NET Core on your system as Volte is now self-contained as a Linux or Windows 10 executable.
  • Volte now properly creates a configuration file on program start if one doesn't exist. It still somehow didn't do that before.

There's probably more that I couldn't think of.

End-User Changes

  • Tag management commands, like TagCreate, are now Moderator-restricted as opposed to Admin-restricted.
  • Features can now be manually enabled/disabled for self-hosted Volte instances via the new enabled_features config section.
  • WelcomeColorCommand now accepts RGB/HEX values! No longer are you required to provide an RGB if you only know the hex.
  • Reload command: Reload your Volte config on-the-fly without needing to restart the bot. Note, if you changed the token, you'll still need to restart.
  • Permissions command: See permissions for anyone in the server.
  • Sharded Client! Public Volte will now automatically fix itself if it ever gets above 2000 guilds.
  • Example config file updated to show new config key names/additions.
  • Debug logging: You can now have extra info printed to your Volte console for issue diagnosing.

Nerd Changes

  • C#8 features like Switch Expressions are now used. You'll need to install the .NET Core 3 SDK to be able to edit this project & run it!
  • Anything under Volte.Data was moved into Volte.Core.Models. I.e.: Volte.Data.Models -> Volte.Core.Models
  • Config.cs moved into Volte.Core.
  • Socket types are now enforced all throughout Volte. No more interface types!
  • Expression body now used for all methods that are only one line.
  • IDiscordClient#GetInviteUrl() extension now generates a URL with default permissions if withAdmin is false.
  • The current guild's GuildData is now on the Context of every command creation.
  • Sync logger. Async logger is bad, and is for the weak-minded.
  • Removed Discord.Commands.
  • TypeParsers are added automatically, via Reflection.
  • ModActionEventArgs now uses a builder pattern.
  • All modules made sealed. This is purely a compiler optimization.

V2.5

4 years ago

This update was mostly Quality of Life changes; for both the end-user and me the developer.

End-User Changes

  • Complete Help command rework.
    • Use $help to see how it works.
  • Update Discord.Net so that my PR is reflected.
  • Reintroduction of Debug as Bin.
    • To generate a debug report, run the command $bin in your guild.
  • More effective way of dealing with invite URLs in AntilinkService.
  • Prevent duplicate role addition in SelfRole commands.
  • Updated config.example.json.
  • Specify that UTC is shown in the Snowflake command.

Nerd Changes

  • SocketGuild TypeParser.
  • ModLog-related code moved to ModLogService.
  • Guild configuration/data model COMPLETELY overhauled.
    • This will NOT reset the database on public Volte as I added a MigrateAsync() function.
  • AntilinkService now has discord.me and discord.io link filtering.
  • Conform to Dependency Injection patterns, remove static Instance fields and ServiceProvider access.
  • Remove unnecessary REST requests.
  • Console writing in LoggingService made async.
  • Offload Eval command logic to a Service.
  • Overall code quality increased.
  • Some if conditions were inverted to reduce nesting.
  • Removed unused usings.

V2.4.1

4 years ago

Although this is a patch release, this version has a lot of cool additions/changes.

End-User Changes

  • Warn System! Warn your users when they do enough wrong for it to be warranted, but not enough for a ban/kick to occur.
    • You can clear any user's warns or see them all via their respective commands.
      • Warn: warn a user
      • Warns: see all warns or the 10 most recent ones
      • ClearWarns: clear all warns for a specific user
    • All of this (except Warns) is documented in your server's mod-log!
  • Owner module renamed to BotOwner to prevent confusion; "I am the server owner, why don't I have access to this module?"
  • ServerAdmin module renamed to AdminUtility to better suit the type of commands in it.
  • Command info/list is now shown regardless of permission level, so you can see moderator commands if you're not a moderator etc.
  • Type Parser error messages are now more clear, such as "Role not found."
  • Avatar command now shows the TARGET user rather than command invoker, changed for clarification.
    • Closes #32.
  • Commands command now shows all available commands registered to the bot when the target module is not specified.
    • Changed the command's Description to reflect this change.
  • Eval command actually works now, I had the incorrect namespace included in the imports so the script wouldn't run. Oops!
  • Previously, the Modules command showed all but one module. This was a non-reported bug, and was caught by me when renaming modules, and it has been fixed.
  • Debug system removed entirely as debug.scarsz.me was deprecated.
    • There will be a system replacing it in the future.

Nerd Changes

Volte.Data.Objects -> Volte.Data.Models namespace rename, and refactored accordingly. Volte.Commands.Modules.Owner -> Volte.Commands.Modules.BotOwner Volte.Commands.Modules.ServerAdmin -> Volte.Commands.Modules.AdminUtility

V2.4

4 years ago

In this release, things were tidied up to be more consistent for the end-user.

End-User Changes

  • true/false can now be passed in as an argument for commands that require a boolean value. How did I overlook this?
  • Shutdown command now kills the entire process, rather than keeping it alive but logging out of Discord.
  • Avatar command now shows a larger avatar than before.
  • Mod log! Track your moderation in a channel.
    • Set it up with $modlog #some-channel
  • Verification removed entirely.
  • Eval no longer shows the input field on completion. That was redundant.
  • Eval shows the return type from the eval.
  • Eval error is now shown in the embed rather than making a file, uploading it, then deleting it from the file system.
  • Tags command: list tags in the current guild.
  • Purge command now has an optional parameter to purge messages by a certain user.
  • Roles that no longer exist will be omitted from the SelfRoleList command, previously it just stated "Role no longer exists.".
  • Fixed a discrepancy in which some commands remarks help string contained the default prefix instead of |prefix|.
  • Bot now responds to mention prefixes when the bot has a nickname in the current guild.
  • Previously, two commands named RoleColor existed. One in the Utility module and the other in ServerAdmin. The one in Utility was renamed to Color, and the one in ServerAdmin is still RoleColor.
    • This was actually the cause of #31.
  • Updated UserInfo to have a better format of CreatedAt, as well as include JoinedAt.

Nerdy Changes

  • Classes that could be made sealed were made sealed.
  • Various Extensions under Volte.Extensions were moved to Gommon for less code redundancy per-project.
  • VolteHandler#HandleMessageAsync was moved to EventService for uniformity.
  • .NET Core upgraded to 2.2 from 2.1.
  • Remove all usages of Task.Delay().ContinueWith() and replace them with Executor.ExecuteAfterDelayAsync().
  • DiscordServer type renamed to GuildConfiguration.
  • Volte.Discord renamed to Volte.Core.
    • All using directives were updated accordingly.
  • LoggingService#Log was renamed to LoggingService#LogAsync to stay in line with C# standards.
  • obj == null was still used in some places, replaced that with is pattern matching.
  • Eval now runs in a disposed-of Executor.ExecuteAsync call to prevent gateway task blocking.

V2.3.1

5 years ago

In this update, we tried to move to D#+ but decided against it. In all seriousness, DSharpPlus is a fantastic library, but it just didn't fit my needs.

End-User Changes:

  • Fix issue #28.
  • Quote now shows the first attachment from the message if an attachment is present.
    • Note this only supports images; .jp(e)g, .png, and .gif.
  • Log statistics on startup, including the bot invite URL.
  • Now command: show the current date and time in UTC.

Nerdy Changes:

  • Moved to the EventArgs C# standard for event data. Before, it was just sending the raw data as parameters to the handlers. That is no longer the case.
  • TimeExtensions how uses DateTimeOffset#ToString(string format) calls rather than manually formatting the time.
  • Eval command now uses a System.Collections.Generic.List<string> for imports rather than a string[].