botlending forum  

Go Back   botlending forum > Eggdrop & TCL > Tcl scripting

Tcl scripting Tcl scripting related questions

Reply
 
LinkBack Thread Tools Display Modes
Old 22-10-2005, 11:24   #1 (permalink)
Junior Member
 
McEagle's Avatar
 
Join Date: Sep 2005
Location: Aici Sunt Eu Tu Esti Acolo Mai Bine Lasa
Age: 28
Posts: 9
Rep Power: 0
McEagle is an unknown quantity at this point
Cool TCL Script Pt Testerii

Hmm am si eu nevoie de un tcl care sa pun pe un eggdrop si sa dea test cum ar venii eggdropu.
De ex eu sa dau !question 1 , si el sa intrebe intrebarea 1 si tot asa pana la 10. Cine crede ca poate sa faca asa ceva va rog postatii aici..

Va multumesc.. ! Si asa va fii mai usor pt testerii care tot se chinuie sa puna iei intrebarile e.t.c !
McEagle is offline   Reply With Quote
Old 22-10-2005, 13:06   #2 (permalink)
TCB & Ratings projects Member, #Mythic representative
 
arcade's Avatar
 
Join Date: Jun 2004
Location: In fatza calculatorului!!
Age: 19
Posts: 221
Rep Power: 37
arcade is on a distinguished road
Send a message via Yahoo to arcade
Default

uite vers revizuita k aia nuj d c nu mere

Code:
set question(1) {"line 1"}
set question(2) {"line 2"}
set question(3) {"line 3"}
set question(4) {"line 4"}
set question(5) {"line 5"}
set question(6) {"line 6"}
set question(7) {"line 7"}
set question(8) {"line 8"}
set question(9) {"line 9"}
set question(10) {"line 10"}




bind pub - !question pub:question
proc pub:question {nick uhost hand chan text} {
global question(1) question(2) question(3) question(4) question(5) question(6) question(7) question(8) question(9) question(10)

if {![matchattr $hand m|m $channel]} {
     putserv "PRIVMSG $channel :Sorry, you are not authorized to use this command."
     return 0
  }
  if {[string tolower [lindex $arg 0]] == "1"} {
foreach line $question(1) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "2"} {
foreach line $question(2) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "3"} {
foreach line $question(3) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "4"} {
foreach line $question(4) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "5"} {
foreach line $question(5) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "6"} {
foreach line $question(6) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "7"} {
foreach line $question(7) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "8"} {
foreach line $question(8) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "9"} {
foreach line $question(9) { puthelp "NOTICE $nick :$line" }
  } else {
  if {[string tolower [lindex $arg 0]] == "10"} {
foreach line $question(10) { puthelp "NOTICE $nick :$line" }
  } 


}
daca nici asta nu mere astept pe cineva mai bun ca mine sa dea reply!


PS: daca asta mere in cateva zile fac unul care pune intrebarile singur. dai !start si dupa aia el pune 10 intrebari si cand termina cu intrebarile spune si raspunsurile.
arcade is offline   Reply With Quote
Old 22-10-2005, 23:09   #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

Eu am avut ceva de genul facut da nu asa ci o sa va dau exemplu cum
Sunt fisiere cu cate 15 intrebari.
Se da .load test1
Botul incepe si spune:
Bine ati venit incepem testele bla bla pune +m
1.Ce face flagul X
<scoate mode +m> useii am sa zicem 45/50 se cunde la dispozitie pt raspuns dupa care pune +m si trece la 2

Nu stiu daca voi ati vazut scriptul dar din cate imi amintesc Erised l-a vazut, inca nu stiu daca o sa il fac public, da o sa ma gandesc si poate o sa las link aici,Plus arcade o sa ma uit peste script tau si o sa iti dau mici sfaturi idei daca esti interesat.
__________________
Owner of #ro-tcl
Kurupt is offline   Reply With Quote
Old 23-10-2005, 01:18   #4 (permalink)
Administrator

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

  1. Toate post`urile care tineau de multumiri & bla bla - au fost sterse.
  2. Post`ul in care era dat link la script NEVERICAT de pe site strain NEVERICAT - a fost sters.
  3. Post`ul care continea cod la script care NU LUCRA si nici nu a fost TESTAT de autor inainte de a posta - a fost sters.
Acuma arcade ceva sugestii tie. Eu si restul apreciaza mult dorinta ta de a ajuta. Dar conteaza si modalitatea in care o faci. Inainte de a posta un script, sa fii CEL PUTIN SIGUR ca el lucreaza. In plus la asta cand scrii script`ul ar fi bine sa fii atent la optimizarea lui, sa nu incluzi elemente necesare in script. In plus ai putea verifica daca asa gen de script cu aceleasi functii sau logica nu mai exista undeva - si sa te inspiri sau doar sa vezi cum altii au facut. Aceasta ajuta mult sa eviti unele erori si sa faci script`uri proprii de calitate.

Acuma insasi analiza la codul tau.
Code:
set question(1) {"line 1"}
De ce si paranteze si ghilimele ? sau una sau alta, stii care e diferenta de a folosi sau una sau alta, sau cand sunt folosite ambele in acelas timp ?
Code:
bind pub - !question pub:question
De ce comanda e accesibila la toti ? nu destul ca nu este autorizare dar macar un flag ceva sa specifici ai putea.
Code:
global question(1) question(2) question(3) question(4) question(5) question(6) question(7) question(8) question(9) question(10)
NONSENSE, unde ai vazut asa exemplu de coding ? stii ce e arrays ? stii ca in cazul dat era destul sa scrii doar global question ?
Code:
if {![matchattr $hand m|m $channel]} {
Dupa cum am mentionat, asta ar fi mai bine sa folosesti direct in comanda bind.
Code:
putserv "PRIVMSG $channel :Sorry, you are not authorized to use this command."
De ce putserv ? putserv e folosit pentru lucruri mai importante, pentru ca foloseste un queue intern al bot`lui prioritar. Pentru mesaje ar fi mai bine de folost puthelp.
Code:
if {[string tolower [lindex $arg 0]] == "1"} {
In primul rand, de unde tu ai luat variabila $arg ? Ea nu e difinita in script. Deci eroare. In plus cel mai mare nonsense sa folosesti string tolower ca sa verifici un numar. Stii ce face string tolower ? Din LITERA majuscula face litera minuscula, folosit in cazuri ca sa fie comparate cuvinte care folosesc aceleasi litere dar din registru diferit. Atunci cu string tolower le facem sa fie in acelas registru si comparam. Dar eu nu stiam ca cifre sunt minuscule si majuscule ca sa folosesti asa ceva la ele. In plus toate aceste 10 randuri de verificare se poate fi inlocuit cu asa ceva

Code:
if { [info exists question($text)]} {puthelp "PRIVMSG $chan :$question($text)" } {puthelp "PRIVMSG $chan : $nick - question $text doesn't exist"}
Deci a tale 10 randuri inlocuite cu o singura linie de cod, plus tot in aceasta linie user`ul este anuntat daca exista asa intrebare sau nu. Dar la tine ? daca erau 100 de intrebari ? tot 100 linii de cod aveai ? Aceasta linie este pentru intrebari/info care contin doar o singur rand.

Deci cam aceasta pentru moment, am scris rapid si fara sa intru in detalii si explicatii, nu aceasta era scopul. Eu presupun ca te-ai inspirat de undeva, dar fara sa intri in detalii la script. Am mentionat erorile si neajunsurile script`ului, care poate fi in plus inbunatatit. Daca ai dorinta, faci toate modificarile care am sugerat si dupa asta continuam cu inbunatatirea script`ului si cunostintelor tale in tcl :)
UniversaliA is offline   Reply With Quote
Old 23-10-2005, 01:47   #5 (permalink)
TCB & Ratings projects Member, #Mythic representative
 
arcade's Avatar
 
Join Date: Jun 2004
Location: In fatza calculatorului!!
Age: 19
Posts: 221
Rep Power: 37
arcade is on a distinguished road
Send a message via Yahoo to arcade
Default

mersi universalia pt suggestii, si intradevar nu stiam ce face string tolower (pe care am folos dintr-un script) in rest nici chestia cu 100 de randuri nu stiam sa o restrang. O sa incerc sa introduc suggestiile tale in script si sper sa mearga corect de data asta.
MS

PS: Cat despre inbunatatirea cunostintelor mele de tcl ... abia astept!!!
arcade is offline   Reply With Quote
Old 23-10-2005, 16:22   #6 (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

Am incercat sa il tin cat de simplu, la sfarsit o sa dau si niste linkuri:
Codul:
Code:
## $Id: intrebari.tcl, version 0.0 , ggdrop-1.6.x 2005 dpgc@purehype.net Exp $
## Author:   Kurupt                                    
## Info:     Will ask questions
## Thanks to:
#            smart@UnderNet#ro-tcl     
#
## Contact:  mail: dpgc@purehype.net    
#            irc : #ro-tcl (on undernet)
#            web : http://code.aitia.info
## Info:     Am adaugat la fiecare optiune ce face, cititi cu atentie, si daca ##ceva nu e clar nu va sfiiti sa intrebati.

## START    
#Seteaza canalul pentru intebari
## Aici setam canalul pe care botul va scrie intrebarile, am folosit array ##pentru ca la sfarsit sa folosesc in global doar
## global teste
set teste(chan) "#bucuresti"

# Seteaza intrebarile
## Citeste info de mai sus , la fel si pentru intrebari
set teste(1) "Intrebarea1"
set teste(2) "Intrebarea2"
set teste(3) "Intrebarea3"
set teste(4) "Intrebarea4"
set teste(5) "Intrebarea5"

# BINDS
## Facem bindul, pentru a nu mai verifica dupa daca un user are sau nu ##access, punem direct in bind flagurile
## pentru care botul va asculta , este N global si nm local. Modificati dupa ##placere.
bind pub N|nm .intrebare teste:switch

# PROCES
## Incepem procesul pentru bind, simplu pana aici.
proc teste:switch {nick uhost hand chan text} {

## Definim variabila teste, am folosit array de aceea doar teste si nu global ##teste(chan) teste(1) 
global teste

## Verificam daca textul e mai mic de 0 , adica daca avem doar .intrebare ##fara numar botul va da un mesaj
 if {[llength $text] <= 0 } {
     putserv "notice $nick :Comenzile: .intrebare <nr>"
    } 
    
## setam cuvantul pentru switch   
  set tt [lindex $text 0]

## Incepem switch  
     switch $tt {
      "1" {putserv "privmsg $teste(chan) :$teste(1)"}
      "2" {putserv "privmsg $teste(chan) :$teste(2)"}
      "3" {putserv "privmsg $teste(chan) :$teste(3)"}
      "4" {putserv "privmsg $teste(chan) :$teste(4)"}
      "5" {putserv "privmsg $teste(chan) :$teste(5)"}
    }
  }
       

## Si am terminat, sper ca e usor pentru a adauga mai multe intrebari si a face switchurile adecvate.

putlog "teste loaded"
Codul e verificat functioneaza. Nu l-am pus inca pe ftp deoarece e ceva mai complicat, dar o sa apara.
Informatii mai detaliate despre ce am folosit in el gasiti aici:
Informatii despre switch: http://www.tcl.tk/man/tcl8.5/TclCmd/switch.htm
Informatii despre array: http://www.tcl.tk/man/tcl8.5/TclCmd/array.htm
Informatii generale: http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm

P.S 1.McEagle nu era problema ca nu am ftp ci ca trebuie ceva schimbat la el, plus de asta nu se da linkuri cu ftp neverificate sau cu scripte ciudate
2.Am pus 5 pentru ca nu e script complect ci idee sau HOW TO.
3.Am sters posturile tale care nu aveau legatura si care continea acel link ciudat.
__________________
Owner of #ro-tcl
Kurupt is offline   Reply With Quote
Old 23-10-2005, 20:52   #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

Alt cod care mult mai bun si mult mai optimizat
Code:
## $Id: intrebari.tcl, version 0.1 , ggdrop-1.6.x 2005 dpgc@purehype.net Exp $
## Author:   Kurupt                                    
## Info:     Will ask questions
## Thanks to:
#            smart@UnderNet#ro-tcl     
#
## Contact:  mail: dpgc@purehype.net    
#            irc : #ro-tcl (on undernet)
#            web : http://code.aitia.info
## History: Am folosit altceva in afara de switch . Ideea lui universalia


set teste(chan) "#bucuresti"
set teste(1) "Intrebarea1"
set teste(2) "Intrebarea2"
set teste(3) "Intrebarea3"
set teste(4) "Intrebarea4"
set teste(5) "Intrebarea5"


bind pub N|nm .intrebare teste:info:exist

# PROCES
proc teste:info:exist {nick uhost hand chan text} {
global teste
 if {[llength $text] <= 0 } {
     putserv "notice $nick :Comenzile: .intrebare <nr>"
     return 0
    } 
 if { [info exists teste($text)]} {
   puthelp "PRIVMSG $chan :$teste($text)" 
 } {
   puthelp "PRIVMSG $chan :$nick - question \002$text\002 doesn't exist"
   }
}

putlog "teste loaded"
__________________
Owner of #ro-tcl
Kurupt is offline   Reply With Quote
Old 16-11-2005, 03:35   #8 (permalink)
Member
 
Freezed's Avatar
 
Join Date: Oct 2004
Age: 20
Posts: 177
Rep Power: 0
Freezed is on a distinguished road
Default

Eu am facut un script prin care BOTul da test automat. Am zis sa nu fiu rau si sa-l impart si cu voi. Eventual sa imi dati idei cum as putea sa il fac mai simplu, ca arata urat de tot, si e complicat
Code:
a:command -add test       pub:test      0000 000 n

proc pub:test {hand chan args x mix} {
	global botnick
	set who1 	[lindex $args 0]
	set who2	[lindex $args 1]
	set test(chan) 	"#Mtest"
	
	logfile pjk $test(chan) "logs/test.log" 

	if { ($who1 == "") || ($who2 == "") } {a:usage $x test ; return "FAILED: someone is missing"}

set welcome	"mesajul de intampinare"
set regula1 	"regula 1"
set regula2 	"regula 2"
set regula3 	"regula 3"
set regula4 	"regula 4"
set intr1  	"intrebare"
set intr2  	"intrebare"
set intr3  	"intrebare"
set intr4  	"intrebare"
set intr5  	"intrebare"
set intr6  	"intrebare"
set intr7  	"intrebare"
set intr8  	"intrebare"
set intr9  	"intrebare"
set intr10 	"intrebare"
set intr11 	"intrebare"
set intr12 	"intrebare"
set intr13 	"intrebare"
set intr14 	"intrebare"
set final       "intrebare"

	if { $chan == $test(chan) } {

		putquick "MODE $chan +m" ; puthelp "PRIVMSG $chan :$welcome" ; puthelp "PRIVMSG $chan :$regula1" ; puthelp "PRIVMSG $chan :$regula2" ; puthelp "PRIVMSG $chan :$regula3" ; puthelp "PRIVMSG $chan :$regula4"

		utimer 140[list puthelp "PRIVMSG $chan :Intrebarea $intr1"]  ; utimer 145[list putquick "MODE $chan -m"] ; utimer 270[list putquick "MODE $chan +m"]
		utimer 280[list puthelp "PRIVMSG $chan :Intrebarea $intr2"]  ; utimer 285[list putquick "MODE $chan -m"] ; utimer 410[list putquick "MODE $chan +m"]
		utimer 420[list puthelp "PRIVMSG $chan :Intrebarea $intr3"]  ; utimer 425[list putquick "MODE $chan -m"] ; utimer 550[list putquick "MODE $chan +m"]
		utimer 560[list puthelp "PRIVMSG $chan :Intrebarea $intr4"]  ; utimer 565[list putquick "MODE $chan -m"] ; utimer 690[list putquick "MODE $chan +m"]
		utimer 700[list puthelp "PRIVMSG $chan :Intrebarea $intr5"]  ; utimer 705[list putquick "MODE $chan -m"] ; utimer 830[list putquick "MODE $chan +m"]
		utimer 840[list puthelp "PRIVMSG $chan :Intrebarea $intr6"]  ; utimer 845[list putquick "MODE $chan -m"] ; utimer 970[list putquick "MODE $chan +m"]
		utimer 980[list puthelp "PRIVMSG $chan :Intrebarea $intr7"]  ; utimer 985[list putquick "MODE $chan -m"] ; utimer 1110[list putquick "MODE $chan +m"]
		utimer 1120[list puthelp "PRIVMSG $chan :Intrebarea $intr8"]  ; utimer 1125[list putquick "MODE $chan -m"] ; utimer 1250[list putquick "MODE $chan +m"]
		utimer 1260[list puthelp "PRIVMSG $chan :Intrebarea $intr9"]  ; utimer 1265[list putquick "MODE $chan -m"] ; utimer 1390[list putquick "MODE $chan +m"]
		utimer 1400[list puthelp "PRIVMSG $chan :Intrebarea $intr10"] ; utimer 1405[list putquick "MODE $chan -m"] ; utimer 1530[list putquick "MODE $chan +m"]
		utimer 1540[list puthelp "PRIVMSG $chan :Intrebarea $intr11"] ; utimer 1545[list putquick "MODE $chan -m"] ; utimer 1670[list putquick "MODE $chan +m"]
		utimer 1680[list puthelp "PRIVMSG $chan :Intrebarea $intr12"] ; utimer 1685[list putquick "MODE $chan -m"] ; utimer 1810[list putquick "MODE $chan +m"]
		utimer 1820[list puthelp "PRIVMSG $chan :Intrebarea $intr13"] ; utimer 1825[list putquick "MODE $chan -m"] ; utimer 1950[list putquick "MODE $chan +m"]
		utimer 1960[list puthelp "PRIVMSG $chan :Intrebarea $intr14"] ; utimer 1965[list putquick "MODE $chan -m"] ; utimer 2090[list putquick "MODE $chan +m"]
		utimer 2100[list puthelp "PRIVMSG $chan :Intrebarea $intr15"] ; utimer 2105[list putquick "MODE $chan -m"]
		
		utimer 2110[list puthelp "PRIVMSG $chan :$final"]
		

	} else { puthelp "PRIVMSG $chan :Invalid channel to give command on." ; return "FAILED: invalid channel" }

	return "for $who1 & $who2 started."
}
Scriptul lucreaza cam astfel:
  • Este facut pentru a fi dat la 2 persoane o data.
  • Se foloseste comanda !test persoana1 persoana2.
  • Botul ii intampina pe amandoi (ex la welcome: Salut $who1 & $who2. Eu sunt $botnick, unul dintre BOTii #Mythic. Astazi veti da testul cu mine. Dar inainte sa incepem, cateva reguli bla bla).
  • Se seteaza regulile testului, in caz ca aveti mai multe mai adaugati o variabila si un puthelp in script (in care sa apara $regula5).
  • Botul pune modul +m pe canal cat timp el pune intrebarea, apoi scoate +m si ii lasa pe useri 2 minute sa raspunde la intrebare, dupa care pune iarasi +m si trece la urmatoarea intrebare. Apoi pasul se tot repeta.
  • Ce sa zica botul la sfarsit textului se seteaza in variabila final.
Sper sa va fie de folos, daca sunt probleme/sugestii postati aici

PS: intre fiecare cifra si [ list este un spatiu, sa nu uitati sa il puneti
Freezed is offline   Reply With Quote
Old 16-11-2005, 12:40   #9 (permalink)
TCB & Ratings projects Member, #Mythic representative
 
arcade's Avatar
 
Join Date: Jun 2004
Location: In fatza calculatorului!!
Age: 19
Posts: 221
Rep Power: 37
arcade is on a distinguished road
Send a message via Yahoo to arcade
Default

hmmm nice script dar am niste idei de imbunatatire. In primul rand ai spus ca pentru a adauga o regula se adauga un rand si se pune puthelp. Uite aici ceva care ar usura asta:
Code:
set regula1 	"regula 1"
set regula2 	"regula 2"
set regula3 	"regula 3"
set regula4 	"regula 4"
sa il schimbi cu:
Code:
set reguli {
"regula 1"
"regula 2"
"regula 3"
"regula 4"
}
si aici
Code:
putquick "MODE $chan +m" ; puthelp "PRIVMSG $chan :$welcome" ; puthelp "PRIVMSG $chan :$regula1" ; puthelp "PRIVMSG $chan :$regula2" ; puthelp "PRIVMSG $chan :$regula3" ; puthelp "PRIVMSG $chan :$regula4"
inlocuiesti cu:

Code:
putquick "MODE $chan +m" ; puthelp "PRIVMSG $chan :$welcome" ; foreach line $reguli { puthelp "PRIVMSG $chan :[subst -noc $line]" }
arcade is offline   Reply With Quote
Old 18-11-2005, 18:05   #10 (permalink)
Member
 
Freezed's Avatar
 
Join Date: Oct 2004
Age: 20
Posts: 177
Rep Power: 0
Freezed is on a distinguished road
Default

Linia:
Code:
utimer 2110[list puthelp "PRIVMSG $chan :$final"]
modificata cu:
Code:
utimer 2245[list puthelp "PRIVMSG $chan :$final"]
Freezed 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


All times are GMT +3. The time now is 13:21.


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