Polls
Moderators can create polls, which are visible while they are “open” or “closed” and only visible to moderators while they are in “draft” or “archived” state.
Posting polls can be locked per room to only allow polls at a certain time. To clear polls after or before a logical session, single polls can be deleted or archived (“delete all” to be implemented by the client):
{
id: uuid,
room_id: uuid,
timestamp: Datetime,
content: String,
state: String, // 'open', 'closed', 'draft', 'archived'
poll_type: String, // 'choice', 'multi'
results: Object, // only included for mods, for closed polls, or polls the user has voted on
answers: Array, // ONLY INCLUDED ON "poll.list"
is_pinned: Boolean,
options: [
{
id: uuid,
content: String,
order: Integer,
}
]
answered: List // answers the current user has posted, available on list actions
}
Permissions
There are three permissions involved with the polls API:
room:poll.read
to be able to see polls at allroom:poll.vote
to be able to vote on pollsroom:poll.manage
to be able to update or delete polls, and to activate and deactivate the polls module
Room Config
To enable polls for a room, add the polls module to the room modules:
{
"name": "Room with polls",
"modules": [{
type: 'poll',
config: {
active: true, // false by default
requires_moderation: false // true by default
}
}],
…
}
## poll.create
To create a poll, send a message like this:
=> ["poll.create", 1234, {"room": "room_0", "content": "What is your favourite colour?", options=[{"content": "Yes", "order": 1}, {"content": "No", "order": 2}]}]
<- ["success", 1234, {"poll": {…}}]
<= ["poll.created_or_updated", {"poll": {…}}]
On creates and on updates, all people in the room who have the required access rights will receive a message like this:
<= ["poll.created_or_updated", {"poll": {…}}]
## poll.update
To update a poll (only permitted for moderators), send a message like this:
=> ["poll.update", 1234, {"room": 123, "id": "UUID", "state": "visible"}]
<- ["success", 1234, {"poll": {…}}]
<= ["poll.created_or_updated", {"poll": {…}}]
To change the options, adjust the "options"
. To update an option, remember
to include its ID, to remove it, drop it from the options list, and to add a
new option, add it to the list without an ID.
## poll.list
Given a room ID, return all the polls that are visible to the user:
=> ["poll.list", 1234, {"room": "room_0"}]
<- ["success", 1234, [{"id": }, ...]
Note that the poll object has an added answers
# TODO wtf is in there?
boolean attribute denoting how the user has answered this poll.
## poll.vote
Given a room ID and a poll ID, users can select one or multiple options as a list of IDs:
=> ["poll.vote", 1234, {"room": "room_0", "id": 12, "options": ["ed1", "ed2"]}]
<- ["success", 1234, [{"id": }, ...]
## poll.delete
Only moderators may delete polls. Delete notifications are broadcasted like this:
=> ["poll.delete", 1234, {"room": "room_0", "id": 12}]
<- ["success", 1234, [{"id": }, ...]
<= ["poll.deleted", {"room": "room_0", "id": 12}]
## poll.pin
, poll.unpin
Only moderators may pin polls, like this:
=> ["poll.pin", 1234, {"room": "room_0", "id": 12}]
<- ["success", 1234, [{"id": }, ...]
<= ["poll.pinned", {"room": "room_0", "id": 12}]
Unpinning does not require an ID:
=> ["poll.unpin", 1234, {"room": "room_0"}]
<- ["success", 1234, [{}, ...]
<= ["poll.unpinned", {"room": "room_0"}]