A Discord bot for managing small party voting systems
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
data
src
.editorconfig
.env.example
.gitignore
LICENSE
README.md
package.json
tsconfig.json
tslint.json
yarn.lock

README.md

Votum
Add
View Source on GitHub

Votum

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

Commands

Admin commands

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.

Councilor commands

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.

Voting

  • 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

  1. Pick a channel that your councilors will deliberate in.
  2. Run !Council My Council to mark this channel as a council. (Change "My Council" to whatever you want it to be named.)
  3. Create a role for the members of your council and give it to your voters. Then, run !CouncilorRole RoleNameHere.
  4. Run !motion This is my first motion. You're all done! Check out the other configuration options above for more advanced use.

Goals

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