I need to customize time format in this (reminder) script. Default format is "%Y-%m-%d %H:%M".
It can be easily modified for listing reminders output
Code: Select all
set when [clock format [lindex $reminder 0] -format "%d-%m-%Y %H:%M"]
<torrevado> !reminders
<bot> 1 active reminder(s):
<torrevado> 1289775002: For torrevado at 14-11-2010 23:59: let's do a test
The problem is that I can't make the script work for my date-time format inputs (activating reminder). For an input
the script "understands" a wrong date:!remind torrevado "15-11-2010 00:09" let's do a test
My question is if it can be solved with [clock format] or if I'm wrong with it. Any help/explanation would be appreciated.<torrevado> !reminders
<bot> 1 active reminder(s):
<bot> 1289777003: For torrevado at 02-05-2021 00:09: let's do a test
And here it's the script:
Code: Select all
################################################
#################### ABOUT #####################
################################################
#
# Reminder-0.2 by Fredrik Bostrom
# for Eggdrop IRC bot
#
# Usage:
# !remind nick time message
# - creates a new reminder for nick in the
# current channel at time with message
# - time is a format parseable by the tcl
# command 'clock scan'. If the time consists
# of several words, it has to be enclosed
# in "".
# - examples:
# !remind morbaq "tomorrow 10:00" Call Peter
# !remind morbaq "2009-12-31 23:59" Happy new year!
#
# !reminders
# - lists all active reminders
#
# !cancelReminder id
# - cancels the reminder with id
# - the id is the number preceeding the
# reminder in the list produced by
# !reminders
# - note: the id may change as new reminders
# are added or old reminders removed. Always
# check the id just before cancelling
#
#
################################################
################ CONFIGURATION #################
################################################
set datafile "scripts/reminders.dat"
################################################
######## DON'T EDIT BEOYND THIS LINE! ##########
################################################
bind pub - "!remind" pub:newReminder
bind pub - "!reminders" pub:getReminders
bind pub - "!cancelReminder" pub:cancelReminder
bind pub n "\$inspectReminders" pub:inspectReminders
array set reminders {}
# save to file
proc saveReminders {} {
global reminders
global datafile
set file [open $datafile w+]
puts $file [array get reminders]
close $file
}
# the run-at-time procedure
proc at {time args} {
if {[llength $args]==1} {
set args [lindex $args 0]
}
set dt [expr {($time - [clock seconds])*1000}]
return [after $dt $args]
}
proc printReminder {reminderId {fire "false"}} {
global reminders
# get the reminder
set reminder $reminders($reminderId)
set when [clock format [lindex $reminder 0] -format "%Y-%m-%d %H:%M"]
set chan [lindex $reminder 1]
set who [lindex $reminder 2]
set timer [lindex $reminder 3]
set what [lindex $reminder 4]
if {$fire} {
putserv "PRIVMSG $chan :$who: --REMINDER-- $what"
} else {
putserv "PRIVMSG $chan :$reminderId: For $who at $when: $what"
}
}
proc fireReminder {reminderId} {
global reminders
printReminder $reminderId "true"
unset reminders($reminderId)
saveReminders
}
proc pub:newReminder {nick host handle chan text} {
global reminders
# parse parameters
set id [clock seconds]
set who [lindex $text 0]
set when [lindex $text 1]
set time [clock scan $when]
set what [lrange $text 2 end]
# create new entry
set new [list $time $chan $who null $what]
# activate the event
set timer [at $time fireReminder $id]
# putlog "new timer: $timer"
# set the timer associated with this reminder
set new [lreplace $new 3 3 $timer]
# putlog "new reminder: $new"
set reminders($id) $new
saveReminders
putserv "PRIVMSG $chan :$who: New reminder at $when: \"$what\""
}
proc pub:getReminders {nick host handle chan text} {
global reminders
set chanReminders {}
# count all reminders for this channel
foreach {key value} [array get reminders] {
if {[lindex $value 1] == $chan} {
lappend chanReminders $key
}
}
# count the reminders
set howMany [llength $chanReminders]
# do we have reminders?
if {$howMany < 1} {
putserv "PRIVMSG $chan :No active reminders."
return
}
# print reminders for this channel
putserv "PRIVMSG $chan :$howMany active reminder(s):"
foreach key $chanReminders {
printReminder $key
}
}
proc pub:cancelReminder {nick host handle chan text} {
global reminders
set reminder $reminders($text)
set timer [lindex $reminder 3]
# putlog "Cancelling timer: $timer"
after cancel $timer
unset reminders($text)
putserv "PRIVMSG $chan :Removed reminder with id $text"
saveReminders
}
proc pub:inspectReminders {nick host handle chan text} {
global reminders
set timerString [after info]
set reminderString [array get reminders]
putserv "NOTICE $nick :Reminders: $reminderString"
putserv "NOTICE $nick :Timers: $timerString"
}
proc initReminders {} {
global reminders
set reminderString [array get reminders]
# putlog "Initiating reminders: $reminderString"
# get current time
set time [clock seconds]
# get active timers
set activeTimers [after info]
# check for expired reminders and fire them
foreach {key value} [array get reminders] {
if {[lindex $value 0] < $time} {
fireReminder $key
} elseif {[lsearch $activeTimers [lindex $value 3]] == -1} {
# if the reminder hasn't expired, check if the timer is already set
set timerId [at [lindex $value 0] fireReminder $key]
set reminders($key) [lreplace $value 3 3 $timerId]
}
}
saveReminders
}
# read the old if they exist
set file [open $datafile]
set content [read $file]
close $file
if {$content == ""} {
set content {}
}
array set reminders $content
initReminders
###################################
putlog "Reminder script loaded!"
###################################