Bonjour,
Je suis sur une réalisation d'un codage tcl que j'aimerai rendre le plus efficace possible et sans multiplié les conf sur l'eggdrop alors j'ai pensé que de mettre une seule configuration et plusieurs sockets pourrait etre la solution...
Soucis étant je ne sais pas du tout comment faire le lancement de la proc pour répondre à ceci tcl # Socket #
set Bot(bot) "BOt1"
set lBot(nickserv) "NickServ"
set Bot(bot2) "BOt WEB"
set Bot(bot3) "BOt Radio"
set Bot(bot4) "BOt secu"
En cherchant un peu sur d'autre configuration j'ai vu ceci tcl ######################
## LANCEMENT SOCKET ##
######################
proc lanchsock {} {
global bot
if {[info exists bot(idx)] && [valididx $bot(idx)]} {return}
if {![catch "connect $bot(ip) $bot(port)" bot(idx)]} {
putdcc $bot(idx) "PROTOCTL NICKv2 SJOIN2 UMODE2 NOQUIT VL TKLEXT"
putdcc $bot(idx) "PASS $bot(pass)"
putdcc $bot(idx) "SERVER $bot(link) 1 :$bot(real)"
putdcc $bot(idx) ":$bot(link) NICK $bot(bot) 1 [unixtime] $bot(real) $bot(host) $bot(link) 0 +oqS $bot(host) :$bot(ident)"
putdcc $bot(idx) ":$bot(bot) MODE $bot(bot) +oOSrqswBNghaW"
putdcc $bot(idx) ":$bot(bot) JOIN $bot(chanircop)"
putdcc $bot(idx) ":$bot(bot) MODE $bot(chanircop) +q $bot(bot)"
putdcc $bot(idx) ":$bot(bot) MODE $bot(chanircop) +ntsO"
putdcc $bot(idx) ":$bot(link) NICK $bot(bot2) 1 [unixtime] $bot(real) $bot(host) $bot(link) 0 +oqS $bot(host) :$bot(ident)"
putdcc $bot(idx) ":$bot(bot2) MODE $bot(bot2) +oOSrqswBNghaW"
putdcc $bot(idx) ":$bot(bot2) JOIN $bot(chanircop)"
putdcc $bot(idx) ":$bot(bot2) MODE $bot(chanircop) +q $bot(bot2)"
putdcc $bot(idx) ":$bot(link) NICK $bot(bot3) 1 [unixtime] $bot(real) $bot(host) $bot(link) 0 +oqS $bot(host) :$bot(ident)"
putdcc $bot(idx) ":$bot(bot3) MODE $bot(bot3) +oOSrqswBNghaW"
putdcc $bot(idx) ":$bot(bot3) JOIN $bot(chanircop)"
putdcc $bot(idx) ":$bot(bot3) MODE $bot(chanircop) +h $bot(bot3)"
putdcc $bot(idx) ":$bot(bot3) JOIN $bot(chanbots)"
putdcc $bot(idx) ":$bot(bot3) MODE $bot(chanbots) +o $bot(bot3)"
putdcc $bot(idx) ":$bot(bot3) MODE $bot(chanbots) +ntm"
putdcc $bot(idx) ":$bot(link) NICK $bot(bot4) 1 [unixtime] $bot(real) $bot(host) $bot(link) 0 +oqS $bot(host) :$bot(ident)"
putdcc $bot(idx) ":$bot(bot4) MODE $bot(bot4) +oOSrqswBNghaW"
putdcc $bot(idx) ":$bot(bot4) JOIN $bot(chanircop)"
putdcc $bot(idx) ":$bot(bot4) MODE $bot(chanircop) +h $bot(bot4)"
putdcc $bot(idx) ":$bot(bot4) JOIN $bot(chanhelp)"
putdcc $bot(idx) ":$bot(bot4) MODE $bot(chanhelp) +o $bot(bot4)"
putdcc $bot(idx) ":$bot(bot4) MODE $bot(chanhelp) +nt"
putdcc $bot(idx) ":$bot(link) EOS"
control $bot(idx) event
}
utimer 15 verifidx
}
proc verifidx {} {
global bot
if {[valididx $bot(idx)]} {utimer 20 verifidx} else {utimer 2 lanchsock}
}
Soucis rien ne se passe... Pouvez vous m'aider ? Merci.
Et ta procédure verifidx, elle est lancée quand et comment ?
Salut,
Tiens je te file un exemple de proc que Alias avais fais pour son tcl services ! ;)
tcl proc checkconnect {} {
if {![info exists aurore(idx)]} { utimer 30 [namespace current]::checkconnect } else { xconnect:serv }
}
proc xconnect:serv {} {
variable aurore
if [catch {set aurore(idx) [connect $aurore(ip) $aurore(port)]} err] {
putlog "Connection error :$err"
return
}
putdcc $aurore(idx) "PASS $aurore(pwdlink)"
putdcc $aurore(idx) "SERVER $aurore(serv) 1 [unixtime] [unixtime] J09 ACAA\] +s :$aurore(info)"
putdcc $aurore(idx) ":$aurore(serv) NICK $aurore(nick) '' '' $aurore(identd) $aurore(host) $aurore(serv) '' :$aurore(nom)"
putdcc $aurore(idx) ":$aurore(nick) MODE $aurore(nick) +owsgkd"
putdcc $aurore(idx) ":$aurore(nick) JOIN $aurore(log)"
putdcc $aurore(idx) ":$aurore(nick) MODE $aurore(log) +ntsv $aurore(nick)"
control $aurore(idx) [namespace current]::controling_server
utimer 10 [namespace current]::verify
}
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
Quote:Et ta procédure verifidx, elle est lancée quand et comment ?
Aucune idée. j'ai juste trouvé ça sur le net mais j'ai pas cherché plus loin...
Quote:Tiens je te file un exemple de proc que Alias avais fais pour son tcl services !
Ton code est à integrer directement sur le codage ?
19/03/2014, 18:23
(This post was last modified: 19/03/2014, 18:34 by BaGrift.)
Non c'est un example pour que tu comprene le fonctionnement du proc
Tien voici un code d'exemple a toi de le modifier a ta guise :)
tcl ######################
# Configuration Link #
######################
set laura(link) "Adresse-du-link"
set laura(info) "Info-du-link"
set laura(host) "Host-du-link"
set laura(ip) "Ip-du-link"
set laura(port) "Port-du-link"
set laura(pass) "Mot-de-passe-du-link"
set laura(pseudo) "Pseudo-du-robot"
set laura(real) "Realname-du-robot"
set laura(ident) "Ident-du-robot"
set laura(salon) "Salon-du-robot"
set laura(mode) "+oOSqsw"
#############
# Connexion #
#############
proc connexion {} {
global laura
if {![catch "connect $laura(ip) $laura(port)" laura(idx)]} {
putdcc $laura(idx) "PASS $laura(pass)"
putdcc $laura(idx) "SERVER $laura(link) 1 :$laura(info)"
putdcc $laura(idx) ":$laura(link) NICK $laura(pseudo) 1 [unixtime] $laura(ident) $laura(host) $laura(link) :$laura(real)"
putdcc $laura(idx) ":$laura(pseudo) MODE $laura(pseudo) $laura(mode)"
putdcc $laura(idx) ":$laura(pseudo) JOIN $laura(salon)"
control $laura(idx) event; utimer 30 verification
}
}
################
# Verification #
################
if {![info exists laura(idx)]} { connexion }
proc verification {} {
global laura
if {[valididx $laura(idx)]} { utimer 30 verification } else { connexion }
}
#############
# Evenement #
#############
proc event {idx arg} {
global laura
set arg [split $arg]
if {[lindex $arg 0]=="PING"} { putdcc $idx "PONG [lindex $arg 1]" }
}
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
20/03/2014, 10:47
(This post was last modified: 20/03/2014, 11:27 by KeeViiNou.)
Merci :D
J'ai un soucis, peut-etre que j'ai mal codé.. tcl ######################
# Configuration Link #
######################
set bela(link) "Adresse-du-link"
set bela(info) "Info-du-link"
set bela(host) "Host-du-link"
set bela(ip) "Ip-du-link"
set bela(port) "Port-du-link"
set bela(pass) "Mot-de-passe-du-link"
set bela(pseudo) "Pseudo-du-robot"
set bela(real) "Realname-du-robot"
set bela(ident) "Ident-du-robot"
set bela(salon) "Salon-du-robot"
set bela(mode) "+oOSqsw"
# Socket #
set Bot(bot) "bara"
set lBot(nickserv) "NickServ"
set Bot(bot2) "Bela"
set Bot(bot3) "Boleslava"
set Bot(bot4) "Dobromila"
set Bot(bot5) "Elena"
set Bot(bot6) "Drahoslava"
set Bot(bot7) "Ivana"
set Bot(bot8) "Jaromíra"
######################
## LANCEMENT SOCKET ##
######################
proc connexion {} {
global bara
if {![catch "connect $bara(ip) $bara(port)" bara(idx)]} {
putdcc $bara(idx) "PASS $bara(pass)"
putdcc $bara(idx) "SERVER $bara(link) 1 :$bara(info)"
putdcc $bara(idx) ":$bara(link) NICK $bara(pseudo) 1 [unixtime] $bara(ident) $bara(host) $bara(link) :$bara(real)"
putdcc $bara(idx) ":$bara(pseudo) MODE $bara(pseudo) $bara(mode)"
putdcc $bara(idx) ":$bara(pseudo) JOIN $bara(salon)"
control $bara(idx) event; utimer 30 verification
}
}
proc connexion {} {
global bela
if {![catch "connect $bela(ip) $bela(port)" bela(idx)]} {
putdcc $bela(idx) "PASS $bela(pass)"
putdcc $bela(idx) "SERVER $bela(link) 1 :$bela(info)"
putdcc $bela(idx) ":$bela(link) NICK $bela(pseudo) 1 [unixtime] $bela(ident) $bela(host) $bela(link) :$bela(real)"
putdcc $bela(idx) ":$bela(pseudo) MODE $bela(pseudo) $bela(mode)"
putdcc $bela(idx) ":$bela(pseudo) JOIN $bela(salon)"
control $bela(idx) event; utimer 30 verification
}
}
proc connexion {} {
global Boleslava
if {![catch "connect $Boleslava(ip) $Boleslava(port)" Boleslava(idx)]} {
putdcc $Boleslava(idx) "PASS $Boleslava(pass)"
putdcc $Boleslava(idx) "SERVER $Boleslava(link) 1 :$Boleslava(info)"
putdcc $Boleslava(idx) ":$Boleslava(link) NICK $Boleslava(pseudo) 1 [unixtime] $Boleslava(ident) $Boleslava(host) $Boleslava(link) :$Boleslava(real)"
putdcc $Boleslava(idx) ":$Boleslava(pseudo) MODE $Boleslava(pseudo) $Boleslava(mode)"
putdcc $Boleslava(idx) ":$Boleslava(pseudo) JOIN $Boleslava(salon)"
control $Boleslava(idx) event; utimer 30 verification
}
}
proc connexion {} {
global Dobromila
if {![catch "connect $Dobromila(ip) $Dobromila(port)" Dobromila(idx)]} {
putdcc $Dobromila(idx) "PASS $Dobromila(pass)"
putdcc $Dobromila(idx) "SERVER $Dobromila(link) 1 :$Dobromila(info)"
putdcc $Dobromila(idx) ":$Dobromila(link) NICK $Dobromila(pseudo) 1 [unixtime] $Dobromila(ident) $Dobromila(host) $Dobromila(link) :$Dobromila(real)"
putdcc $Dobromila(idx) ":$Dobromila(pseudo) MODE $Dobromila(pseudo) $Dobromila(mode)"
putdcc $Dobromila(idx) ":$Dobromila(pseudo) JOIN $Dobromila(salon)"
control $Dobromila(idx) event; utimer 30 verification
}
}
################
# Verification #
################
if {![info exists bara(idx)]} { connexion }
proc verification {} {
global bara
if {[valididx $bara(idx)]} { utimer 30 verification } else { connexion }
}
}
#############
# Evenement #
#############
proc event {idx arg} {
global bara
set arg [split $arg]
if {[lindex $arg 0]=="PING"} { putdcc $idx "PONG [lindex $arg 1]" }
}
Et j'ai une erreur Quote: can't read "Dobromila(ip)": no such variable
while executing
"catch "connect $Dobromila(ip) $Dobromila(port)" Dobromila(idx)"
(procedure "connexion" line 3)
invoked from within
"connexion "
invoked from within
"if {![info exists bara(idx)]} { connexion }"
(file "scripts/socket.tcl" line 83)
invoked from within
"source scripts/socket.tcl"
(file "socket.conf" line 107)
[10:26:10] * FICHIER DE CONFIGURATION NON CHARGE (INTROUVABLE OU ERREUR)
20/03/2014, 11:56
(This post was last modified: 20/03/2014, 11:57 by aliasangelius.)
Salut,
Pour utilise un exemple du code de socket que j'avais, il lui faut le code entier sinon il risque d'avoirs quelques soucis :p
Tiens regarde le code entier qui et dispos sur le site.
tcl namespace eval ::socks {
variable aurore
#********************#
# Service.Socket 1.0 #
#********************#
#**************************#
# Information link reseau. #
#**************************#
set aurore(serv) "Aurore.****.fr"
set aurore(ip) "ip"
set aurore(port) "port"
set aurore(pwdlink) "pass"
set aurore(info) "Aurore Services"
#****************************#
# Configuration des sockets. #
#****************************#
set aurore(nick) "Hera"
set aurore(identd) "Hera"
set aurore(host) "Services.****.fr"
set aurore(nom) "Services-Log"
#***************************#
# Salon de log des sockets. #
#***************************#
set aurore(log) "#Services"
set aurore(quit01) "Redemarage Aurore-Service."
set aurore(quit02) "Fermeture Aurore-Service."
#****************************************#
# Lancement de la procédure des sockets. #
#****************************************#
proc checkconnect {} {
if {![info exists aurore(idx)]} { utimer 30 [namespace current]::checkconnect } else { xconnect:serv }
}
proc xconnect:serv {} {
variable aurore
if [catch {set aurore(idx) [connect $aurore(ip) $aurore(port)]} err] {
putlog "Connection error :$err"
return
}
putdcc $aurore(idx) "PASS $aurore(pwdlink)"
putdcc $aurore(idx) "SERVER $aurore(serv) 1 [unixtime] [unixtime] J09 ACAA\] +s :$aurore(info)"
putdcc $aurore(idx) ":$aurore(serv) NICK $aurore(nick) '' '' $aurore(identd) $aurore(host) $aurore(serv) '' :$aurore(nom)"
putdcc $aurore(idx) ":$aurore(nick) MODE $aurore(nick) +owsgkd"
putdcc $aurore(idx) ":$aurore(nick) JOIN $aurore(log)"
putdcc $aurore(idx) ":$aurore(nick) MODE $aurore(log) +ntsv $aurore(nick)"
control $aurore(idx) [namespace current]::controling_server
utimer 10 [namespace current]::verify
}
#***********************************#
# Verify si le serveur est Connecté #
#***********************************#
proc verify {} {
variable aurore
if [valididx [set [namespace current]::aurore(idx)]] {
utimer 30 [namespace current]::verify
} else {
xconnect:serv
}
}
proc controling_server {idx arg} {
variable aurore
set arg1 [lindex [split $arg " "] 0]
set arg2 [lindex [split $arg " "] 1]
set arg3 [lindex [split $arg " "] 2]
set arg4 [lindex [split $arg " "] 3]
set arg5 [lindex [split $arg " "] 4]
set arg6 [lindex [split $arg " "] 5]
set arg7 [lindex [split $arg " "] 6]
set arg8 [lindex [split $arg " "] 7]
set arg10 [string trim [lrange [split $arg " "] 3 end] :]
if {$arg2=="PING"} {
putdcc $aurore(idx) ":$aurore(serv) PONG $aurore(ip) :$aurore(serv)"
}
}
#**********************#
# Restart des sockets. #
#**********************#
bind evnt - prerestart [namespace current]::eva:restart
proc eva:restart {args} {
variable aurore
putdcc $aurore(idx) ":$aurore(serv) SQUIT $aurore(serv) :Restart Sockets."
catch {close $aurore(idx)}
}
#********************#
# Rehash du Service. #
#********************#
bind dcc n xrehash [namespace current]::eggy:xrehash
proc eggy:xrehash {nick idx arg} {
variable aurore
putdcc $idx "\002Rehash de Aurore-Service et des fichiers\002"
utimer 4 rehash
}
#*********************#
# Restart du Service. #
#*********************#
bind dcc n xrestart [namespace current]::eggy:xrestart
proc eggy:xrestart {nick idx arg} {
variable aurore
putdcc $idx "\002Redémarrage de Aurore-service\002"
if [valididx [set [namespace current]::aurore(idx)]] {
putdcc $aurore(idx) ":$aurore(nick) QUIT :$aurore(quit01)"
putdcc $aurore(idx) ":$aurore(serv) SQUIT :$aurore(serv)"
catch {close $aurore(idx)}
foreach kill [utimers] {
if {[lindex $kill 1]=="[namespace current]::verify"} { killutimer [lindex $kill 2] }
}
}
xconnect:serv
}
#*****************#
# Die du Service. #
#*****************#
bind dcc n xdie [namespace current]::eggy:xdie
proc eggy:xdie {nick idx arg} {
putdcc $idx "\002Arrêt de Aurore-Service\002"
if [valididx [set [namespace current]::aurore(idx)]] {
putdcc $aurore(idx) ":$aurore(nick) QUIT : $aurore(quit02)"
putdcc $aurore(idx) ":$aurore(serv) SQUIT :$aurore(quit02)"
catch {close $aurore(idx)}
foreach kill [utimers] {
if {[lindex $kill 1]=="[namespace current]::verify"} { killutimer [lindex $kill 2] }
}
}
}
#****************************#
# Fin du Service Sockets 1.0 #
#****************************#
# connection
[namespace current]::xconnect:serv
}
putlog "\0031Service Sockets 1.0 \0034Chargé."
Ce système de socket fonctionne bien, Mais ont et sur du namespace, donc sur certains points sa peut-être plus chiant tout dépend de ce que l'ont fait.
Mais je me suis jamais plaint j'ai toujours réussis à faire ce que j'ai voulut faire ;)
Si besoin base toi sur sa car c'est un code propre pour ma part, et si besoin demande sur le forum ont sera te guider je pense
EDIT : Si tu utilise comme type de server "UnrealIRCD", Pense à changer le protocol du server dans le code
Heu, tu as 4 procédures "connexion", ça ne te choque pas ?
Ensuite, tu utilises $Dobromila alors que nul part cette variable n'est définie, tu as juste défini $Bot(bot4).
Donc ou bien il te manque ue procédure qui crée les variables en fonction du contenu de $Bot ou bien tu n'as pas tout compris à ce que tu fais.
20/03/2014, 14:09
(This post was last modified: 20/03/2014, 14:25 by KeeViiNou.)
Je dois bien avoue que je suis perdu totalement CrazyCat..
J'ai testé ton codage aliasangelius
Mais moi j'aimerai comment dire ça faire un lancement de deux ou trois bot à partir d'une même configuration avec des rôles différent.. Et avec les codages que j'ai eu trouve j'arrive jamais à connecter les bots..
(20/03/2014, 11:56)aliasangelius Wrote: Salut,
Pour utilise un exemple du code de socket que j'avais, il lui faut le code entier sinon il risque d'avoirs quelques soucis :p
Tiens regarde le code entier qui et dispos sur le site.
Salut Alias ,
Si il et complet celui que je lui et donné sauf que toi tu l'utilise en namespace alors que moi non ^^
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
Reprenons,
@Kee, Mon code ne tant empêche pas de faire ça.
Il suffit de rajouter des variables simplement.
Donc si tu veut je peux t'expliquer comment faire, Tu me dit nom des autres sockets et tu va voir que c'est simple.
@ BaGrift, Oui mais sauf ton event et pas bon.
Je suis pas contre aliasangelius si ça te dérange pas...
Pour nom set Bela, Boleslava, Dobromila, Drahoslava et Jaromíra. Ce que je me pose aussi comme question, c'est est ce que sur la conf après je peux "assigner" un codage à un bot en particulier par exemple Bela=Radio - Dobromila=Moderation - Jaromira=Animation ?
Merci de m'aide encore
Alors j'ai pas tout compris.
J'ai compris la partie pour assigner une tâche différentes par socket c'est sa que tu veut dire ?
Si c'est cela oui c'est tout à fait possible, Toutes sockets peuvent avoir une tâche prédéfini sur une chose ou autre.
Exemple : Tu va avoir Nickserv lui va enregistré les demande de pseudo pour être enregistré sur le réseaux.
Bela, Va avoir comme fonction de mettre le status +o sur le salon accueil au ircop.
Etc..
Mais oui c'est tout à fait possible, Faut faire du côté Evément server sur "privmsg".
Si tu sais pas vraiment comment faire dit le moi
Oui c'est ça en gros et oui j'aurai besoin d'aide je pense car je me suis peut-être montrer trop gourmand.. Et vu que j'apprends du moins j'essaie d'apprendre seul y a des trucs sur lesquels je suis court..
Bon.. La je pense qu'il va falloir quelques trucs.
Je vais refaire mon code et ensuite dedans ou ici je vais commenter plus ou moins, pour que tu comprenne.
Bien sur tu va bosser aussi pour modifié etc :)
Comme sa tu comprendra mieux je pense.
|