Mercurial > hg > egg-tcls
diff ruoka.tcl @ 0:1c4e2814cd41
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 21 Sep 2010 13:12:49 +0300 |
parents | |
children | 593874678e45 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ruoka.tcl Tue Sep 21 13:12:49 2010 +0300 @@ -0,0 +1,212 @@ +########################################################################## +# +# RuokaLista v1.1 by ccr/TNSP <ccr@tnsp.org> +# (C) Copyright 2004-2010 Tecnic Software productions (TNSP) +# +# Requires hae_ruoka.tcl to be run as a cronjob, for example +# 15 * * * * /absolute/path/to/hae_ruoka.tcl +# +# This script is freely distributable under GNU GPL (version 2) license. +# +########################################################################## + +# Vakioravintola, jos muuta ei annettu/asetettu +set ruoka_restaurant "OAMK" + +# Datatiedosto, oltava sama kuin hae_ruoka.tcl:n vastaava asetus +set ruoka_datafile "/home/niinuska/bot/data.ruoka" + +# Kellonaika, jolloin default-päivä vaihtuu seuraavaksi vuorokaudeksi +# -1 = Ei vaihdeta +# esim. 15 = klo 15 jälkeen näytetään vakiona seuraavan päivän ruokalista +set ruoka_threshold 15 + +# Yleiset asetukset +set ruoka_logmsg 1 +set ruoka_preferredmsg "PRIVMSG" + + +########################################################################## +# No need to look below this line +########################################################################## +set ruoka_name "RuokaLista" +set ruoka_version "1.1" + +### Binding initializations +bind pub - !ruoka ruoka_get_pub +bind msg - ruoka ruoka_get_msg +bind pub - !ruokaset ruoka_set_pub + +### Initialization messages +set ruoka_message "$ruoka_name v$ruoka_version by ccr/TNSP" +putlog "$ruoka_message" + +set ruoka_days {Sunnuntai Maanantai Tiistai Keskiviikko Torstai Perjantai Lauantai} + +#------------------------------------------------------------------------- +proc ruoka_log {arg} { + global ruoka_logmsg ruoka_name + if {$ruoka_logmsg != 0} { + putlog "$ruoka_name: $arg" + } +} + + +proc ruoka_msg {apublic anick achan amsg} { + global ruoka_preferredmsg + if {$apublic == 1} { + putserv "$ruoka_preferredmsg $achan :$amsg" + } else { + putserv "$ruoka_preferredmsg $anick :$amsg" + } +} + + +proc ruoka_get_restaurants {urestaurants} { + global ruoka_datafile + upvar $urestaurants restaurants + + if {![catch {set ufile [open "$ruoka_datafile" r 0600]} uerrmsg]} { + while {![eof $ufile]} { + gets $ufile uline + set urec [split $uline "½"] + if {[llength $urec] == 4} { + set restaurants([lindex $urec 0]) 1 + } + } + } +} + + +proc ruoka_match_day {umatch} { + global ruoka_days + if {$umatch == "" || $umatch == "{}"} { return "" } + set udate "" + foreach i $ruoka_days { + if {[string match "$umatch*" [string tolower $i]]} { set udate $i } + } + return $udate +} + + +proc ruoka_match_restaurant {urestaurants umatch} { + upvar $urestaurants restaurants + if {$umatch == "" || $umatch == "{}"} { return "" } + foreach {nimi arvo} [array get restaurants] { + if {[string match "$umatch*" [string tolower $nimi]]} { + return $nimi + } + } + return "" +} + + +#------------------------------------------------------------------------- +proc ruoka_get {unick uhand uchan uargs upublic} { + global ruoka_restaurant ruoka_datafile ruoka_days ruoka_threshold + + # Get list of restaurants + ruoka_get_restaurants restaurants + + # Check and handle arguments + set ulist [split [string tolower $uargs] " "] + set rarg1 [lindex $ulist 0] + set rarg2 [lindex $ulist 1] + + if {$rarg1 == "?" || $rarg1 == "help"} { + set tmp [join [array names restaurants] ", "] + ruoka_msg $upublic $unick $uchan "Käyttö: <!>ruoka \[ravintola\] \[päivä\]" + ruoka_msg $upublic $unick $uchan "Huom! Jos päivää ei anneta, tiedot haetaan tältä päivältä." + ruoka_msg $upublic $unick $uchan "Käyttö: <!>ruokaset <ravintola>" + ruoka_msg $upublic $unick $uchan "Jossa ravintola on yksi seuraavista: $tmp" + return 0 + } + + # Try to parse arguments, if any + set urestaurant "" + set udate "" + if {$rarg1 != ""} { + set udate [ruoka_match_day $rarg1] + if {$udate == ""} { + set udate [ruoka_match_day $rarg2] + set urestaurant [ruoka_match_restaurant restaurants $rarg1] + } else { + set urestaurant [ruoka_match_restaurant restaurants $rarg2] + } + } + + # Default date to today + if {$udate == ""} { + set sstamp [unixtime] + + # Check if threshold setting is active and act accordingly + if {$ruoka_threshold > 0 && [clock format $sstamp -format "%H"] > $ruoka_threshold} { + set sstamp [expr $sstamp + 60*60*(24 - $ruoka_threshold)+30] + } + + set udate [lindex $ruoka_days [clock format $sstamp -format "%w"]] + } + + # If no restaurant given, try to get one from user settings + if {$urestaurant == ""} { + set urestaurant [getuser $uhand XTRA "restaurant"] + # If still no known/set restaurant, use global default + if {$urestaurant == ""} { + set urestaurant $ruoka_restaurant + } + } + + # Read datafile + if {![catch {set ufile [open "$ruoka_datafile" r 0600]} uerrmsg]} { + set found 0 + while {![eof $ufile]} { + gets $ufile uline + set urec [split $uline "½"] + if {[llength $urec] == 4 && [lindex $urec 1] == $udate && [lindex $urec 0] == $urestaurant} { + ruoka_msg $upublic $unick $uchan "\002[lindex $urec 0]\002, [lindex $urec 1] \002[lindex $urec 2]\002: [lindex $urec 3]" + set found 1 + break + } + } + close $ufile + if {$found == 0} { + ruoka_msg $upublic $unick $uchan "Ei tietoja ($udate, $urestaurant)" + } + } else { + ruoka_log "Could not open datafile: $uerrmsg" + } +} + + + +#------------------------------------------------------------------------- +proc ruoka_get_pub {unick uhost uhand uchan uargs} { + ruoka_get $unick $uhand $uchan $uargs 1 + return 0 +} + +#------------------------------------------------------------------------- +proc ruoka_get_msg {unick uhost uhand uargs} { + ruoka_get $unick $uhand "PRIV" $uargs 0 + return 0 +} + +#------------------------------------------------------------------------- +proc ruoka_set_pub {unick uhost uhand uchan uargs} { + array unset restaurants + ruoka_get_restaurants restaurants + set rav "" + if {$uargs != "{}" && $uargs != ""} { + set rav [ruoka_match_restaurant restaurants $uargs] + } + if {$rav != ""} { + ruoka_msg 1 $unick $uchan "Vakioravintolaksi asetettu: $rav" + setuser $uhand XTRA "restaurant" "$rav" + } else { + set tmp [join [array names restaurants] ", "] + ruoka_msg 1 $unick $uchan "Ravintolan oltava yksi seuraavista: $tmp" + } + return 0 +} + +# end of script