Git Product home page Git Product logo

votum's Introduction

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

votum's People

Contributors

evaera avatar brmetzger avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.