We're moving to Nextcord
Farewell Novus, hello Nextcord!
If you've seen UniChat's announcements channel, you would know that we're porting Unifier to use Nextcord instead of Novus.
Novus is the Discord library for Python forked from discord.py we've been using for quite a while for both Unifier and Unifier Micro. But soon, we'll be using Nextcord, also forked from discord.py, as our Discord library.
The problem with Novus
Before I say anything, I'd like to say that Novus is actually quite a nice library. It has everything I'd need to program a Discord bot, including ActionRows in MessageComponents that just make implementing UI features like buttons and dropdown menus so much easier.
But Novus is already past its prime. It's been receiving less updates, and we've started to see that it's been falling behind other forks like Pycord and Nextcord. We've also started to have some problems with working with application commands (slash and context menu commands), as server-specific commands would register as global commands for some reason, that whenever we installed Novus we'd need to edit a file so it uses the v0.2.3 command registration system. Although this doesn't affect Unifier, it does affect my other bots, which is a problem.
Why we chose Nextcord over Pycord and discord.py
We were stuck with three options: Nextcord, Pycord, and discord.py, of which we chose the former.
Although discord.py was once discontinued, it was back into full swing again. We could've just used this instead, and we've tried to use it instead of Novus at some point. However, there was a drawback with discord.py, that would make Unifier pretty much incompatible on discord.py without sacrificing the cogs structure we've come to know and love: context commands could not be used in a cog.
So we went to Nextcord and Pycord, two discord.py forks just like Novus. These were the more up-to-date and active forks compared to Novus, which is why we've decided to consider these two as our finalists.
We could've gone with Pycord instead for having more features, but they were mainly features we didn't need. Besides, Pycord did change a few things compared to discord.py, although they're just a few it's enough to make us do more work when porting Unifier away from Novus. Therefore, we decided on using Nextcord as our Discord API library instead.
Problems we had with Nextcord, and how we solved them
The first problem with Nextcord is that it's called nextcord. Sure, Nextcord is a cool name, but we had to import nextcord instead of discord in Python, because they changed the library name. This was just a minor inconvenience though, and we sorted it out quickly.
Another problem is that there was no ActionRow class in Nextcord. Although we could've just used the row
positional argument for the Button class to implement rows, we'd need to rewrite a LOT of things for this to work. Besides, using a more object-oriented approach for managing rows made more sense to me, instead of using some positional argument. So we decided to implement this ourselves to Nextcord by creating a new ActionRow class and extending the base MessageComponents class to support ActionRow objects, so we would need to change a lot less lines in our code to make UI components work on Nextcord with minimal issues.
After we made this ActionRow support script, we decided to license it under the MIT license instead of AGPLv3 license, because we thought it would be quite helpful for those that's moving over from Novus or just want a cleaner way to manage action rows, so we wanted to give them more freedom of what they can do with our code.
So...are we on Nextcord now?
Not yet! (We've been on Nextcord since July!)
Last updated