I’ve discussed it before, but I’m not a big fan of bots that give “levels” or “experience” for sending messages. The most common way of handling this is just to simply give a set (or slightly-varying) amount of points for sending a message. Sometimes there is a cooldown, sometimes there is a minimum message length, sometimes there is a max number of points per day or time period. However, all of these systems suffer from the same problem: it encourages users simply to send messages, rather than contribute positively to conversations. I’m sure that some readers out there are thinking “yes, I want as much activity as possible,” but from my experience, not all activity is good activity.
~ Encourage users to interact with the server
~ Encourage users to contribute to conversations with relevant questions and comments
~ Give proper representation to positive contributors on the server
~ Encourage users to spam
~ Encourage users to say irrelevant or ‘filler’ messages
~ Encourage users to try to game/cheat the system
~ Interrupt conversations with “level-up” messages
~ Interrupt conversations with unecessary reactions or DMs
~ Require extra work/learning on the user’s part
So, how do other social media services solve this problem? Well, let’s take a look at a few services that have a comparable problem, and see how they tackle it.
While reddit doesn’t have the same structure to a normal chatroom, it does have a good way of showing a user’s experience, in the form of karma. Karma is gained from users up-voting your messages, and lost from users down-voting your messages (below zero). This becomes a fairly accurate representation of contribution, as meaningful contributions will likely get up-voted and gain karma, while pointless contributions or spam will result in the loss of karma. Additionally, it becomes more valuable to provide useful replies than it does to provide many meaningless replies. In short, karma is a good measure of quality over quantity.
Of course, there are flaws to this system as well. For example, the karma system relies on the fact that every message has its own vote counter, which is not very feasible for (and would be obtrusive to) conversations in Discord. Even if some sort of reaction system were used, it would still require extra work by the end users, and they would need to learn how to use this system.
Facebook and Twitter both feature a similar system to Reddit: they provide the ability to “like” messages and posts. These two also provide a “share” (or “retweet”) functionality to further promote specific messages. Users can “follow” other users to see more posts by those users, which provides a decent metric of who contributes to the site. This system requires even more input from users than Reddit, as not only do people need to like/share individual posts, but they need to follow other users to produce the contribution score. This is not very applicable to a chatroom format with conversations.
I know what you’re thinking: “League of Legends isn’t even social media, it’s a game!” That’s true, but it does have a contribution system worth discussing. At the end of every match, each player is presented with a prompt to award ‘honor’ to one player on their team (or to nobody). This is nonintrusive during the game, yet still provides a decent indicator of who was friendly and cooperative during the match. Players are incentivized to be pleasant because players that receive a lot of honor get additional badges on their profile (and also because - in general - friendly, cooperative players are more likely to have better teamwork and thus win more).
Again, there are issues with this system as well. League of Legends has strongly-defined matches; there is a clear difference between being in a match and being in the post-match lobby. Conversations don’t always have as clear of a structure, as particular participants may drop out of a conversation at any point, new participants can join at any point, and conversations can slowly change topic over time without any ‘end.’
Calling StackExchange/StackOverflow a ‘social media’ is a bit of a stretch, but the system used is still related. On SE, users have a reputation score that increases when they perform certain actions (asking or answering questions), and when their questions or answers get upvoted. Additionally, there are badges that users can receive for various actions, such as having a top-voted answer. Having more reputation builds power on the site; minimum reputation thresholds are needed for certain actions (commenting, marking as duplicate, deleting, etc) which helps protect the system from spam and people trying to cheat the system. A combination of reputation and badges is a good indicator of a user’s contributions to the site. Unfortunately, this system can’t be “ported” to Discord, as it works for the question-answer format, not the open chat-room format. Additionally, similar to Reddit, each message would need its own vote-counter to accurately reflect which messages are useful.
Drawing from things that the provided examples have in common, I’ve determined some elements that should be present in a solution.
The first step in the solution is to divide the ongoing conversation into meaningful chunks. This immediately raises a few issues. Conversations can last for very long periods of time, with the participating members changing throughout. Just because someone starts talking about a topic doesn’t mean that they will be active for the entire duration that people are talking about it. Also, conversations can change topics over time, and detecting when the topic has changed is a very difficult thing to tell, especially for a bot.
So, instead of trying to break the entire conversation up into chunks, we can split it by each user. When a user sends their first message in a conversation, the bot considers the user to be “active” in the conversation. When they have not sent a message (or been “typing”) for more than 10 minutes, the bot will consider them “inactive,” and then review their contribution to the conversation while they were active.
This solves a few of the goals. Namely, it prevents interrupting the conversation, as it only sends the user notifications after they have finished participating.
At some point, we need to take into consideration how much a person has typed. As already stated, just looking at number of messages sent or length of messages is a poor indication of contribution, but we can use it as a starting point. Specifically, we can look directly at the number of characters they sent, with a few caveats:
~ Emotes, pings, and channel/role mentions get shortened to their visible text. These things contain IDs that take up 17-20 characters, but aren’t actually typed by the user nor are representative of what the user typed.
~ Some math: the average typing speed is around 40 words per minute. The average typing speed of a user on Discord is likely a bit higher than that, so we’ll go with 60 wpm to be safe. The average length of a word is between 4 and 5 characters (varies by language), usually closer to 5. With a space between every word, we’re looking at around 6 characters “per word” and 60 words per minute, or 360 characters typed per minute. Of course, since this is a conversation, we’d expect any single user to provide only one-half of the conversation, or less, leaving us at 180 characters per minute. We’ll bump that up to 200 characters (to account for edge-cases and the occasional copy-paste) as our upper-limit for how many characters a single user should be able to type when participating in a conversation.
~ Next, we want deleted messages to count against the total. Whether a message is deleted by a mod or by the user, it likely means that it did not contribute to the conversation, so deleted messages will subtract characters from the total, with an additional 10% taken off. So, if a user sent 3 100-character messages, and deleted one of them, their total would be 300 - (100 * 1.1) = 300 - 110 = 190. (Note: if these 3 messages all happened within 1 minute, using our previous cap would limit the starting number to 200, and then after the subtraction would leave the user at 90).
~ Finally, a flat amount should be subtracted from every message. This is to subtlely discourage people from breaking up their thoughts into a lot of small messages. This could be 5 or 10 characters per message (one or two words).
[Sidenote: These numbers and times are estimates and would need to be tested and tweaked if this bot were to actually be developed.]
Alright, so we have a user’s messages from a conversation, as well as the time they joined (became active) and left (became inactive). We also have a character-count score for what they typed. What next? Well, we’ll want some minimum contribution required to be able to gain “points,” such as at least 2 messages and at least 50 characters. If a person reached this threshhold, when they are considered “inactive,” the bot will internally award them points for the number of characters typed (after the changes listed in the Message Counting section). If they received some incentive (more on this later), they will receive a DM explaining what they have received.
Also, either randomly, or dependent on the amount they contributed, they will be sent a DM with a poll, asking them about the other people they conversed with. They will be given the option to select one other user (or nobody) that they believe contributed positively to the conversation. If they do, both them and the other user will receive bonus points for their effort. This poll can also be ignored with no negative side-effects to earned points, but will reduce the chance of getting such a poll in the future.
Why should people even try to gain points? The administrators of a server should be able to set incentives at certain point levels, such as:
~ Access to more channels
~ Colored roles
~ Hoisted roles
~ Roles with additional Discord permissions (External Emojis, Upload Files)
Some other “custom” incentives might be:
~ Ability to vote on message deletion (if X many people with this “permission” add a trash-can emoji to a message, delete the message)
~ Ability to “rep” other users once to give them a point multiplier
Something that this entire system relies on is that non-contributing messages need to get deleted. Mostly, this can be handled by the moderators and auto-mod bots, but I would strongly-encourage (or require) that the ability to vote on message delete (outlined in Incentives above) be available to users of a certain point count.
~ Break ‘conversations’ up per-user, and do calculation once a user has stopped participating
~ Count characters sent to determine points, with minimums, maximums, and other requirements. Use these character restrictions to value quality over quantity (like Reddit)
~ Offer incentives for reaching certain point counts
~ Occasionally give a survey after a conversation for bonuses (like League of Legends)
~ With enough points, allow user-based moderation to make sure pointless messages get deleted (like StackExchange)
No. This is far from perfect, and I’m not even sure a perfect system exists. More importantly, even if this type of bot did exist, I’m not sure it would actually achieve the goals I listed earlier; it might do a bit better than the current “level bots,” but I don’t know if it would help produce more real, meaningful conversation. If you have ideas for how to improve this system, please leave a comment with your ideas!
Probably not. I might test something similar on a server at some point, but I don’t see myself making any kind of public version of this. I have enough bots to work on, and I’m still not completely satisfied with the solution I’ve come up with.
Go for it! If you like what you’ve read here and decide to use it, please give me credit for any ideas you use, and come tell me about it! I’d love to see someone solve this problem!
Welp. It’s finally here.
A few months ago I decided to rewrite (or, mostly rewrite) my Discord moderation bot, Vortex. It wasn’t so much that there was anything wrong with it, but rather it just was sub-par compared to the potential it had. Vortex was originally built to fit very specific needs; namely banning mass-mention spammers and deleting advertisements. However, it lacked a lot of features that were present in another bot of mine, Spectra, as well as plenty of other moderation bots. Its logs were minimal (only the bot’s actions and the bot’s command usage), and the moderation commands were simplistic as well. In short, while it fits the niche needs at the time, it was far from being a complete and standalone moderation tool.
Going into the rewrite, I had a clear goal: Vortex should be the only moderation bot a server needs. This meant adding a lot of features (including a lot of features that I had previously written or designed for other bots) such as message logs, reason-able moderation logs, server logs, custom prefix, and more forms of automatic moderation. My two years of Discord server moderation helped build a knowledge-base of what tools are useful, and what kinds of configuration are needed to be flexible for different servers.
One of the biggest hurdles in redesigning the automod was the punishment system. In the original bot, each form of automod (max-mentions, advertisement prevention, etc) had its own punishment. Unfortunately, this made things somewhat ugly on the backend (it took a lot more code to add a new feature) as well as meant the bot as a whole had a lack of cohesiveness. The solution that I decided on was a strike system: each form of automod would assign a configurable number of strikes, and punishments could be assigned to certain strike counts. For example, a server might decide on a “3 strikes you’re out” system, where 1 strike was simply the strike as a warning, 2 strikes was a kick, and 3 strikes was a ban. They might decide that posting advertisement constitutes 1 strike, whereas posting a referral link is 2 strikes. This example is just one of a huge number of possibilities that can be tailored to each individual server.
Yesterday, I completed the transition to move all of these new changes onto the old bot, and luckily, everything went smoothly: no major errors, and the old settings transformation was clean as well. There’s still more features I want to add, and a few minor (quality-of-life) things I want to fix here and there, but overall I think that it’s pretty solid! If you’re interested in checking out Vortex for yourself, you can take a look at the wiki here.
Ask any moderator of a large server, and they’ll tell you that easily one of the toughest things to track down, and one of the most rampant issues, is getting rid of users that advertise in Direct Messages. And possibly the worse part: a lot of these users don’t realize that doing this is breaking the terms of service.
Let’s break it down. First, if you haven’t read the terms of service, I’d highly suggest reading it here: https://discordapp.com/terms. Specifically, let’s look at a one line copied directly from the ToS:
You agree that your use of the Service will not include sending unsolicited marketing messages or broadcasts (i.e., spam).
Next, a few definitions:
not asked for; given or done voluntarily.
the action or business of promoting and selling products or services, including market research and advertising.
This means that if you send a message that promotes or advertises anything (yes, including a Discord server), and the other person didn’t ask for it, you’re breaking the Terms of Service. So, if you’re sending invites to random people (or servers for that matter) that haven’t asked for an invite, it’s breaking the Terms of Service.
If you see someone sending an unsolicited marketing message, it is highly encouraged that you submit a report to https://dis.gd/contact with the user’s ID and the ID of the message they sent. You can find these IDs by enabling Developer Mode in your appearance settings and then right clicking their username (for their user ID) and the message (for the message ID).
Finally, yes, this is a repost of my original reddit post, which can be found here.
This guide is kept up-to-date as Discord and available resources change!
Hello! I’m jagrosh#4824! I’m writing this guide to try to help new server owners set up and grow their servers, which is a commonly-requested topic. It’s very easy to go about this the wrong way, so it’s best to be prepared and make smart decisions so that your community can flourish!
You might be wondering: why am I qualified to write this guide? Excellent question! Well, I’ve created several successful Discord servers, including the Monster Hunter Gathering Hall (70,000+ members, game community), a bot support server (7,500+ members), and two bot community servers (25,000+ members and 20,000+ members). I also help moderate several large servers, and I am a Discord partner. Finally, I am very familiar with the technical aspects of Discord, which are useful for setting up servers and permissions.
This is an important question. Just because you can make a server doesn’t mean you should. When you’re making your server, make sure to ask yourself these questions:
If you’ve answered these questions according to the guidelines, you’re ready to start setting up the server!
This section is still in-progress and should just be used as a basic guide
The key to good channel structure is keeping important information easy to find, and categorizing everything as appropriate. An example of a structure for a “Minecraft Redstone” server might be:
⌵ Information # rules # announcements # contests ⌵ General # lobby # off-topic 🔊 Voice ⌵ Projects # survival_redstone # creative_redstone # command_blocks # map_sharing ⌵ Mods # mod_chat # mod_log
&permissions=NUMBERSsection of the invite link.
First of all, I’d like to describe what I mean by advertising. I don’t mean trying to get random users to join your server. I know that a lot of people are desparate to increase their member count, but quality is always more important than quantity. You only want people to join if they are actually interested in the server. This will lead to continued success and high-quality discussion. When I discuss advertising, the goal is to make it so that people who are looking for a server about your topic will be able to easily find your server!
These are just some generic tips that usually correlate with success.
Probably not a good idea. You don’t need any game bots. Please don’t use bots as a means to increase server activity. These bots can be lots of fun, but they are almost never related to the topic of the server.
Hey there! Thanks for reading what I have to say.