Feety's Poll Script

By Feety on Apr 08, 2009

Well, I made this sometime in February of 2009, Its been in the same state since then, never changed. I never got around to actually posting about it, so here it is. A poll script which uses dialog boxes to create the poll.

This was my first time ever using dialog boxes.
I'm sure a lot of code could be cleaned up, it is messy imo.
Feel free to make changes.

Commands:
/addpoll - Adds poll
/unsetpoll - Unsets all poll-related variables, there shouldn't be any leftover though :x
!poll - Shows the current Poll
!castvote1 - Casts vote for option 1
!castvote2 - Casts vote for option 2
!results - Shows the results of the current poll.

Changelog:
4/8/09-2: Fixed some grammar and the percentages being displayed.
4/8/09: Pretty much prepared it for the release.
sometime in February: created it.

Image

;---------------Feety's Poll Script-----------;
;
;- Created: Sometime in February 2009. It's been sitting in my remotes for far too long.
;
;- Description:
;- Poll script using dialog boxes and many other events.
;-
;- Last Updated: April 8, 2009
;- 
;- Changelog:
;- 4/8/09: Pretty much prepared it for the release.
;- sometime in February: created it.
;
;- Commands:
;- /addpoll - Adds poll
;- /unsetpoll - Unsets all poll-related variables, there shouldn't be any leftover though :x
;- !poll - Shows the current Poll
;- !castvote1 - Casts vote for option 1
;- !castvote2 - Casts vote for option 2
;- !results - Shows the results of the current poll.
;
;- Other Info:
;- You can find me on irc.rizon.net Channel #pancakes
;- site: http://www.radicalwhale.net
;
;---------------------------------------------;

;Menu...yeah.
menu * {

  Poll Creator { addpoll }

}

;Basically this will active from a timer, see the on join part.
;It will see if they have already voted, and if they have not, it will notify them. Unless
;they chose not to be.

alias polljoin {
  ;//echo $address(%pollpnick,5)
  if (%pollpnick == $me) { /unsetpoll | halt }
  if ($ini(polls.ini,%pollpchan)) {
    set %pollnotifer notify $+ %pollpchan $+ .txt
    set %polltempfile voters $+ %pollpchan $+ .txt
    if (($read(%polltempfile,w,%pollwildsite)) || ($read(%pollnotifer,w,%pollwildsite))) {

      /unsetpoll
      halt
    }
    else {

      set %pollquestion $readini(polls.ini,n,%pollpchan,question)
      notice %pollpnick 8,1Hello %pollpnick $+ , It seems that you have not voted for the latest poll! type '!poll' to see it! || The Current Poll is ' $+ %pollquestion $+ ' || If you do not want to be notified about new polls then type '!notify off'.
      /unsetpoll
      halt
    }
  }
  else {

    /unsetpoll
    halt
  }
}

;Just sets variables for when someone joins. Timers are there so if someone has a vhost
;it wont get the raw host, by 5 seconds their vhost should be activated.
;Here lay the only bug I have come across, Sometimes it will still notify the person even
;if they don't want to be or have already voted.

on *:join:#:{
  set %pollpchan $chan
  set %pollpNick $nick
  timer 1 5 set %pollwildsite $wildsite
  timer 1 5 set %pollpchan $chan
  timer 1 5 set %pollpnick $nick
  timer 1 10 polljoin
}

;Allows user to specify if they should be notified of new polls.

on *:Text:!notify*:#:{
  if ($2 == off) { 
    /write notify $+ $chan $+ .txt $wildsite
    notice $nick You will no longer be notified about new polls when you join. To turn it back on type '!notify on'.
  }
  else { 
    if ($2 == on) {
      /write -ds $+ $wildsite notify $+ $chan $+ .txt
      notice $nick You will now be notified about new polls when join.
    }
    else {
      halt
    }
  }
}

;jonesy44's Truncate script.

alias truncate {
  if ($isid) {
    if ($1 !isnum) { return 2* $truncate: incorrect paramater $+($qt($1),;) $truncate(maxlength,text) }
    else { return $mid($2-,0,$iif(c isin $prop,$calc($1 + $numtok($mid($2-,0,$1),32)),$1)) $iif(e !isin $prop,$iif($len($2-) > $1,..)) }
  }
  else { echo -a 2* $!truncate: error; this alias can only be used as an identifier ($truncate form) }
}

;Alas the poll, pretty self explanitory.

on *:text:!poll:#:{
  if (!$ini(polls.ini,$chan)) { notice $nick sorry no poll for this channel | halt }
  set %pollquestion $readini(polls.ini,n,$chan,question)
  set %pollchoice1 $readini(polls.ini,n,$chan,choice1)
  set %pollchoice2 $readini(polls.ini,n,$chan,choice2)
  set %pollvotes $readini(polls.ini,n,$chan,votes)
  set %pollc2votes $readini(polls.ini,n,$chan,c2votes)
  set %pollc1votes $readini(polls.ini,n,$chan,c1votes)

  notice $nick -=The current poll for $chan is as followed=-
  notice $nick Question: %pollquestion 
  notice $nick Choice #1: %pollchoice1
  notice $nick Choice #2: %pollchoice2
  notice $nick to vote, type '!castvote 1' or '!castvote 2'.
  notice $nick After you vote you can use '!results' to see the data.

  /unsetpoll
}

;casting a vote, makes sure they havent voted yet.

on *:text:!castvote*:#:{
  set %pollc2votes $readini(polls.ini,n,$chan,c2votes)
  set %pollc1votes $readini(polls.ini,n,$chan,c1votes)
  set %pollvotes $readini(polls.ini,n,$chan,votes)
  set %pollchoice1 $readini(polls.ini,n,$chan,choice1)
  set %pollchoice2 $readini(polls.ini,n,$chan,choice2)

  set %polltempfile voters $+ $chan $+ .txt
  if ($read(%polltempfile,w,$wildsite)) {
    notice $nick You have already voted for this poll.
    /unsetpoll
    halt
  }
  else {
    if ($2 == 1) {
      notice $nick You have voted for Choice #1 ( $+ %pollchoice1 $+ )
      /inc %pollc1votes
      /inc %pollvotes
      /writeini polls.ini $chan c1votes %pollc1votes
      /writeini polls.ini $chan votes %pollvotes
      /write %polltempfile $wildsite
      /unsetpoll
    }
    else {
      if ($2 == 2) {
        notice $nick You have voted for Choice #2 ( $+ %pollchoice2 $+ )
        /inc %pollc2votes
        /inc %pollvotes
        /writeini polls.ini $chan c2votes %pollc2votes
        /writeini polls.ini $chan votes %pollvotes
        /write %polltempfile $wildsite
        /unsetpoll
      }
      else {
        /unsetpoll
        halt
      }
    }
  }
}

;results of the poll. Makes sure they have voted in order to see this.

on *:text:!results:#:{
  set %polltempfile voters $+ $chan $+ .txt
  if ($read(%polltempfile,w,$wildsite)) {
    set %pollquestion $readini(polls.ini,n,$chan,question)
    set %pollchoice1 $readini(polls.ini,n,$chan,choice1)
    set %pollchoice2 $readini(polls.ini,n,$chan,choice2)
    set %pollvotes $readini(polls.ini,n,$chan,votes)
    set %pollc2votes $readini(polls.ini,n,$chan,c2votes)
    set %pollc1votes $readini(polls.ini,n,$chan,c1votes)

    notice $nick -=The current poll is as followed=-
    notice $nick Question: %pollquestion 
    notice $nick Choice #1: %pollchoice1 ( %pollc1votes votes || $truncate(5,$calc((%pollc1votes / %pollvotes) * 100)).e $+ % )
    notice $nick Choice #2: %pollchoice2 ( %pollc2votes votes || $truncate(5,$calc((%pollc2votes / %pollvotes) * 100)).e $+ % )
    notice $nick Total Votes: %pollvotes
    /unsetpoll

  }
  else {
    notice $nick You need to vote before you can see results.
    /unsetpoll
  }
}

;an alias to add a poll.

alias addpoll {
  /dialog -m poll poll
}

;the dialog box.

dialog poll {
  title "Poll Creator"
  size 169 260 169 260
  text "Create a Poll!", 1, 10 10 140 20

  ;poll question
  Box "Enter the poll question below:", 2, 6 35 156 39
  edit "", 3, 9 50 150 20, autohs

  ;option 1
  Box "Option #1:", 4, 6 80 156 39
  edit "", 5, 9 95 150 20, autohs

  ;option 2
  Box "Option #2:", 6, 6 120 156 39
  edit "", 7, 9 135 150 20, autohs

  ;Channel
  Box "Channel:", 10, 6 160 156 39
  edit $active, 11, 9 175 150 20, autohs

  ;buttons
  button "Create Poll!",8, 9 220 70 30, ok
  button "Cancel :(",9, 90 220 70 30, cancel
}

;and procedure to create the poll.
on *:dialog:poll:sclick:8:{

  if ($ini(polls.ini, $did(11).text)) {
    set %pollquestion $readini(polls.ini,n,$did(11).text,question)
    set %pollchoice1 $readini(polls.ini,n,$did(11).text,choice1)
    set %pollchoice2 $readini(polls.ini,n,$did(11).text,choice2)
    set %pollvotes $readini(polls.ini,n,$did(11).text,votes)
    set %pollc2votes $readini(polls.ini,n,$did(11).text,c2votes)
    set %pollc1votes $readini(polls.ini,n,$did(11).text,c1votes)
    msg $did(11).text The Current Poll has closed! The Final Results Are As Followed:
    msg $did(11).text Question: %pollquestion 
    msg $did(11).text Choice #1: %pollchoice1 ( %pollc1votes votes || $truncate(5,$calc((%pollc1votes / %pollvotes) * 100)).e $+ %poll )
    msg $did(11).text Choice #2: %pollchoice2 ( %pollc2votes votes || $truncate(5,$calc((%pollc2votes / %pollvotes) * 100)).e $+ %poll )
    msg $did(11).text With a total of %pollvotes vote(s).
  }

  /remini polls.ini $did(11).text
  set %pollquestion $did(3).text
  set %pollchoice1 $did(5).text
  set %pollchoice2 $did(7).text
  set %pollfilename voters $+ $did(11).text $+ .txt
  /write -c %pollfilename
  /write notify $+ $did(11).text $+ .txt
  /writeini polls.ini $did(11).text question %pollquestion
  /writeini polls.ini $did(11).text choice1 %pollchoice1
  /writeini polls.ini $did(11).text choice2 %pollchoice2
  /writeini polls.ini $did(11).text votes 0
  /writeini polls.ini $did(11).text c1votes 0
  /writeini polls.ini $did(11).text c2votes 0

  timer 1 10 msg $did(11).text Hey guys! A new poll titled ' $+ %pollquestion $+ ' has been created! Type !poll to see it.
  /unsetpoll
}

;This unsets every variable, I probably missed one D:
alias unsetpoll {
  unset %pollquestion
  unset %pollchoice1
  unset %pollchoice2
  unset %pollfilename
  unset %polltempfile
  unset %pollvotes
  unset %pollc1votes
  unset %pollc2votes
  unset %pollwildsite
  unset %pollpNick
  unset %pollpchan
  unset %pollnotifer
}

Comments

Sign in to comment.
Razor_FX_II   -  May 11, 2009

Would be nice to have 4 or 5 voting choices and an option for user to enter a non predefined choice.
Because snippet creates directories from the channel name, you can not use this on a channel that has invalid file name characters such as "|" in the channel name.

This would be the best poll script with these additions and fixes.

 Respond  
Feety   -  Apr 08, 2009

Thanks, I fixed some spelling and grammar, If i missed anything feel free to show DX

 Respond  
94killerz   -  Apr 08, 2009

[16:11] <~LittleHelper> Hey guys! A new poll titled 'Does this work?' has been created!Type !poll to see it.
[16:11] <~killerz> !poll
[16:11] --LittleHelper-- -=The current poll for #gdu is as followed=-
[16:11] --LittleHelper-- Question: Does this work?
[16:11] --LittleHelper-- Choice #1: Yes.
[16:11] --LittleHelper-- Choice #2: No!
[16:11] --LittleHelper-- to vote, type '!castvote 1' or '!castvote 2' to vote for that choice.
[16:11] --LittleHelper-- After you vote you can use '!results' to see the data.
[16:11] <~killerz> !castvote 1
[16:11] --LittleHelper-- You have voted for Choice #1 (Yes.)
[16:11] <~killerz> !results
[16:11] --LittleHelper-- -=The current poll is as followed=-
[16:11] --LittleHelper-- Question: Does this work?
[16:11] --LittleHelper-- Choice #1: Yes. ( 1 votes || 100 )
[16:11] --LittleHelper-- Choice #2: No! ( 0 votes || 0 )
[16:11] --LittleHelper-- Total Votes: 1
[16:12] <~killerz> !castvote 2
[16:12] --LittleHelper-- You have already voted for this poll

Only suggestion would be to double-check spelling and grammar. 9/10

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.