Posted to tcl by kostix at Sun Nov 18 22:41:26 GMT 2007view pretty
#!/usr/bin/env tclsh
set use_external_tclxml on
package require -exact jabberlib 0.10.1
array set opts {
-from kostix@007spb.ru/Autobot
-password жопасручкой
-to {kostix@007spb.ru/Home brennon1303@jabber.ru}
-type chat
-subject Test
-body Yo!
-host jabber.007spb.ru
-tls true
-verbose true
-debug true
}
if {![info exists opts(-debug)] || !$opts(-debug)} {
proc ::LOG args {}
}
proc client:errmsg err {
return -code error $err
}
proc client:status status {
upvar #0 opts(-verbose) vb
if {[info exists vb] && $vb} {
puts $status
}
}
proc on_login {result args} { set ::logged_in [list $result $args] }
regexp {^(?:([^@]*)@)?([^/]*)(?:/(.*))?$} $opts(-from) -> user server resource
set cmd [list jlib::new]
foreach var {user server resource} {
if {[info exists $var]} {
lappend cmd -$var [set $var]
}
}
set connid [eval $cmd]
if {[info exists opts(-tls)] && $opts(-tls)} {
package require tls
set transport tls
if {![info exists opts(-port)]} {
set opts(-port) 5223
}
} else {
set transport tcp
if {![info exists opts(-port)]} {
set opts(-port) 5222
}
}
jlib::connect $connid \
-transport $transport \
-host [idna::domain_toascii $opts(-host)] \
-port $opts(-port) \
-password $opts(-password)
client:status Connected
jlib::login $connid ::on_login
client:status "Logging in..."
vwait ::logged_in
client:status "Logged in"
if {![string eq [lindex $::logged_in 0] OK]} {
puts stderr [lindex $::logged_in 1]
exit 1
}
foreach jid [split [regsub -all {\s+} $opts(-to) " "]] {
if {$jid == ""} {
puts stderr "No jids to send message to"
exit 2
}
client:status "Sending msg to $jid..."
set cmd [list jlib::send_msg $jid -connection $connid]
foreach var {type subject body} {
if {[info exists opts(-$var)]} {
lappend cmd -$var [set opts(-$var)]
}
}
set res [eval $cmd]
if {$res == -1} {
puts stderr "Failed sending message to $jid, bailing out..."
exit 3
}
}
jlib::disconnect $connid
client:status Disconnected