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.

Topic Relay Script Fix

Help for those learning Tcl or writing their own scripts.
Post Reply
D
Dunn
Voice
Posts: 5
Joined: Sat Jan 28, 2006 5:07 am

Topic Relay Script Fix

Post by Dunn »

I'm running a modified version of the clink relay script acrossed a few Eggdrops to display topics when they are changed in various channels. I've finally got everything working great, but there are a few bugs with how some things are displayed.

For example, one channel has this topic format:

Code: Select all

14,1[ 0Check4Six 14] 4¤ 14[ 0www4.0teamx64.0net 14] 4¤ 14[ 0News4: 0x6\\cha0ticz picked to represent the USA at ESWC for Quake 4! Congrats cha0ticz 14]
Displays this:

Code: Select all

5(14Topic in #Check-Six has changed.5) {14,1[} 0Check4Six 14\] 4¤ {14[} 0www4.0teamx64.0net 14\] 4¤ {14[} 0News4: {0x6\cha0ticz} picked to represent the USA at ESWC for Quake 4! Congrats cha0ticz 14\]
This is the code from the script I'm using (I removed the other channels for the sake of saving space, but there are about 20 all together):

Code: Select all

#################################################
# clink.tcl Channel Linker v1.2
# Written by {SImPhAt}, May 6th 2002
#
# This script lets you link channels (as many as you
# like) on different (or same) IRC Networks using 2 or
# more eggdrops.
#
# Messages are sent in a botnet-link connection.
#
# Easy to configure.
#
# Join, Part, Nick change, Quit, Kick, Msgs and 
# Actions (/me) are currently relayed.
#
# Tested on eggdrop v1.6.x (3 bots) relaying between 3
# different channels.
#
# E-mail questions or comments to simon.boulet@divahost.net.
# I'd like to know who is using my script and where, just to
# see it live in action =).
#
# Changes since 1.0:
#	1) Linking of channels that do not have the same name
#	   (ex: linking #help with #help.quebec-chat)
#	2) Spelling correction in "nick as joined #chan" should be has
#	3) Stupid bug showing empty () on kick/part/quit with no reason
#	4) Tested everything with 3 channels/networks/bots.
#
# TODO:
#	1) Flood protection.
#	2) List current nicks on the linked side (.names).
#	3) Remote topic change, kick/ban, op.
#
#################################################
# Configuration
#################################################
#
# Note: I was relaying #clink.qc(Quebec-Chat) #clink.io(Ionical) and
# #clink.un(Undernet) all together (those 3 eggdrops where using the
# same .tcl source).
#
# CLink-QC on Quebec-Chat, CLink-IO on Ionical and CLink-UN on Undernet.
#
# Nickname (botnet-nick) of the bots who are involved in the relaying.
# Enter all of them, case-sensitive.
#
set clink_botnicks {"staffbot" "j3rryx" "j3rryx-"}
#
# The channel(s) you want to relay messages from and the bot that is on.
#
# You need to "set network 'Network-Name'" in your bot(s) .conf file.
# If you don't want to waste time searching what you put there, simply
# .rehash your bot with clink.tcl loaded and you should see something like:
#
# clink.tcl: I am CLink-UN running on Undernet.
# --- Network-Name -------------------^^^^^^^^
# Loaded clink.tcl: {SImPhAt} Channel Linker v1.x
#
# Case-sensitive.
#
# Syntax: set clink_onchan(#chan@network) "bot-name"
set clink_onchan(#mychannel@GameSurge) "staffbot"
set clink_onchan(#Check-Six@GameSurge) "j3rryx"
#
# The channel(s) where you want the messages to be relayed.
#
# For each channels you need to tell where you want everything
# to be sent to.
#
# Case-sensitive.
#
# Syntax: set clink_relayto(#from_chan@network1) {"#destination_chan@network2"}
set clink_relayto(#Check-Six@GameSurge) {"#mychannel@GameSurge"}
#
# Should we add colors to join, part, nick, quit,
# action, etc.
#
set clink_usecolor 0
#
# Do you want me to display the network name?
#
set clink_relaynet 0
#
# Characters to use when displaying the nicknames in channels msgs.
#
# Exemples:
# <Nickname> hello
# set clink_charmsgs {"<" ">"}
#
# (Nickname) hello
set clink_charmsgs {"(" ")"}
#
#################################################
# Script, you should *not* need to change
# anything below.
#################################################
bind topc - * clink_topc 
bind bot - clink clink_botdat

# Colors settings (Default: mIRC style)
if {$clink_usecolor == 1} {
	set clink_color(topc) "\00314"
} else {
	  set clink_color(topc) ""
}
# Done

# Check current configuration
if {${botnet-nick} == ""} {
	set {botnet-nick} $nick
	putlog "clink.tcl: Warning: botnet-nick not defined in .conf file, using \"$nick\"."
}
if {[lsearch $clink_botnicks ${botnet-nick}] == -1} {
	die "clink.tcl: Fatal: Bot \"${botnet-nick}\" not defined in clink_botnicks. Please edit clink.tcl and check your configuration."
}
if {$network == "unknown-net"} {
	putlog "clink.tcl: Warning: network not defined in .conf file, using \"unknown-net\"."
}
# Done

proc clink_topc {nick uhost hand chan text} {
   global clink_onchan network
   if {[info exist clink_onchan($chan@$network)]} {
      clink_botsend $chan [concat "topc" [clink_cleannick $nick] $text]
   }
}
proc clink_botsend {chan param} {
	global clink_onchan {botnet-nick} network clink_relayto
	foreach clink_relaychan $clink_relayto($chan@$network) {
		if {[lsearch -exact [bots] $clink_onchan($clink_relaychan)] == -1} {
			putlog "clink.tcl: Warning: bot $clink_onchan($clink_relaychan) not linked."
		} else {
			putbot $clink_onchan($clink_relaychan) "clink $chan $network $param"
		}
	}
}
proc clink_botdat {bot clink param} {
	global clink_relaynet clink_color clink_charmsgs clink_relayto network
	if {$clink_relaynet == 1} {
		set clink_network "\[[lindex $param 1]\] "
	} else {
		set clink_network ""
	}
	if {[lrange $param 5 end] != ""} {
		set reason "\([lrange $param 5 end]\)"
	} else {
		set reason ""
	}
	set clink_destchan [lindex [split [lindex $clink_relayto([lindex $param 0]@[lindex $param 1]) [lsearch -glob $clink_relayto([lindex $param 0]@[lindex $param 1]) "*@$network"]] @] 0]
	switch [lindex $param 2] {
		topc   { putserv "PRIVMSG $clink_destchan :$clink_network$clink_color(topc)\002\0035[lindex $clink_charmsgs 0]\00314\002Topic in [lindex $param 0] has changed.\0035\002[lindex $clink_charmsgs 1]\003\002 [lrange $param 4 end]" }
		default { putlog "clink.tcl: Warning: unknown action type \"[lindex $param 2]\" for [lindex $param 0]." }
	}
}
proc clink_cleannick {nick} {
	if {[string range $nick 0 0] == "\{"} {
		set nick "\\$nick"
	}
        return $nick
}
putlog "clink.tcl: I am ${botnet-nick} running on $network."
putlog "Loaded clink.tcl: {SImPhAt} Channel Linker v1.2"
Is there anything I can do to fix this? In mIRC coding I've seen ways to convert characters their ASCII equivalents, but I'm not very good with TCL so I'm hoping for a little help here.
Last edited by Dunn on Tue Jun 06, 2006 1:21 am, edited 1 time in total.
m
metroid
Owner
Posts: 771
Joined: Wed Jun 16, 2004 2:46 am

Post by metroid »

use [join] on the final variable, it would appear that you made the topic a list but you should make it a string instead. (I didn't look at the script but just use [join])

eg:

Code: Select all

[join $topicvariable]
D
Dunn
Voice
Posts: 5
Joined: Sat Jan 28, 2006 5:07 am

Post by Dunn »

Thanks, got it working perfectly as far as I can tell :) I honestly had no clue how the script was setup with the variables, but a google search using your term helped me catch on to where you were pointing ;)
Post Reply