#!/opt/ActiveTcl/bin/tclsh

package require Tcl 8.3
package require irc 0.2
package require comm 4.0

if {$argc == 0} {
	puts "tailbot <server> <channel> <nick> <file>"
	exit 1
}
set server [lindex $argv 0]
set channel [lindex $argv 1]
set mynick [lindex $argv 2]
set tailfile [lindex $argv 3]

::irc::config debug 0
set irc [::irc::connection $server]
$irc registerevent EOF { openserver }
$irc registerevent defaultcmd { 
	#puts "[action] with message [msg]" 
}
$irc registerevent defaultevent { 
	#puts "[who] sent [action] to [target] with message [msg]" 
}
$irc registerevent defaultnumeric { 
	#puts "[who] sent [action] to [target] with message [msg]" 
}
$irc registerevent PING { ircsend "PONG [msg]" }
$irc registerevent PRIVMSG { 
	global mynick
	if {[string equal -nocase [target] $mynick]} { 
		Privmsg [who] "[msg] back to you" 
	} 
}

$irc registerevent 376 { upvar #0 channel ch ; Join $ch }
$irc registerevent JOIN { upvar #0 channel ch ; ircsend "MODE $ch +o [who]" }

proc openserver {} {
	global irc server env mynick channels
	$irc connect
	$irc user $env(USER) $server sami.tikka@f-secure.com
	$irc nick $mynick
}
openserver

proc tail { off_last } {
	global tailfile irc channel
	if {[file size $tailfile] == $off_last} {
		after 1000 tail $off_last
		return
	}
	set f [open $tailfile r]
	seek $f $off_last
	while {![eof $f]} {
		if {[gets $f line] <= 0} { break }
		# Max length of IRC protocol message is 512 bytes
		set line [string range $line 0 480]
		if {[catch {$irc privmsg $channel $line} err]} {
			after 5000 tail [tell $f]
			return
		}
		after 1500
	}
	after 1000 tail [tell $f]
	close $f
}

tail 0

# Then we just wait...
set ok_to_quit 0
vwait ok_to_quit

# vim:ai sm

