UnifierHQ Blog
  • Main Page
  • 🔧Technical
    • We're moving to Nextcord
    • Introducing Unifier Installer
    • Discontinuing Reaction Images
    • We're removing the identifier
    • We made Unifier 20x faster
    • Unifier evolved to (experimentally) support Guilded!
    • Unifier, meet Revolt!
    • Test the new Revolt Support extension
    • The story of Unifier/UniChat
  • 📦Releases
    • Unifier 3.9.0 (and 3.8.0) is here!
    • Now entering: Unifier v3
    • Unifier is open source now.
    • Unifier Micro: a light and open source global chat bot
    • Open sourcing our first version
  • ⛑️Safety
    • Followup: May 7 raid threats
    • The May 7 HYP raid threats
    • Our first security vulnerability
    • March 26: The first raid on UniChat, which we prevented
  • 💬Opinion
    • Our stance on Discord adding advertisements
Powered by GitBook
On this page
  • The problem with Novus
  • Why we chose Nextcord over Pycord and discord.py
  • Problems we had with Nextcord, and how we solved them
  • So...are we on Nextcord now?
  1. Technical

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!)

PreviousMain PageNextIntroducing Unifier Installer

Last updated 5 months ago

Although we're done porting Unifier over to Nextcord, we have a lot of things to do before we release this update as Unifier v2. We want to make Unifier feel more intuitive to use by implementing more Discord message UI elements into Unifier's commands, and add a bunch more features we want to add. If you're interested when we'll release this update, do consider joining our so you'll be the first to know!

Discord server
🔧
Page cover image