Demeter is a bot discord that identifies and quantifies the commitment of your members by assigning them reputation points.

Overview

Demeter Discord Bot

Demeter is a Discord bot that identifies and quantifies your members' commitment by assigning them reputation points.
This is a project made in my free time, without any financial purpose, you can do what you want with it, but I will not be responsible for anything.
This text is partially generated via an online translator, as I never had any English lessons, I won't be able to do better, but if you want to improve the writing, feel free.

Feature list

  • Reputation distribution via reaction/response Discord
  • Quadratic funding to redistribute reputation more evenly
  • DM-free captcha to protect your server and new members
  • Assign roles based on reputation
  • Move off-topic messages to another channel directly managed by trusted members of your community
  • Poll your community via reputation-weighted proposals
  • Reward directly or via proposal your most active members
  • Giveaway weighted by reputation or not
  • Mute a member via vote
  • Everything is saved on IPFS
  • Everything is customizable via a command on the Discord

Installation

Self-hosted(! Recommended !)

I designed the bot with a best-effort vision to reduce to the maximum the required maintenance.
For example, there is no database, regularly the local data are simply saved on IPFS(and one day on StarkNet ^.^ ).

To host the bot, you can simply create a Discord application, then in Bot activate all Intent, create an environment variable DISCORD_TOKEN with your Discord secret token.
To add the bot to your Discord, you can generate the link in OAuth2, then URL generator, select Bot with administrator permissions and applications.commands.

To save the data, we use web3.storage, you can create a free account on it, generate an API key and put it in an environment variable WEB3_TOKEN

And that's it! All that's left to do is yarn install and yarn run bot

Hosted by Nolan Vanmoortel (Please don't...)

Click here

First round

When you just added the bot to the server, no round starts, which means that nothing is running.
Before launching the first round, you can set the default configurations, the next rounds and the new users will inherit them.

All the configurations are explained below. Once you've done that, you have two choices.

You can load the history of the Discord since a given date.
/reputation fetch-history start-date:31/01/2021 will delete all the rounds, user reputations and config then re-generate them since that date.
This can take several hours if there are many messages to fetch.

You can use /round start-first if you want to start the first round now.

Reputation

Demeter is a Discord bot that allows you to have a self-managed community via a reputation system, meaning that each member can earn or help someone to earn reputation points.

These reputation points represent your involvement in the community.
They are used, for example, to assign you roles, vote on proposals, and for the moderation of the Discord, such as moving an off-topic message or censoring a member.

You gain reputation automatically when you receive a reaction or response to your message.
Hence, it is crucial to react to messages you like to reward the author.

When you react to a message, the author will only gain reputation at the end of the current round(14 days).

Reputation decay

At the end of a round, each member will lose between 5% and 20% of his reputation.
The more he has, the more he loses to avoid a gap between the most active and the others.

To avoid bots attacks, the reputation you can offer equals 5% of your total reputation.
The system will automatically bring the total back to 5% if you help others earn more than 5% of your current reputation.

x = reputation
m = min reputation decay(0.05)
M = max reputation decay(0.25)
s = standard deviation of active members(reputation > min reputation)
Formula reputation decay
Formula reputation chart
Example with a standard deviation of 50

Discord Quadratic Funding

In addition to this direct reputation gain, we use Quadratic Funding, which allows us to distribute a given amount of reputation by favoring the diversity of authors instead of simply taking into account the amount of reputation received.
Thus a person who has earned 1 reputation point from 100 people will receive more than a person who has received 100 reputation points from one person.

The amount allocated to Quadratic Funding is 100 reputation points in addition to the total amount that was burned at the end of the round.
This grant is weighted by the person's role and seniority who helps you gain this reputation to avoid bot attacks again.
A person who has just arrived will make you earn less than a member who has been active for 3 months.

Formula seniority
Example of seniority computation

Visualization

You can visualize directly in 3D the community engagement, you will need the link of the database /guild db-url.
The switch "manual/auto" will automatically jump to the next round.
The switch "all/active" allows to hide the members who were not active during the round.
The switch "animation/static" allows to activate or not the animations.
The switch "received/sent" allows to see the reputation received or given during the round by passing the mouse over the members.
Vizualize

Captcha

The bot provides a captcha without DM to reduce the risk of scams impersonating the bot.
You can type /button captcha to display the button that will offer the user to solve the Captcha.
The user will then have to find 3 times successively the emoji hidden in the image, he will be granted the captcha-role(/guild config captcha-role:@๐ŸฅšHumain.e).
Captcha

Role based on reputation

You can choose to add a role based on accumulated reputation automatically.
/guild config reputation-role-role:@๐Ÿง™sage reputation-role-min:300 will add the role " ๐Ÿง™ sage" to all members with over 300 reputation points(0=disabled).

Move off-topic messages

By creating custom emoji you can allow your members to move off-topic messages to the appropriate channel.
You must first define how many reputations are needed to move a message, for example, 200 /guild config reaction-transfer-reputation:200(0=disabled)
Then for each channel you can create a custom emoji that members will use to redirect messages, for example:
/guild config reaction-transfer-reputation::hs_bar: reaction-transfer-channel:#๐Ÿน-bar this emoji will redirect a message in the channel bar, with a custom emoji "hs_bar" like the one below.
hs_bar
As soon as 200 reputations have reacted with this emoji to the message, it will be transferred.

Reputation-weighted proposals

You can allow your members to start proposals.
For that, define the minimum quantity to start a proposal and the minimum amount for the vote to be valid and where to put the proposals with /guild config-2 min-rep-start-proposal:500 min-rep-confirm-proposal:2000 channel-proposal:#๐Ÿ“œ-proposition(0=disabled)
Start a vote with the following command:
/proposal start message:https://discord.com/channels/745336259194650788/834365660293365821/924067576743616574 duration:5
If you get 500 reputation points, a vote will be launched in ๐Ÿ“œ -proposition, it will then be necessary that this proposal gets 2000 reputation points within the 5 days for the vote to be considered valid.

It is also possible to offer reputation via a proposal by adding mint-user:@Charles mint-qty:500 to the previous command.

Pantheon

To reward a member who has made a significant contribution, it is possible by mentioning his work in the channel configured as the pantheon with the command /guild config channel-pantheon:#๐Ÿ…-panthรฉon channel-pantheon-enable:True.
People reacting with an emoji to this message will help the people mentioned earn reputation points instead of the message's author.

Mute

You can offer to your community to censor a user, just choose the amount of reputation needed via the command /guild config-2 min-rep-mute:100(0=disabled)
Then anyone can start a vote to mute for x minutes via the following command /proposal mute user:@Charles duration:5

Giveaway

You can run a reputation-weighted giveaway with the following command /giveaway message:https://discord.com/channels/745336259194650788/834432995972349973/925382608970465341 weighted:True
A member who reacted to this message will be selected.

Commands

Guild

/guild config admin-role:@๐Ÿ‡ซ๐Ÿ‡ท DF-Admin
Users with this role can perform specific privileged actions such as changing the bot configuration or granting reputation to a member.
If no role is defined only Discord administrator this permission

/guild config captcha-role:@๐ŸฅšHumain.e
This role is added when the user has passed the captcha verification.

/guild config default-reputation:1
Each new user will receive 1 reputation and can't go bellow this amount.
This configuration will be applied to new rounds.

/guild config discord-matching:100
At the end of each period, we will distribute 100 reputation in addition to the total reputation burn during this round via a Quadratic Funding formula.
This configuration will be applied to new rounds.

/guild config duration:14
Each round has a duration of 14 days, reputation is distributed at the end of each round.
This configuration will be applied to new rounds.

/guild config min-decay:0.05
At the end of each round, all members will grant 5% of their total reputation.
If you grant less during a round, we will burn the difference.
This configuration will be applied to new rounds.

/guild config max-decay:0.2
The further the user moves away from the standard deviation of reputation, the more reputation he will lose at the end of each round, at most 20%.
This configuration will be applied to new rounds.

/guild config role:@๐Ÿง™sage role-multiplier:2
When we compute the reputation matching(Quadratic funding) at the end of each round, we take several parameters to determine the amount of reputation granted to you.
The diversity and amount of reputation received, the seniority of the donator but also the role of the donator.
This configuration will be applied to new rounds.

/guild config channel:#๐Ÿน-bar channel-multiplier:2
Based on the channel, you can apply a multiplier to your reaction and reply grant.
This configuration will be applied to new members and rounds.

/guild config reaction:๐Ÿ˜ reaction-grant:1
When you react to a message, you will automatically grant a determined amount of reputation based on the emoji you choose.
This configuration will be applied to new members and rounds.

/guild config reply-grant:2
When you reply to a message, you will automatically offer 2 reputations to the message's author.
This configuration will be applied to new members and rounds.

/guild config channel-pantheon:#๐Ÿ…-panthรฉon channel-pantheon-enable:True
When a channel is set up as a pantheon, reactions will offer grants to the people mentioned instead of the author

/guild config reaction-role-message:https://discord.com/....415234428958 reaction-role-reaction:๐Ÿ˜ reaction-role-role:@๐ŸฃApprenti.e
When you react with ๐Ÿ˜ to the message url you provide, you will automatically be assigned to this discord role.

/guild config reputation-role-role:@๐Ÿง™sage reputation-role-min:100
Set a discord role based on your reputation

/guild config reaction-transfer-reputation:200
Allow your member to transfer a message to a different channel by using a custom emoji(0 = disabled)

/guild config reaction-transfer-reputation::hs_bar: reaction-transfer-channel:#๐Ÿน-bar
Transfer a message if more than X reputation use this emoji
hs_bar

/guild config-2 min-rep-start-proposal:500 min-rep-confirm-proposal:2000 channel-proposal:#๐Ÿ“œ-proposition
To propose a vote, you need to gather 500 reputations(0=disabled).
Once having collected the minimum reputation required, the proposals will be proposed to the vote in this channel.
For a proposal to be considered valid, 2000 reputations must be collected(0=disabled).

/guild config-2 min-rep-mute:100
To mute someone, you need to gather 100 reputations.(0=disabled)

/guild db-url
Print the database URL for this guild

/guild config-2 blacklist-user:@Jean blacklist-enable:True
Add or remove someone from the blacklist, user in blacklist will never be added to the system(eg: useful for bot).

Round

/round config round-shift:1 apply-guild-default:True
Apply the current default guild config to 1 round in the past(by default = 0, 0=now)

/round config round-shift:0 default-reputation:1
Each new user will receive 1 reputation and can't go bellow this amount.

/round config round-shift:0 discord-matching:100
At the end of each period, we will distribute 100 reputation in addition to the total reputation burn during this round via a Quadratic Funding formula.

/round config round-shift:0 duration:14
Each round has a duration of 14 days, reputation is distributed at the end of each round.

/round config round-shift:0 min-decay:0.05
At the end of each round, all members will grant 5% of their total reputation.
If you grant less during a round, we will burn the difference.

/round config round-shift:0 max-decay:0.2
The further the user moves away from the standard deviation of reputation, the more reputation he will lose at the end of each round, at most 20%.

/round config round-shift:0 role:@๐Ÿง™sage role-multiplier:2
When we compute the reputation matching(Quadratic funding) at the end of each round, we take several parameters to determine the amount of reputation granted to you.
The diversity and amount of reputation received, the seniority of the donator but also the role of the donator.

/round config round-shift:0 channel:#๐Ÿน-bar channel-multiplier:2
Based on the channel, you can apply a multiplier to your reaction and reply grant.
This configuration will be applied to new members.

/round config round-shift:0 reaction:๐Ÿ˜ reaction-grant:1
When you react to a message, you will automatically grant a determined amount of reputation based on the emoji you choose.
This configuration will be applied to new members.

/round config round-shift:0 reply-grant:2
When you reply to a message, you will automatically offer 2 reputations to the message's author.
This configuration will be applied to new members.

/round start-first
Start the first round(Please read installation section !)

User

/user config apply-guild-default:True
Apply the current default guild config to you

/user config channel:#๐Ÿน-bar channel-multiplier:2
Based on the channel, you can apply a multiplier to your reaction and reply grant.
This configuration will be applied to new members and rounds.

/user config reaction:๐Ÿ˜ reaction-grant:1
When you react to a message, you will automatically grant a determined amount of reputation based on the emoji you choose.
This configuration will be applied to new members and rounds.

/user config reply-grant:2
When you reply to a message, you will automatically offer 2 reputations to the message's author.
This configuration will be applied to new members and rounds.

/user unmute user:@Nolan
Unmute someone (admin only)

Reputation

/reputation top start:0
Print the top 20 member by their reputation from the start position

/reputation grant-list user:@vitalik round:0
Print for one user their grant received/sent during x round in the past(0=now)

/reputation grant-add user:@vitalik amount:2
Grant a determined amount of reputation to this user

/reputation grant-set user:@vitalik amount:666
Update the amount of reputation granted to this user

/reputation fetch-history start-date:31/01/2021
Fetch the discord round history, this will erase all rounds !(Please read Installation section !)

/reputation recompute-reputation use-guild-config:True
Recompute the reputation without reloading grants, you can use the guild settings instead of each round settings.
You can use this command to fine tune discord matching, decay, default reputation etc.

Button

/button captcha
Print the captcha button

/button guild-info
Print the button to show the guild configuration

/button user-info
Print the button to show the user configuration and grants

Proposal

/proposal start message:https://discord.com/channels/745336259194650788/834365660293365821/924067576743616574 duration:5
Start a proposal (Please read the Proposal section)

/proposal start message:https://discord.com/channels/745336259194650788/834365660293365821/924067576743616574 duration:5 mint-user:@Charles mint-qty:500
Start a proposal to mint reputation to a user (Please read the Proposal section)

/proposal mute user:@Charles duration:5
Start a vote to mute someone(Please read the mute section)

You might also like...

This bot is a cool Discord bot made in discord.js using Node.JS

This bot is a cool Discord bot made in discord.js using Node.JS

Anti-Crosspost Discord Bot This bot is a cool Discord bot made in discord.js using Node.JS. It detects when a user cross-posts a message in multiple c

May 31, 2022

New base bot WhatsApp ๐Ÿˆด bukan self bot lagi atau buka bot yang bisa di pakai oleh bot sendiri ๐Ÿ˜Ž

New base bot WhatsApp ๐Ÿˆด bukan self bot lagi atau buka bot yang bisa di pakai oleh bot sendiri ๐Ÿ˜Ž

Installation โ€ข Thanks to โ€ข Donate Official Group Bot โ€ข Settings Instalasi Heroku Buildpack Click the deploy icon below ! heroku/nodejs https://g

Feb 9, 2022

Aeona is a multi-purpose discord bot ready to skill up and boost up your Discord server! It has an State of the Art AI chatbot to make sure you never feel bored!

Aeona | Chatbot Aeona is an ever-growing multipurpose bot; primarily a fun chatbot you can converse with, but also showcases a wide range of fun comma

Jan 9, 2023

This project was created to help discord.js developers start their own bot, you can take this project as a basic for your bot and add things to it as you want. ๐Ÿ™‚

Discord.js Starter-Bot A small & basic discord.js bot to help you get started ๐Ÿ๏ธ This project was created to help discord.js developers start their o

Nov 29, 2022

a customizable bot that takes top memes of the day from any r/subreddit and posts them on your instagram page

TAEWONSU a customizable bot that takes top memes of the day from r/subreddit and posts them on your instagram page SetUp install any LTS nodejs (lates

Oct 23, 2022

This bot can raise your mood. This bot send joke often our channel for users. Sometimes bot don't work because we have not server for this project...)

This bot can raise your mood. This bot send joke often our channel for users. Sometimes bot don't work because we have not server for this project...)

Hi, welcome to send-joke-bot telegram bot project ๐Ÿค– What can do this bot ? This bot can raise your mood. This bot send joke often our channel for use

Sep 26, 2022

A discord bot using @discord.js and mongoose. Used for music, moderation, and entertainment.

hazel A discord bot using @discord.js and mongoose. Used for music, moderation, and entertainment. Features Music โ€• supporting YouTube, Spotify and So

Dec 31, 2022

Cyrus is a Discord Bot with focus on Fun, Moderation, information and much more commands! Made it with Discord.js

Cyrus is a Discord Bot with focus on Fun, Moderation, information and much more commands! Made it with Discord.js

Cyrus Cyrus is a Discord Bot with focus on Fun, Moderation, information and much more commands! Made it with Discord.js Invite : Click here Vote : Top

Dec 3, 2022

Denky is a multipurpose Discord bot, build with Node.js, TypeScript and discord.js.

๐Ÿค– Denky Bot Denky is a brazilian Discord bot, build with Node.js, TypeScript and discord.js. โš™๏ธ How to Create a Discord application. Guide Install No

Apr 6, 2022
Owner
vanmoortel
vanmoortel
As you can tell from the name of the Bots+, it looks like a Members+ bot

Info As you can tell from the name of the Bots+, it looks like a Members+ bot. Usage First step: "!help" You must set your language with this command.

Custy 4 Feb 21, 2022
A multipurpose bot, a clan bot, a all in one bot. The one bot u need for ur server originally made as Milrato discord Bot and by Tomato6966.

Public Bot and Support Server! Invite the Public Version of this Bot so you don't need to host it by yourself or join my Discord server to get a custo

Tomato6966 472 Dec 25, 2022
About Discord bot draft that does not contain ready-made commands, compatible with discord.js v14. Create your own discord bot with this command handler.

discordJS-V14 About Discord bot draft that does not contain ready-made commands, compatible with discord.js v14. Create your own discord bot with this

Umut Bayraktar 36 Dec 28, 2022
A MERNG social volunteering app. Host, attend, discuss, and later verify volunteer events and good deeds, earning Kindly Points as you help.

KINDLY: Be Good to Your Neighbors! Fig 1: The entire homepage for a logged-in user! TABLE OF CONTENTS Description Installation Usage Technologies Cont

Brent Gaines 7 Jan 27, 2022
Gitlift Discord Bot is a discord bot which is listening Discord Messages to reply with user gitlift profile and total contributions.

Remoklify - Gitlift Discord Bot Gitlift Discord Bot is a discord bot which is listening Discord Messages to reply with user gitlift profile and total

Remoklify 3 Mar 20, 2022
Co-Pilot is a discord Bot designed to be the all-in-one, open-source Discord bot that handles all your server needs.

Welcome to Co-Pilot Bot repo! ?? ?? Co-Pilot (All-in-one Discord Bot) Co-Pilot is a discord Bot designed to be the all-in-one, open-source Discord bot

YMafalha 19 Nov 11, 2022
A simple & easy2use API for obtaining information about a discord user, discord bot or discord guild and their use for some purpose on websites!

discord-web-api A simple & easy2use API for obtaining information about a discord user, discord bot or discord guild and their use for some purpose on

InvalidLenni 2 Jun 28, 2022
A discord bot made using discord.js and discord-player

Musx A custom discord bot that can play music in your server ?? Add the bot to your server If you are looking for a music bot for your Discord server

Shashwat Singh 4 Mar 28, 2022
Discord Neura - a Discord bot framework built on discord.js

Discord Neura Description Discord Neura is a Discord bot framework built on discord.js. Features Command Handler, Arguments, Preconditions and Listene

Discord Neura 3 Mar 23, 2022
It is a discord bot bot which can play lofi song in different language 24/7. It has premium system and cool embed looks with buttons. It can play youtube songs, playlists. This bot code was made by Supreme#2401. It uses djs V12

Lofi-Radio-Music-Bot It is a discord bot bot which can play lofi song in different language 24/7. It has premium system and cool embed looks with butt

Diwas Atreya 89 Jan 2, 2023