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
||Create a council (or rename) in the channel you run this in, with an optional name.|
||Remove a council from the channel you run this in.|
||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.|
||Remove the councilor role.|
||Designate a channel where all passed and failed (not killed) motions will be logged.|
||Remove the announce channel.|
||Set the number of hours a motion can remain active. Default
||Set the number of hours a councilor must wait between proposals. (Killed motions do not trigger the cooldown). Default
||Displays some statistics about your council.|
||See the current motion.|
||Call a motion with the given text.|
||Call a unanimous motion with the given text (any "no" vote will end the motion).|
||Kill the current motion. (Only admins or the motion author can do this).|
||Vote yes with a mandatory reason.|
||Vote no with a mandatory reason.|
||Abstain from voting with an optional reason.|
||Mentions any council members who haven't voted on the current motion yet.|
||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.
Quick set-up guide
- Pick a channel that your councilors will deliberate in.
!Council My Councilto 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
!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