home *** CD-ROM | disk | FTP | other *** search
/ HaCKeRz KrOnIcKLeZ 3 / HaCKeRz_KrOnIcKLeZ.iso / scriptz / ads.tcl < prev    next >
Text File  |  1996-04-23  |  3KB  |  89 lines

  1. # ads - tcl script for periodically displaying annoying little messages
  2. #
  3. # by Christian Williams (xian@youth.org)
  4.  
  5. # set ads(freq) to the number of minutes between ads (0 to disable)
  6. # set ads(file) to the name of the file to use to save ads
  7. #     ("ads" is default")
  8.  
  9. proc ad_rehash {} { global ads
  10.   if ![info exists ads(file)] { set ads(file) "ads" }
  11.   if ![info exists ads(freq)] { set ads(freq) 0 }
  12.   if ![info exists ads(num)] { set ads(num) 0 }
  13.   if ![file exists $ads(file)] { close [open $ads(file) w] }
  14.   set ads(list) "" ; set theAdFile [open $ads(file) r]
  15.   while {![eof $theAdFile]} {
  16.     set theAd [gets $theAdFile]
  17.     if {[string length $theAd] > 0} {
  18.       lappend ads(list) $theAd }
  19.   } ; close $theAdFile
  20. }
  21.  
  22. proc ad_write {} { global ads
  23.   set theAdFile [open $ads(file) w]
  24.   foreach theAd $ads(list) { puts $theAdFile $theAd }
  25.   close $theAdFile
  26. }
  27.  
  28. proc ad_sched { {name1 ""} {name2 ""} {op ""} } { global ads
  29.   if {($ads(freq) == 0) || [info exists ads(started)]} { return 0 }
  30.   set ads(started) 1
  31.   timer $ads(freq) ad_vertise
  32. }
  33. trace variable ads(freq) w ad_sched
  34.  
  35. proc ad_vertise {} { global ads channel
  36.   if {$ads(freq) == 0} { return 0 }
  37.   set theAd [lindex $ads(list) $ads(num)]
  38.   if {[string length [string trim $theAd]] > 0} {
  39.     putchan $theAd }
  40.   incr ads(num) 1 ; if {$ads(num) >= [llength $ads(list)]} { set ads(num) 0 }
  41.   unset ads(started) ; ad_sched
  42. }
  43.  
  44. ad_rehash
  45. ad_sched
  46.  
  47. proc dcc_ads {hand dcc rest} { global ads botnick
  48.   set ad_cmd [string tolower [lindex $rest 0]]
  49.   set ad_arg [lrange $rest 1 end]
  50.  
  51. # if the command is something other than "list" and the user isn't a master,
  52. #  display the help.
  53.   if {![string match $ad_cmd list] && ![matchattr $hand m]} { set ad_cmd help }
  54.  
  55.   switch $ad_cmd {
  56.     list    { set adnum 1 ; putdcc $dcc "Ads on $botnick: (* = next up)"
  57.               foreach theAd $ads(list) {
  58.                 if {[expr $ads(num)+1] == $adnum} {set pad "*"} {set pad " "}
  59.                 putdcc $dcc "$pad$adnum: $theAd" ; incr adnum 1 }
  60.               if {$adnum == 1} { putdcc $dcc " None." } ; return 0 }
  61.     add     { if {[string length $ad_arg]==0} { set showhelp 1 } else {
  62.               lappend ads(list) $ad_arg ; ad_write
  63.               putdcc $dcc "Added." ; return 1 } }
  64.     del     { if {[string length $ad_arg]==0 || [catch {incr ad_arg -1}]} {
  65.                 set showhelp 1 } else {
  66.               if {($ad_arg < 0) || ($ad_arg >= [llength $ads(list)])} {
  67.                 putdcc $dcc "Item is out of range" ; return 0 }
  68.               set ads(list) [lreplace $ads(list) $ad_arg $ad_arg] ; ad_write
  69.               putdcc $dcc "Deleted." ; return 1 } }
  70.     period  { set retval 0 ; if {[string length $ad_arg]!=0} {
  71.                 if [catch {incr ad_arg 0}] { set showhelp 1 } else {
  72.                   set retval 1 ; set ads(freq) $ad_arg } }
  73.                 if ![info exists showhelp] {
  74.                   if {$ads(freq) == 0} {
  75.             putdcc $dcc "Advertising turned off. (Period=0)"
  76.                   } else {
  77.             putdcc $dcc "Ads every $ads(freq) minutes." }
  78.                   return $retval } }
  79.  
  80.     rehash  { ad_rehash ; return 1 }
  81.     default { set showhelp 1 }
  82.   } ; if [info exists showhelp] { dccSimul $dcc "help ads" }
  83.   return 0
  84. }
  85.  
  86. bind dcc - ads dcc_ads
  87.  
  88. putlog "Advertising stuff loaded."
  89.