@"CrazyCat" can you please help me out
Code:
[09:09:07] can't read "::crelay::lang": no such variable
while executing
"if {![catch {package require msgcat}] && $::crelay::lang != "" && [string tolower $::cre lay::lang] != "english"} {
set lfile "${::crelay::crpath}chan..."
(file "scripts/chanrelay.tcl" line 1350)
invoked from within
i'm trying to use the chanrelay but i got this ..
this is what i found
Code:
if {![catch {package require msgcat}] && $::crelay::lang != "" && [string tolower $::crelay::lang] != "english"} {
set lfile "${::crelay::crpath}chanrelay.[string tolower $::crelay::lang].msg"
if {[file exists $lfile]} {
i18n $lfile [::tcl::string::map {"english" "en" "french" "fr"} [string tolower $::crelay::lang]]
}
i am not sure what to do.. other options already set to english.
DO NOT TOUCH THAT.
Look at the configuration part of the script (follow the first link I gave) to ensure the set lang ...
exists and is not commented.
If you want to use english, it must be: set lang "english"
Next version of chanrelay integrates a check for pple who removes variables needed by the script.
yes as i said i follow everything,
Code:
# language to use : default is english, french available
set lang english
but still got the error.. anyway i will wait for your update
Can you post the configuration part of chanrelay please ? This is weird.
22/09/2022, 17:06
(This post was last modified: 23/09/2022, 07:56 by CrazyCat .)
here...
tcl
# chanrelay.tcl 4.0
#
# A way to link your channels
#
# Author: CrazyCat <crazycat@c-p-f.org>
# https://www.eggdrop.fr
# irc.zeolia.net #eggdrop
#
# Declare issues at https://gitlab.com/tcl-scripts/chanrelay
# No issue, no bug :)
#
## DESCRIPTION ##
#
# This TCL is a complete relay script wich works with botnet.
# All you have to do is to include this tcl in all the eggdrop who
# are concerned by it.
#
# You can use it as a spy or a full duplex communication tool.
#
# It don't mind if the eggdrops are on the same server or not,
# it just mind about the channels and the handle of each eggdrop.
## CHANGELOG ##
#
# 4.00 - i18n
#
## CONFIGURATION ##
#
# For each eggdrop in the relay, you have to
# indicate his botnet nick, the chan and the network.
#
# Syntax:
# set regg(USERNAME) {
# "chan" "#CHANNEL"
# "network" "NETWORK"
#}
# with:
# USERNAME : The username sets in eggdrop.conf (case-sensitive)
# optionaly, you can override default values:
# * highlight (0/1/2/3): is speaker highlighted ? (no/bold/undelined/gray)
# * snet (y/n): is speaker'network shown ?
# * transmit (y/n): does eggdrop transmit his channel activity ?
# * receive (y/n): does eggdrop diffuse other channels activity ?
# * oper (y/n): does the eggdrop accept @ commands (topic, kick, ban) ?
# * syn_topic (y/n): if set to Yes, the eggdrop will
# synchronize the channel topic when changed on
# another chan of the relay
# * col_act (color) : color used to display actions
# * col_mode (color) : color used to display mode changement
# * col_jqp (color) : color used to display join/quit/part
namespace eval crelay {
#####################
### CONFIGURATION ###
#####################
### BASIC ###
variable regg
set regg( crazy) {
"chan" "#radiomania"
"network" "Undernet"
"highlight" 0
"log" "y"
"oper" "y"
"syn_topic" "y"
"col_act" "lightred"
"col_jpq" "lightblue"
"col_mode" "green"
"usermask" "<%nick%@%network%>"
}
set regg( pot) {
"chan" "#dumaguete"
"network" "Dalnet"
"highlight" 3
"oper" "y"
}
# /!\ You can edit following values but
# DO NOT remove any
variable default
set default {
"highlight" 1
"snet" "y"
"transmit" "y"
"receive" "y"
"log" "n"
"oper" "n"
"syn_topic" "n"
"col_act" "purple"
"col_jpq" "cyan"
"col_mode" "green"
"usermask" "(%nick%@%network%)"
}
### GLOBAL ###
# debug mode : set to 1 to enable
set debug 0
# language to use : default is english, french, spanish, german and portuguese available
set lang english
# Fill this list with the nick of the users
# who WON'T BE relayed, as services bot
variable users_excluded { \[ Guru\] Pan}
# Fill this list with the nick of the users
# wich will be THE ONLY ONES to be relayed
variable users_only { }
# Set the banmask to use in banning the IPs
# Default banmask is set to 1
# 1 - *!*@some.domain.com
# 2 - *!*@*.domain.com
# 3 - *!*ident@some.domain.com
# 4 - *!*ident@*.domain.com
# 5 - *!*ident*@some.domain.com
# 6 - *nick*!*@*.domain.com
# 7 - *nick*!*@some.domain.com
# 8 - nick!ident@some.domain.com
# 9 - nick!ident@*.host.com
set bantype 1
# max length of a message
variable msglen 350
### FILES ###
# Path and name of the config file
# %b will be replaced with the botnick
variable crconf "%b.chanrelay.db"
# Path and name of the logfile (used for debug)
variable crlog "chanrelay.log"
### INITIAL ###
# transmission configuration
set trans_pub "y" ; # transmit the pub
set trans_act "y" ; # transmit the actions (/me)
set trans_nick "y" ; # transmit the nick changement
set trans_join "y" ; # transmit the join
set trans_part "y" ; # transmit the part
set trans_quit "y" ; # transmit the quit
set trans_topic "y" ; # transmit the topic changements
set trans_kick "y" ; # transmit the kicks
set trans_mode "y" ; #transmit the mode changements
set trans_who "y" ; # transmit the who list
# reception configuration
set recv_pub "y" ; # recept the pub
set recv_act "y" ; # recept the actions (/me)
set recv_nick "y" ; # recept the nick changement
set recv_join "y" ; # recept the join
set recv_part "y" ; # recept the part
set recv_quit "y" ; # recept the quit
set recv_topic "y" ; # recept the topic changements
set recv_kick "y" ; # recept the kicks
set recv_mode "y" ; # recept the mode changements
set recv_who "y" ; # recept the who list
}
####################################
# DO NOT EDIT ANYTHING BELOW #
####################################
namespace eval crelay {
variable author "CrazyCat"
variable version "4.00"
variable userlist
variable hlnick
variable snet
variable syn_topic
set topicsynced 0
variable crpath "[file dirname [file normalize [info script]]]/crtools/"
variable fname
proc init { args} {
variable me
array set me $ ::crelay ::default
array set me $ ::crelay ::regg ( $ ::username )
regsub -all % b $ { ::crelay ::crpath } $ { ::crelay ::crconf } $ ::username fname
if { [ file exists $fname ] } {
::crelay ::preload
}
if { $me ( transmit) == "y" } {
bind msg o|o "trans" ::crelay ::set :trans
if { $ ::crelay ::trans_pub == "y" } { bind pubm - * ::crelay ::trans :pub }
if { $ ::crelay ::trans_act == "y" } { bind ctcp - "ACTION" ::crelay ::trans :act }
if { $ ::crelay ::trans_nick == "y" } { bind nick - * ::crelay ::trans :nick }
if { $ ::crelay ::trans_join == "y" } { bind join - * ::crelay ::trans :join }
if { $ ::crelay ::trans_part == "y" } { bind part - * ::crelay ::trans :part }
if { $ ::crelay ::trans_quit == "y" } {
bind sign - * ::crelay ::trans :quit
bind evnt - disconnect-server ::crelay ::trans :selfquit
}
if { $ ::crelay ::trans_topic == "y" } { bind topc - * ::crelay ::trans :topic }
if { $ ::crelay ::trans_kick == "y" } { bind kick - * ::crelay ::trans :kick }
if { $ ::crelay ::trans_mode == "y" } { bind raw - "MODE" ::crelay ::trans :mode }
if { $ ::crelay ::trans_who == "y" } { bind pub - "!who" ::crelay ::trans :who }
if { $me ( oper) == "y" } {
bind pub -|o "@topic" ::crelay ::trans :otopic
bind pub -|o "@mode" ::crelay ::trans :omode
bind pub -|o "@kick" ::crelay ::trans :okick
bind pub -|o "@ban" ::crelay ::trans :oban
bind pub -|o "@voice" ::crelay ::trans :ovoice
bind pub -|o "@vop" ::crelay ::trans :ovoice
bind pub -|o "@hop" ::crelay ::trans :ohop
bind pub -|o "@op" ::crelay ::trans :oop
}
}
if { $me ( receive) =="y" } {
bind msg o|o "recv" ::crelay ::set :recv
if { $ ::crelay ::recv_pub == "y" } { bind bot - ">pub" ::crelay ::recv :pub }
if { $ ::crelay ::recv_act == "y" } { bind bot - ">act" ::crelay ::recv :act }
if { $ ::crelay ::recv_nick == "y" } { bind bot - ">nick" ::crelay ::recv :nick }
if { $ ::crelay ::recv_join == "y" } { bind bot - ">join" ::crelay ::recv :join }
if { $ ::crelay ::recv_part == "y" } { bind bot - ">part" ::crelay ::recv :part }
if { $ ::crelay ::recv_quit == "y" } { bind bot - ">quit" ::crelay ::recv :quit }
if { $ ::crelay ::recv_topic == "y" } { bind bot - ">topic" ::crelay ::recv :topic }
if { $ ::crelay ::recv_kick == "y" } { bind bot - ">kick" ::crelay ::recv :kick }
if { $ ::crelay ::recv_mode == "y" } { bind bot - ">mode" ::crelay ::recv :mode }
if { $ ::crelay ::recv_who == "y" } {
bind bot - ">who" ::crelay ::recv :who
bind bot - ">wholist" ::crelay ::recv :wholist
}
bind bot - ">otopic" ::crelay ::recv :otopic
bind bot - ">omode" ::crelay ::recv :omode
bind bot - ">okick" ::crelay ::recv :okick
bind bot - ">oban" ::crelay ::recv :oban
bind disc - * ::crelay ::recv :disc
bind link - * ::crelay ::recv :link
bind bot - ">list" ::crelay ::recv :list
bind bot - ">users" ::crelay ::recv :users
}
::crelay ::set :hl $me ( highlight) ;
if { $me ( log ) == "y" } {
logfile sjpk $me ( chan) "logs/[string range $me(chan) 1 end].log"
}
bind msg -|o "rc.status" ::crelay ::help :status
bind msg - "rc.help" ::crelay ::help :cmds
bind msg -|o "rc.light" ::crelay ::set :light
bind msg -|o "rc.net" ::crelay ::set :snet
bind msg -|o "rc.syntopic" ::crelay ::set :syn_topic
bind msg -|o "rc.debug" ::crelay ::set :debug
bind bot - ">notop" ::crelay ::recv :error
variable eggdrops
variable chans
variable networks
foreach bot [ array names ::crelay ::regg ] {
array set tmp $ ::crelay ::regg ( $bot )
lappend eggdrops $bot
lappend chans $tmp ( chan)
lappend networks $tmp ( network)
}
::crelay ::save
bind evnt -|- prerehash ::crelay ::deinit
package forget ChanRelay
package provide ChanRelay $ ::crelay ::version
}
proc preload { args} {
regsub -all % b $ { ::crelay ::crpath } $ { ::crelay ::crconf } $ ::username fname
if { [ file exists $fname ] } {
set fp [ open $fname r]
set settings [ read -nonewline $fp ]
close $fp
foreach line [ split $settings "\n " ] {
set lset [ split $line "|" ]
switch [ lindex $lset 0 ] {
transmit { set ::crelay ::me ( transmit) [ lindex $lset 1 ] }
receive { set ::crelay ::me ( receive) [ lindex $lset 1 ] }
snet { set ::crelay ::me ( snet) [ lindex $lset 1 ] }
highlight { set ::crelay ::me ( highligt) [ lindex $lset 1 ] }
syn_topic { set ::crelay ::me ( syn_topic) [ lindex $lset 1 ] }
col_act { set ::crelay ::me ( col_act) [ lindex $lset 1 ] }
col_mode { set ::crelay ::me ( col_mode) [ lindex $lset 1 ] }
col_jpq { set ::crelay ::me ( col_jpq) [ lindex $lset 1 ] }
default {
set ::crelay ::[ lindex $lset 0 ] [ lindex $lset 1 ]
}
}
}
} else {
::crelay ::save
}
}
# Save all settings in a file
proc save { args} {
regsub -all % b $ { ::crelay ::crpath } $ { ::crelay ::crconf } $ ::username fname
set fp [ open $fname w]
puts $fp "transmit|$::crelay::me(transmit)"
puts $fp "receive|$::crelay::me(receive)"
puts $fp "snet|$::crelay::me(snet)"
puts $fp "highlight|$::crelay::me(highlight)"
puts $fp "col_act|$::crelay::me(col_act)"
puts $fp "col_mode|$::crelay::me(col_mode)"
puts $fp "col_jpq|$::crelay::me(col_jpq)"
puts $fp "trans_pub|$::crelay::trans_pub"
puts $fp "trans_act|$::crelay::trans_act"
puts $fp "trans_nick|$::crelay::trans_nick"
puts $fp "trans_join|$::crelay::trans_join"
puts $fp "trans_part|$::crelay::trans_part"
puts $fp "trans_quit|$::crelay::trans_quit"
puts $fp "trans_topic|$::crelay::trans_topic"
puts $fp "trans_kick|$::crelay::trans_kick"
puts $fp "trans_mode|$::crelay::trans_mode"
puts $fp "trans_who|$::crelay::trans_who"
puts $fp "recv_pub|$::crelay::recv_pub"
puts $fp "recv_act|$::crelay::recv_act"
puts $fp "recv_nick|$::crelay::recv_nick"
puts $fp "recv_join|$::crelay::recv_join"
puts $fp "recv_part|$::crelay::recv_part"
puts $fp "recv_quit|$::crelay::recv_quit"
puts $fp "recv_topic|$::crelay::recv_topic"
puts $fp "recv_kick|$::crelay::recv_kick"
puts $fp "recv_mode|$::crelay::recv_mode"
puts $fp "recv_who|$::crelay::recv_who"
puts $fp "syn_topic|$::crelay::me(syn_topic)"
close $fp
::crelay ::preload
}
proc deinit { args} {
putlog "Starting unloading CHANRELAY $::crelay::version"
::crelay ::save
regsub % b $ ::crelay ::crconf $ ::username fname
putlog "CHANRELAY: Settings are saved in $fname"
foreach binding [ lsearch -inline -all -regexp [ binds * [ set ns [ ::tcl ::string ::range ::crelay 2 end] ] * ] " \{ ?(::)?$ns" ] {
unbind [ lindex $binding 0 ] [ lindex $binding 1 ] [ lindex $binding 2 ] [ lindex $binding 4 ]
}
putlog "CHANRELAY $::crelay::version unloaded"
package forget ChanRelay
namespace delete ::crelay
}
variable hlnick
variable snet
variable syn_topic
set topicsynced 0
# Setting of hlnick
proc set :light { nick uhost handle arg } {
# message binding
switch [ string tolower $arg ] {
"bo" { ::crelay ::set :hl 1 ; }
"un" { ::crelay ::set :hl 2 ; }
"gr" { ::crelay ::set :hl 3 ; }
"off" { ::crelay ::set :hl 0 ; }
default { puthelp "NOTICE $nick :[::msgcat::mc " you must chose \002( bo) \002ld , \037( un) \037derline, \00314( gr) \003ay or ( off) "]" }
}
::crelay ::save
return 0 ;
}
proc set :hl { arg } {
# global hlnick setting function
switch [ string tolower $arg ] {
1 { set ::crelay ::hlnick "\0 02" ; }
2 { set ::crelay ::hlnick "\0 37" ; }
3 { set ::crelay ::hlnick "\0 0314" ; }
default { set ::crelay ::hlnick "" ; }
}
}
variable colors { "white" "\0 0300" "black" "\0 0301" "blue" "\0 0302" "green" "\0 0303"
"lightred" "\0 0304" "brown" "\0 0305" "purple" "\0 0306" "orange" "\0 0307"
"yellow" "\0 0308" "lightgreen" "\0 0309" "cyan" "\0 0310" "lightcyan" "\0 0311"
"lightblue" "\0 0312" "pink" "\0 0313" "grey" "\0 0314" "lightgrey" "\0 0315" }
proc colorize { type text} {
set text [ stripcodes abcgru $text ]
if { $type eq "act" && $ ::crelay ::me ( col_act) ne "" } {
set text "[::tcl::string::map $::crelay::colors $::crelay::me(col_act)]$text\0 03"
} elseif { $type eq "mode" && $ ::crelay ::me ( col_mode) ne "" } {
set text "[::tcl::string::map $::crelay::colors $::crelay::me(col_mode)]$text\0 03"
} elseif { $type eq "jpq" && $ ::crelay ::me ( col_jpq) ne "" } {
set text "[::tcl::string::map $::crelay::colors $::crelay::me(col_jpq)]$text\0 03"
}
return $text
}
# Setting of show network
proc set :snet { nick host handle arg } {
set arg [ string tolower $arg ]
if { $arg == "yes" } {
set ::crelay ::snet "y"
puthelp "NOTICE $nick :[::msgcat::mc " Network is now showed"]"
} elseif { $arg == "no" } {
set ::crelay ::snet "n"
puthelp "NOTICE $nick :[::msgcat::mc " Network is now hidden"]"
} else {
puthelp "NOTICE $nick :[::msgcat::mc " You must chose yes or no"]"
return 0
}
::crelay ::save
}
proc set :syn_topic { nick host handle arg} {
set arg [ string tolower $arg ]
if { $arg == "yes" } {
set ::crelay ::syn_topic "y"
puthelp "NOTICE $nick :[::msgcat::mc " Topic synchro is now enabled"]"
} elseif { $arg == "no" } {
set ::crelay ::syn_topic "n"
puthelp "NOTICE $nick :[::msgcat::mc " Topic synchro is now disabled"]"
} else {
puthelp "NOTICE $nick :[::msgcat::mc " You must chose yes or no"]"
return 0
}
}
proc set :debug { nick host handle arg} {
set arg [ string tolower $arg ]
if { $arg == "yes" } {
set ::crelay ::debug 1
puthelp "NOTICE $nick :[::msgcat::mc " Debug mode is now enabled"]"
} elseif { $arg == "no" } {
set ::crelay ::debug 0
puthelp "NOTICE $nick :[::msgcat::mc " Debug mode is now disabled"]"
} else {
puthelp "NOTICE $nick :[::msgcat::mc " Debug mode is actually setted to % 1\$s " $::crelay::debug]"
return 0
}
}
# proc setting of transmission by msg
proc set :trans { nick host handle arg } {
if { $ ::crelay ::me ( transmit) == "y" } {
if { $arg == "" } {
putquick "NOTICE $nick :[::msgcat::mc " You'd better try /msg %1\$ s trans help" $::botnick]"
}
if { [lindex [split $arg] 0] == "help" } {
putquick "NOTICE $nick :[::msgcat::mc "Usage is /msg %1\$ s trans <setting> on|off" $::botnick]"
putquick "NOTICE $nick :[::msgcat::mc "with <setting> in pub, act, nick, join, part, quit, topic, kick, mode, who"]"
return 0
} else {
switch [lindex [split $arg] 0] {
"pub" { set type pubm }
"act" { set type ctcp }
"nick" { set type nick }
"join" { set type join }
"part" { set type part }
"quit" { set type sign }
"topic" { set type topc }
"kick" { set type kick }
"mode" { set type mode }
"who" { set type who }
default {
putquick "NOTICE $nick :[::msgcat::mc "Bad setting. Try /msg %1\$ s trans help" $::botnick]"
return 0
}
}
set proc_change "::crelay::trans:[lindex [split $arg] 0]"
set mod_change "::crelay::trans_[lindex [split $arg] 0]"
if { [lindex [split $arg] 1] eq "on" } {
if { $type eq "mode" } {
bind raw - "MODE" ::crelay::trans:mode
} else {
bind $type - * $proc_change
}
if { $type eq "sign"} {
bind evnt - disconnect-server ::crelay::trans:selfquit
}
set ${mod_change} "y"
putserv "NOTICE $nick :[::msgcat::mc "Transmission of %1\$ s enabled" [lindex [split $arg] 0]]"
} elseif { [lindex [split $arg] 1] eq "off" } {
if { $type eq "mode" } {
unbind raw - "MODE" ::crelay::trans:mode
} else {
unbind $type - * $proc_change
}
if { $type eq "sign"} {
unbind evnt - disconnect-server ::crelay::trans:selfquit
}
set ${mod_change} "n"
putserv "NOTICE $nick :[::msgcat::mc "Transmission of %1\$ s disabled" [lindex [split $arg] 0]]"
} else {
putquick "NOTICE $nick :[::msgcat::mc "%1\$ s is not a correct value, choose \0 02on\0 02 or \0 02off\0 02" [lindex [split $arg] 1]]"
}
}
} else {
putquick "NOTICE $nick :[::msgcat::mc "Transmission is not activated, you can' t change anything"]"
}
::crelay ::save
}
# proc setting of reception by msg
proc set :recv { nick host handle arg } {
if { $ ::crelay ::me ( receive) == "y" } {
if { $arg == "" } {
putquick "NOTICE $nick :[::msgcat::mc " You'd better try /msg %1\$ s recv help" $::botnick]"
}
if { [lindex [split $arg] 0] == "help" } {
putquick "NOTICE $nick :[::msgcat::mc "Usage is /msg %1\$ s recv <setting> on|off" $::botnick]"
putquick "NOTICE $nick :[::msgcat::mc "with <setting> in pub, act, nick, join, part, quit, topic, kick, mode, who"]"
return 0
} else {
switch [lindex [split $arg] 0] {
"pub" -
"act" -
"nick" -
"join" -
"part" -
"quit" -
"topic" -
"kick" -
"mode" -
"who" { set type [lindex [split $arg] 0] }
default {
putquick "NOTICE $nick :[::msgcat::mc "Bad setting. Try /msg %1\$ s recv help" $::botnick]"
return 0
}
}
set change ">$type"
set proc_change "::crelay::recv:$type"
set mod_change "::crelay::recv_$type"
if { [lindex [split $arg] 1] eq "on" } {
bind bot - $change $proc_change
set ${mod_change} "y"
putserv "NOTICE $nick :[::msgcat::mc "Reception of %1\$ s enabled" $type]"
} elseif { [lindex [split $arg] 1] == "off" } {
unbind bot - $change $proc_change
set ${mod_change} "n"
putserv "NOTICE $nick :[::msgcat::mc "Reception of %1\$ s disabled" $type]"
} else {
putquick "NOTICE $nick :[::msgcat::mc "%1\$ s is not a correct value, choose \0 02on\0 02 or \0 02off\0 02" [lindex [split $arg] 1]]"
}
}
} else {
putquick "NOTICE $nick :[::msgcat::mc "Reception is not activated, you can' t change anything"]"
}
::crelay ::save
}
# Generates an user@network name
# based on nick and from bot using usermask setting
proc make:user { nick frm_bot } {
if { [ string length $ ::crelay ::hlnick ] > 0 } {
set ehlnick [ string index $ ::crelay ::hlnick 0 ]
} else {
set ehlnick ""
}
set umask $ ::crelay ::me ( usermask)
array set him $ ::crelay ::regg ( $frm_bot )
regsub -all % network% $umask $him ( network) umask
if { $nick == "*" } {
regsub -all { ( % nick% |@) } $umask "" umask
set speaker [ concat "$::crelay::hlnick$umask$ehlnick" ]
} else {
regsub -all % nick% $umask $nick umask
set speaker $ ::crelay ::hlnick $umask $ehlnick
}
return $speaker
}
# Logs virtual channel activity
proc cr:log { lev chan line } {
if { $ ::crelay ::me ( log ) == "y" } {
putloglev $lev "$chan" "$line"
}
return 0
}
# Global transmit procedure
proc trans:bot { usercmd chan usernick text } {
if { $ ::crelay ::debug == 1 } { dlog "Transmission $usercmd from $usernick / $chan" }
if { [ llength $ ::crelay ::users_only ] > 0 && [ lsearch -nocase $ ::crelay ::users_only $usernick ] ==-1 } {
return 0
}
if { [ llength $ ::crelay ::users_excluded ] > 0 && [ lsearch -nocase $ ::crelay ::users_excluded $usernick ] ! =-1 } {
return 0
}
set transmsg [ concat $usercmd $usernick $text ]
set ::crelay ::eob 0
if { [ string tolower $chan ] == [ string tolower $ ::crelay ::me ( chan) ] } {
foreach bot [ array names ::crelay ::regg ] {
if { $bot ! = $ ::username && [ islinked $bot ] } {
putbot $bot $transmsg
if { $ ::crelay ::debug == 1 } { dlog "Sent to $bot : $transmsg" }
if { $usercmd == ">who" } { incr ::crelay ::eob }
}
}
} else {
return 0
}
}
# proc transmission of pub (trans_pub = y)
proc trans:pub { nick uhost hand chan text} {
if { [ string tolower [ lindex [ split $text ] 0 ] ] eq "!who" } { return 0 ; }
if { [ string tolower [ lindex [ split $text ] 0 ] ] eq "@topic" } { return 0 ; }
if { [ string tolower [ lindex [ split $text ] 0 ] ] eq "@mode" } { return 0 ; }
if { [ string tolower [ lindex [ split $text ] 0 ] ] eq "@ban" } { return 0 ; }
if { [ string tolower [ lindex [ split $text ] 0 ] ] eq "@kick" } { return 0 ; }
foreach splmsg [ ::crelay ::split_line $text [ expr { $ ::crelay ::msglen - [ ::tcl ::string ::length [ ::crelay ::make :user $nick $ ::username ] ] } ] ] {
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >pub $chan $nick $splmsg" }
::crelay ::trans :bot ">pub" $chan $nick $splmsg
}
}
# proc transmission of action (trans_act = y)
proc trans:act { nick uhost hand chan key text} {
set arg [ concat $key $text ]
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >act $chan $nick $arg" }
::crelay ::trans :bot ">act" $chan $nick $arg
}
# proc transmission of nick changement
proc trans:nick { nick uhost hand chan newnick} {
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >nick $chan $nick $newnick" }
::crelay ::trans :bot ">nick" $chan $nick $newnick
}
# proc transmission of join
proc trans:join { nick uhost hand chan} {
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >join $chan $chan $nick" }
::crelay ::trans :bot ">join" $chan $chan "$nick!$uhost"
}
# proc transmission of part
proc trans:part { nick uhost hand chan text} {
set arg [ concat $chan $text ]
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >part $chan $nick $arg" }
::crelay ::trans :bot ">part" $chan $nick $arg
}
# proc transmission of quit
proc trans:quit { nick host hand chan text} {
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >quit $chan $nick $text" }
::crelay ::trans :bot ">quit" $chan $nick $text
}
# Proc to get our self quit
proc trans:selfquit { type} {
::crelay ::trans :bot ">quit" $ ::crelay ::me ( chan) $ ::botnick [ ::msgcat ::mc "I don't know why but I left server" ]
}
# proc transmission of topic changement
proc trans:topic { nick uhost hand chan topic } {
if { $ ::crelay ::topicsynced == 1 && [ string tolower $nick ] eq [ string tolower $ ::botnick ] } { return 0 }
set arg [ concat $chan $topic ]
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >topic $chan $nick $arg" }
::crelay ::trans :bot ">topic" $chan $nick $arg
}
# proc transmission of kick
proc trans:kick { nick uhost hand chan victim reason} {
set arg [ concat $victim $chan $reason ]
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >kick $chan $nick $arg" }
::crelay ::trans :bot ">kick" $chan $nick $arg
}
# proc transmission of mode changement
proc trans:mode { from keyw text} {
set nick [ lindex [ split $from ! ] 0 ]
set chan [ lindex [ split $text ] 0 ]
set text [ concat $nick $text ]
if { $ ::crelay ::debug == 1 } { dlog "Prepare transmission : >mode $chan $nick $text" }
::crelay ::trans :bot ">mode" $chan $nick $text
}
# proc transmission of "who command"
proc trans:who { nick uhost handle chan args} {
if { [ join [ lindex [ split $args ] 0 ] ] ! = "" } {
set netindex [ lsearch -nocase $ ::crelay ::networks [ lindex [ split $args ] 0 ] ]
if { $netindex == -1 } {
putserv "PRIVMSG $nick :[::msgcat::mc " % 1\$s is an unknown network" $args]" ;
return 0
} else {
set ::crelay ::eol 0
set ::crelay ::bol 0
set ::crelay ::eob 1
putbot [ lindex $ ::crelay ::eggdrops $netindex ] ">who $nick"
}
} else {
set ::crelay ::eol 0
set ::crelay ::bol 0
::crelay ::trans :bot ">who" $chan $nick ""
}
}
# Error reception
proc recv:error { frm_bot command arg} {
# putlog "$command - $arg"
return 0
}
# proc reception of pub
proc recv:pub { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending pub [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
putchan $ ::crelay ::me ( chan) "$speaker [join [lrange $argl 1 end]]"
::crelay ::cr :log p "$::crelay::me(chan)" "<[lindex $argl 0]> [join [lrange $argl 1 end]]"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of action
proc recv:act { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending act [join [lrange $argl 2 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "act" "* $speaker [join [lrange $argl 2 end]]" ]
putchan $ ::crelay ::me ( chan) $text
::crelay ::cr :log p "$::crelay::me(chan)" "Action: [lindex $argl 0] [join [lrange $argl 2 end]]"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of nick changement
proc recv:nick { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending nick [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "jpq" [ ::msgcat ::mc "*** %1\$ s is now known as %2\$ s" $speaker [ join [ lrange $argl 1 end] ] ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
::crelay ::cr :log j "$::crelay::me(chan)" "Nick change: [lindex $argl 0] -> [join [lrange $argl 1 end]]"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of join
proc recv:join { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ lindex $argl 1 ]
if { $ ::crelay ::debug == 1 } { dlog "Sending join [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "jpq" [ ::msgcat ::mc "--> %1\$ s has joined %2\$ s@%3\$ s" $speaker [ lindex $argl 0 ] [ lindex $ ::crelay ::networks $him ] ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
::crelay ::cr :log j "$::crelay::me(chan)" "[lindex $argl 1] joined $::crelay::me(chan)."
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of part
proc recv:part { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending part [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
if { [ llength $argl ] < 4 } {
set partmsg ""
} else {
set partmsg " ([join [lrange $argl 2 end]])"
}
set text [ ::crelay ::colorize "jpq" [ ::msgcat ::mc "<-- %1\$ s has left %2\$ s%3\$ s" $speaker [ lindex $argl 1 ] $partmsg ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
::crelay ::cr :log j "$::crelay::me(chan)" "[lindex $argl 0] left $::crelay::me(chan) ([join [lrange $argl 2 end]])"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of quit
proc recv:quit { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { [ llength $argl ] < 3 } {
set quitmsg ""
} else {
set quitmsg " ([join [lrange $argl 1 end]])"
}
if { $ ::crelay ::debug == 1 } { dlog "Sending quit [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "jpq" [ ::msgcat ::mc "-//- %1\$ s has quit%2\$ s" $speaker $quitmsg ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
::crelay ::cr :log j "$::crelay::me(chan)" "[lindex $argl 0] left irc: ([join [lrange $argl 1 end]])"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of topic changement
proc recv:topic { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 0 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending topic [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
if { $ ::crelay ::me ( syn_topic) == "y" } {
set ::crelay ::topicsynced 1
utimer 10 [ list set ::crelay ::topicsynced 0 ]
putserv "TOPIC $::crelay::me(chan) :[join [lrange $argl 2 end]]"
} else {
putchan $ ::crelay ::me ( chan) [ ::msgcat ::mc "*** %1\$ s changes topic of %2\$ s to '%3\$ s'" $speaker [ lindex $argl 1 ] [ join [ lrange $argl 2 end] ] ]
}
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of kick
proc recv:kick { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 1 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending kick [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "jpq" [ ::msgcat ::mc "*** %1\$ s has been kicked from %2\$ s by %3\$ s: %4\$ s" $speaker [ lindex $argl 2 ] [ lindex $argl 0 ] [ join [ lrange $argl 3 end] ] ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
::crelay ::cr :log k "$::crelay::me(chan)" "[lindex $argl 1] kicked from $::crelay::me(chan) by [lindex $argl 0]:[join [lrange $argl 3 end]]"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# proc reception of mode changement
proc recv:mode { frm_bot command arg} {
if { $ ::crelay ::debug == 1 } { dlog "Received $command from $frm_bot" }
if { [ set him [ lsearch $ ::crelay ::eggdrops $frm_bot ] ] > = 0 } {
set argl [ split $arg ]
set speaker [ ::crelay ::make :user [ lindex $argl 1 ] $frm_bot ]
if { $ ::crelay ::debug == 1 } { dlog "Sending mode [join [lrange $argl 1 end]] to $::crelay::me(chan)" }
set text [ ::crelay ::colorize "mode" [ ::msgcat ::mc "*** %1\$ s set mode %2\$ s" $speaker [ join [ lrange $argl 2 end] ] ] ]
putquick "PRIVMSG $::crelay::me(chan) :$text"
} else {
if { $ ::crelay ::debug == 1 } { dlog "$frm_bot is unknown" }
}
return 0
}
# reception of !who command
proc recv:who { frm_bot command arg} {
set nick $arg
set ulist ""
set cusr 0
if { ! [ botonchan $ ::crelay ::me ( chan) ] } {
putbot $frm_bot ">wholist $::crelay::me(chan) $nick eol"
return 0
}
foreach user [ chanlist $ ::crelay ::me ( chan) ] {
if { $user == $ ::botnick } { continue ; }
if { [ isop $user $ ::crelay ::me ( chan) ] == 1 } {
set st "@"
} elseif { [ ishalfop $user $ ::crelay ::me ( chan) ] == 1 } {
set st "%"
} elseif { [ isvoice $user $ ::crelay ::me ( chan) ] == 1 } {
set st "+"
} else {
set st ""
}
incr cusr 1
append ulist " $st$user"
if { $cusr == 5 } {
putbot $frm_bot ">wholist $::crelay::me(chan) $nick $ulist"
set ulist ""
set cusr 0
}
}
if { $ulist ! = "" } {
putbot $frm_bot ">wholist $::crelay::me(chan) $nick $ulist"
}
putbot $frm_bot ">wholist $::crelay::me(chan) $nick eol"
}
# Proc reception of a who list
proc recv:wholist { frm_bot command arg} {
set nick [ join [ lindex [ split $arg ] 1 ] ]
set speaker [ ::crelay ::make :user $frm_bot $frm_bot ]
if { $ ::crelay ::bol == 0 } {
incr ::crelay ::bol
putserv "NOTICE $nick :*** [::msgcat::mc " Beginning of userlist "]"
}
if { [ join [ lrange [ split $arg ] 2 end] ] == "eol" } {
incr ::crelay ::eol
if { $ ::crelay ::eol == $ ::crelay ::eob } {
putserv "NOTICE $nick :*** [::msgcat::mc " End of userlist "]"
}
} else {
putserv "NOTICE $nick :$speaker [join [lrange [split $arg] 2 end]]"
}
}
######################################
# Operators commands
#
proc trans:otopic { nick uhost handle chan text} {
if { [ ::crelay ::isOper $ ::username ] ==0 } {
putserv "NOTICE $nick :[::msgcat::mc " Sorry but I'm not setted as oper in ChanRelay"]"
return 0
}
set netindex [::crelay::checkDest [join [lindex [split $text] 0]]]
if { $netindex == -1 } {
putserv "NOTICE $nick :[::msgcat::mc "Syntax is @topic <network|all> the new topic"]"
return 0
}
set topic [join [lrange [split $text] 1 end]]
if { $netindex < 99 } {
putbot [lindex $::crelay::eggdrops $netindex] ">otopic $nick $topic"
} else {
::crelay::trans:bot ">otopic" $chan $nick $topic
putserv "TOPIC $::crelay::me(chan) :$topic"
}
return 0
}
proc recv:otopic {frm_bot command arg} {
if { [::crelay::isOper $frm_bot] != 1 } { return 0 }
set nick [join [lindex [split $arg] 0]]
if { ![::crelay::hasRights $::crelay::me(chan)] } {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
return 0
}
set ::crelay::topicsynced 1
utimer 10 [list set ::crelay::topicsynced 0]
putserv "TOPIC $::crelay::me(chan) :[join [lrange [split $arg] 1 end]]"
return 0
}
proc trans:opercmd {nick chan net com vict} {
if {[::crelay::isOper $::username]==0} {
putserv "NOTICE $nick :[::msgcat::mc "Sorry but I' m not setted as oper in ChanRelay"]"
return 0
}
if { [ ::crelay ::checkDest $net ] == -1 } {
putserv "NOTICE $nick :[::msgcat::mc " % 1\$s is an unknown network" $net]"
return 0
}
::crelay ::trans :omode $nick $uhost $handle $chan "$net $com $vict"
}
proc trans:ovoice { nick uhost handle chan text} {
if { ! [ regexp { ( \+|-) ( [ ^@] +) @( [ ^\s] +) } $text - mod vict net] } {
putserv "NOTICE $nick :[::msgcat::mc " Syntax is @voice < +/-> nick @< network|all> "]"
}
::crelay ::trans :opercmd $nick $chan $net $ { mod} v $vict
}
proc trans:ohop { nick uhost handle chan text} {
if { ! [ regexp { ( \+|-) ( [ ^@] +) @( [ ^\s] +) } $text - mod vict net] } {
putserv "NOTICE $nick :[::msgcat::mc " Syntax is @hop < +/-> nick @< network|all> "]"
}
::crelay ::trans :opercmd $nick $chan $net $ { mod} h $vict
}
proc trans:oop { nick uhost handle chan text} {
if { ! [ regexp { ( \+|-) ( [ ^@] +) @( [ ^\s] +) } $text - mod vict net] } {
putserv "NOTICE $nick :[::msgcat::mc " Syntax is @op < +/-> nick @< network|all> "]"
}
::crelay ::trans :opercmd $nick $chan $net $ { mod} o $vict
}
proc trans:omode { nick uhost handle chan text} {
if { [ ::crelay ::isOper $ ::username ] ==0 } {
putserv "NOTICE $nick :[::msgcat::mc " Sorry but I'm not setted as oper in ChanRelay"]"
return 0
}
set netindex [::crelay::checkDest [join [lindex [split $text] 0]]]
if { $netindex == -1 } {
putserv "NOTICE $nick :[::msgcat::mc "Syntax is @mode <network|all> <+/-mode> \[ arg\] \[ ,<+/-mode> \[ arg\] ...\] "]"
return 0
}
set mode [join [lrange [split $text] 1 end]]
if { $netindex < 99 } {
putbot [lindex $::crelay::eggdrops $netindex] ">omode $nick $mode"
} else {
::crelay::trans:bot ">omode" $chan $nick $mode
foreach m [split $mode ","] {
pushmode $::crelay::me(chan) $m
}
flushmode $::crelay::me(chan)
}
return 0
}
proc recv:omode {frm_bot command arg} {
if { [::crelay::isOper $frm_bot] != 1 } { return 0 }
set nick [join [lindex [split $arg] 0]]
if { ![::crelay::hasRights $::crelay::me(chan)] } {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
return 0
}
foreach mode [split [join [lrange [split $arg] 1 end]] ","] {
catch { pushmode $::crelay::me(chan) $mode }
}
flushmode $::crelay::me(chan)
return 0
}
proc trans:okick {nick uhost handle chan text} {
if {[::crelay::isOper $::username]==0} {
putserv "NOTICE $nick :[::msgcat::mc "Sorry but I' m not setted as oper in ChanRelay"]"
return 0
}
if { ! [ regexp { ( [ ^@] +) @( [ ^\s] +) ( \s( .+) ) ? } $text - vict net - reason] } {
putserv "NOTICE $nick :[msgcat::mc " Syntax is @kick nick @< network|all> \[ reason of kicking\] "]"
return 0
}
set netindex [ ::crelay ::checkDest $net ]
if { $vict eq "" || $netindex == -1 } {
putserv "NOTICE $nick :[::msgcat::mc " % 1\$s is an unknown network" $net]"
return 0
}
if { $netindex < 99 } {
putbot [ lindex $ ::crelay ::eggdrops $netindex ] ">okick $chan $nick $vict $reason"
} else {
::crelay ::trans :bot ">okick" $chan $nick [ concat $vict $reason ]
}
return 0
}
proc recv:okick { frm_bot command arg} {
if { [ ::crelay ::isOper $frm_bot ] ! = 1 } { return 0 }
set nick [ join [ lindex [ split $arg ] 1 ] ]
if { ! [ ::crelay ::hasRights $ ::crelay ::me ( chan) ] } {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
return 0
}
set vict [ join [ lindex [ split $arg ] 2 ] ]
if { ! [ onchan $vict $ ::crelay ::me ( chan) ] } {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
}
set reason [ join [ lrange [ split $arg ] 2 end] ]
if { $reason eq "" } { set reason [ ::msgcat ::mc "You have been kicked by %1\$ s" $nick ] }
putkick $ ::crelay ::me ( chan) $vict $reason
return 0
}
proc trans:oban { nick uhost handle chan text} {
if { [ ::crelay ::isOper $ ::username ] ==0 } {
putserv "NOTICE $nick :[::msgcat::mc " Sorry but I'm not setted as oper in ChanRelay"]"
return 0
}
if {![regexp {([^@]+)@([^\s ]+)(\s (.+))?} $text - vict net - reason]} {
putserv "NOTICE $nick :[::msgcat::mc "Syntax is @ban nick@<network|all> \[ reason of banning\] "]"
return 0
}
set netindex [::crelay::checkDest $net]
if { $vict eq "" || $netindex == -1 } {
putserv "NOTICE $nick :[::msgcat::mc "%1\$ s is an unknown network" $net]"
return 0
}
if { $netindex < 99 } {
putbot [lindex $::crelay::eggdrops $netindex] ">oban $chan $nick $vict $reason"
} else {
::crelay::trans:bot ">oban" $chan $nick [concat $vict $reason]
}
return 0
}
proc recv:oban {frm_bot command arg} {
if { [::crelay::isOper $frm_bot] != 1 } { return 0 }
set nick [join [lindex [split $arg] 1]]
if { ![::crelay::hasRights $::crelay::me(chan)] } {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
return 0
}
set vict [join [lindex [split $arg] 2]]
if {![onchan $vict $::crelay::me(chan)]} {
putbot $frm_bot ">notop $::crelay::me(chan) $nick"
}
set reason [join [lrange [split $arg] 3 end]]
if { $reason eq "" } { set reason [::msgcat::mc "You have been banned by %1\$ s" $nick] }
set bmask [::crelay::mask [getchanhost $vict $::crelay::me(chan)] $vict]
pushmode $::crelay::me(chan) +b $bmask
putkick $::crelay::me(chan) $vict $reason
flushmode $::crelay::me(chan)
return 0
}
# Special : botnet lost
proc recv:disc {frm_bot} {
if {$frm_bot == $::username} {
putchan $::crelay::me(chan) [::msgcat::mc "I' d left the relay"]
} elseif {[set him [lsearch $::crelay::eggdrops $frm_bot]] >= 0} {
set speaker [::crelay::make:user " * " $frm_bot]
putchan $::crelay::me(chan) [::msgcat::mc " *** We lose % 1\$s ( % 2\$s leaves botnet) " $speaker $frm_bot]
}
return 0
}
# Special : botnet recover
proc recv:link {frm_bot via} {
if {$frm_bot == $::username} {
putchan $::crelay::me(chan) [::msgcat::mc " I'm back in the relay"]
} elseif {[set him [lsearch $::crelay::eggdrops $frm_bot]] >= 0} {
set speaker [::crelay::make:user "*" $frm_bot]
putchan $::crelay::me(chan) [::msgcat::mc "*** %1\$ s is back (%2\$ s rejoined botnet)" $speaker $frm_bot]
}
return 0
}
######################################
# Private messaging
#
bind msg - "say" ::crelay::prv:say_send
proc prv:say_send {nick uhost handle text} {
set dest [join [lindex [split $text] 0]]
set msg [join [lrange [split $text] 1 end]]
set vict [join [lindex [split $dest @] 0]]
set net [join [lindex [split $dest @] 1]]
if { $vict == "" || $net == "" } {
putserv "PRIVMSG $nick :[::msgcat::mc "Use \0 02say nick@network your message to \0 37nick\0 37\0 02"]"
return 0
}
set him [lsearch -nocase $::crelay::networks $net]
if { $him == -1 } {
putserv "PRIVMSG $nick :[::msgcat::mc "%1\$ s is an unknown network." $net]";
putserv "PRIVMSG $nick :[::msgcat::mc "Available networks: %1\$ s" [join [split $::crelay::networks]]]"
return 0
}
if { [string length $msg] == 0 } {
putserv "PRIVMSG $nick :[::msgcat::mc "Did you forget your message to %1\$ s@%2\$ s ?" $vict $net]"
return 0
}
putbot [lindex $::crelay::eggdrops $him] ">pvmsg $vict $nick@$::crelay::me(network) $msg"
}
bind bot - ">pvmsg" ::crelay::prv:say_get
proc prv:say_get {frm_bot command arg} {
set dest [join [lindex [split $arg] 0]]
set from [join [lindex [split $arg] 1]]
set msg [join [lrange [split $arg] 2 end]]
if { [onchan $dest $::crelay::me(chan)] == 1 } {
putserv "PRIVMSG $dest :$from: $msg"
}
}
proc putchan {chan msg} {
if {[::tcl::string::match *c* [lindex [split [getchanmode $chan]] 0]]} {
regsub -all "\0 17" [stripcodes abcgru $msg] "" msg
}
putquick "PRIVMSG $chan :$msg"
}
######################################
# Small tools
#
proc checkDest { network } {
if { $network eq "all" } { return 99 }
set netindex [lsearch -nocase $::crelay::networks $network]
if { $network ne "all" && $netindex == -1 } { return -1 }
return $netindex
}
# Checks if eggdrop is @ or %
proc hasRights { chan } {
if { ![botisop $chan] && ![botishalfop $chan] } {
return 0
}
return 1
}
# Checks if bot is declared as oper
proc isOper { bot } {
if { [lsearch $::crelay::eggdrops $bot] == -1 } { return 0 }
array set tmp $::crelay::regg($bot)
if { [lsearch [array names tmp] "oper"] == -1 } { return 0 }
if { $tmp(oper) ne "y" } { return 0 }
return 1
}
# Generate a ban mask based on host and bantype
proc mask {uhost nick} {
switch -- $::crelay::bantype {
1 { set mask "*!*@[lindex [split $uhost @] 1]" }
2 { set mask "*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
3 { set mask "*!*$uhost" }
4 { set mask "*!*[lindex [split [maskhost $uhost] "!"] 1]" }
5 { set mask "*!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
6 { set mask "*$nick*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
7 { set mask "*$nick*!*@[lindex [split $uhost "@"] 1]" }
8 { set mask "$nick![lindex [split $uhost "@"] 0]@[lindex [split $uhost @] 1]" }
9 { set mask "$nick![lindex [split $uhost "@"] 0]@[lindex [split [maskhost $uhost] "@"] 1]" }
default { set mask "*!*@[lindex [split $uhost @] 1]" }
}
return $mask
}
# Split line function
# based on MenzAgitat procedure
# @see http://www.boulets.oqp.me/tcl/routines/tcl-toolbox-0014.html
proc split_line {data limit} {
incr limit -1
if {$limit < 9} {
error "limit must be higher than 9"
}
if { [::tcl::string::bytelength $data] <= $limit } {
return [expr {$data eq "" ? [list ""] : [split $data "\n "]}]
} else {
set middle_pos [expr round($limit / 2.0)]
set output ""
while {1} {
if { ([set cut_index [::tcl::string::first "\n " $data]] != -1) && ($cut_index <= $limit)} then {
} elseif {
([set cut_index [::tcl::string::last " " $data [expr {$limit + 1}]]] == -1)
|| ($cut_index < $middle_pos)
} then {
set new_cut_index -1
for {set i 0} {$i < 6} {incr i} {
if {
([::tcl::string::index $data [set test_cut_index [expr {$limit - $i}]]] eq "\0 03")
&& ([regexp {^\0 03([0-9]{1,2}(,[0-9]{1,2})?)} [::tcl::string::range $data $test_cut_index end]])
} then {
set new_cut_index [expr {$test_cut_index - 1}]
}
}
set cut_index [expr {($new_cut_index == -1) ? ($limit) : ($new_cut_index)}]
}
set new_part [::tcl::string::range $data 0 $cut_index]
set data [::tcl::string::range $data $cut_index+1 end]
if { [::tcl::string::trim [::tcl::string::map [list \0 02 {} \0 37 {} \0 26 {} \0 17 {}] [regsub -all {\0 03([0-9]{0,2}(,[0-9]{0,2})?)?} $new_part {}]]] ne "" } {
lappend output [::tcl::string::trimright $new_part]
}
if { [::tcl::string::trim [::tcl::string::map [list \0 02 {} \0 37 {} \0 26 {} \0 17 {}] [regsub -all {\0 03([0-9]{0,2}(,[0-9]{0,2})?)?} $data {}]]] eq "" } {
break
}
set taglist [regexp -all -inline {\0 02|\0 03(?:[0-9]{0,2}(?:,[0-9]{0,2})?)?|\0 37|\0 26|\0 17} $new_part]
set bold 0 ; set underline 0 ; set italic 0 ; set foreground_color "-1" ; set background_color "-1"
foreach tag $taglist {
if {$tag eq ""} {
continue
}
switch -- $tag {
"\0 02" { if { !$bold } { set bold 1 } { set bold 0 } }
"\0 37" { if { !$underline } { set underline 1 } { set underline 0 } }
"\0 26" { if { !$italic } { set italic 1 } { set italic 0 } }
"\0 17" { set bold 0 ; set underline 0 ; set italic 0 ; set foreground_color "-1" ; set background_color "-1" }
default {
lassign [split [regsub {\0 03([0-9]{0,2}(,[0-9]{0,2})?)?} $tag {\1 }] ","] foreground_color background_color
if {$foreground_color eq ""} {
set foreground_color -1 ; set background_color -1
} elseif {($foreground_color < 10) && ([::tcl::string::index $foreground_color 0] ne "0")} {
set foreground_color 0$foreground_color
}
if {$background_color eq ""} {
set background_color -1
} elseif {
($background_color < 10)
&& ([::tcl::string::index $background_color 0] ne "0")
} then {
set background_color 0$background_color
}
}
}
}
set line_start ""
if {$bold} { append line_start \0 02 }
if {$underline} { append line_start \0 37 }
if {$italic} { append line_start \0 26 }
if {($foreground_color != -1) && ($background_color == -1)} { append line_start \0 03$foreground_color }
if {($foreground_color != -1) && ($background_color != -1)} { append line_start \0 03$foreground_color,$background_color }
set data ${line_start}${data}
}
return $output
}
}
######################################
# proc for helping
#
# proc status
proc help:status { nick host handle arg } {
puthelp "PRIVMSG $nick :[::msgcat::mc "Chanrelay status for %1\$ s@%2\$ s" $::crelay::me(chan) $::crelay::me(network)]"
puthelp "PRIVMSG $nick :[::msgcat::mc "\0 02 Global status\0 02"]"
puthelp "PRIVMSG $nick :\0 37type\0 37 -- | trans -|- recept |"
puthelp "PRIVMSG $nick :global -- | -- $::crelay::me(transmit) -- | -- $::crelay::me(receive) -- |"
puthelp "PRIVMSG $nick :pub -- | -- $::crelay::trans_pub -- | -- $::crelay::recv_pub -- |"
puthelp "PRIVMSG $nick :act -- | -- $::crelay::trans_act -- | -- $::crelay::recv_act -- |"
puthelp "PRIVMSG $nick :nick -- | -- $::crelay::trans_nick -- | -- $::crelay::recv_nick -- |"
puthelp "PRIVMSG $nick :join -- | -- $::crelay::trans_join -- | -- $::crelay::recv_join -- |"
puthelp "PRIVMSG $nick :part -- | -- $::crelay::trans_part -- | -- $::crelay::recv_part -- |"
puthelp "PRIVMSG $nick :quit -- | -- $::crelay::trans_quit -- | -- $::crelay::recv_quit -- |"
puthelp "PRIVMSG $nick :topic -- | -- $::crelay::trans_topic -- | -- $::crelay::recv_topic -- |"
puthelp "PRIVMSG $nick :kick -- | -- $::crelay::trans_kick -- | -- $::crelay::recv_kick -- |"
puthelp "PRIVMSG $nick :mode -- | -- $::crelay::trans_mode -- | -- $::crelay::recv_mode -- |"
puthelp "PRIVMSG $nick :who -- | -- $::crelay::trans_who -- | -- $::crelay::recv_who -- |"
if { $::crelay::me(syn_topic) == "y"} {
puthelp "PRIVMSG $nick :[::msgcat::mc "Transmission of %1\$ s enabled" "Topic"]"
} else {
puthelp "PRIVMSG $nick :[::msgcat::mc "Transmission of %1\$ s disabled" "Topic"]"
}
puthelp "PRIVMSG $nick :[::msgcat::mc "Nicks appears as %1\$ s%2\$ s%1\$ s" $::crelay::hlnick $nick]"
puthelp "PRIVMSG $nick :--- *** ---"
}
# proc help
proc help:cmds { nick host handle arg } {
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s trans <type> on|off to change the transmissions" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s recv <type> on|off to change the receptions" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.status to see my actual status" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.help for this help" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.light <bo|un|gr|off> to bold, underline, gray or no higlight" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.net <yes|no> to (un)show the network" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.syntopic <yes|no> to disable/enable the topic synchronisation" $::botnick]"
puthelp "NOTICE $nick :[::msgcat::mc "/msg %1\$ s rc.debug \[ <yes|no>\] to disable/enable the debug (no arg: display debug status)" $::botnick]"
}
# Debug log
proc dlog {text} {
set out [open ${::crelay::crpath}${::crelay::crlog} a]
puts $out "\[ [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]\] <$::username> $text"
close $out
}
}
proc i18n {msgfile {lang {}} } {
if {$lang == ""} {set lang [string range [::msgcat::mclocale] 0 1] }
if { [catch {open $msgfile r} fmsg] } {
putlog "\0 02ChanRelay\0 02 - Could not open $msgfile for reading\n $fmsg"
} else {
putlog "\0 02ChanRelay\0 02 - Loading $lang file from $msgfile"
while {[gets $fmsg line] >= 0} {
lappend ll $line
}
close $fmsg
::msgcat::mcmset $lang [join $ll]
unset ll
}
::msgcat::mclocale $lang
}
if {![catch {package require msgcat}] && $::crelay::lang != "" && [string tolower $::crelay::lang] != "english"} {
set lfile "${::crelay::crpath}chanrelay.[string tolower $::crelay::lang].msg"
if {[file exists $lfile]} {
i18n $lfile [::tcl::string::map {"english" "en" "french" "fr" "spanish" "sp" "german" "de" "portuguese" "pt"} [string tolower $::crelay::lang]]
}
} else {
# short hack if msgcat cannot be load
namespace eval ::msgcat {
proc mc {text {str ""} args} { return [format $text $str $args] }
}
}
::crelay::init
putlog "CHANRELAY $::crelay::version by \0 02$::crelay::author\0 02 loaded - https://www.eggdrop.fr"
crtools folder also uploaded in my /scripts/
i'm using eggdrop1.6.21
that's all.
I've installed a windrop 1.6.21 with chanrelay (your exact version, copy & paste) :
Code:
.tcl source scripts/chanrelay.tcl
[08:08:24] CHANRELAY 4.00 by CrazyCat loaded - https://www.eggdrop.fr
Tcl:
.tcl putlog $::crelay::lang
[08:08:34] english
Works like a charm. The trouble is not from eggdrop version (but you'd better use the last stable) nor from the script...
BTW, here is the correction I add in future version:
FIND :
REPLACE WITH :
tcl
if { ! [ catch { package require msgcat } ] && [ info exists ::crelay ::lang ] && $ ::crelay ::lang ! = "" && [ string tolower $ ::crelay ::lang ] ! = "english" } {
previous issue is solved. and i got this.
Code:
<mabrook> .errorInfo
<eRadio> [04:44:33] ----------------
<eRadio> [04:44:33] expected integer but got "GREGORIAN_CHANGE_DATE"
<eRadio> while executing
<eRadio> "GetDateFields $clockval $TZData($timezone) GREGORIAN_CHANGE_DATE"
<eRadio> (procedure "::tcl::clock::formatproc'%Y%m%d%H%M%S'c" line 4)
<eRadio> invoked from within
<eRadio> "$procName $clockval $timezone"
<eRadio> (procedure "::tcl::clock::format" line 34)
<eRadio> invoked from within
<eRadio> "clock format [clock seconds] -format {%Y%m%d%H%M%S}"
<eRadio> (procedure "setting:set" line 6)
<eRadio> invoked from within
<eRadio> "setting:set $chan joincount $current"
<eRadio> (
<eRadio> [04:44:33] errorCode : TCL VALUE NUMBER
<eRadio> [04:44:33] ----------------
This happen sometimes with old systems (clock.tcl and msgcat look bugged). Can you give me your version of tcl and of tcllib ?
23/09/2022, 11:52
(This post was last modified: 23/09/2022, 12:03 by mabrook .)
<eRadio> Tcl library: /usr/share/tcltk/tcl8.6
<eRadio> Tcl version: 8.6.11 (header version 8.6.11)
is your latest version updated?
Remembers me a trouble with some arabians installations.
You can replace:
tcl
if { ! [ catch { package require msgcat } ] && [ info exists ::crelay ::lang ] && $ ::crelay ::lang ! = "" && [ string tolower $ ::crelay ::lang ] ! = "english" } {
set lfile "${::crelay::crpath}chanrelay.[string tolower $::crelay::lang].msg"
if { [ file exists $lfile ] } {
i18n $lfile [ ::tcl ::string ::map { "english" "en" "french" "fr" "spanish" "sp" "german" "de" "portuguese" "pt" } [ string tolower $ ::crelay ::lang ] ]
}
} else {
# short hack if msgcat cannot be load
namespace eval ::msgcat {
proc mc { text { str "" } args} { return [ format $text $str $args ] }
}
}
with this code :
tcl
if { ! [ catch { package require msgcat } ] } {
::msgcat ::mclocale en
if { [ ::msgcat ::mc GREGORIAN_CHANGE_DATE] == "GREGORIAN_CHANGE_DATE" } { ::msgcat ::mcset [ ::msgcat ::mclocale ] GREGORIAN_CHANGE_DATE 2299527 }
if { [ info exists ::crelay ::lang ] && $ ::crelay ::lang ! = "" && [ string tolower $ ::crelay ::lang ] ! = "english" } {
set lfile "${::crelay::crpath}chanrelay.[string tolower $::crelay::lang].msg"
if { [ file exists $lfile ] } {
i18n $lfile [ ::tcl ::string ::map { "english" "en" "french" "fr" "spanish" "sp" "german" "de" "portuguese" "pt" } [ string tolower $ ::crelay ::lang ] ]
}
}
} else {
# short hack if msgcat cannot be load
namespace eval ::msgcat {
proc mc { text { str "" } args} { return [ format $text $str $args ] }
}
}
It will force the use of a locale and the value of the erroreous constant
thank you @"CrazyCat" script is no error now,
now i set everything with the "trans" and "recv" but nothing is showing in the channel.
already link the two bots.
thank you for time and effort @"CrazyCat" for helpiing..
Turn on debug (/msg eggdrop rc.debug yes
) and after a few actions in one of the channels, open the chanrelay.log file and copy its content here.
Also, check if bots know each other with the good name (crazy must be linked to pot and pot must be linked to crazy), you can provide the result of .bottree
to ensure the nicks and botnet-nicks are ok.
And you can also provide me crazy.chanrelay.db and pot.chanrelay.db
here,
Code:
BOT A
<mabrook> .bottree
<pot> [08:07:50] #mabrook# bottree
<pot> pot
<pot> `--eRadio
<pot> Average hops: 1.0, total bots: 2
BOT B
<mabrook> .bottree
<eRadio> [08:07:46] #mabrook# bottree
<eRadio> eRadio
<eRadio> `--pot
<eRadio> Average hops: 1.0, total bots: 2
Inside crazy.chanrelay.db
Code:
transmit|y
receive|y
snet|y
highlight|0
col_act|lightred
col_mode|green
col_jpq|lightblue
trans_pub|y
trans_act|y
trans_nick|y
trans_join|y
trans_part|y
trans_quit|y
trans_topic|y
trans_kick|y
trans_mode|y
trans_who|y
recv_pub|y
recv_act|y
recv_nick|y
recv_join|y
recv_part|y
recv_quit|y
recv_topic|y
recv_kick|y
recv_mode|y
recv_who|y
syn_topic|y
Inside pot.chanrelay.db
Code:
transmit|y
receive|y
snet|y
highlight|3
col_act|purple
col_mode|green
col_jpq|cyan
trans_pub|y
trans_act|y
trans_nick|y
trans_join|y
trans_part|y
trans_quit|y
trans_topic|y
trans_kick|y
trans_mode|y
trans_who|y
recv_pub|y
recv_act|y
recv_nick|y
recv_join|y
recv_part|y
recv_quit|y
recv_topic|y
recv_kick|y
recv_mode|y
recv_who|y
syn_topic|n
and it's weird, i found another file which is chanrelay.log and all the channel chat there..