Rencontres
Meetic.fr
Netclub
Amoureux.com

Téléchargements
Bots mIRC
Addons mIRC
Scripts mIRC
Snippets mIRC
Clients IRC
Scripts TCL

Aide IRC & T'chat
Histoire de l'IRC
Définitions
Abréviations
Modes des salons
Les Smileys Java
Aide applet Java
Nétiquette du Chat
Liste des Raws
Les réseaux IRC
Tutorial des Bans
Quizz sur l'IRC
Installer un quizz
Tutorial Ezbounce
Le RFC1459
Messages de quit

Aide IriX (Voila)
Edito
Avoir IriX
Commandes IriX
Commandes CSA
FAQ
La charte

Les Commandes
Bounce/Bnc
NickServ (Jeux.fr)
NickServ (EpiKnet)
NickServ (Voila)
Thema/Metro/Robot
Opérateur
IRCop
Géofront
User
Voila/Wanadoo
Ezbounce

Infos Chat Voila
Présentation
Historique
Le map
Les robots officiels
Détection proxy

Aide Eggdrop
Télécharger
Installez-le
Configurez-le
Les Commandes
Aide TCL
Aide TCL avancée
Scripts TCL
Trivia
Installer Géofront/Eva
Egg sous shell

Aide IRCD/IRCU
Bahamut
Unreal
IRCd Hybrid
IRCoderZ
IRCOxyd
IRCProgs
IRCu de type ancien
IRCu2.10.11.04
CService (IriX)
Services Epona
IRCServices
SCoderZ
UWorld
Entrechat

| Les Liens | Forum IRC | Accueil | Annuaire du Chat | Amour et romantisme |
Ajouter en page de démarrage | Ajouter aux favoris | Chat en direct
- Dialoguer en direct !

Google

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

Au Ciné : News
Cleaner
Journal d'une baby-sitter
Semi-Pro
Et puis les touristes
Enfances
Sous les bombes
On the Rumba River
Ken 1 : L'Ere de Raoh
Reprise
Nous avons bu la même eau

Newsletter
Restez informé de l'actualité du cinéma avec Nord-Cinéma

Services IRC
T'chat sur votre site
Cinéma sur votre site
Module T'chat Voila

Aide bot mIRC
CService
Faire son bot



Aide mIRC
Alias
Popup
Remotes
Variables
Cours de scripting

Partenaires
Home cinéma
Cinema
Nouveautes DVD
Location dvd
Forum de l'IRC

©2002-2004 CSAdmin.net | Contact | L'équipe Liens | Faites de csadmin.net votre page d'accueil
CSAdmin.net est déclaré à la CNIL sous le numéro 856687
Google