A Discord bot for managing small party voting systems such as a council or small group who want to deliberate on matters democratically. Work in progress.
Looking for a bot that provides quick on-the-fly poll-based votes to your entire community? Check out Poll Dancer
These commands can only be run by someone with the Manage Server
permission, or with a role named Votum Admin
.
Command | Description |
---|---|
!Council [name] |
Create a council (or rename) in the channel you run this in, with an optional name. |
!Council remove |
Remove a council from the channel you run this in. |
!CouncilorRole <role> |
Define a role that councilors must have to vote. Otherwise, anyone that can see the channel can vote and will be counted for the majority count. |
!CouncilorRole remove |
Remove the councilor role. |
!MotionAnnounceChannel <channel> |
Designate a channel where all passed and failed (not killed) motions will be logged. |
!MotionAnnounceChannel remove |
Remove the announce channel. |
!MotionExpire <hours> |
Set the number of hours a motion can remain active. Default 0 (expiration disabled). |
!CouncilorCooldown <hours> |
Set the number of hours a councilor must wait between proposals. (Killed motions do not trigger the cooldown). Default 0 (no cooldown). |
!CouncilStats |
Displays some statistics about your council. |
Command | Description |
---|---|
!motion |
See the current motion. |
!motion <motion text> |
Call a motion with the given text. |
!motion -u <motion text> |
Call a unanimous motion with the given text (any "no" vote will end the motion). |
!motion kill |
Kill the current motion. (Only admins or the motion author can do this). |
!yes | aye | si | yea | yay | ja | oui <reason> |
Vote yes with a mandatory reason. |
!no | nay | negative | nope | nein <reason> |
Vote no with a mandatory reason. |
!abstain [reason] |
Abstain from voting with an optional reason. |
!lazyvoters |
Mentions any council members who haven't voted on the current motion yet. |
!archive [range] |
Allows you to view past motions. Provide a range of numbers to view a summary, or provide a single number to view a motion. |
- Multiple councils can be defined in one Discord server, as the councils are based on channels.
- Upon a tie, the motion will remain forever until someone breaks the tie.
- The councilor cooldown is not triggered if the motion is killed.
- When a motion expires, the outcome is determined by majority votes. If there are more "yes" than "no" votes, it will pass, and vice-versa.
- If you do not set a Councilor role, the total number of voters is determined by who can see the channel. It's recommended that you set a role for councilors so that you can be sure that only possible voters count towards the total number needed for majority.
- Pick a channel that your councilors will deliberate in.
- Run
!Council My Council
to mark this channel as a council. (Change "My Council" to whatever you want it to be named.) - Create a role for the members of your council and give it to your voters. Then, run
!CouncilorRole RoleNameHere
. - Run
!motion This is my first motion
. You're all done! Check out the other configuration options above for more advanced use.
Contributions and suggestions are welcome.
- Load and save data per council
- Define councils on a per-channel basis
- Start motions
- Ability to vote on motions, display data and accept reasons
- Multiple vote types
- Implement user cooldown
- Ability to kill a motion
- Settings for when a motion passes: unanimous, majority
- Detect when a motion has passed or failed
- Motion expiration
- Define which people can vote or call motions
- Add status message and web page to show where to invite from Discord
- Generalized configuration command
- Allow mandatory reasons to be configurable
- Allow motion mention to be configurable
- Ping people who haven't voted yet
- Stats command
- Multiple majority types (2/3rd, 4/5th, configurable)
- Configurable override to not end motions early when they reach majority.
- A command to show historical motion history
- Update to support sharding