Create and vote on polls on ssb
background details relevant to understanding what this module does
repos:
ssb://%uUPqduvyGE2mUBIWdVwMg4jYcKUjxN+TF2wG4a7StM8=.sha256git@github.com:ssbc/scuttle-poll.gitvar Sbot = require('ssb-client')
Sbot((err, server) => {
  if (err) {
    return console.log(err)
  }
  var ScuttlePoll = require('scuttle-poll')
  var scuttlePoll = ScuttlePoll(server)
})
where server is a scuttlebot instance (or a remote connection provided by ssb-client)
Note - server can also be an observeable which resolves to a scuttlebot instance
(this is more experimental, it will turn your sync functions into obs functions)
This returns an object with methods defined in methods.js that looks like:
{
  poll: {
    async: {
      chooseOne:  
      get:
    },
    sync: {
      isPoll:
      isChooseOnePoll:
    } 
  },
  position: {
    async: {
      chooseOne:
      position:
    },
    sync: {
      isPosition:
      chooseOneResults:
    } 
  }
}
Requires a scuttlebutt server with the following plugins installed:
ssb-backlinksvar ScuttlePoll = require('scuttle-poll')
var scuttlePoll = ScuttlePoll(server)
scuttle.poll.sync.isPoll(msg) => BooleanTakes a msg or the contents of a msg
You can also check for subtypes of poll e.g.
isPoll.chooseOne(msg)
// => Boolean
scuttle.poll.async.get(key, cb)fetches all the messages associated with a particular poll, and returns a delightfully accessible object:
{
  key:        MessageKey,
  value:      MessageValue,
  author:     FeedId,
  title:      String,
  body:       (String|Null),
  positions:  Array,
  myPosition: Object,
  results:    Array,
  resolution: Msessage,
  errors:     Object
  heads:      Array
}
scuttle.poll.async.publishChooseOne(opts, cb)// NOT BUILT YET
where opts is an object of form:
{
  title: String,    // required
  choices: Array,   // required
  body: String,
}
and cb is a callback of signature (err, newPollMsg)
With npm installed, run
$ npm install scuttle-poll
Poll message content
{
  type:       'poll',          // required
  details: PollDetails     // required
  title:       String,         // required
  closesAt:    Integer         // required
  body:        String,
  channel,
  mentions,
  recps
}
Where PollDetails is an object which has the details needed for each type of poll: Dot, Proposal, Score
Dot vote PollDetails
{
  type: 'dot', // required
  maxStanceScore: 'Integer >= 0', // required
  maxChoiceScore: 'Integer >= 0', //optional
  choices: Array, // required
}
Proposal PollDetails
{
  type: 'proposal', // required
  proposal: String, // required
}
Score PollDetails
{
  type: 'score', // required
  maxChoiceScore: 'Integer >= 0', //required
  choices: Array, // required
}
{
  type:           'position',
  root:            MessageKey,
  details: Object
}
chooseOne details:
{
  choice:
}
scuttle-poll was inspired by Loomio! Massive thanks to Rob Guthrie and James Kiesel for spending time giving us a brain dump of their data model.
MIT