Skip to content

Changelog

Info

Release notes on GitHub include links to the relevant commit, PR, or issue for each bullet. They are omitted here.

v2.10

December 22, 2025

Features

  • Documentation updated to explain the basics of how I as the maintainer would expect someone else to contribute to the codebase.

Changes

  • Text throughout EnduraBot rewritten to either be more generic or dynamically generated.
  • The footer for the output of /rquote and the daily bible quote has been made configurable via variable rquote_footer added to data/variables.json.
  • README.md given a makeover.
  • /info embeds given a makeover.
  • What kinds of text result in exclusion from /logs made configurable via variable log_text_exclude added to data/variables.json.

Bugs

  • Fixed issue where the text at classes/itad_get_games_handler.py did not properly reflect which endpoint a hypothetical error would come from.

Miscellaneous

  • 6 variables in data/variables.json that were EDC specific in nature (e.g edc_ports) renamed for genericity.
  • Logic in /logs used to filter out common log-lines refactored to not be a long chain of if not... and not statements.
  • Unused variable l_role_id in data/variables.json formally deprecated.

v2.9

December 15, 2025

Features

  • Documentation live. Features: a guide on how to host the bot yourself, explanation of how the bot's code is organized, breakdown of all configuration variables and what they do, and more. /about updated to include a link to it.

Changes

  • The number of uses for /game before the cooldown triggers has been made configurable rather than hard-coded.
  • Searching for /game improved to allow fuzzier searching while still getting a result.
  • /editrole will now detect if it's being used to remove a role granted with /trole, will error out, and then advise the user to use the remove argument of /trole instead.
  • /user will no longer report if the target is a Endurance Coalition staff member or systems operator.
  • The REGEX used by /rquote to determine whether a message is eligible for selection has been made configurable via the rquote_regex variable added to data/variables.json.

Bugs

  • Fixed issue where EnduraBot would not properly report to end-users if IsThereAnyDeal returns a 403 status code.

Miscellaneous

  • .env has been set to be a mounted volume in Docker rather than a file copied into it's image.
  • Classes ItadGameSearchHandler and ItadGameDealsHandler refactored to provide better error handling and reduce unnecessary API calls.
  • New variable disabled_cmds added to data/variables.json. Commands listed in this JSON object will be disabled and attempts to use them will result in an error.
  • Variable admin_role_id in data/variables.json deprecated in favor of programmatically checking if a target has the native Discord Administrator permission.
  • Custom exception classes APIConnectionError and APIContentNotFoundError added to improve error handling and debugging for API-related issues.

v2.8

December 8, 2025

Features

  • New command: /game. Lookup a game by name and get it's box art, generic information, and the best price for the game sourced from the IsThereAnyDeal API.
    • This command includes an argument - private - which allows setting if the output should be posted to the channel publicly or only be visible to the executor. Defaults to posting publicly.

Changes

  • /logs now filters out common and repeated log events from its output.
  • /trole given a new argument - disconnect - which determines if the target should be disconnected from VC when the command is ran. Defaults to true.

Bugs

  • Fixed description for argument length in /trole which was written as if the command was still /takel when it should have been rewritten in PR #152.
  • Variable rquote_cooldown_in_minutes renamed to rquote_cooldown_in_seconds as the value actually must be in seconds for the cooldown to work properly.

v2.7

December 1, 2025

Features

  • New command: /logs. Get an embed with X number of log lines from EnduraBot's internal logs.
  • New command: /trole. Give a role temporarily to a user with the list of selectable roles mirroring the ones available for /editrole.
    • This command has replaced /takel.
    • This command still defaults to giving @L for a 24-hour interval if no arguments aside from the target are selected.
    • /trole has argument remove which, when set to True, will remove the given temporary role from the user and delete the timer.
    • Notification of temporary role assignment will no longer be via DM and instead will always be sent to #based-chat.

Changes

  • The reason argument for command /monitor will no longer be logged.

Miscellaneous

  • Command /monitor unbundled from cog user_cmds.py and given own cog monitor.py.
  • Cog manage_role.py renamed to edit_role.py to match the command it is named after (/editrole).

v2.6

November 23, 2025

Changes

  • EnduraBot will avoid using the last X selected quotes from #out-of-context to mitigate against duplicate quoting with X being a configurable value.
  • /rgit-deals, /rgit-edit, and /rgit-list have been deprecated.
  • Embed with invite use information when a member joins, added in v2.4, given some QoL and longevity adjustments.

v2.5.2

November 16, 2025

Miscellaneous

  • The automatic log header introduced in v2.5 will now no longer create a newline above itself.

v2.5.1

November 10, 2025

Bugs

  • Fixed issued where the datatype of certain SQLite columns in member_monitor caused /monitor to not function as intended.

v2.5

November 10, 2025

Features

  • New command: /monitor. Add or remove individuals from a table of POIs.
  • In line with above command, if a POI does join, EnduraBot will send an alert and/or ban the account, depending on the /monitor options selected.

Changes

  • /editrole will now only display the roles which can be edited, rather than all roles on the server, to limit confusion.
  • /takel will now no longer work on bots.
  • README updated.
  • Various commands throughout EnduraBot have had their arguments given descriptions to improve usability.

Bugs

  • Fixed spelling error in one of the /takel embeds.

Miscellaneous

  • Logs will now be properly separated by a date header at midnight every day to improve readability.

v2.4

November 6, 2025

Features

  • New command: /takel. Allows the assignment of @L, automatic removal from VC if in VC, and automatic removal of the role by an interval set by the user.

Changes

  • When a user joins an embed with information regarding the invite used will be sent to configurable channel.

Bugs

  • Fixed issue where the logging for /user would output that /info was ran as the logging text wasn't updated in PR #109.

v2.3

October 30, 2025

Changes

  • The output of /rgit-deals can now be sorted by percentage off or by a game's raw price.
  • Command /info renamed to /user.
  • Commands /links and /ips combined into /info with options to select.
  • .env-example has been updated to include itad-token= when it should have been done in PR #85
  • Class ItadGetDealsHandler will now check the API connection to match functionality of ItadGameSearchHandler.

Bugs

  • Fixed issue where the programmatic name of /blacklist was info when it should have been made blacklist in PR #85.
  • Fixed issue where if no deals existed for games in the RGIT table and /rgit-deals was ran an empty embed would be generated.
  • Preemptively fixed issue where once again I had 2 listeners in one file which would have resulted in only 1 listener being active.

Miscellaneous

  • Set minimum log level for discord.gateway from INFO to WARNING as it unnecessarily cluttered the logs.

v2.2

October 28, 2025

Major additions in this release. API integration, use of SQLITE to have persistent data, utilization of classes, file reorganization, oh my!

Features

  • New command: /rgit-deals. Get a list of deals from IsThereAnyDeal for games in a RGIT table which is manipulatable via /rgit-edit. Global cooldown set at 10 minutes.
  • New command: /rgit-edit. Add or remove games from the RGIT table. This table is used to determine what deals are looked for when using /rgit-deals.
  • New command: /rgit-list. List all the games in the RGIT table.
  • New command: /blacklist. Blacklist a user from using any EnduraBot command.

Changes

  • The EDC gaming connection URL (edcgaming.org) is no longer hard coded and has become configurable.
  • Debug logging added to keep track of what percentage value causes EnduraBot to insult users or not on ping.

Bugs

  • Fixed issue where the alert pinging detection to have users use /alert was overridden by the bot's detection of being pinged to insult members
  • Fixed issue where the programmatic name for /reboot was still rconfig due to a failure to rename it in PR #71.
  • Fixed issue where a fallback message ID for /rquote in the event the random selection failed was an ID to a non-existent message.

Miscellaneous

  • Reorganized various files in repository.
  • Added classes.
    • DBRGITGames: Handler for interacting with the RGIT table in the SQLITE database.
    • ItadGameDealsHandler: Handler for getting deals from a list of IsThereAnyDeal game UUIDs.
    • ItadGameSearchHandler: Handler for giving the IsThereAnyDeal API a game title and getting specific information about the game back.
    • DBBlacklist: Handler for interacting with the blacklist table in the SQLITE database.

v2.1

October 22, 2025

Features

  • New command: /reboot. Reboots EnduraBot.
    • Not to be confused with /estop, which will stop EnduraBot and not allow it to restart.
    • This command has replaced /rconfig.
  • New command: /rquote-debug.
    • Outputs information regarding how /rquote would use a specified message were it to hypothetically be selected. Useful for investigating potential edge cases.
  • New command: /echo.
    • Lets user make EnduraBot say something.
  • EnduraBot now logs when invites are created and, when a user joins, which invite they used.
  • EnduraBot has a percentage chance to insult a user when someone pings it.

Changes

  • /about now reports EnduraBot's uptime.
  • /info will now report if a user is a bot, has Discord Nitro, and what their global_name is.
  • /rconfig removed.

Miscellaneous

  • Permissions have been become configurable instead of hard-coded on a per-command basis

v2.0

October 19, 2025

Incrementing major version due to the amount of under-the-hood changes that have occurred since v1.2. Not too much has changed for front-facing users, however.

Features

  • New command: /rconfig. Useable by @SYS:OP to allow EnduraBot to notice when configurations have changed without requiring a reboot.
  • /editrole now supports choosing whether the target should be pinged, with the option defaulting to false.
  • All bot actions are now logged on the backend.

Changes

  • /rquote and the daily bible quote will now include an image attachment if it exists in the selected message.
  • /editrole's functionality to allow @A to manipulate all roles excluding itself and @M has been removed as it was unnecessary. It is now locked-down to the roles defined as editable in variables.json.
  • /editrole will now use embeds for it's output.

Bugs

  • Fixed issue where if a member's use of /rquote was rejected because it was done in #out-of-context they would still be subject to the cooldown.
  • Fixed issue where execution of /estop was not respected by Docker and the bot would simply immediately reboot.

Miscellaneous

  • /rquote themes are now configurable in variables.json rather than hard-coded.
  • README updated to be transparent about artificial intelligence's role in development, alongside other minor refinements.
  • JSON loading centralized to config_loader.py rather than JSON being loaded per cog.
  • Directories /data/ and /logs/ are now Docker volumes, allowing viewing and manipulation while bot is active in it's container.

v1.2

October 13, 2025

Changes

  • Command /bibleq renamed to /rquote. Quotes will now be presented in a different manner to give more uniqueness to the daily Bible quote functionality.

Bugs

  • Fixed issue where /info would report a user had no roles if they had only 1 and would output nothing if they truly had no roles.

Miscellaneous

  • Redundant variables removed where noticed, and code generally given some cleaning time.
  • JSON files bible_gospels.json and daily_bible_openers.json condensed into misc_text.json.
  • JSON file editable_roles.json merged into variables.json.
  • The cooldown period for using /rquote (previously /bibleq) is now configurable in variables.json
  • File bible.py renamed to rquote.py.

v1.1

October 12, 2025

Features

  • New command: /estop. Useable by @M, @A, and @SYS:OP to shutdown EnduraBot completely in the event of an emergency.
  • New command: /links. Produces embed with list of links relevant to EDC.
  • New command: /ips. Produces embed with connection IPs for installed EDC services.

Changes

  • /bibleq now searches the entire history of the channel rather than just the last 100 messages.
  • /bibleq will now properly detect if multiple quoted lines exist in one message and present them appropriately.
  • Messages that ping @SYS:OP and contain a certain combination of service and issue keywords will be deleted and an embed posted advising the user to instead use /alert.
  • JSON configuration files decoupled from repository. Examples left in their place.
  • The daily bible quote message sent in #based-chat has gotten a face-lift to distinguish it more from the quotes generated with /bibleq.

v1.0

October 10, 2025

Full minimal viable product release for EnduraBot.

🎉 MVP Bot Feature List

Commands

  • /bibleq - Present a quote from #out-of-context as if it were a Bible quote.
  • /info - Get basic API-pulled information about any member of the Discord server.
  • /about - Get generic information about EnduraBot, it's current version, and a link to it's GitHub repository.
  • /alert - Ping EDC systems operators in their #systems-dev channel about an issue with EDC services, such as a server not booting.
  • (Mod Only) /editrole - Give or revoke pre-defined set of roles from members of the server. @A can do this for any role excluding @A and @M.

Behaviors

  • A quote from #out-of-context is submitted as if it were an inspirational Bible quote to #based-chat every day at a 12pm Eastern.

🗒️ Release Notes

Features

  • EnduraBot now submits a random quote from #out-of-context as if it were a Bible quote to #based-chat daily at noon Eastern time.

Changes

  • Use of /bibleq limited to once every 30 minutes per user. @A and @M excluded from this restriction.
  • Commands /roachcock and /takel combined into /editrole which allows @M to give and revoke a list of roles configured at editable_roles.json. This also allows @A to give and revoke any role (excluding @A and @M, for security purposes).
  • EnduraBot will not listen to /bibleq in #out-of-context.
  • /alert is now useable outside of #systems-dev by members with the @Sailor role. These messages will be sent to #systems-dev with a ping.

Bugs

  • Fixed issue where EnduraBot would not properly identify if a Discord member was @SYS:OP or an @M/@A when using /info.

Miscellaneous

  • Example .env file added to repository.