# $Id: socials.tcl,v 1.4 2003/12/03 20:21:46 aleksey Exp $ namespace eval socials { set social_list {} } proc socials::load {filename {enc utf-8}} { variable social set f [file join [file dirname [info script]] $filename] set fd [open $f] fconfigure $fd -encoding $enc while {1} { set s [gets $fd] if {$s == "" && [eof $fd]} break set s [string trim $s] if {$s == "#SOCIALS" || $s == ""} continue if {$s == "#0"} break set names [split $s] set names [lmatch -regexp $names {[^\d]}] #puts $names add $names foreach kind {char_no_arg others_no_arg char_found others_found \ vict_found char_not_found char_auto others_auto} { set s [string trim [gets $fd]] if {$s == {$}} { continue } elseif {$s == "#"} { break } assign $names $kind $s } } close $fd } proc socials::add {names} { variable social variable social_list foreach name $names { lappend social_list $name } foreach kind {char_no_arg others_no_arg char_found others_found \ vict_found char_not_found char_auto others_auto} { assign $names $kind "" } } proc socials::assign {names kind val} { variable social foreach name $names { set social($kind,$name) $val } } socials::load socials.cz #puts [array get socials::social] proc socials::substitute {s from to} { regsub -all {\$n\d?} $s /me s regsub -all {\$e\d?} $s /me s #regsub -all {\$e\d?} $s $from s regsub -all {\$N\d?} $s $to s regsub -all {\$E\d?} $s $to s return $s } proc socials::interp {soc from to} { variable social if {$to == ""} { return [substitute $social(others_no_arg,$soc) $from $to] } else { return [substitute $social(others_found,$soc) $from $to] } } #puts [socials::interp giggle asd ""] #puts [socials::interp ползать asd qwe] proc socials::commands_comps {chatid compsvar wordstart line} { variable social_list upvar 0 $compsvar comps if {!$wordstart} { foreach soc $social_list { lappend comps "/$soc " } } #debugmsg completion "SOC: $comps" } hook::add generate_completions_hook \ [namespace current]::socials::commands_comps 51 #puts [llength $socials::social_list] proc socials::handle_commands {chatid user body type} { variable social_list variable social #if {$type != "groupchat"} return if {[string index $body 0] != "/"} return set we [string wordend $body 1] set command [string trim [crange $body 1 $we]] set to [string trim [crange $body $we end]] if {[lcontain $social_list $command]} { set from [chat::get_nick [chat::our_jid $chatid] groupchat] if {$to == $from} { set s [substitute $social(others_auto,$command) $from $to] } elseif {$to == ""} { set s [substitute $social(others_no_arg,$command) $from $to] if {$s == ""} { set se [substitute $social(char_no_arg,$command) $from $to] chat::add_message $chatid $chatid error $se {} } } else { set s [substitute $social(others_found,$command) $from $to] } if {$s != ""} { #hook::run chat_send_message_hook $chatid $user $s $type ::plugins::send_message $chatid $user $s $type ::plugins::draw_message $chatid $user $s $type } return stop } } hook::add chat_send_message_hook \ [namespace current]::socials::handle_commands 50