This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Want this script to work on ALL channels.

Support & discussion of released scripts, and announcements of new releases.
Post Reply
c
cache
Master
Posts: 306
Joined: Tue Jan 10, 2006 4:59 am
Location: Mass

Want this script to work on ALL channels.

Post by cache »

Can someone help me set this to work in all channels the bot is in? I tried $chan with no luck, only lets script work in one room.

Code: Select all

#############################################################
##                                                         ##
##           Words of Wisdom v2.01 TCL (WoW)               ##
##   Display funny nonsense to your irc friends/channel    ##
##                  by Phil (Admin)                        ##
##              Penthux.net - June 2005                    ##
##                                                         ##
## This script is not meant to do anything except make you ##
## smile. The text file can contain any plain text,        ##
## whether it be jokes, channel adverts or whatever. When  ##
## adding your own content just make sure you put each     ##
## item on a seperate line in the text file. There is no   ##
## limit to how large or small the text file must be.      ##
##                                                         ##
## Usage:                                                  ##
## [channel commands]                                      ##
## !wow               = displays a WoW line to channel     ##
## !wow [nick|chan]   = displays WoW line to nick or chan  ##
##                                                         ##
## ** NB - only ops, halfops and voices in the named       ##
## #channel can use the !wow [nick|chan] command which can ##
## be sent to any nickname or channel on the network which ##
## allows external messages. All other users get the WoW   ##
## line back in their own query window. Change the code if ##
## you like as this setup primarily stops lamer flooding   ##
## to nicks/chans.                                         ##
##                                                         ##
## Installation:                                           ##
## 1. Set the irc #channel to display the WoW lines        ## 
## automatically and the timer intervals between output.   ##
## Edit your eggdrop filename.conf and add this line to    ##
## the end of the file:                                    ##
##                                                         ##
## source scripts/wow.tcl                                  ##
##                                                         ##
## 2. Copy the edited filename.conf file to your eggdrop   ##
## dir and copy both the wow.tcl & wow.txt files to the    ##
## SCRIPTS directory. Now reboot/restart your eggdrop bot. ##
##                                                         ##
## Please keep this header intact if you distribute or     ##
## modify this CGI script.               admin@penthux.net ##
#############################################################

## set the channel to display automatic WoW lines, include the '#' prefix
set wowchan "#your_channel"

## set the timer interval (in minutes) between WoW lines
set wowtime "30"


#######################################################
### don't change anything below if u don't know TCL ###
#######################################################

if { [info exists wowtime] } { timer $wowtime "timer:wow" }

set wowtxt "scripts/wow.txt"
set wowver "v2.01"

bind pub - !wow disp:wow

proc disp:wow {nick host handle chan text} {
  global wowchan wowtxt
  if { [isop $nick $wowchan] || [ishalfop $nick $wowchan] || [isvoice $nick $wowchan] } {  
    if { [lindex $text 0] != "" } {
        set wowto [lindex $text 0]
    } else {
        set wowto $wowchan
    }
      set wowfile [open $wowtxt r]
      set wowread [split [read $wowfile] \n]
      close $wowfile
      putserv "PRIVMSG $wowto :[lindex $wowread [rand [llength $wowread]]] "
  } else {
      set wowfile [open $wowtxt r]
      set wowread [split [read $wowfile] \n]
      close $wowfile
      putserv "PRIVMSG $nick :[lindex $wowread [rand [llength $wowread]]] "
  }
}

proc timer:wow {} {
  global botnick wowchan wowtime wowtxt
  if { [onchan $botnick $wowchan] } {
    set wowfile [open $wowtxt r]
    set wowread [split [read $wowfile] \n]
    close $wowfile
    putserv "PRIVMSG $wowchan :[lindex $wowread [rand [llength $wowread]]] "
    timer $wowtime "timer:wow" 
  }
}

putlog "Words of Wisdom $wowver TCL (timer: $wowtime mins) - Loaded! "

#
#
Thanks
User avatar
rosc2112
Revered One
Posts: 1454
Joined: Sun Feb 19, 2006 8:36 pm
Location: Northeast Pennsylvania

Post by rosc2112 »

Code: Select all

################################################################################################################
## set the channel to display automatic WoW lines, include the '#' prefix
set wowchans "#your_channel #channel2 #chan3 #etc"

## set the timer interval (in minutes) between WoW lines
set wowtime "30"

if { [info exists wowtime] } { timer $wowtime "timer:wow" }

set wowtxt "scripts/wow.txt"
set wowver "v2.01"

bind pub - !wow disp:wow

proc disp:wow {nick host handle chan text} {

# Need to leave 'wowchan' in the global dec so it'll carry over to the timer
  global wowchans wowchan wowtxt

# test if the channel is in the wowchans list and set 'wowchan' accordingly.
if {[lsearch -exact $wowchans $chan] != -1} {
               set wowchan $chan         
     } else {
               # did not match a channel in the "wowchans list"
               return
     }


  if { [isop $nick $wowchan] || [ishalfop $nick $wowchan] || [isvoice $nick $wowchan] } { 
    if { [lindex $text 0] != "" } {
        set wowto [lindex $text 0]
    } else {
        set wowto $wowchan
    }
      set wowfile [open $wowtxt r]
      set wowread [split [read $wowfile] \n]
      close $wowfile
      putserv "PRIVMSG $wowto :[lindex $wowread [rand [llength $wowread]]] "
  } else {
      set wowfile [open $wowtxt r]
      set wowread [split [read $wowfile] \n]
      close $wowfile
      putserv "PRIVMSG $nick :[lindex $wowread [rand [llength $wowread]]] "
  }
}

proc timer:wow {} {
  global botnick wowchan wowtime wowtxt
  if { [onchan $botnick $wowchan] } {
    set wowfile [open $wowtxt r]
    set wowread [split [read $wowfile] \n]
    close $wowfile
    putserv "PRIVMSG $wowchan :[lindex $wowread [rand [llength $wowread]]] "
    timer $wowtime "timer:wow"
  }
}

putlog "Words of Wisdom $wowver TCL (timer: $wowtime mins) - Loaded! "
#
That should do the trick.
c
cache
Master
Posts: 306
Joined: Tue Jan 10, 2006 4:59 am
Location: Mass

Post by cache »

Thanks, works great so far :D
c
cache
Master
Posts: 306
Joined: Tue Jan 10, 2006 4:59 am
Location: Mass

Post by cache »

Ok the !wow part works in every room but when the 30 min timer is ready to send it gives me this error:

Code: Select all

[18:34] Tcl error in script for 'timer6':
[18:34] can't read "wowchan": no such variable
User avatar
rosc2112
Revered One
Posts: 1454
Joined: Sun Feb 19, 2006 8:36 pm
Location: Northeast Pennsylvania

Post by rosc2112 »

Ahh, I didn't completely analyze the timer thing.

I'll assume you want to have the timer go off in each of the wowchans, so change that proc like this:

Code: Select all

proc timer:wow {} {
  global botnick wowchans wowchan wowtime wowtxt

foreach wowchan $wowchans {
   if { [onchan $botnick $wowchan] } {
      set wowfile [open $wowtxt r]
      set wowread [split [read $wowfile] \n]
      close $wowfile
      putserv "PRIVMSG $wowchan :[lindex $wowread [rand [llength $wowread]]] "
      timer $wowtime "timer:wow"
    }
  }
}
Should fix er.
c
cache
Master
Posts: 306
Joined: Tue Jan 10, 2006 4:59 am
Location: Mass

Post by cache »

It works but it sent the wow text 10 times in a row in each channel :oops:
m
metroid
Owner
Posts: 771
Joined: Wed Jun 16, 2004 2:46 am

Post by metroid »

because the timer repeats in every foreach loop.

rosc2112 should have paid attention.

Code: Select all

proc timer:wow {} {
  global botnick wowchans wowchan wowtime wowtxt

  set wowfile [open $wowtxt r]
  set wowread [split [read $wowfile] \n]
  close $wowfile

  foreach wowchan $wowchans {
    if { [onchan $botnick $wowchan] } {
      putserv "PRIVMSG $wowchan :[lindex $wowread [rand [llength $wowread]]] "
    }
  }
  timer $wowtime "timer:wow" 
} 
Post Reply