coolguylentz

Reminder Bot MCD

Dec 29th, 2012
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.44 KB | None | 0 0
  1. ################################################
  2. #################### ABOUT #####################
  3. ################################################
  4. #
  5. # Reminder-0.2 by Fredrik Bostrom
  6. # for Eggdrop IRC bot
  7. #
  8. # Usage:
  9. # !remind nick time message
  10. # - creates a new reminder for nick in the
  11. # current channel at time with message
  12. # - time is a format parseable by the tcl
  13. # command 'clock scan'. If the time consists
  14. # of several words, it has to be enclosed
  15. # in "".
  16. # - examples:
  17. # !remind morbaq "tomorrow 10:00" Call Peter
  18. # !remind morbaq "2009-12-31 23:59" Happy new year!
  19. #
  20. # !reminders
  21. # - lists all active reminders
  22. #
  23. # !cancelReminder id
  24. # - cancels the reminder with id
  25. # - the id is the number preceeding the
  26. # reminder in the list produced by
  27. # !reminders
  28. # - note: the id may change as new reminders
  29. # are added or old reminders removed. Always
  30. # check the id just before cancelling
  31. #
  32. #
  33. ################################################
  34. ################ CONFIGURATION #################
  35. ################################################
  36.  
  37. set datafile "scripts/reminders.dat"
  38.  
  39. ################################################
  40. ######## DON'T EDIT BEOYND THIS LINE! ##########
  41. ################################################
  42.  
  43. bind pub - "!remind" pub:newReminder
  44. bind pub - "!reminders" pub:getReminders
  45. bind pub - "!cancelReminder" pub:cancelReminder
  46. bind pub n "\$inspectReminders" pub:inspectReminders
  47.  
  48. array set reminders {}
  49.  
  50. # save to file
  51. proc saveReminders {} {
  52. global reminders
  53. global datafile
  54.  
  55. set file [open $datafile w+]
  56. puts $file [array get reminders]
  57. close $file
  58. }
  59.  
  60. # the run-at-time procedure
  61. proc at {time args} {
  62. if {[llength $args]==1} {
  63. set args [lindex $args 0]
  64. }
  65. set dt [expr {($time - [clock seconds])*1000}]
  66. return [after $dt $args]
  67. }
  68.  
  69. proc printReminder {reminderId {fire "false"}} {
  70. global reminders
  71.  
  72. # get the reminder
  73. set reminder $reminders($reminderId)
  74.  
  75. set when [clock format [lindex $reminder 0] -format "%Y-%m-%d %H:%M"]
  76. set chan [lindex $reminder 1]
  77. set who [lindex $reminder 2]
  78. set timer [lindex $reminder 3]
  79. set what [lindex $reminder 4]
  80.  
  81. if {$fire} {
  82. putserv "PRIVMSG $chan :$who: --REMINDER-- $what"
  83. } else {
  84. putserv "PRIVMSG $chan :$reminderId: For $who at $when: $what"
  85. }
  86. }
  87.  
  88. proc fireReminder {reminderId} {
  89. global reminders
  90.  
  91. printReminder $reminderId "true"
  92. unset reminders($reminderId)
  93. saveReminders
  94. }
  95.  
  96. proc pub:newReminder {nick host handle chan text} {
  97. global reminders
  98.  
  99. # parse parameters
  100. set id [clock seconds]
  101. set who [lindex $text 0]
  102. set when [lindex $text 1]
  103. set time [clock scan $when]
  104. set what [lrange $text 2 end]
  105.  
  106. # create new entry
  107. set new [list $time $chan $who null $what]
  108.  
  109. # activate the event
  110. set timer [at $time fireReminder $id]
  111.  
  112. # putlog "new timer: $timer"
  113.  
  114. # set the timer associated with this reminder
  115. set new [lreplace $new 3 3 $timer]
  116. # putlog "new reminder: $new"
  117.  
  118. set reminders($id) $new
  119. saveReminders
  120.  
  121. putserv "PRIVMSG $chan :$who: New reminder at $when: \"$what\""
  122. }
  123.  
  124. proc pub:getReminders {nick host handle chan text} {
  125. global reminders
  126. set chanReminders {}
  127.  
  128. # count all reminders for this channel
  129. foreach {key value} [array get reminders] {
  130. if {[lindex $value 1] == $chan} {
  131. lappend chanReminders $key
  132. }
  133. }
  134.  
  135. # count the reminders
  136. set howMany [llength $chanReminders]
  137.  
  138. # do we have reminders?
  139. if {$howMany < 1} {
  140. putserv "PRIVMSG $chan :No active reminders."
  141. return
  142. }
  143.  
  144. # print reminders for this channel
  145. putserv "PRIVMSG $chan :$howMany active reminder(s):"
  146. foreach key $chanReminders {
  147. printReminder $key
  148. }
  149. }
  150.  
  151. proc pub:cancelReminder {nick host handle chan text} {
  152. global reminders
  153.  
  154. set reminder $reminders($text)
  155. set timer [lindex $reminder 3]
  156.  
  157. # putlog "Cancelling timer: $timer"
  158. after cancel $timer
  159. unset reminders($text)
  160. putserv "PRIVMSG $chan :Removed reminder with id $text"
  161.  
  162. saveReminders
  163. }
  164.  
  165. proc pub:inspectReminders {nick host handle chan text} {
  166. global reminders
  167.  
  168. set timerString [after info]
  169. set reminderString [array get reminders]
  170.  
  171. putserv "NOTICE $nick :Reminders: $reminderString"
  172. putserv "NOTICE $nick :Timers: $timerString"
  173. }
  174.  
  175. proc initReminders {} {
  176. global reminders
  177.  
  178. set reminderString [array get reminders]
  179. # putlog "Initiating reminders: $reminderString"
  180.  
  181. # get current time
  182. set time [clock seconds]
  183.  
  184. # get active timers
  185. set activeTimers [after info]
  186.  
  187. # check for expired reminders and fire them
  188. foreach {key value} [array get reminders] {
  189. if {[lindex $value 0] < $time} {
  190. fireReminder $key
  191. } elseif {[lsearch $activeTimers [lindex $value 3]] == -1} {
  192. # if the reminder hasn't expired, check if the timer is already set
  193. set timerId [at [lindex $value 0] fireReminder $key]
  194. set reminders($key) [lreplace $value 3 3 $timerId]
  195. }
  196. }
  197. saveReminders
  198. }
  199.  
  200.  
  201. # read the old if they exist
  202. set file [open $datafile]
  203. set content [read $file]
  204. close $file
  205.  
  206. if {$content == ""} {
  207. set content {}
  208. }
  209.  
  210. array set reminders $content
  211.  
  212. initReminders
  213.  
  214.  
  215. ###################################
  216. putlog "Reminder script loaded!"
  217. ###################################
Advertisement
Add Comment
Please, Sign In to add comment