All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- New welcome system:
- Members must wait 10 minutes before being confirmed
- Visual layout to select appropriate roles for the user
- Rules message now contains link to full Scioly.org rules
- Censoring messages now consumes less memory and is less likely to block internal bot event loop
- Reduced errors in edit message logging
- Recent messages in ping subsystem are now stored using a
collections.deque
.
ruff
is now the main linter for the repository
- Default supported version is now Python 3.10
- GitHub Actions runner now performs linting check as expected, rather than failing every time
- Improper regular expressions would cause errors on each ping, now silently ignored
- Logs no longer use
print()
, rather native Pythonlogging
features (closes #460) - Logs are saved to a file, and also printed to the user when in development mode
- Edited message logs no longer error when a message has never truly been edited.
- Dependencies upgraded to work with Python 3.11
- Users are only warned of using frequent pings when adding small ping terms (closes #467)
- Using
All States
argument with/states
would not be handled correctly
- Invitational dropdowns in #invitationals now show archived invitationals, so users can update their roles without invitationals being open.
- CI would never pass on
master
because of a check that was accidentally running.
- Logs of deleted messages not in cache now include warning that non-caching may be due to ephemeral state
- Invitational archive and extend buttons attached to archive reports now function properly
- Removed typos in embed sent to archived invitational channels
- Autocompletion for staff invitational management commands
- Command group for commands related to the Scioly.org wiki
- Self-mute button is functional again
- Most references to "tournaments" were changed to references to "invitationals"
- Removed unneeded files
- Invitational dropdowns now reset after choosing an option
- Instructions on joining/leaving invitational channels through
#invitationals
are clearer
- Users using
!
or?
are now notified to use slash commands (closes #403)
- Typo in
/invitational renew
command /ping on_message
event handler would often take up event loop
- New Discord UI interfaces for several commands (closes #370)
- MongoDB is now where Pi-Bot stores his information (closes #369)
/cron
allows staff to edit/remove tasks from Pi-Bot's CRON system (closes #379)/ban
and/mute
now suggest ban/mute lengths, rather than asking the moderator for their own suggested length- The bot can now listen for individual user responses. Helpful for users attempting to interact with application commands in complex ways.
/invitational add
,/invitational approve
,/invitational edit
, and/invitational archive
allow staff to manage invitational data/invitational season
allows staff to manage the season of each invitational/invitational renew
allows staff to renew previously archived channels- Invitational tournaments can now be archived from any channel
/event add
and/event remove
allow staff to modify events from the server- Event-modifying commands no longer require staff to manually add event roles to the server, instead, roles are automatically generated.
/tagupdate add
,/tagupdate edit
, and/tagupdate remove
allow staff to modify tags from the server/censor add
and/censor remove
allow staff to modify censor entries from the server/stealfish
can now occasionally give bear more fish rather than take fish away./prepembed
now has an interactive creation tool to create embeds./prepembed
now allows for exporting/import embeds.- Direct message logs are now more cleanly formatted and use relative dates.
- Users are now sent a direct message about why their message was deleted after editing it to include a censored term.
- Staff can now change a user's nickname or kick the user from a innapropriate username report.
- Edited message logs now include a link to jump to a message.
- Deleted message logs of non-cached messages now contain an explanation for why more data is not available in the log.
- Censor cog for handling all message censoring.
- Logging cog for handling all logging. Logging functionality was moved out of
bot.py
. - Spam cog for handling catching caps and spamming.
- Loading commands now frequently show a loading emoji to signify processing.
- A
YesNo
view was added for commands that need a final confirmation. - A user command was added for confirming users.
/kick
and/ban
confirm that the correct action took place after completing the desired action./kick
and/ban
can send a message to the user alerting them to the action that just took place.- Staff commands now double-check for permissions, once handled by the library, once handled by each command.
- Staff can now refresh only part of the bot, if desired.
- Staff can now set a custom bot status for a specified amount of time.
- CRON handling is now handled by a group of methods, rather than just one method.
- Add cooldowns to member commands.
- Members can be confirmed through a User Interaction (ie, right-clicking on a user icon).
- Adding/updating embeds is now done through Discord UI, with the help of dedicated classes.
- Embeds sent previously can now be updated.
- The limits on specific values in embeds is now validated.
- Pings now show recent message history in the channel to give context.
- Ping messages now have a red color, and are formatted differently. The
Click Here
link is now embedded in the embed description. - Ping commands now live in a separate slash command group.
- Reports are now interactive, often featuring buttons that can be clicked to activate specific actions.
- Separate views/embeds are now used depending on the report type.
- When reports are acted upon, messages are sent to
#closed-reports
.
- bot.py was split into separate files/cogs. (closes #42)
- Some dependencies were updated (numpy).
- The default Python runtime was updated to 3.10.
- New tournament channels will not be created if an appropriate tournament channel already exists, just in the archived category
- Automated data updates are no longer made on a constant basis; rather, data is updated only when changes are needed because of a process
- The layout of the
/about
embed response was slightly updated. /pronouns
only allows adding/removing one pronoun role at once./forums
,/obb
,/gallery
, and/exchange
were simplified into/link
./info
no longer checks for the user's staff role, and instead only checks the category name of the channel the command was called in./wiki
was split into separate commands:/wikilink
,/wikisearch
, and/wikisummary
./treat
can now be used to share a wide variety of treats. Yum!- Users who are repeatedly spamming/using caps are now warned through direct messages, rather than in public channels.
- Edited and deleted message logs now use Discord UI relative times instead of displaying times in UTC.
- README now features slash commands instead of typical commands.
- Version is now stored in
bot.py
-info.py
was removed. - Message history in
#welcome
is now gotten newest-first in an effort to conserve resources.
- The exalt/unexalt commands were removed.
- The getVariable command was removed.
- The report command was removed.
- The nukeuntil command was temporarily removed.
- The
/graphpage
and/graphscilympiad
commands were temporarily removed. - Users can no longer indefinitely self-mute.
- Google Sheets is no longer used to store data, and all systems related to storing data in Google Sheets were removed.
- The forums-interacting aspect of the bot was removed.
- The ability for staff to mark tournament as "opening soon" was removed. Tournaments are now open from when they are officially added by staff.
- The wiki stylist was temporarily disabled.
/me
was removed./eat
was removed./report
was removed./list
and/help
were removed, as users can now see all commands in a list through Discord UI./latex
,/resultstemplate
, and/school
were temporarily removed.- Users will no longer be banned from using
/stealfish
. - Edited and deleted message logs no longer show the raw event payload.
- RegEx pings were removed.
- Permissions for Launch Helpers were removed.
- The
assemble_embed
method was removed; instances of its use were replaced with the use ofdiscord.Embed
. - The
auto_report
method was removed. Rather, reporting is now handled by a specific cog.
/invyarchive
(previously!archive
) now correctly links to the#competitions
channel for more questions/info about an archived tournamentin the response embed (closes #363)- Direct message logs no longer log outgoing messages from the bot.
!invite
now links to partner invite linkdiscord.gg/scioly
is now an allowed external Discord link
- Fixed incorrect dates in CHANGELOG
- Fixed misspelling in
!division
command
- Timing issues with
!selfmute
,!mute
, and!ban
should be fixed (closes #242)
!archive
would make a tournament channel no longer viewable to current competitors (closes #365)
- Voice channels can now be opened for state channels (hello socal! :D)
- An empty requested tournaments list would break the tournament-updating sequence
- Added more
try/except
blocks to refresh algorithms to stop the entire algorithm from stopping in case one part breaks
- Added
!archive
command (closes #263)
!dogbomb
with no arguments referred to shiba bomb (closes #323)
!magic8ball
response now replies to the original message (closes #356)!fish
can no longer give bear 69 fish at any time (closes #355)- Updated
discord.py
pip package to1.6.0
- Slightly cleaned up logs
- More detailed, helpful logs for code or command errors
- Fixed
!getuserid
command name
- Fixed various errors on logging deleted and edited messages (closes #298)
- MET table is removed from matplotlib memory when the graph is generated (closes #340)
!coach
now gives the user a link to the public Coach role application.
- Live member count channel for staff to monitor server (closes #320)
- Support for the "Self Muted" role
- Option for users who self-muted to unmute through a reaction on a special message (closes #325)
- Tournament list breaks if number of available tournaments decreases by a large margin (closes #316)
!fish
breaks if fish count gets too large (closes #324)
!beareats
now deletes original command message (closes #304)- Messages with only exclamation marks are no longer thought to be commands (closes #282)
- Fixed error in datetime string that would cause cron task times to become unreadable
!xkcd
command now returns random comic if no second argument is given (closes #302)
!xkcd
now correctly handles comics requested that are above maximum number!help xkcd
now works (closes #301)
- Messages by Launch Helper+ are no longer deleted in #welcome by the #welcome manager task
- Pinned messages in #welcome are no longer deleted by the #welcome manager task
- Users can be auto-confirmed under special circumstances
- All messages will be deleted in
#welcome
if they exist for more than 3 hours (skipped between 12AM and 11AM EST)
!confirm
will confirm the user first, then delete message (closes #176)!confirm
will delete the original message sent by Pi-Bot when use joins (closes #95)- Users who leave the server will have any messages mentioning them in #welcome deleted (closes #251)
- Added documentation for
!info
in commandinfo
!info
command now displays info about the server (closes #261)
!ping add
now escapes the regular expression before adding
- Tournament list embed message that exceeds character limit is now split up
- Censor can no longer mention users (closes #222)
!forums
now sends a link to the Scioly.org forums (closes #284)
- Members can now run specific allowed commands outside of
#bot-spam
(closes #275)
!userfromid
to get a user from specified ID (closes #283)
- Bot statuses are now stored in array instead of long conditional (closes #174)
- Added the
!magic8ball
command (closes #272)
- Commands now work in DM's again (closes #278)
- Simple
!xkcd
command (closes #181)
!list all
now shows pages of commands separately (closes #187)
- Calling
!tag example
whereexample
is a legitimate tag will delete the original message (closes #274) - Commands run by members in channels other than
#bot-spam
will now not be processed and will direct the user to the appropriate channel. (closes #219)
- Typo in
!stealfish
(closes #273)
!nuke n
would throw an error if the user attempted to delete-n
messages whenn
was larger than the number of messages in the channel
!nuke
now accepts negative indexes to delete all but last n messages (closes #271)
- Deletion needed reports for tournament channels would occur despite tournament channels not needing to be deleted (closes #270)
- Documentation for
!tag
added (closes #265)
- When user sends link to external Discord server, a warning is now displayed explaining why the message was censored (closes #267)
!wiki pageName
wherepageName
is not a valid page name now shows proper error (closes #257)!wiki link pageName
was fixed to actually link topageName
(closes #256)- Wiki URLs now accurately link to page titles containing ":" or "/" (closes #161)
!tag
command, which references the Tags spreadsheet (closes #253)
!wiki
with no other arguments now sends link to the wiki homepage (closes #189)!wiki [page_name]
will now assume!wiki link [page_name]
(closes #231)!wiki
will now report too many arguments given when there are more than 7 arguments
- Edited message log fields are now capped at 1024 characters, which will hopefully result in many less error messages regarding overflowing edited message logs
!graphscilympiad
command added to make a graph of Scilympiad final results (closes #243)
!tournament
now ignores commonly used words to cut down on mistaken reports (closes #250)async def list()
command was renamed toasync def list_command()
in code to avoid overwriting built-inlist()
function
- Added
!rule
command for quickly displaying a rule (closes #200)
- Removed
!invites
command, which led to nothing
- Commandinfo for each command can now support flags (closes #29)
- Changed
CATEGORY_TOURNAMENTS
name to lowercasetournaments
for standardization
!wikipedia
terms with multiple words now do not need quotes (closes #241)!wikipedia
with no function term will now assume thelink
function (ex,!wp red bear
now assumes!wp link red bear
)
!help
with no other arguments now shows special message (closes #140)
#member-leave
messages now show if user was unconfirmed and when they joined. (closes #237)
- Added
!rand
command to generate random numbers (closes #199)
- Added
!resultstemplate
command to make a results template from raw Scilympiad results (closes #244)
- Bot now uses Intents
- Fixed ping issues with censor (closes #222)
!vc
now works for#games
(closes #245)
- Fixed typo in the name of "They / Them / Theirs" role (closes #240)
- Tournaments list showed channels opening in 0 days.
- Global variables for server variables (such as the names of all roles and channels) (closes #232)
- Requested tournaments list now uses middle dot symbol rather than dash to separate command and number of votes (closes #233)
!list
now shows commands in alphabetical order (closes #235)
- Tournament list is formatted cleaner (closes #230)
!pronouns
help message is now formatted cleaner (closes #142)
- Member leave messages no longer mention users, as this can break after user has left the server (closes #229)
#server-support
mentions renamed to#site-support
!mute
,!ban
, and!selfmute
now display times in Eastern time.- Tournament voting commands are now shown next to proposed tournament channels.
!me
called with no arguments now deletes original message.!list
fixed for regular members.
- Log member leave events to
#member-leave
channel.
- Hotfix for
!selfmute
being broken for all members.
!selfmute
now sends an error message when staff members run the command, as the command will not work for them.- Messages needed to mute for caps changed from 6 to 8.
- Added the
!graphpage
command to assist in graphing wiki pages. For example,!graphpage "2020 New Jersey State Tournament" Y 1 C
to graph the Division C chart for that state tournament.
- Updated
.gitignore
to avoid including.svg
files in version control as they are often temporary files.