botlending forum  

Go Back   botlending forum > Eggdrop & TCL > Tcl scripting

Tcl scripting Tcl scripting related questions

Reply
 
LinkBack Thread Tools Display Modes
Old 18-06-2004, 19:27   #1 (permalink)
Member
 
Kurupt's Avatar
 
Join Date: Jun 2004
Location: Hermannstadt
Age: 24
Posts: 108
Rep Power: 36
Kurupt will become famous soon enough
Send a message via Yahoo to Kurupt
Default semnul din fatza comenzii publice

Vreau ca scriptul sa raspunda si la ` ! . - cand se da o comanda publica
Code:
set cmdpfix "`"
set cmdpfix "!"
set cmdpfix "."
set cmdpfix "-"
bind pub om|o ${cmdpfix}k kick
proc kick {www liquid2k com slash xzziroz} {
set nick [lindex $xzziroz 0]
set reas [lrange $xzziroz 1 end]
  if {![string length [string trim $reas]]} {
   set reas "\[${com}/\002${www}\002] - No reason specified"} else {
   set reas "\[${com}/\002${www}\002] - $reas"}
putserv "kick $slash $nick $reas"
}
__________________
Owner of #ro-tcl
Kurupt is offline   Reply With Quote
Old 18-06-2004, 21:14   #2 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 832
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

Generalizand, analizam urmatoarele doua posibilitati

1. facem o comanda noua, de exemplu:
Code:
kbindk om|o kick kick
care la randul ei va face

Code:
 
set settings(cmdpfix1) "."
set settings(cmdpfix1) "!"
set settings(cmdpfix1) "`"
 
proc kbindk {flags cmd proc} { 
   global settings
 
 
bind pub $flags ${settings(cmdpfix1)}${cmd} $proc
bind pub $flags ${settings(cmdpfix2)}${cmd} $proc
bind pub $flags ${settings(cmdpfix3)}${cmd} $proc
bind pub $flags ${cmd} $proc
}
Va crea 4 categorii de bind-uri cu toate semnele dorite, inclusiv bind fara semn (dupa dorinta).

2. sau facem bind-urile:
Code:
bind pubm -|- * pubm
care va "prinde" toate randurile, si fiecare rand de analizat daca contine o comanda sau alta info, de care avem nevoie, sau

Code:
 
bind pubm -|- "% ${settings(cmdpfix1)}*" cmdpfix
bind pubm -|- "% ${settings(cmdpfix2)}*" cmdpfix
bind pubm -|- "% ${settings(cmdpfix3)}*" cmdpfix
care va "prinde" numai randurile care incep cu $cmdpfix3 sau cmdpfix2 sau cmdpfix1, si in continuare acelash algortim.

___

bind - comanda interna eggdrop (vezi doc/tcl-commands.doc)
proc, set - comenzi Tcl (vezi http://tcl.tk/man/)

Last edited by UniversaliA; 18-06-2004 at 21:19.
UniversaliA is offline   Reply With Quote
Old 18-06-2004, 22:42   #3 (permalink)
Member
 
Kurupt's Avatar
 
Join Date: Jun 2004
Location: Hermannstadt
Age: 24
Posts: 108
Rep Power: 36
Kurupt will become famous soon enough
Send a message via Yahoo to Kurupt
Default Nu inteleg

daca tot fac 4 binduri le pot face asa
Code:
bind pub om|o .k kick
bind pub om|o !k kick
bind pub om|o `k kick
bind pub om|o -k kick
proc kick {www liquid2k com slash xzziroz} {
set nick [lindex $xzziroz 0]
set reas [lrange $xzziroz 1 end]
  if {![string length [string trim $reas]]} {
   set reas "\[${com}/\002${www}\002] - No reason specified"} else {
   set reas "\[${com}/\002${www}\002] - $reas"}
putserv "kick $slash $nick $reas"
}
Eu intrebam de o modalitate mai simpla !
__________________
Owner of #ro-tcl
Kurupt is offline   Reply With Quote
Old 02-08-2004, 12:28   #4 (permalink)
Junior Member
 
Join Date: Aug 2004
Location: Planeta Moldova
Age: 21
Posts: 9
Rep Power: 0
d0oM is an unknown quantity at this point
Default

Quote:
Originally Posted by Kurupt
da am invatzat sa pun mai multe semne sau nici un semn acum explica mie cum sa fac sa asculte de nick la bot am incercat cu $botnick no restult alta idee nu am
nu kiar am inteles ce ai in vedere, adica sa reactioneze la comenzi conform nickname-ul botului?

eu folosesc:

if {![string compare -nocase "$botnick" [lindex [split $text] 0]]} {
set text "$cmd(prefix)[join [lrange [split $text] 1 end]]"
}

$cmd(prefix) - specifici smenul tau de conducere

poti folosi acest exemplu la event-ul bind pubm, un exemplu arata cam asa:

bind pubm - * my_pub

proc mypub {nick uhost hand chan text} { global botnick; variable conf

if {![string compare -nocase "=$botnick" [lindex [split $text] 0]]} {
set text "![join [lrange [split $text] 1 end]]"
}

__________________
empty
d0oM is offline   Reply With Quote
Old 02-08-2004, 12:31   #5 (permalink)
Junior Member
 
Join Date: Aug 2004
Location: Planeta Moldova
Age: 21
Posts: 9
Rep Power: 0
d0oM is an unknown quantity at this point
Default

Quote:
Originally Posted by d0oM
to Kurupt

apropo de o varianta mai simpla poti folosi foreach, procedura arata cam asa:

variable foo [.kick !kick -kick etc..]

foreach blabla $foo { bind pub - $blabla my_kick }
catch { unset blabla }

proc my_kick { nick host hand chan text} {
...
aici putzin am gresit, varianta corecta:

variable foo[list .kick !kick -kick etc..]

foreach blabla $foo { bind pub - $blabla my_kick }
catch { unset blabla }
__________________
empty
d0oM is offline   Reply With Quote
Old 02-08-2004, 17:45   #6 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 832
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

si cu ce e mai simpla varianta asta ? ca la fiecare comanda tu o sa folosesti
Code:
variable foo [.kick !kick -kick etc..]

foreach blabla $foo { bind pub - $blabla my_kick }
catch { unset blabla }
sau varianta cu kbindk, unde e destul doar o data sa definesti procesul si dupa asta folosesti kbindk ca bind normal ?
UniversaliA is offline   Reply With Quote
Old 03-08-2004, 04:28   #7 (permalink)
Member
 
Kurupt's Avatar
 
Join Date: Jun 2004
Location: Hermannstadt
Age: 24
Posts: 108
Rep Power: 36
Kurupt will become famous soon enough
Send a message via Yahoo to Kurupt
Default bindul

asa arata bindul
Code:
set settings(cmdpfix1) "."
set settings(cmdpfix2) "!"
set settings(cmdpfix3) "`"
proc kbindk {flags cmd proc} {
   global settings

bind pub $flags ${settings(cmdpfix1)}${cmd} $proc
bind pub $flags ${settings(cmdpfix2)}${cmd} $proc
bind pub $flags ${settings(cmdpfix3)}${cmd} $proc
bind pub $flags ${cmd} $proc
}
__________________
Owner of #ro-tcl

Last edited by Kurupt; 03-08-2004 at 04:41.
Kurupt is offline   Reply With Quote
Old 03-08-2004, 04:46   #8 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 832
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

O dedicatie pentru D0om care tot striga de optimizare cu foreach
Code:
 
set settings(binds) ". ` !" 
 
proc kbindk {flags cmd proc} {
global settings
 
foreach bind	[split $settings(binds)] {bind pub $flags ${bind}${cmd} $proc}
bind pub $flags ${cmd} $proc
 
}
sfirsit dedicatie

Last edited by UniversaliA; 17-12-2004 at 21:01.
UniversaliA is offline   Reply With Quote
Old 04-08-2004, 02:49   #9 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 832
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

Reesind din bind-ul tau, pentru moment am impovizat urmatoarele:

Code:
 
bind nick -|- * nick:change 
 
proc nick:change {nick uhost hand chan newnick} {
 
   if {[isbotnick $nick]} {
	 foreach bind [binds $nick] {
		 set type [lindex $bind 0]
		 set flag [lindex $bind 1]
		 set mask [lindex $bind 2]
		 set proc [lindex $bind 4]
 
		 regsub -- $nick $mask $newnick newmask 
 
		 unbind $type $flag $mask $proc
		 bind $type $flag $newmask $proc
	 }
   }
}
 
bind evnt - init-server connect:irc
 
proc connect:irc {type} {
   global botnick settings
 
   set cmdpfix [lindex [split $settings(binds)] 0]
 
   foreach bind [binds ${cmdpfix}*] {
	  
	  set cmd [string trimleft [lindex $bind 2] $cmdpfix]
	  bind pubm [lindex $bind 1] "% $botnick~${cmd}*" [lindex $bind 4]
   }
}
explicari in urmatorul post

Last edited by UniversaliA; 04-08-2004 at 20:29.
UniversaliA is offline   Reply With Quote
Old 04-08-2004, 03:15   #10 (permalink)
Administrator

aka aqwzsx
 
Join Date: Jun 2004
Posts: 832
Blog Entries: 126
Rep Power: 3
UniversaliA is on a distinguished road
Default

bind nick -|- * nick:change bind la chimbarea nick-ului (la orice nick) deci aici puteti adauga cod in plus pentru useri sau pentru BOT. In proc nick:change verificam daca aceasta a fost nick-ul BOTului care s-a schimbat: [isbotnick $nick], daca da - toate bind-urile care contineau nick-ul vechi al BOT-ului foreach bind [binds $nick] le stergem din memorie unbind $type $flag $mask $proc si adaugam acelash bind dar cu noul nick bind $type $flag $newmask $proc. $newmask = $mask doar ca am inlocuit nick vechi al BOTului cu cel nou regsub -- $nick $mask $newnick newmask.

bind evnt - init-server connect:irc bind la conectarea/intrarea BOTului pe irc, aici iarasi puteti aduga cod in plus pentru diferite proceduri interne. In proc connect:irc pentru fiecare bind care deja exista & incepe cu primul semn specificat in $settings(binds) foreach bind [binds ${cmdpfix }*] adaugam un bind cu nick-ul BOTului care el a luat cand s-a conectat la IRC bind [lindex $bind 0] [lindex $bind 1] "% $botnick~${cmd}*" [lindex $bind 4]. [string trimleft [lindex $bind 2] $cmdpfix] scoate semnul $cmdpfix din fata comenzii.

De ce bind pe $botnick se face numai cand BOTul se conecteaza la irc si nu deodata in procedura kbindk specificata de Kurupt mai sus (cum el o face pentru prefixele ". ` !" ) ? Raspuns: pina in momentul cand BOTul se conecteaza la IRC, variabila $botnick nu are nici o valoare, ea e vida; adica BOTul logic nu stie ce nick va avea pe IRC, deci anume din acest motiv - bind pe $botnick o sa fie valabil numai cand BOTul se conecteaza pe IRC.

___

bind, unbind, isbotnick - comenzi interne eggdrop (vezi doc/tcl-commands.doc)
proc, global, set, string, lindex, foreach, split, regsub - comenzi Tcl (vezi http://tcl.tk/man/)

Quote:
Originally Posted by doc/tcl-commands.doc
% matches 0 or more non-space characters (can be used to match a single word)
~ matches 1 or more space characters (can be used for whitespace between words)

Last edited by UniversaliA; 04-08-2004 at 06:05.
UniversaliA is offline   Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
[Correct script] Acces Public -> Acces Admini SoLLo Tcl scripting 3 11-04-2007 16:32
AutoNOTICE & public message Madalin Tcl scripting 2 12-05-2006 23:54
Comenzi BOT oxyg3n a&a light script 10 28-04-2006 09:45
comenzi !plata !service etc UltraS99 Tcl scripting 5 17-10-2005 03:53
ma intereseaza niste comenzi solitare #a&a 1 26-01-2005 17:12


All times are GMT +3. The time now is 10:02.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.