Village Vote Commands Documentation
Overview
This bot provides seven commands for creating and managing votes in your Discord server:
/vote- Create a regular vote for players/anonvote- Create an anonymous vote for players/itemvote- Create a regular vote for custom items/anonitemvote- Create an anonymous vote for custom items/denvote- Create a mafia/werewolf den vote: players in the den channel nominate an outside player to kill/modifyvote- Modify an existing vote/votedefaults- Save your own defaults for the vote command options
Moderator only: every command on this page requires the server's configured moderator role.
Every active vote also has a Manage page (the ⚙️ Manage button on the vote embed) for changing settings mid-vote, adding or removing voters and options, and setting the per-player vote modifiers: weights and pawns. See Vote Modifiers.
Vote Commands
/vote, /anonvote, /itemvote and /anonitemvote share the same argument structure, but behave differently based on the command used. /denvote has its own smaller set of options, described in its own section.
Option names are typed exactly as Discord shows them, all lowercase (for example hidevotelog:True, not hideVoteLog:True).
Core Arguments
┌──────────┬────────┬─────────────────────────────────────────────────────────┐
│ Argument │ Type │ Description │
├──────────┼────────┼─────────────────────────────────────────────────────────┤
│ votetime │ String │ When the vote should end │
│ votecount│ String │ Number of vote slots (1-4, default 1) │
│ voterole │ Role │ Discord role that determines who can participate │
└──────────┴────────┴─────────────────────────────────────────────────────────┘
Note:
votetimeandvoterolemust come from somewhere: either typed on the command or saved with/votedefaults set. The command refuses with a pointer to/votedefaultswhen neither is available.votecountfalls back to 1.
Optional Arguments
┌────────────────────┬─────────┬───────────────────────────────────────────────┬─────────┐
│ Argument │ Type │ Description │ Default │
├────────────────────┼─────────┼───────────────────────────────────────────────┼─────────┤
│ modrole │ Role │ Moderators for the game; excluded from voting │ None │
│ votetitle │ String │ Custom title for the vote (max 80 characters) │ Empty │
│ hidevotelog │ Boolean │ Hide the vote log showing who voted │ False │
│ showanonvotetotals │ Boolean │ Show vote totals after anonymous voting │ False │
│ allowabstainvote │ Boolean │ Allow voters to abstain │ False │
│ closeonmajority │ Boolean │ Close the vote when a majority is reached │ False │
│ closewhenvotesreach│ Integer │ Override the majority threshold (needs │ None │
│ │ │ closeonmajority) │ │
│ allowselfvoting │ Boolean │ Allow voters to vote for themselves │ False │
│ announcechannel │ Channel │ Channel to monitor for votes cast in chat │ None │
│ votehotword │ String │ Custom word replacing !vote in announce chat │ !vote │
│ randomizeoptions │ Boolean │ Randomize the display order of vote options │ False │
└────────────────────┴─────────┴───────────────────────────────────────────────┴─────────┘
Not every option exists on every command:
┌────────────────────┬───────┬───────────┬───────────┬───────────────┐
│ Argument │ /vote │ /anonvote │ /itemvote │ /anonitemvote │
├────────────────────┼───────┼───────────┼───────────┼───────────────┤
│ modrole │ ✅ │ ✅ │ ✅ │ ✅ │
│ votetitle │ ✅ │ ✅ │ ✅ │ ✅ │
│ hidevotelog │ ✅ │ – │ ✅ │ – │
│ showanonvotetotals │ – │ ✅ │ – │ ✅ │
│ allowabstainvote │ ✅ │ ✅ │ ✅ │ ✅ │
│ closeonmajority │ ✅ │ ✅ │ ✅ │ ✅ │
│ closewhenvotesreach│ ✅ │ ✅ │ ✅ │ ✅ │
│ allowselfvoting │ ✅ │ ✅ │ – │ – │
│ announcechannel │ ✅ │ ✅ │ – │ – │
│ votehotword │ ✅ │ ✅ │ – │ – │
│ randomizeoptions │ ✅ │ ✅ │ ✅ │ ✅ │
└────────────────────┴───────┴───────────┴───────────┴───────────────┘
Note:
hidevotelogonly applies to/voteand/itemvote;showanonvotetotalsonly applies to/anonvoteand/anonitemvote.
Note:
allowabstainvoteapplies to all vote commands. When enabled, participants can choose to abstain instead of voting for a specific option.
Note:
announcechannel,votehotwordandallowselfvotingexist only on the player votes (/voteand/anonvote). Item votes have no player mentions to vote with, and nobody to self-vote for. The bot needs Read Message History, Send Messages and Add Reactions in the announce channel, and refuses to start the vote if any are missing.
Note:
votehotwordrequiresannouncechannelto be set. It replaces the!votekeyword players type in the announce channel with a custom word — see the Custom Hotword section under the Announce Channel Feature.
Note:
closeonmajorityapplies to all vote commands. When enabled, the vote closes once enough options have each reached a majority of voters (floor(voters/2) + 1). For single-slot votes, one option must reach majority. For multi-slot votes, one option per slot must each independently reach majority.
Note:
closewhenvotesreachreplaces the computed majority threshold with a fixed number of votes (1 or more). It only works together withcloseonmajority:True; the command refuses if it is given on its own.
Note:
allowselfvotinglets players vote for themselves in/voteand/anonvote. By default self-votes are rejected, both on the vote embed and in the announce channel.
Note:
randomizeoptionsapplies to all vote commands. When enabled, the order of vote options is shuffled each time the vote embed is displayed.
/vote Command
Create a regular vote where participants vote for other players. Results show who voted for whom.
Examples
Basic player vote:
/vote votetime:+2h votecount:1 voterole:@GamePlayers
Player vote with custom title:
/vote votetime:5:00pm EST tomorrow votecount:3 voterole:@Members votetitle:Who is a wolf?
Player vote with hidden vote log:
/vote votetime:+2h votecount:1 voterole:@GamePlayers hidevotelog:True
Player vote allowing abstentions:
/vote votetime:+2h votecount:1 voterole:@GamePlayers allowabstainvote:True
Player vote with announce channel:
/vote votetime:+2h votecount:1 voterole:@GamePlayers announcechannel:#vote-updates
Player vote with a custom vote hotword:
/vote votetime:+2h votecount:1 voterole:@GamePlayers announcechannel:#vote-updates votehotword:yeet
Player vote that closes when majority is reached:
/vote votetime:+2h votecount:1 voterole:@GamePlayers closeonmajority:True
Player vote that closes at a fixed number of votes:
/vote votetime:+2h votecount:1 voterole:@GamePlayers closeonmajority:True closewhenvotesreach:5
Player vote where players may vote for themselves:
/vote votetime:+2h votecount:1 voterole:@GamePlayers allowselfvoting:True
Player vote with randomized option order:
/vote votetime:+2h votecount:1 voterole:@GamePlayers randomizeoptions:True
Vote Log: By default, the vote history is visible on the web view. Set
hidevotelog:Trueto hide the vote history display. Abstentions: Whenallowabstainvote:True, participants can choose "Abstain" and won't be flagged for incomplete voting. Abstentions are shown in the results. Announce Channel: Whenannouncechannelis set, the bot monitors that channel for text commands like!vote <@player>,!vote abstain, and!vote removethat participants can use to quickly cast votes. See the Announce Channel section for details. Vote Hotword: Whenvotehotwordis set (e.g.yeet), players use that word instead of!vote—yeet @player,yeet abstain— and check their votes withmyyeet. See the Custom Hotword section for details. Close on Majority: Whencloseonmajority:True, the vote ends automatically once enough options have each reached a majority of voters (floor(voters/2) + 1). For single-slot votes, one option must reach majority. Useful for decisive votes where you don't need to wait for all participants. Addclosewhenvotesreachto use a fixed threshold instead. Self-Voting: By default a player cannot vote for themselves. Setallowselfvoting:Trueto allow it. Randomize Options: Whenrandomizeoptions:True, the order of vote options is shuffled. Useful for preventing position bias in player lists.
/anonvote Command
Create an anonymous vote where participants vote for other players, but results don't show who voted for whom.
Examples
Anonymous player vote:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers
Anonymous vote with moderator exclusion:
/anonvote votetime:+1d votecount:2 voterole:@Everyone modrole:@Moderators votetitle:Secret Vote
Anonymous vote showing totals after close:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers showanonvotetotals:True
Anonymous vote allowing abstentions:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers allowabstainvote:True
Anonymous vote with announce channel:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers announcechannel:#vote-updates
Anonymous vote that closes when majority is reached:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers closeonmajority:True
Anonymous vote with randomized option order:
/anonvote votetime:+2h votecount:1 voterole:@GamePlayers randomizeoptions:True
Vote Totals: By default, vote totals remain hidden even after the vote closes. Set
showanonvotetotals:Trueto display vote totals once the vote ends (they remain hidden during voting). Abstentions: Whenallowabstainvote:True, participants can choose "Abstain" and won't be flagged for incomplete voting. Abstentions are not shown in anonymous votes. Announce Channel: Whenannouncechannelis set, the bot monitors that channel for text commands like!vote <@player>,!vote abstain, and!vote removethat participants can use to quickly cast votes. Vote Hotword: Whenvotehotwordis set (e.g.yeet), players use that word instead of!vote—yeet @player,yeet abstain— and check their votes withmyyeet. See the Custom Hotword section for details. Close on Majority: Whencloseonmajority:True, the vote ends automatically once enough options have each reached a majority of voters (floor(voters/2) + 1). Addclosewhenvotesreachto use a fixed threshold instead. Self-Voting: By default a player cannot vote for themselves. Setallowselfvoting:Trueto allow it. Randomize Options: Whenrandomizeoptions:True, the order of vote options is shuffled. Useful for preventing position bias in player lists.
/itemvote Command
Create a vote for custom items/options instead of players. Results show who voted for what.
Creating Item Votes
Before running the /itemvote command, post a message with your vote options formatted as markdown headers:
### Option 1 Title
Optional description for option 1
### Option 2 Title
Optional description for option 2
### Option 3 Title
Optional description for option 3
Then run the /itemvote command. The bot will automatically parse your most recent message containing markdown headers as the vote options.
Examples
Basic item vote:
/itemvote votetime:+1d votecount:1 voterole:@Everyone votetitle:Choose an Item
Item vote with moderator exclusion:
/itemvote votetime:+2d votecount:2 voterole:@Members modrole:@Staff votetitle:Server Event Choice
Item vote with hidden vote log:
/itemvote votetime:+1d votecount:1 voterole:@Everyone votetitle:Choose an Item hidevotelog:True
Item vote allowing abstentions:
/itemvote votetime:+1d votecount:1 voterole:@Everyone votetitle:Choose an Item allowabstainvote:True
Item vote that closes when majority is reached:
/itemvote votetime:+1d votecount:1 voterole:@Everyone votetitle:Choose an Item closeonmajority:True
Item vote with randomized option order:
/itemvote votetime:+1d votecount:1 voterole:@Everyone votetitle:Choose an Item randomizeoptions:True
Vote Log: By default, the vote history is visible on the web view. Set
hidevotelog:Trueto hide the vote history display. Abstentions: Whenallowabstainvote:True, participants can choose "Abstain" and won't be flagged for incomplete voting. Abstentions are shown in the results. No Announce Channel: Item votes have noannouncechannel,votehotwordorallowselfvotingoptions. Items have no Discord user mentions to vote with, so all voting happens through the vote embed. Close on Majority: Whencloseonmajority:True, the vote ends automatically once enough options have each reached a majority of voters (floor(voters/2) + 1). Addclosewhenvotesreachto use a fixed threshold instead. Randomize Options: Whenrandomizeoptions:True, the order of vote options is shuffled. Useful for preventing anchoring bias toward the first listed items.
/anonitemvote Command
Create an anonymous vote for custom items/options. Results don't show who voted for what.
Creating Anonymous Item Votes
Follow the same process as /itemvote - post a markdown-formatted message with your options first, then run the command.
Examples
Anonymous item vote:
/anonitemvote votetime:+3d votecount:1 voterole:@Everyone votetitle:Anonymous Poll
Anonymous item vote with custom settings:
/anonitemvote votetime:2:30pm EDT Monday votecount:3 voterole:@Community modrole:@Moderators votetitle:Secret Survey
Anonymous item vote showing totals after close:
/anonitemvote votetime:+3d votecount:1 voterole:@Everyone votetitle:Anonymous Poll showanonvotetotals:True
Anonymous item vote allowing abstentions:
/anonitemvote votetime:+3d votecount:1 voterole:@Everyone votetitle:Anonymous Poll allowabstainvote:True
Anonymous item vote that closes when majority is reached:
/anonitemvote votetime:+3d votecount:1 voterole:@Everyone votetitle:Anonymous Poll closeonmajority:True
Anonymous item vote with randomized option order:
/anonitemvote votetime:+3d votecount:1 voterole:@Everyone votetitle:Anonymous Poll randomizeoptions:True
Vote Totals: By default, vote totals remain hidden even after the vote closes. Set
showanonvotetotals:Trueto display vote totals once the vote ends (they remain hidden during voting). Abstentions: Whenallowabstainvote:True, participants can choose "Abstain" and won't be flagged for incomplete voting. Abstentions are not shown in anonymous votes. No Announce Channel: Item votes have noannouncechannel,votehotwordorallowselfvotingoptions. Items have no Discord user mentions to vote with, so all voting happens through the vote embed. Close on Majority: Whencloseonmajority:True, the vote ends automatically once enough options have each reached a majority of voters (floor(voters/2) + 1). Addclosewhenvotesreachto use a fixed threshold instead. Randomize Options: Whenrandomizeoptions:True, the order of vote options is shuffled. Useful for preventing anchoring bias toward the first listed items.
/denvote Command
Create a mafia or werewolf den vote. Run it inside the den channel (the wolves' or mafia's private channel): the living players who can see that channel become the voters, and the living players who cannot see it become the kill targets. Den members vote on which outside player the pack kills, and optionally on which den member carries out the kill.
Required Arguments
┌──────────┬──────┬──────────────────────────────────────────────────────────────────┐
│ Argument │ Type │ Description │
├──────────┼──────┼──────────────────────────────────────────────────────────────────┤
│ voterole │ Role │ The role that ALL living players have, inside and outside the den│
└──────────┴──────┴──────────────────────────────────────────────────────────────────┘
Optional Arguments
┌──────────────┬─────────┬───────────────────────────────────────────────────────┬──────────┐
│ Argument │ Type │ Description │ Default │
├──────────────┼─────────┼───────────────────────────────────────────────────────┼──────────┤
│ votetitle │ String │ Custom title for the vote (max 80 characters) │ Den Vote │
│ votetime │ String │ When the vote should end │ +24h │
│ killcount │ Integer │ Number of players the den kills, one vote slot each │ 1 │
│ │ │ (1-4) │ │
│ killingplayer│ Boolean │ Also vote on which den member carries out the kill │ False │
│ webview │ Boolean │ Enable the public web view page for this vote │ False │
└──────────────┴─────────┴───────────────────────────────────────────────────────┴──────────┘
How It Works
- The bot reads every member of
voterole, excluding anyone with the server's moderator role, and splits them by whether they can see the current channel. Members who can see it are the den members (the voters); everyone else is a kill target. Out-of-den wolves are valid targets on purpose. - The command refuses if nobody in the role can see the channel, if everybody can (no targets), or if
killcountis larger than the number of players outside the den. - A private preview lists the den members and kill targets. Press Start Vote to post the vote or Abandon Vote to discard it.
- The live embed shows 🎯 Kill Nominations (current counts per target), 🔪 Killer Nominations when
killingplayer:True, and 🗳️ Den Members with how many of their slots each member has filled. Each den member gets one vote button per kill slot (Kill Vote #1,Kill Vote #2, ...) plus a Vote for Killer button when enabled, a Who did I vote for? button, and the moderator Manage button. - When the vote closes, the results embed names the nominated target(s) (ties are called out), the nominated killer, who voted for whom, and any den members who did not cast all of their votes.
Den votes never use the announce channel, saved defaults, or vote modifiers (weights and pawns). The web page for a den vote exists only when webview:True was set.
Examples
Standard den vote, closing in 24 hours:
/denvote voterole:@Alive
Two kills, with a vote on who does the killing:
/denvote voterole:@Alive votetitle:Night 3 killcount:2 killingplayer:True votetime:9pm EST today
Time Format Examples
Discrete Times:
2:30pm EDT tomorrow5:00pm PST today11:45am GMT Monday
Relative Times:
+2d+1h+15m(2 days, 1 hour, 15 minutes from now)+30m(30 minutes from now)+1d(1 day from now)
⚠️ Note: Vote end time must be in the future. Include timezone and day (today/tomorrow) for discrete times.
/modifyvote Command
Modify an existing active vote from Discord. Any moderator can modify any active vote in the channel; the vote's Manage page offers the same changes and more.
Required Arguments
┌─────────────────────┬────────┬─────────────────────────────────────────────────────┐
│ Argument │ Type │ Description │
├─────────────────────┼────────┼─────────────────────────────────────────────────────┤
│ votemodificationtype│ Choice │ How to modify the vote │
│ votemodid │ String │ Vote ID (format: vid + alphanumeric characters) │
└─────────────────────┴────────┴─────────────────────────────────────────────────────┘
Optional Arguments
┌──────────────┬────────┬─────────────────────────────────┬───────────────────────────────────┐
│ Argument │ Type │ Description │ Required For │
├──────────────┼────────┼─────────────────────────────────┼───────────────────────────────────┤
│ votemoduser │ User │ The user to add or remove │ ADD_PLAYER, REMOVE_PLAYER, │
│ │ │ (or clear / deactivate) │ CLEAR_PLAYER_VOTES, │
│ │ │ │ TOGGLE_PLAYER_DEACTIVATION │
│ votemodtime │ String │ New end time for the vote │ CHANGE_TIME │
└──────────────┴────────┴─────────────────────────────────┴───────────────────────────────────┘
Modification Types
Discord shows each choice by its label; the value in the first column is what the bot stores.
┌───────────────────────────┬──────────────────────────────────┬────────────────────────────────────────────┐
│ Type │ Label in Discord │ Additional Requirements │
├───────────────────────────┼──────────────────────────────────┼────────────────────────────────────────────┤
│ REFRESH │ Refresh the vote message │ None │
│ ADD_PLAYER │ Add a player to a vote │ Requires votemoduser. Max 100 players. │
│ REMOVE_PLAYER │ Remove a player from a vote │ Requires votemoduser. Min 1 player. │
│ CHANGE_TIME │ Change the time a vote will end │ Requires votemodtime. Vote must be active. │
│ ADD_VOTE │ Add an additional vote slot │ None. Increases available vote slots. │
│ CLEAR_PLAYER_VOTES │ Clear all votes cast by a player │ Requires votemoduser; must be a voter. │
│ TOGGLE_PLAYER_DEACTIVATION│ Deactivate or reactivate a player│ Requires votemoduser; must be a voter. │
└───────────────────────────┴──────────────────────────────────┴────────────────────────────────────────────┘
- CLEAR_PLAYER_VOTES wipes every vote the player has cast in every slot. The player stays in the vote and can vote again.
- TOGGLE_PLAYER_DEACTIVATION flips the player between active and deactivated. Deactivating clears their votes and stops them voting; they are no longer counted toward the majority threshold. Running it again reactivates them.
Restrictions
- Requires the server's moderator role
- Vote must be in the same channel where the modify command is used
- Vote ID must be valid (starts with
vidfollowed by 6-18 alphanumeric characters) - Cannot modify votes that have already ended
- Cannot remove all players from a vote
- Cannot add more than 100 total players to a vote
Examples
Refresh vote display:
/modifyvote votemodificationtype:REFRESH votemodid:vid1a2b3c4d5e
Add a player:
/modifyvote votemodificationtype:ADD_PLAYER votemodid:vid1a2b3c4d5e votemoduser:@JohnDoe
Remove a player:
/modifyvote votemodificationtype:REMOVE_PLAYER votemodid:vid1a2b3c4d5e votemoduser:@JaneDoe
Change vote end time:
/modifyvote votemodificationtype:CHANGE_TIME votemodid:vid1a2b3c4d5e votemodtime:+3h
Add an extra vote slot:
/modifyvote votemodificationtype:ADD_VOTE votemodid:vid1a2b3c4d5e
Clear everything a player has voted for:
/modifyvote votemodificationtype:CLEAR_PLAYER_VOTES votemodid:vid1a2b3c4d5e votemoduser:@JohnDoe
Deactivate (or reactivate) a player:
/modifyvote votemodificationtype:TOGGLE_PLAYER_DEACTIVATION votemodid:vid1a2b3c4d5e votemoduser:@JohnDoe
/votedefaults Command
Save your own defaults for the optional vote command options, so you stop retyping the same
flags every day. Defaults are per moderator (they follow you, not the server) and apply to
/vote, /anonvote, /itemvote and /anonitemvote whenever you leave an option out. Anything
you type on the command always wins.
Subcommands
/votedefaults set [votetime] [votecount] [voterole] [votetitle] [modrole] [announcechannel]
[votehotword] [hidevotelog] [showanonvotetotals] [allowabstainvote]
[closeonmajority] [closewhenvotesreach] [allowselfvoting] [randomizeoptions]
/votedefaults show
/votedefaults clear [option]
setsaves only the options you give; everything else you saved earlier is kept. Savinghidevotelog:Falsestores an explicitfalse, which is different from having nothing saved.showlists what is saved: an Everywhere section and a This server section.clearremoves one saved option, or everything (every server) whenoptionis left out.
How defaults are applied
voterole,modroleandannouncechannelare Discord ids, so they are saved for the server you ran the command in and only apply there. If the role or channel is later deleted, the default is ignored.votetimeis saved as the text you typed and parsed when each vote is created, so a relative time like+1dor a daily time like8pm EDTkeeps working day after day.votecountmust be 1 to 4;votetitleis limited to 80 characters. Each is validated when you save it.- A default only applies to commands that have that option:
hidevotelognever applies to/anonvote,showanonvotetotalsnever applies to/vote, andannouncechannel,votehotwordandallowselfvotingnever apply to item votes. - A saved
closewhenvotesreachis ignored unlesscloseonmajorityends up on; a savedvotehotwordis ignored unless an announce channel ends up set. - The vote preview shows a 📌 From your saved defaults field listing which options came from your defaults and which were ignored (and why), so nothing is applied silently.
- If your defaults file cannot be read, the vote is still created without them and the preview
says so.
/votedefaults clearresets it.
With votetime and voterole saved, /vote with no options at all starts a vote.
Announce Channel Feature
The announcechannel argument allows you to designate a channel where participants can use text commands to quickly cast votes. This provides an alternative voting method that's faster than navigating to the vote embed for player votes.
How It Works
When you specify an announcechannel, the bot monitors that channel for specific vote commands:
!vote <@player>- Cast a vote for a mentioned player (single-slot votes)!vote <slot> <@player>- Cast a vote in a specific slot (multi-slot votes)!vote abstainor!vote no vote- Abstain from voting!vote remove- Remove your current vote!vote resultsor!vote status- Post the current vote standings to the channel!myvotes- Show a summary of all votes you have cast in this channel
These commands only work for player votes (created with /vote or /anonvote). Item votes do not support vote commands since items don't have Discord user mentions.
Command Format
Vote commands follow this pattern:
!vote [slot] <target>
Where [slot] is the 1-based vote slot number, and <target> is one of:
- A Discord user mention like
<@123456789> - The word
abstain - The phrase
no vote - The word
remove
Or the standalone info commands:
!vote results
!vote status
!myvotes
Custom Hotword
The optional votehotword argument (on /vote and /anonvote) replaces the !vote keyword with a word of your choice. Setting votehotword:yeet changes every command above:
yeet <@player> (instead of !vote <@player>)
yeet 2 <@player> (instead of !vote 2 <@player>)
yeet abstain (instead of !vote abstain)
yeet remove (instead of !vote remove)
yeet results (instead of !vote results)
myyeet (instead of !myvotes)
The "check my votes" command is always my + hotword. If the hotword starts with a punctuation character, the prefix stays in front — votehotword:$yeet gives $yeet <@player> and $myyeet, mirroring how !vote pairs with !myvotes.
Rules:
- Requires
announcechannelto be set — the hotword is what players type there. - Letters and numbers only, no spaces, up to 20 characters.
- May start with one punctuation character from:
! $ % ^ & + = . ? ; ,— characters Discord already uses (/,@,#,:) or renders as markdown (*,_,~,`,|,>,-) are not allowed. - Custom hotwords match case-insensitively (
Yeet @playerworks — handy for mobile keyboards that auto-capitalize). The default!votesyntax remains lowercase-only. - The hotword applies per vote: without
votehotword, the classic!vote/!myvotessyntax works exactly as before. The vote's embed instructions automatically show whichever syntax is in effect.
Vote Command Behavior
Single Active Vote (single slot): When only one vote is monitoring a channel and it has one slot, commands work seamlessly:
!vote <@Alice> → ✅ Vote recorded
!vote abstain → ✅ Abstention recorded
!vote remove → ✅ Vote removed
!vote results → ✅ Current standings posted
!myvotes → ✅ Your votes shown
Single Active Vote (multiple slots): When the vote has more than one slot, the slot number is required:
!vote 1 <@Alice> → ✅ Vote recorded in slot 1
!vote 2 <@Bob> → ✅ Vote recorded in slot 2
!vote <@Alice> → ❌ Rejected (slot required for multi-slot votes)
Multiple Active Votes: If multiple votes are monitoring the same channel, the bot will:
- Display a warning message that multiple votes are active
- Attempt to apply the command to all valid votes
- React multiple times if the command succeeds for multiple votes
Validation Rules
The bot validates vote commands before recording them:
Self-voting prevention: You cannot vote for yourself unless the vote was created with
allowselfvoting:True!vote <@YourOwnUser> → ❌ RejectedValid vote options: The target must be a valid option in the vote
!vote <@NonPlayer> → ❌ Rejected (not in the player list)Abstain permissions: Abstaining requires
allowabstainvote:True!vote abstain → ❌ Rejected (if abstaining is not enabled)Bot messages ignored: The bot ignores commands from other bots
Reactions
The bot reacts to vote commands to indicate success or failure:
- ✅ Success: Vote was recorded successfully
- ❌ Failure: Vote was rejected (invalid target, self-vote, etc.)
When closeonmajority:True is set, the bot also adds a countdown reaction alongside ✅ showing how many votes the least-filled slot still needs to reach majority:
- 3️⃣ 3 votes needed for the vote to close
- 2️⃣ 2 votes needed for the vote to close
- 1️⃣ 1 vote needed for the vote to close
- 🔒 Majority reached — vote has been closed
No countdown reaction is added when 4 or more votes are still needed.
The countdown is computed after the vote is recorded, so it always shows the final state of that message. When a vote closes because pawns moved on it, the closing message gets 🔒 even if the previous message showed 2️⃣; there is no 1️⃣ in between.
Example Usage
Standard player vote with command channel:
/vote votetime:+2h votecount:1 voterole:@Players announcechannel:#voting votetitle:Day 1 Vote
Participants can then vote in #voting:
User: !vote <@Alice>
Bot: ✅
User: !vote <@Bob>
Bot: ✅
User: !vote abstain
Bot: ✅
Anonymous vote with command channel:
/anonvote votetime:+2h votecount:1 voterole:@Players announcechannel:#voting votetitle:Secret Vote
Commands work the same way, but the vote remains anonymous in the results.
Multi-slot vote with command channel:
/vote votetime:+2h votecount:3 voterole:@Players announcechannel:#voting votetitle:Day 1 Vote
Participants must specify the slot:
User: !vote 1 <@Alice>
Bot: ✅
User: !vote 2 <@Bob>
Bot: ✅
User: !vote 3 <@Carol>
Bot: ✅
Multi-Slot Votes
When votecount is greater than 1, participants must specify the slot number:
!vote 1 <@Alice> → ✅ Vote recorded in slot 1
!vote 2 <@Bob> → ✅ Vote recorded in slot 2
!vote 3 <@Carol> → ✅ Vote recorded in slot 3
!vote <@Alice> → ❌ Rejected — slot number required
The bot replies with a help message when the slot is omitted, showing the valid slot range.
Compatibility Notes
- Player votes only: Vote commands work with
/voteand/anonvote - Item votes not supported: Commands don't work with
/itemvoteor/anonitemvotesince items lack Discord mentions - Slot required for multi-slot votes: When
votecountis greater than 1, the slot number must be included in the command - Channel can be public or private: Any channel accessible to the bot works
- Custom hotwords are per vote: A vote created with
votehotwordresponds only to its hotword; a vote created without one responds only to the classic!votesyntax
Technical Details
- Commands are case-insensitive for
abstain,no vote,remove,results, andstatus - User mentions must be in the standard Discord format
<@userID> - Commands are processed in real-time with immediate feedback
- Multiple concurrent votes in the same channel are supported but discouraged
- Failed commands log errors without interrupting vote functionality
Vote Modifiers (Manage page)
Two per-player modifiers are set from the vote's Manage page (the ⚙️ Manage button on the vote embed), in the Voters section next to each voter. Neither is available on den votes. Both are logged in the vote history as moderator actions, visible on the web page only when the matching Show weights / Show pawns setting is on.
Vote weight
A player's vote can count for N votes (0–99, default 1). Set it with the Weight box next to the voter. Weight applies to every count: option totals, abstentions, percentages, the results ranking, close-on-majority, and the announce-channel countdown reactions. It does not change how many votes the player has to cast — a ×2 voter still casts one vote per slot. Weight 0 means the player votes but nothing counts (unlike deactivation, which also clears their ballot).
Weights are shown publicly by default (Alice ×2 on the embed, a ×2 chip on the web page, a
Modifiers line under the results summary). Turn Show weights off in Vote Settings to keep a
weight secret; the counts stay weighted either way.
Vote pawns
A pawn is a player whose vote is cast with their controller's in the last minute of the vote. Pick the controller in the Pawn of dropdown next to the voter. Rules:
- Both must be voters in the vote. A player cannot be their own pawn, and links cannot form a loop (the page tells you which players the loop would run through); chains are allowed (A → B → C: A and B both end up voting with C).
- Until the last minute the pawn is an ordinary voter — their own votes count.
- Somewhere inside the last minute (7:59 for an 8:00 close; the exact second is chosen separately for each pawn and shown next to the pawn on the Manage page), the bot casts the controller's ballot as the pawn's. This is logged like any other vote, so with Show pawns off (the default) it looks exactly like the pawn changing their mind late. From then until close the pawn follows the controller live.
- On a close on majority vote, pawns hammer: whenever a vote is cast, if moving a controller's pawns onto the controller's choice would close the vote right then, they move right then and the vote closes (abstention majorities included). All of that controller's pawns move together; pawns of pawns are not counted. If the move wouldn't close the vote, the pawns stay put. Linking a pawn on the Manage page never closes a vote by itself; the next vote cast does. In the announce channel the countdown reaction on the closing message is the lock, so players may see a 2 and then a lock with no 1 between.
- Any other majority close or Close Vote before the last minute still lands the pawn on the controller's choice — at close, with no last minute to hide in. The Manage page warns about the combination.
- A deactivated controller controls nothing (the pawn keeps their own vote); a deactivated pawn is never synced. Removing a voter clears every link they were part of.
- Turning Show pawns on labels pawns (
Bob (pawn of Alice)) and controllers (Alice (controls Bob)) publicly and annotates the last-minute vote in the log. - The Pawn of dropdown saves as soon as you pick. If the pick would create a loop, the page refuses it and names the players the loop would run through.
Command Comparison
┌────────────────┬──────────────────┬───────────┬───────────────────────────────────────┐
│ Command │ Target │ Anonymous │ Results Visibility │
├────────────────┼──────────────────┼───────────┼───────────────────────────────────────┤
│ `/vote` │ Players │ No │ Public - shows who voted for whom │
│ `/anonvote` │ Players │ Yes │ Private - vote counts only* │
│ `/itemvote` │ Items │ No │ Public - shows who voted for what │
│ `/anonitemvote`│ Items │ Yes │ Private - vote counts only* │
│ `/denvote` │ Players outside │ No │ Den channel - shows who voted for whom│
│ │ the den channel │ │ │
└────────────────┴──────────────────┴───────────┴───────────────────────────────────────┘
* Vote totals can optionally be shown after the vote closes using showanonvotetotals:True
/votedefaults does not create a vote; it saves your defaults for /vote, /anonvote, /itemvote and /anonitemvote. /denvote ignores saved defaults.
Tips and Best Practices
Choosing the Right Command
/vote- Use for standard player elimination votes where transparency is desired/anonvote- Use when you want to prevent voting influence or maintain secrecy/itemvote- Use for choosing between options, features, or non-player items/anonitemvote- Use for sensitive polls where anonymity is crucial/denvote- Use in the wolf or mafia channel for the night kill; the outside players are the targets automatically
Saved Defaults
- Run
/votedefaults setonce with the options you always use (for examplevotetime:+1d voterole:@Players closeonmajority:True) and later votes need only the options that differ - Defaults follow you, not the server; role and channel defaults are saved per server
- Check the 📌 From your saved defaults field on the vote preview before pressing Start Vote: it lists what came from your defaults and what was ignored (and why)
/votedefaults showlists what is saved;/votedefaults clearremoves one option or all of them
Finding Your Vote ID
- The vote ID is displayed when you create a vote and at the bottom of the vote embed
- Vote IDs start with
vidfollowed by a unique identifier
Role Selection
- Choose roles that include all intended participants
- Use
modroleto exclude staff/moderators from participating - Ensure the bot has permission to see the selected roles
Time Planning
- Always double-check your timezone when setting discrete times
- Consider your community's peak activity times when scheduling votes
Anonymous Votes
- Use anonymous votes when you want to prevent players from seeing each other's votes
- Results will only be visible to moderators with a password
- Password must be set manually by <@1314426408478572544> and is per-server
- Use
showanonvotetotals:Trueif you want to reveal vote counts after the vote closes
Vote Privacy Options
hidevotelog(non-anonymous votes): Hide the vote history from the web view to keep voting patterns private while still showing current resultsshowanonvotetotals(anonymous votes): Display vote totals after the vote ends while keeping individual votes anonymous
Abstentions
allowabstainvote(all votes): When enabled, participants can choose to abstain from voting- Participants who abstain won't be flagged for incomplete voting
- In public votes (
/voteand/itemvote), abstentions are shown in the results - In anonymous votes (
/anonvoteand/anonitemvote), abstentions are not shown to maintain privacy - Useful for votes where not all participants may have a strong preference
Close on Majority
closeonmajority(all votes): When enabled, the vote closes automatically once enough options reach majority- Majority threshold:
floor(totalVoters / 2) + 1votes for a single option (e.g., 4 out of 7 voters). Deactivated players are not counted as voters, and when vote weights are set the threshold is a majority of the total weight closewhenvotesreach: replaces the computed threshold with a fixed number of votes; it is only accepted together withcloseonmajority:True- Single-slot votes: closes as soon as one option (or abstain) reaches the majority threshold
- Multi-slot votes: requires one option per slot to each independently reach majority — in practice this is very unlikely to trigger early, so
closeonmajorityis most effective withvotecount:1 - The vote ends immediately when the threshold is hit — no need to wait for the scheduled close time
- A controller's pawns can end the vote early: if moving them onto the controller's choice reaches the threshold, they move and the vote closes
Vote Weights
- Set on the Manage page; a weight applies to every count, threshold and percentage but never changes how many votes the player must cast
- Weight 0 keeps a player voting while counting nothing, which is different from deactivation
- Weights are public by default (
Alice ×2); turn Show weights off for a secret double vote - With weights in play, close on majority needs a majority of the total weight
Vote Pawns
- A pawn votes normally all day, then moves to the controller's vote at its own moment inside the last minute, logged like any other vote so it can be denied
- Pawns hammer on close-on-majority votes: they move early when that closes the vote
- Deactivating a controller leaves the pawn's own vote in place; deactivating a pawn keeps it out of the sync entirely
- Keep Show pawns off unless the mechanic is meant to be public
Randomize Options
randomizeoptions(all votes): When enabled, the order of vote options is shuffled in the vote embed- Useful for reducing position bias (e.g., players at the top of an alphabetical list receiving more votes by default)
- Each display of the embed may show options in a different order
Item Votes
- Format your options clearly with descriptive titles
- Keep descriptions concise - they appear in the vote interface
- Test your markdown formatting before creating the vote
- Post your options message just before running the item vote command
Announce Channel
- Player votes only - Vote commands work with
/voteand/anonvote, not item votes - Quick voting - Use
!vote <@player>for faster voting than clicking through embeds - Multi-slot voting - Use
!vote <slot> <@player>for multi-slot votes; the slot number is required - Check standings - Use
!vote resultsor!vote statusto post the current vote embed to the channel - Check your votes - Use
!myvotesto see a summary of all votes you've cast in the channel - Command validation - Bot validates all commands and prevents self-voting (unless
allowselfvoting:True) - Multiple votes - If multiple votes monitor the same channel, commands apply to all valid votes