Shellnode
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-15%
Le deal à ne pas rater :
(Adhérents Fnac) LEGO® Star Wars™ 75367 Le croiseur d’assaut de ...
552.49 € 649.99 €
Voir le deal

Link UnrealIRCD en tcl Explication du link en tcl pour un serveur UnrealIrcd

Shellnode :: Guides :: TCL

Aller en bas

Link UnrealIRCD en tcl
Explication du link en tcl pour un serveur UnrealIrcd Empty Link UnrealIRCD en tcl Explication du link en tcl pour un serveur UnrealIrcd

Message  Romeo Ven 8 Aoû - 18:24

Dans un premier temps, Enregistrons les variables du Bot et de ses infos link.


set ircz(link) "Adresse-du-link" # Ceci est le Bloque link de unreal.
set ircz(info) "Info-du-link" # Ceci est l'info du link (Obtenu généralement dans les /whois, /map, /link, ...)
set ircz(host) "Host-du-link" # Ceci est le "Vhost" du Link
set ircz(ip) "Ip-du-link" # Ip de connection du link
set ircz(port) "Port-du-link" # Port de connection du link
set ircz(pass) "Mot-de-passe-du-link" " Mot de passe du link
set ircz(pseudo) "Pseudo-du-robot" # Pseudo du bot
set ircz(real) "Realname-du-robot" # Le realname du Bot
set ircz(ident) "Ident-du-robot" # L'ident du Bot
set ircz(salon) "Salon-du-robot" # Le ou les salons en autojoin
set ircz(mode) "+oOSqsw" # Les usersmodes du bot


Ensuite, on attaque la procédure de connection.


proc connexion {} {
global ircz
if {![catch "connect $ircz(ip) $ircz(port)" ircz(idx)]} {
putdcc $ircz(idx) "PASS $ircz(pass)"
putdcc $ircz(idx) "SERVER $ircz(link) 1 :$ircz(info)"
putdcc $ircz(idx) ":$ircz(link) NICK $ircz(pseudo) 1 [unixtime] $ircz(ident) $ircz(host) $ircz(link) :$ircz(real)"
putdcc $ircz(idx) ":$ircz(pseudo) MODE $ircz(pseudo) $ircz(mode)"
foreach {chan} $ircz(salon) { putdcc $ircz(idx) ":$ircz(pseudo) JOIN $chan" }
control $ircz(idx) event; utimer 30 verification
}
}


Si nous voudrions ajouté un robot, il suffirais d'ajouté ces lignes suivantes autant que nécéssaire.


putdcc $ircz(idx) ":$ircz(link) NICK $ircz(pseudo2) 1 [unixtime] $ircz(ident2) $ircz(host2) $ircz(link) :$ircz(real2)"
putdcc $ircz(idx) ":$ircz(pseudo2) MODE $ircz(pseudo2) $ircz(mode2)"


Ne pas oublier, bien sur, de créer les variables ! (Dans notre cas ircz(pseudo2), ircz(ident2), ...

A présent, le bot est prêt a se connecter, mais qui va déclancher la connexion ? Je vous vois mal de toujours le lançé en dcc chat a l'aide de .tcl connexion ...

Laissons le bot faire ça seul Smile


if {![info exists ircz(idx)]} { connexion }

proc verification {} {
global ircz
if {[valididx $ircz(idx)]} { utimer 30 verification } else { connexion }
}


Dans notre code, si le socket ircz(idx) ne contient aucune informations, il lançe la procedure "connexion".

Lors de la connexion, un timer se déclenche. Toutes 30 secondes, une procedure vérifie si ircz(idx) contient a nouveau des informations.

Si oui, il relance le timer.
Si non, il connecte le link.

Tout ça c'est bien joli, mais le robot risque de partir en ping timeout ! Pourquoi ?

Le serveur vous envoie sans cesse des requêtes "ping".
Votre client répond "pong" afin de garder votre connexion sur le serveur.
Mais si le link ne répond pas... Il va partir :/

Aller, résolvons ce problême.


proc event {idx arg} {
global ircz
set arg [split $arg]
switch -exact [lindex $arg 0] {
"PING" { putdcc $ircz(idx) "PONG [lindex $arg 1]" } # [lindex $arg 1] est ici votre serveur irc.
}
}


Voila pour la base du bot !

Voici a présent la liste de toutes les actions qu'il peut recevoir.


switch -exact [lindex $arg 0] {
"PING" { reception de ping } # Serveur : set serveur [lindex $arg 1]

"SQUIT" { Deconnection d'un serveur } # Serveur : set serveur [lindex $arg 1]

"NICK" { Connexion d'un user } # Pseudo : set user [lindex $arg 1]
# Ident : set ident [lindex $arg 4]
# Host : set host [lindex $arg 5]
# Serveur : set servs [lindex $arg 6]
# Mode de l'user : set umode [lindex $arg 8]
# RealName : set realname [join [lrange $arg 9 end]]
}
switch -exact [lindex $arg 1] {
"ADMIN" { réaction a la commande /admin sevreur.du.bot } # Pseudo : set user [string trim [lindex $arg 0] :]
# 256 : Première ligne
# 257 : Deuxième ligne
# 259 : Troisième ligne
# Pour envoyer la réponse : putdcc $ircz(idx) ":$ircz(pseudo) 256 $user :message"

"numeric" { Réaction a une raw } # Remplacer numeric par un numero
# Exemple : 223 pour la liste des glines

"NOTICE" { Réception d'une notice } # Pseudo : set user [string trim [lindex $arg 0] :]
# Destinataire : set robot [lindex $arg 2]

"PRIVMSG" { Réception d'un message en privé (/msg votrebot la commande) } # Pseudo : set user [string trim [lindex $arg 0] :]
# Destinataire : set robot [lindex $arg 2]
# Commande : set cmds [string tolower [string trim [lindex $arg 3] :]]

"NICK" { Changement de nickname d'un user } # Pseudo avant changement : set user [string trim [lindex $arg 0] :]
# Pseudo après changement : set new [lindex $arg 2]

"UMODE2" { Changement d'un usermod d'un user } # Pseudo : set user [string trim [lindex $arg 0] :]
# Mode : set umode [lindex $arg 2]

"KICK" { Kick d'un user sur un salon } # Victime : set user [string trim [lindex $arg 0] :]
# Salon : set chan [string trim [lindex $arg 2] :]
# Kickeur : set kickeur [string trim [lindex $arg 3]]
# Raison : set raison [lrange $arg 4 end]

"QUIT" { Deconnexion d'un user } # Pseudo : set user [string trim [lindex $arg 0] :]
# Message : set message [join [lrange $arg 2 end]]

"JOIN" { Join d'un user sur un chan } # Pseudo : set user [string trim [lindex $arg 0] :]
# Salon : set chan [string trim [lindex $arg 2] :]

"PART" { Part d'un user sur un chan } # Pseudo : set user [string trim [lindex $arg 0] :]
# Salon : set chan [string trim [lindex $arg 2] :]

"SERVER" { Link d'un sevreur } # Serveur linké : set serv [lindex $arg 2]
# Info du serveur : set desc [string trim [lindex $arg 4] :]

"TOPIC" { Topic d'un salon changé } # Pseudo : set user [string trim [lindex $arg 0] :]
# Salon : set chan [string trim [lindex $arg 2] :]
# Topic : set topic [join [lrange $arg 5 end]]

"CHGHOST" { Changement de host } # Pseudo : set user [string trim [lindex $arg 0] :]
# Victime : set pseudo [lindex $arg 2]
# Host : set host [lindex $arg 3]

"CHGIDENT" { Changement d'ident } #Pseudo : set user [string trim [lindex $arg 0] :]
# Victime : set pseudo [lindex $arg 2]
# Ident : set ident [lindex $arg 3]
}


Voila Smile

Evidement tout n'est pas la ! Consulté la RFC-1459 pour la liste complète.

Romeo
Admin

Messages : 82
Date d'inscription : 28/07/2008
Age : 52
Localisation : Quebec

https://shellnode.forumactif.org

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

Shellnode :: Guides :: TCL

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser