Chad is a helpful agent for conducting a preference poll over an IRC session. It has been developed for potential use during W3C meetings, in particular for preference polls conducted during telcons.
Votes are counted using the Single Transferable Vote system.
Ties are broken randomly which is unlikely to be satisfactory for many cases, but may be useful in making important decisions such as which restaurant to book for the group meal.
Inviting Chad
To use Chad, you must first invite it to your IRC session. When
you're finished, you should dismiss Chad from the channel.
/invite vote [<channel>]
Brings Chad on to your IRC channel.
Most irc clients let you omit the channel name and will fill in the
name of current channel. This is a feature of the irc client, not of
Chad.
Talking to Chad
Chad also recognizes several commands during its logging session. All
commands begin with either
"chad, "
or
"vote: ".
In the command descriptions below, optional words in commands are
indicated in square brackets. Chad's commands are not case sensitive,
but, in general, must be grammatically correct. "Please" can be abbreviated
to "pls" if you wish to be polite yet still save keystrokes.
Starting a New Poll
chad, new [straw] [poll]
chad, new [vote]
Clears question, options, votes and other data in preparation for a new poll.
Question
chad, question: <text>
Sets the question text.
chad, what is the question[?]
chad, what's the question[?]
chad, question[?]
Retrieves the current question text.
Options
An option id begins with a digit, e.g. "1", "3b", "5a1":
chad, option <id>: <text>
Adds or replaces the option text.
chad, withdraw option <id>
chad, delete option <id>
chad, remove option <id>
chad, drop option <id>
Removes the current option from the poll. Votes placed
for this option will be ignored during the count.
chad, list [the] options
chad, what [are] [the] options[?]
chad, options[?]
Lists the current options.
chad, what is option <id>[?]
chad, what's option <id>[?]
Lists the identified option.
Casting a Vote
vote: <id>[[,] <id> ...]+
Casts a series of votes, the order of the list of options indicates the order of preference. You do not have to vote for all of the options.
vote: <name> :<id>[[,] <id> ...]+
Casts a series of votes for a name, possibly not someone not on IRC.
vote: abstain[s]
Abstain from the poll.
vote: <name> abstain[s]
Abstain on behalf of a name.
chad, list [the] voters
chad, who has voted[?]
chad, who voted[?]
chad, voted[?]
Lists the names of people who have voted.
Voters
chad, drop <voter>
drop the named voter's votes from the poll.
chad, [list] [who has] voted
chad, voted?
Lists the names of people who have voted.
chad, clear [votes]
Clears all votes taken in preparation for another poll using the same question and options.
Counting
chad, count
Counts the votes and reports on the winner.
chad, [show] [count] details
chad, details[?]
chad, detail[?]
Shows detailed informatin of how the votes were counted
Help
chad, help
chad, hi
chad, say hi
chad, help me
chad, introduce yourself
Displays some brief help and version information
Pinging
ping
pinging
pings
pingping
chad, ping
Returns a reflex pong message, useful when testing an IRC connection
Dismissing Chad
chad, excuse us
chad, leave [us]
chad, depart
chad, part
chad, goodbye
chad, bye
Disconnect Chad from your IRC channel.
Shutting Down Chad
chad, die die die
Causes the Chad process to disconnect from the IRC server and exit. This will remove Chad from all channels and make it no longer able to answer invitations.
Example Session
pauld chad, restart
chad *new poll
pauld chad, question: which cuisine for tonight's meal?
chad *question: which cuisine for tonight's meal?
pauld chad, Option 1a: Indian
chad *option 1a : Indian
pauld chad, Option 1b: French
chad option 1b : French
pauld vote: 1a,1b
chad *paul votes: 1a, 1b
pauld vote: Roberto: 1b,1a
chad *Roberto votes: 1b, 1a
Marsh vote: 1a
chad *Marsh votes: 1a
Hugo vote: 1b
chad *Hugo votes: 1b
pauld chad, count
chad *Round 1: Count of first place rankings.
chad *Round 2: Tie when choosing candidate to eliminate.
chad * Tie at round 1 between 1a, 1b.
chad * Tie broken randomly.
chad * Eliminating candidate 1b.
chad * Candidate 1a is elected.
chad Winner is option 1a - Indian
Source Code
Chad is released as Open Source under GPL and available as source.
Acknowledgements
Chad is written in Python.
Chad uses the following Open Source packages which are bundled with the release:
It will be possible to modify and delete each other's votes. This is probably OK give you can list voters and votes before a count.
drop votes hasn't been implemented, yet, you have to abstain
You can vote by proxy as many times as you like, e.g. for MMouse, GeorgeBush, etc. Jonathan has some ideas on an interaction with Zakim's attendence list.
STV library is GPL, and I would prefer to release this under a less restrictive license.
The syntax should be compatible with Zakim and RRSAgent, however the 'vote:' commands may clash with the notation used by David's scribe.pl script.
Options should be able to cope with letters as well as numbers
Syntax for setting options could be more flexible about ':'s
Text from pSTV refers to "election", "candidates" and "ballot".
ability to clear votes, but keep question and options
Might be nice to be able to lock down a poll before a count (JeffM)
When conducting a poll, people often vote tactically or follow the lead of others. To avoid this, those wishing to vote on IRC could send a private message to votebot. The channel name would have to be cited, given there may be multiple polls in progress at the same time.