2021-09-02 // 1067 words // 5 minute read

Discord kicks around its developers and users (again)

Recently, the solo developer of the discord.py project has announced that they are stepping down and that the project will no longer be maintained. This is due to a number of controversial decisions by Discord, that will have wide-spread consequences on the Discord bot development community.

Glossary

  • Application Programming Interface (API): In the case of Discord development, this refers specifically to the Discord API, which is how bots connect to Discord.
  • Discord bot or just ‘bot’: A piece of software that sits on top of the Discord interface to enable interactivity and automation.
  • User bot: A bot running on a normal, non-bot account. These are not allowed by Discord but may go undetected, and are not subject to the restrictions normal bot accounts are.

How bots work

Right now, bots work by getting commands sent in the chat, and sometimes reactions added to messages. There is functionally no limit to how a bot developer can allow users to interact with their bot, and this has allowed for a huge amount of creativity. On the back end, the way that this system works is that the computer running the bot gets certain data from Discord. Right now, that data includes things like the members in a server, their roles and permissions, information about the server, like its channels, and, most importantly, the messages sent in the server. Whenever a message is sent to the server, the bot checks if it’s relevant to the bot. How the bot does this is up to the developer, but most use a prefix and arguments. For example, a bot with the prefix ‘%’ would interpret the message ‘%kick @person’ as:

  • ‘%’: this message is for me

  • ‘kick’: the command is ‘kick’

  • @person: the person to run the command ‘kick’ on is @person.

The changes

Recently

Recently, Discord added some limits to what bots can do, in an attempt to prevent abuse. We’ll get back to this later. Included in these changes are limitations on bots, most notably that to join more than 100 servers, a bot’s developer must be verified by Discord. This verification process includes a questionnaire and requires you to upload a scan of government-issued photo ID to Discord, despite developers being promised verification would consist of nothing but a checkbox and a few simple questions. Additionally, to obtain lists of members, their activity, and their status, you need to enable privileged intents. These are restricted to bots in under 100 servers, or those who have undergone verification separate from that required to join more than 100 servers. It’s entirely up to Discord if your bot will be given permission to see this data or not, and the verification process can take weeks.

In the near future

Discord is making massive changes to how bots can interact with users. Soon, bots will have to undergo even more verification to read messages if they’re in more than 100 servers. The suspected intent of these changes is to push developers to the new slash commands. These commands are integrated natively into the Discord apps, improving UX for users. However, they are extremely limited in how they can be used. Most importantly, they pass almost no data back to the bot. The bot doesn’t even know where the command was run. I won’t get into the exact specifics of how limited this new system is, but suffice it to say that most bots’ functionality will be significantly degraded by this change.

dis.cool

Some suspect a major cause of these changes was a service called dis.cool. The service used user bots to join servers and harvest data about their members. They then made all of this data publically available. There was a (reasonably) large amount of outrage about this:

There have been other scrapers before dis.cool, and probably many more after it, but for whatever reason, dis.cool made big waves. Discord was under a lot of pressure to fix the problem, and these changes are their solution. The problem is that these changes do nothing to prevent dis.cool style scraping. These changes only affect bot accounts, not user bots like those used by dis.cool.

Mistreatment of developers

Since the very early days of Discord bot development, Discord has been mildly adversarial towards bot developers. The extent of Discord’s communication with bot and library developers was through an unofficial server, made by a library developer. When Discord made changes to the API that affected libraries, their developers found out through bot developers who had been added to a different server. When invited into a meeting to discuss the upcoming changes, library developers were told to sign an NDA. Changes and quality of life upgrades that library developers asked for took months or years to implement if they were implemented at all. Under the most recent round of changes, many bots will be broken and it could take months or years to bring them back to their original functionality. Overall, most developers are coming away from this situation with a bad taste in their mouths.

The Backlash

Understandably, a lot of developers are quite upset that their bots may be broken. Even more upset are the developers who make the libraries these bots use. This has culminated most recently in the termination of one of the most influential Discord bot libraries. Discord.py, a tool to develop Discord bots in Python, is being sunsetted. The solo developer of the project, who is a medical professional working on it in their free time, says they are completely burnt out by the latest round of changes. The loss of discord.py leaves a gaping hole in an already damaged community.

Read more