Releases: kaesekaiser/zephyrus
The Great Refactor
I've been working on Zephyrus for a long time. So long that a lot of his codebase still reflects misconceptions I had or beginner pitfalls I fell into while first learning Python over 7 years ago. Over the years, I've been steadily cleaning these up, but as a self-taught programmer I'm constantly learning things about the language that I probably should've learned a long time ago.
In particular, I only recently realized that importing the same module multiple times doesn't cause it to be re-initialized multiple times. In retrospect, this is really obvious and I'm not sure why I ever thought it wasn't the case, but it impacted the way I structured this project from the very beginning. Previously, I had the entire main codebase set up as a linear chain of imports from one file to the next, with only some less-used functions sequestered to their own separate files outside the chain. I wanted the Zephyrus bot object to be shared throughout all files containing command info, to make sure nothing was lost along the way, and that there weren't multiple Zephyrus objects trying to initialize themselves at the same time.
To put it plainly, this was ridiculous, messy, and wholly unnecessary. The discord.py
module includes an object called a Cog which can contain bot commands without being dependent on a pre-existing bot object. These Cogs are then loaded onto a bot object after initialization, and the bot can use all commands contained therein as normal. I had previously avoided use of Cogs for a variety of reasons, but in light of this discovery, I sat down and refactored essentially the entire codebase to work using Cogs, and reorganized the import hierarchy into something much cleaner and less bloated (commit 1bfe377). This included moving several shared classes and functions into their own dedicated files, as one would expect, rather than lumping them into a file nebulously called startup.py
(which no longer exists). The commands themselves are by and large unchanged, but altogether, I think it makes the project feel a lot cleaner.
Most of the other changes since the last release are minor bug fixes or behavioral tweaks. The only other notable change is the addition of z!tcgp
, a command which lists information about cards in Pokémon TCG Pocket.
The Cloud Update
This update is less about the software behind Zephyrus and more about the hardware. I'm upgrading from a Raspberry Pi that sits on the corner of my desk to a cloud-based distribution platform! This should come with several notable performance improvements, and it also makes the project feel a lot more legitimate.
I'm also changing Zeph's account! Thanks to Discord's busted verification policy, I can't add Zephyrus to any more servers, ever, so I'm switching him to a fresh account: 2ephyrus (pronounced [ˈtwɛ.fɹ̩.əs]). Granted, I'm almost certainly changing the new account's name back to Zephyrus as soon as this release goes out, but I think 2ephyrus is funny.
Anyway, enough about that. Changes since last release:
- Added
z!pokewalker
, a brand new minigame - Added
z!pk catch
- Added
z!pk raid
- Added
z!pk learnset
- Stylization tweaks to most
z!pk
sub-commands - Deprecated
z!pinyin
andz!jyutping
due to an error - Added command usage stat tracking
It seems like a relatively minor release, but the hardware + account changes are more than enough to merit the start of a brand-new era. It's Zeph 3.0, babey! Happy New, uh... Month.
The Great Version Changeover
Honestly, at this point, it's been almost two years since the last named Zephyrus release. There have been about 80 commits since, most of which have been minor bugfixes, until recently:
- Updated Zephyrus to Python 3.9.
- Switched to v2.1 of the discord.py module, granting access to several of Discord's newer features (including threads).
These two changes merit a named release on their own in my eyes. Fitting that this should be version 2.9. I also had to literally factory reset my Raspberry Pi in order to get the new versions to work, so I think it's a big enough deal.
Other notable changes made in the last two years include:
- Added the Generation VIII and IX Pokémon to
z!pk dex
. - Changed
z!dex
to a redirect forz!pk dex
. - Revamped
z!p jobs
to include a new self-contained job-loading and plane-launching system. - Added month and year inputs to
z!remindme
. - Added a Connie-like X-SAMPA interpretation option to
z!sconfig
. - Added
z!hug
. - Added
z!coinflip
. - Added
z!chess
. - Added
z!esearch
. - Added
z!yesno
.
Many bugs and additions and changes are likely yet to come, and I'd like to go back and clean up some of my older code to take advantage of Python 3.9's new features (walrus operator my beloved <3), but this is the most picturesque time for a named release. This is the new version of Zephyrus.
2021 Update
Zephyrus, like all of us, has gone through a lot in 2020. In particular, he's now being used by about two thousand more people, so I've a much bigger collection of unintentional beta testers, and I've been making a lot of additions, changes, and removals. It's also just been a while since I put out a named release, and New Year's seemed like a nice time. Some notable changes:
- Added
z!sconfig
, which allows for some server configuration options, including welcome messages and custom prefixes - Added
z!syntaxtest
,z!rolemembers
, andz!randomword
, which were lifted from the now-defunct bot Leonard - Added
z!selfroles
- Added
z!remindme
, which is now probably Zephyrus's most-used command - Added
z!weather
- Added
z!age
- Added
z!feedback
, to lower the number of pings I woke up to in the morning - Added
z!counter
andz!fe3h
, which are mostly only useful to me, in specific cases - Zephyrus will now H at you if you h.
- Removed
z!translate
,z!flagsquare
, and the three now-unnecessary Narahlena-related commands - Numerous bug fixes, performance improvements, and back-end cleanups
Also, while writing this release, I noticed that I misspelled the name of a deprecated command on version 2.7 as z!hueshit
, and I think that's hilarious. It's 2021. Have a good night.
Conversion Update
The main thing contained within this update is a massive (and ongoing) overhaul of z!convert
, plus a few minor command changes around the board. It was time for a new version.
z!conv
now allows for derived units (e.g. m/s^2), and has a much larger selection of built-in units to draw from - mostly SI derived units. I'm also planning to add a way to implement your own custom units, since Zephyrus is present in several conlanging/worldbuilding servers.- Temperature conversion has been moved to its own command,
z!tconvert
. - On the back-end, most of the conversion functionality has been moved to its own file,
utilities/convert.py
. z!hueshit
andz!invert
have been removed. I didn't like them and they were gross and no one used them.z!base
has been added.- Zephyrus salutes back when pinged with "o7".
Narahlena Update
This update brings a bunch of sort of smaller things. It's not a particularly cohesive update, and in fact I'm in no way done with the Narahlena-related commands, but I felt it was about time to mark a new version.
- The addition of
z!nln
andz!ndict
, which integrate my conlang Narahlena into Zephyrus.z!narahlena
was already there to help me input Narahlena text, but these two commands are yet more useful. z!p search
has been added, plus a few general bug fixes and quality of life improvements withinz!planes
.- Like last time,
z!jyutping
,z!yale
,z!pinyin
,z!simplified
, andz!traditional
have been changed to return plain text instead of embeds for ease of copying on mobile. z!wordlist
has been added to make the word games easier.- Zephyrus can hug you now. Ping him with the 🤗 emoji. Do it.
The User-Friendliness Update
A lot of the work recently has revolved around just making the bot easier and more intuitive to use, and I'm still working on it. This felt like a nice point to publish a release, though, and I'm changing the way the bot checks its version, so it's good timing.
- Several important user-friendliness updates for z!planes, including a lot of shortcuts for the subcommands,
z!p new
,z!p buy
, a reformatting of the help screen, inclusion of minimaps for airports, a few subcommand format changes, and a couple other things I'm probably forgetting. z!help
has also been reformatted to be more informative, and a good bit of the code behind it has been rewritten to take advantage of some native attributes of commands.- A couple other minor changes have improved the functionality of some already existent commands including
z!wiki
,z!foreignwiki
, andz!epitaph
. z!caesar
.z!rot13
.z!vig
, andz!devig
have been rewritten to return plain text rather than embeds for ease of copying on mobile.- A few "admin" commands have been added to better allow me to take advantage of Zephyrus, and all-in-all a good bit of backend code has just been made nicer.
Eval
adding the eval
command, which just runs the Python eval
function on the input.
SAMPA
Adding the ability to translate X-SAMPA into the International Phonetic Alphabet, as well as implementing the new commands traditional
, simplified
, narahlena
, and factors
.
Factors
Adding z!factors
, which returns the prime factors of a given integer.