## BotTalker-1.3.tcl By nTaxa (New version by Jarod_) ## ## You can access for some features of that script by saying "!talkz" on ## channel. ## bla bla bla... more comments here. ## Configure your BOT sensor here: #bind pub - "$nick:" pub_dotalkz #bind pubm - "*$nick*" pub_dotalkz #bind pub - "$nick," pub_dotalkz bind pubm - "*" pub_dotalkz set TalkzSaveTimer 1 set TalkzChanArray { {#dev-web-fr} {#debian-facile} {#kameleon-facile} {#k-f} } set talkz_datafile "scripts/BotTalker_data.tcl" catch {source $talkz_datafile} ## Here you can modify/add default BOT answers: if {[info exists TalkzStrArray] != "1"} { set TalkzStrArray { {hein quoi ?} {Mouai.} {certes.} {comment ?} {Ouai Ouai} {c'est s�r.} {Oui.} {hein ?} {Je suis d'accord.} {�a d�pend.} {Ah ouai?} {Vraiment?} } } proc FixStr {str} { regsub -all {\[} $str {(} out1 regsub -all {\]} $out1 {)} out2 return $out2 } proc FixStrReg {str} { regsub -all {\?} $str {\\?} out1 regsub -all {\*} $out1 {\\*} out2 regsub -all {\(} $out2 {\\(} out3 regsub -all {\)} $out3 {\\)} out4 return $out4 } ## Important ! ## Here you can define nicks that be ignored, if you have other BOTs on channel ## add him here ! set bad_nicks { {IriX} {Lamer} } ## Here you can define list of "Bad Words" all strings that have that words ## be ignored. ## some for example: set ignore_words "fuck shit ass" ## max_list - variable for !talkz list this define number of strings ## that be viewed to someone who asks for list. set max_list 20 ## ## Oki. here configuration part if script done. Please do not edit anything ## below. ## #set botnick "MS-DOS" ############################################################################### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ############################################################################### proc putchan {channel msg} { putserv "PRIVMSG $channel :$msg" } proc putnot {nick msg} { putserv "NOTICE $nick :$msg" } proc pub_dotalkz {nick uhost hand chan rest} { global botnick global TalkzStrArray global TalkzChanArray global ignore_words global bad_nicks set str [lrange $rest 0 end] if {[lsearch [join $TalkzChanArray] $chan] == -1} { return 0 } if {$nick == $botnick} { return 0 } if {$str == ""} { putchan $chan "$nick: euh ... quoi ?" return 0 } foreach i $bad_nicks { if {[string match [string tolower $nick] [string tolower $i]]} { return 0 } } foreach i $ignore_words { foreach j [join $rest] { if {[string match [string tolower $j] [string tolower $i]]} { return 0 } } } set nrword [rand [llength $str]] set nword [lrange $str $nrword $nrword] set ntalk [lsearch -regexp $TalkzStrArray ".*[FixStrReg $nword].*"] set n [rand 100] set m [rand 400] # si le nom du bot est dans la phrase, on r�pond en indiquant le nom de la personne # qui nous parle set tt [lsearch -regexp $str ".*$botnick.*"] if {$tt != -1} { if { ($ntalk > 0) && ([rand 10] > 5) } { set dit [lindex $TalkzStrArray $ntalk] while {[lsearch -regexp $dit ".*$botnick.*"] != -1} { regsub -all "$botnick" $dit "[lindex [chanlist $chan] [rand [llength [chanlist $chan]]]]" dit } putchan $chan "$nick: $dit" } else { set dit [lindex $TalkzStrArray [expr [rand [llength $TalkzStrArray]]]] while {[lsearch -regexp $dit ".*$botnick.*"] != -1} { regsub -all "$botnick" $dit "[lindex [chanlist $chan] [rand [llength [chanlist $chan]]]]" dit } putchan $chan "$nick: $dit" } # sinon on dit une phrase quelque fois, juste comme �a } else { if {$n > $m} { set dit [lindex $TalkzStrArray [expr [rand [llength $TalkzStrArray]]]] while {[lsearch -regexp $dit ".*$botnick.*"] != -1} { regsub -all "$botnick" $dit "[lindex [chanlist $chan] [rand [llength [chanlist $chan]]]]" dit } putchan $chan "$dit" } } set qui [string trimright [lindex $str 0] :] if {($qui != $botnick) && ([onchan $qui $chan])} { set str [lrange $str 1 end] if {[lindex $str 0] == ":"} { set str [lrange 1 end] } lappend TalkzStrArray [FixStr $str] } else { lappend TalkzStrArray [FixStr $str] } } proc do_save_talkz {} { global max_list global talkz_datafile global TalkzStrArray global TalkzSaveTimer set fd [open $talkz_datafile w] puts $fd "# Bot Talker Data file." puts $fd "set TalkzStrArray {" for {set n 0} {$n < [llength $TalkzStrArray]} {incr n} { if { [lsearch $TalkzStrArray [lindex $TalkzStrArray $n]] >= $n } { puts $fd " {[lindex $TalkzStrArray $n]}" } } puts $fd "}" close $fd timer $TalkzSaveTimer do_save_talkz } proc pub_talkz {nick uhost hand chan rest} { global max_list global talkz_datafile global TalkzStrArray set what [lindex $rest 0] append uzer $nick "!" $uhost set who [finduser $uzer] if {$what == ""} { putnot $nick ".---====( BotTalker v1.3 By \002nTaxa\002 )====---." putnot $nick "| \002!talkz\002 - TalkzScript control |" putnot $nick "| Where Action: |" putnot $nick "| list \[ \[\]\] - dump all |" putnot $nick "| collected stringz. |" putnot $nick "| i - from |" putnot $nick "| n - number of messages for |" putnot $nick "| display |" putnot $nick "| save - Save all collected |" putnot $nick "| messages. |" putnot $nick "+----------------------------------------------+" putnot $nick " Total stringz collected: [llength $TalkzStrArray]." return 0 } # "list" command if {$what == "list"} { set from [lindex $rest 1] set nview [lindex $rest 2] if {$from > [llength $TalkzStrArray]} { putnot $nick "I have only [llength $TalkzStrArray] stringz!" return 0 } if {$from == ""} { set from 0 } if {$nview == ""} { set nview $max_list } putnot $nick ".---====( BotTalker v1.3 By \002nTaxa\002 )====---." putnot $nick "| BotTalker Report:" putnot $nick "| I have [llength $TalkzStrArray] stringz collected." putnot $nick "| Now I show to you $nview records, begins from $from." putnot $nick "| ($from - [expr ($from + $nview)])" putnot $nick "`-------------------------\\" for {set n 0} {$n < $nview} {incr n} { putnot $nick "[expr ($from + $n + 1)]: [lindex $TalkzStrArray [expr ($from + $n)]]" if {[expr ($from + $n + 1)] >= [llength $TalkzStrArray]} { return 0 } } return 0 } # end if "list" if {$what == "save"} { putnot $nick "Saving..." putnot $nick "$n messages saved." do_save_talkz you might want comment next string. putserv "PRIVMSG #I.A. :BotTalker RuleZ!" return 0 } # end of "save" } bind pub o "!talkz" pub_talkz proc do_doebis {} { global TalkzStrArray global TalkzChanArray global ntalk for {set n 0} {$n < [llength $TalkzChanArray]} {incr n} { set chan [lindex $TalkzChanArray $n] set ToUser "[lindex [chanlist $chan] [rand [llength [chanlist $chan]]]]" if {[matchattr $ToUser +b $chan] == 0} { putchan $chan "$ToUser: [lindex $TalkzStrArray [expr [rand [llength $TalkzStrArray]]]]" } } # timer 5 do_doebis } proc join_talkz {nick uhost hand chan} { global TalkzStrArray global TalkzChanArray # putchan $chan "$nick: [lindex $TalkzStrArray [expr [rand [llength $TalkzStrArray]]]]" } bind join - * join_talkz if {![info exists do_doebis_active]} { timer 5 do_doebis set do_doebis_active 1 } if {![info exists do_save_talkz_active]} { timer 1 do_save_talkz set do_save_talkz_active 1 } putlog "Talkz Script loaded. ([llength $TalkzStrArray] messages loaded)" ## ## Thats all folks ! ;P ##