|
Aide tcl
avancée
Bien, en espérant que l'aide Tcl
de base vous est aidée, nous voici désormais dans l'aide tcl avancée qui est un
peu plus poussée certes, mais qui reste encore assez simple. Nous verrons par la
suite avec ShaZz si nous ferons une aide pour ceux qui souhaiterait atteindre un
bon niveau en tcl... Pour le moment nous allons nous concentrer sur la création
d'un bot (style NoNo)...
1- { Les sets }
Nous allons setter dans des
variables les messages de notre NoNo.tcl . pour cela il suffit de d'inscrire la
ligne :
set notre-action "le-message".
Mais le mieux est de faire comme suivant, pour set plusieurs messages dans une
même variable :
set notre-action {
"le-message" ou
"1er message"
"2ème message" etc...
}
Ici, L'on défini
les salon ou le bot va se promener. A noter que les salon doivent être
enregistrés dans la database de l'eggdrop soit eggdrop.chan :]
set salonprom {
"#Banane-production"
"#eggdrop"
"#ba"
}
on défini la duré
des Joins/part de l'eggdrop. A noter les durés sont alternatives, et l'eggdrop
un prend une au hasard.
set temps {
"8"
"9"
"10"
}
on set les
messages d'entrer de l'eggdrop. On peut en rajouter autant que l'on veux,
puisque l'eggdrop en prend une au hasard de toutes la liste.
set joinmess {
"salut les kikoozZ"
"ca va bien ou bien ?"
"makapuf"
"breuk c qui ka peter !"
"waw il est bo ce salon"
"c pas moi qui a kickbanall la derniere fois c est les ACkEuRZzzZ jvous jure :)"
"jai jamais fait de takeover ! vous pouvez m oper s il vous plait :)"
"c pas moi qui vous a banni tout le monde promis vous pouvez m'op :p"
"qui veut se faire un iparty???!!!!"
}
set partmess {
"j'réviens! =)"
"ou c que j peux aller...hmmm"
"!topic"
"ma wife arrive a toute les gars :o)"
"a+ tard les namis"
"bon it s time to nike un coup!"
"m en vais moi!"
"bon allez salut ca m a fait plaisir"
"putain ca fouette ici"
"j'en ai marre je quitte se salon"
"faut pas que ma wife voie que je draguer les chatteuses"
"bande de tete de naz!!!!"
"jreviens je vais niker"
"faut que je nike"
"...."
}
set deopmess {
"j te fais de l ombre c ca?"
"heuuu c la fete la %nick?"
"ca y est t es content %nick ? abrutis..."
"deux mots : sale con"
"merde j ai fais une connerie ou koi???? :o("
"maiiiiiiiiiiis :o("
"reop moi fais pas chier la"
}
set opmess {
"tu rales pas trop la %ranick que chui op???"
"merci boulet :)"
"%nick tu pourrais me demander si chui dakor quand meme (pour info je le suis)"
"woa comment tu op bien comme tu le fais avec stïle..!"
"la prochaine fois tu te depeche pour me op %nick"
"c un bot %nick ou koi?"
"wow j me sens pousser des *ouill*s la ! (tain si j commence a faire de l
autocensure chu mal barré)"
"wayyyyyyyyyyyyyyyyyyyyy"
"haha t assure man !"
"coOoOoo0Oo00oOooOoOoo0Oo00oOooOoOoo0Oo00oOL"
}
set voicemess {
"oh %nick t es cool toi la verité koi"
"merci t es trop cool serieux :)"
"yeah baby yeah"
"cooooooooooooooooool"
"ca sert a quoi cette croix? c pour prier ?"
"maisssssss c trooooopppppp coooolllllllll"
"heuuu je suis censé te remercier là ?"
"putain comment t'es trop simpas toi !"
"ca c vraiment cool"
"ho chuis pas un moine moi !! enleve moi cette croix !"
";)"
}
set devoicemess {
"salut %nick t as eu une enfance dificile on sait mais revoice moi merci"
"et pkoi %nick non?"
"malheur %nick mais tu tiens pas a la vie c ca???"
"degage de la %nick"
"roo arrete t'abuze!"
"nan stp stp stp stp revoice moi !!!"
"pfff tu vas voir quand je serais op, j'te ferais pareil"
"mechant va !"
"si tu m'devoice encore une fois j'te nike !"
"arrete je fais comment pour faire staïle maintenant ?"
}
set kickmess {
"tu pu de la bouche achete toi de la pate a dent"
"t as une tete a t etre fais plaquer toi"
"hey ho pkoi tu fais ca?"
"hey... steuplé j arrete ok"
"mais je m en bas les couilles :o)"
"t as pas une soeur a forte poitrine a niker?"
":o("
"MEME PAS MAL AHHAHAHAHA"
"tu crois que j ai peur de toi?"
"hey ho pkoi tu fais ca?"
"pffff t es con toi"
"serieux tu risque le gline la"
"j t ai fais trop d ombre?"
}
2 - { Début
de notre script NoNo }
Une fois les sets
faits, il faut commencer à faire nos binds. Comme nous l'avons vu dans l'aide
tcl de base, il y a un certain nombre de binds. Voici le début de notre script :
##
NoNo.tcl by Shine & ShaZz ##
#Notre bind qui va faire réagir notre eggdrop sur le join
# La procédure precisant les variables $nick $uhost $hand # $chan.On déclare les
varname données comme variable globales # et non pas locales. Les variables
globales sont accessibles # dans le namespace global.Si le pseudo qui join le
channel # est l'eggdrop; (Soit $botnick, que l'on a déclaré comme # variable
globale) On set la variable Say en choisissant une # phrase au hasard de la
variable "joinmess".
# On affiche sur le channel. On retourne immédiatement de la # fonction courante
avec return 0 puis notre procédure de if # { } { en fermant une première fois
avec } puis notre # procédure funny:join en fermant définitivement avec un #
deuxième }
bind join - * funny:join
proc funny:join {nick uhost hand chan} {
global botnick joinmess
if {$nick==$botnick} {
set say [lindex $joinmess [rand [llength $joinmess]]]
putserv "PRIVMSG $chan :$say"
return 0
}
}
# Pour résumer, l'or d'un join, si le nick qui a join le ## channel est votre
eggdrop, alors il affichera "say" , message tiré # de notre var "joinmess"
3 - {
Continuons notre script }
Toujours notre
bind en premier, ici le bind dcc. Ensuite vient la proc qui renvoie $nick $idx
et $arg . Notre variable globale qui renvoit botnick ainsi que promenade comme
une variable globale et non pas locale. (putdcc $idx = putlog à peu près) . On
affiche donc le texte -=-NoNo Status-=- et Mode Promenade.
Ensuite, la ligne if {$promenade==0} { affiche que si la valeur de $promenade
est égale à 0, alors on affiche qu'elle est désactivée. De même pour if
{$promenade==1} { qui signifie que si la valeur de $promenade est égale à 1,
alors on affiche qu'elle est activée. On ferme if { } { avec un premier } , on
ferme les procédures avec un deuxième } puis fermeture de la procedure nonostats:dcc
avec un troisième } .
bind dcc n
nonostat nonostat:dcc
proc nonostat:dcc {nick idx arg} {
global botnick promenade
putdcc $idx "-=-\002NoNo Status\002-=-"
putdcc $idx " "
putdcc $idx " \037Mode Promenade\037:"
if {$promenade==0} {
putdcc $idx " \002Inactif\002"
}
if {$promenade==1} {
putdcc $idx " \002Actif\002"
}
putdcc $idx " "
}
}
Alors là, une grosse partie qui n'est pas forcément la plus facile à
expliquer bien qu'elle soit simple :o)
Tout commence bien évidemment par notre bind dcc.. qui est accessibles aux users
ayant le flag n (owners). Ensuite notre procédure comme toujours. Les variables
botnick et promenades sont déclarées variables globales.On set "what", soit le
1er mot a partir de $arg. Ensuite, if {$what==""} { (Si "WHAT" ne correpond a
rien) , if {$promenade==0} { et si la valeur de $promenade est égale à 0, on
affiche que le status de la promenade est désactivé. On ferme notre procédure.
Maintenant if {$promenade==1} { si $promenade = 1 alors on affiche que le status
de la promenade est activé. On ferme notre proc par un premier } puis notre
première proc par un deuxième } .
if {$what=="+"} { # Si what est egale a + et if {$promenade==0} { si $promenade
est égale à 0 alors on set 1 dans la variable promenade. On affiche que le
status de la promenade est activé. On retourne 0 & on ferme notre procédure. if
{$promenade==1} { maintenant si $promenade est égal à 1 on affiche que le mode
promenade est déjà activé et on ferme notre procédure par deux } .
if {$what=="-"} { # Si what est egale à - et if {$promenade==0} { si $promenade
= 0 alors on set 1 pour promenade et on affiche que le mode promenade est déjà
activé. On ferme la proc.
if {$promenade==1} { si $promenade = 1, on affiche que le status est désactivé,
on ferme notre proc puis on met un else qui défini "sinon" if {$promenade==0} {
si $promenade est égal à 0 on affiche que le status est désactivé et si
$promenade est égal à 1 , alors on affiche que le status est activé. On retourne
la valeur 0 et on ferme les procédures avec trois } .
bind dcc n
promenade promenade:dcc
proc promenade:dcc { nick idx arg } {
global botnick promenade
set what [lindex $arg 0]
if {$what==""} {
if {$promenade==0} {
putdcc $idx "-=-\002Mode Promenade Actuel\002-=-"
putdcc $idx " \037Status\037: Désactivé"
putdcc $idx " "
return 0
}
if {$promenade==1} {
putdcc $idx "-=-\002Mode Promenade Actuel\002-=-"
putdcc $idx " \037Status\037: Activé"
putdcc $idx " "
return 0
}
}
if {$what=="+"} {
if {$promenade==0} {
set promenade 1
putdcc $idx "-=-\002Mode Promenade\002-=-"
putdcc $idx "\037Status\037: Activé"
putdcc $idx " "
return 0
}
if {$promenade==1} {
putdcc $idx "-=-\002Mode Promenade\002-=-"
putdcc $idx " \037ERREUR\037: Le Mode Promenade est déjà activé"
putdcc $idx " "
return 0
}
}
if {$what=="-"} {
if {$promenade==0} {
set promenade 1
putdcc $idx "-=-\002Mode Promenade\002-=-"
putdcc $idx " \037ERREUR\037: Le Mode Promenade est déjà déactivé"
putdcc $idx " "
return 0
}
if {$promenade==1} {
putdcc $idx "-=-\002Mode Promenade\002-=-"
putdcc $idx " \037Status\037: Déactivé"
putdcc $idx " "
return 0
}
} else {
if {$promenade==0} {
putdcc $idx "-=-\002Mode Promenade Actuel\002-=-"
putdcc $idx " \037Status\037: Désactivé"
putdcc $idx " "
return 0
}
if {$promenade==1} {
putdcc $idx "-=-\002Mode Promenade Actuel\002-=-"
putdcc $idx " \037Status\037: Activé"
putdcc $idx " "
return 0
}
}
}
4 - { La
procédure promenade }
On lance la
procédure promenade. on affiche les variables globales botnick promenade temps
partmess salonprom salon say.
Ensuite if {$promenade==1} { si $promenade est égal à 1 alors on prend un
channel au hasard de la var "salonprom", que l'on a declaré en tant que var
globale, on choisi le temps que l'eggdrop reste sur le channel à partir de la
var "TEMPS" que l'on a declaré en tant que var globale..
Ensuite Si l'eggdrop est sur $salon (var locale) alors....on prend une phrase au
hasard que l'on sort de la var partmess qui est declarée comme var globale.
Après, on lance un timer, on affiche "SAY" notre variable locale. on fait
joindre l'eggdrop du channel $salon et on ferme la proc if { } { et on retourne
immédiatement de la fonction courante.
Après, si $botnick (var global represente le pseudo de votre eggdrop) n'est pas
sur $salon, alors ..lancement d'un timer utilisant la var $temps et on fait
partir l'eggdrop du channel $salon. promenade:on fait le retour à la procédure
promenade:on . On retourne 0 et on ferme les procédures avec deux } .
Puis, si $promenade est égale a 0 alors....lancement d'un timer $temps (var
globale), qui relance la procédure promenade:on et fermeture de la proc if { } {
ainsi que la fermeture de la procédure promenade:on .
proc
promenade:on {} {
global botnick promenade temps partmess salonprom salon say
if {$promenade==1} {
set salon [lindex $salonprom [rand [llength $salonprom]]]
set temps [lindex $temps [rand [llength $temps]]]
if {[onchan $botnick $salon]} {
set say [lindex $partmess [rand [llength $partmess]]]
timer $temps {
putserv "PRIVMSG $salon :$say"
utimer 2 {
channel set $salon +inactive
promenade:on
}
return 0
}
if {(![onchan $botnick $salon])} {
timer $temps {
channel set $salon -inactive
promenade:on
}
return 0
}
}
if {$promenade==0} {
timer $temps promenade:on
promenade:on
}
}
5 - { Les binds modes de NoNo }
Alors, on lance un
bind mode ainsi que la procédure et on déclare les variables globales.
Si le mode effectué est "-o" et que "botnick" est la victime, alors on set "SAY"
en choississant un message pris de "DEOPMESS" et on affiche sur le channel. On
retourne 0 et on ferme la procédure.
Pareil pour les modes "+o" "+v" "-v" , si $botnick est la victime, alors on set
"SAY" en choisissant un message pris soit dans "OPMESS" , "VOICEMESS" , ou "DEVOICEMESS"
(par rapport au mode qui s'applique) et on le dit sur le channel.
bind mode - *
deop:nono
proc deop:nono {nick uhost hand chan mode victim} {
global botnick deopmess opmess devoicemess voicemess
if {$mode=="-o" && $botnick==$victim} {
set say [lindex $deopmess [rand [llength $deopmess]]]
putserv "PRIVMSG $chan :$say"
return 0
}
if {$mode=="+o" && $botnick==$victim} {
set say [lindex $opmess [rand [llength $opmess]]]
putserv "PRIVMSG $chan :$say"
return 0
}
if {$mode=="+v" && $botnick==$victim} {
set say [lindex $voicemess [rand [llength $voicemess]]]
putserv "PRIVMSG $chan :$say"
return 0
}
if {$mode=="-v" && $botnick==$victim} {
set say [lindex $devoicemess [rand [llength $devoicemess]]]
putserv "PRIVMSG $chan :$say"
return 0
}
}
6 - { Les
binds kick }
Alors on ne va pas
changer contrairement aux binds modes c'est le même principe sauf que c'est pour
un kick :o)
bind kick
- * kick:nono
proc kick:nono {nick uhost handle chan kicked reason} {
global botnick kickmess
if {$kicked==$botnick} {
set say [lindex $kickmess [rand [llength $kickmess]]]
putserv "PRIVMSG $nick :$say"
return 0
}
}
7 - {
NoNo IRCop }
On lance le bind
et la procédure et après on définit les variables globales.
On stoque le 1er mot dans la var "WHO" et on stoque le reste de la phrase dans
la var "WHY".
Si "WHY" ne correpond a rien, alors on stoque Nono dans "WHY" et si "WHO" ne
correspond a rien, alors on retourne le texte \037ERREUR\037 ! Vous devez
spécifier un pseudo. On ferme la proc.
On identifie l'eggdrop en tant qu'ircop et on kill "WHO" et pour la raison "WHY".
Après on retire le flag IRCop au bot et on retourne la valeur 1, et on ferme la
procédure.
bind dcc -
nonokill nonokill:dcc
proc nonokill:dcc {nick idx arg} {
global botnick
set who [lindex $arg 0]
set why [lrange $arg 1 end]
if {$why==""} { set why "\002!\002NoNo\002!\002" }
if {$who==""} { putdcc $idx "\037ERREUR\037 ! Vous devez spécifier un pseudo"
putdcc $idx "\037Syntaxe\037: .nonokill <pseudo> <raison>"
}
putserv "OPER xbot nofear"
putserv "KILL $who :$why"
putserv "MODE $botnick -owsg"
return 1
}
8 - { L'aide
sur NoNo - Fin }
On lance le bind
et la procédure nonoaide:dcc et on déclare les variables globales.
Si celui qui tape .nonoaide à le flag +n (Owner) alors on affiche l'aide. Dans
le cas contraire on affiche qu'il n'a pas accès à l'aide et que sa tentative
vient d'être loguée. On retourne 0 et on ferme la proc avec un premier } ainsi
que la proc nonoaide:dcc avec un deuxième } .
bind dcc -
nonoaide nonoaide:dcc
proc nonoaide:dcc {nick idx arg} {
global botnick
putdcc $idx " \002NoNo - Aide\002 "
putdcc $idx " "
if {[matchattr $nick +n]} {
putdcc $idx " \037Commandes NoNo-Master \[+n\]\037"
putdcc $idx " "
putdcc $idx " \002nonostat\002 (Permet d'avoir les statistiques du bot)"
putdcc $idx " \002promenade\002 \[+/-\] (Activer/Déactiver le mode Promenade)"
putdcc $idx " \002nonokill\002 <nick> [raison] (killer une personne avec NoNo)"
putdcc $idx " "
putdcc $idx " \002nonoaide\002 <== vous êtes ici"
putdcc $idx " "
}
if {(![matchattr $nick +n])}
putdcc $idx " \037Vous n'êtes pas autorisé a Utiliser cette commandes."
putdcc $idx " \037Votre tentative viens d'étre loggué."
putdcc $idx " "
}
}
9 - { Script
Final }
La source étant longue, vous pouvez le télécharger en cliquant
ici
Shine avec l'aide
énorme & de
ShaZz
|