Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


[Demande] Problème de bind msg
#1
Bonsoir.

Alors voilà j'ai pris le système de auth en SQL du wiki, tout fonctionne sauf un détail.

Lorsque tu es auth le bot principal va dire à bot log un message qui lui va dire sur un salon que intel c'est auth.
Il reçois bien le message en privé de la part du bot principal

Citation :.[19:08:07] <Shini-Log> [19:08:07] [Shini!Shini@C478B8B.4AA6E26.A3B0E959.IP] authlog alias_angelius

Mais ce dernier ne lance pas la proc.

Je vous transmet la totalité des proc.

Shini.tcl (bot principal ou ont se auth).
tcl
#--------------------------------------------------#
# Shini.tcl                                        #
#                                                  #
# Toutes les procs/binds relatif au bot Principal. #
#--------------------------------------------------#
 
source [file join Shini shini-conf.tcl]
source [file join Shini Shini-log.tcl]
# Bot Log.
 
set ::logv "Shini-log"
 
# Binds.
 
bind msg - "auth" auth
 
# Système d'authentification.
 
proc auth {nick host hand arg} {
   #set arg [filtr $arg]
   #set args [split $arg]
   set pseudo [lindex $arg 0]
   set pass [lindex $arg 1]
   if { $pseudo == "" || $pass == "" } {
       puthelp "notice $nick :\0034Erreur ! \037\0031Veuillez tapez /msg $::botnick auth <votre-pseudo> <votre-pass>\037\0031"
       return 0
   }
   if { ![isvaliduser $pseudo] } {
       puthelp "notice $nick :0034Erreur ! \037\0031Vous n'avez aucun accèss $nick.\037\0031"
       return 0
   }
   if { [isvalidpassword $pseudo $pass] } {
       if { [issuspend $pseudo] } {
           puthelp "notice $nick : \0034Erreur ! \037\0031Votre accès et actuellement suspendu $nick.\037\0031"
           return 0
       }
       if { [isauth $pseudo] } {
           puthelp "notice $nick :\0034Erreur ! \037\0031Vous êtes déjà identifié.\037\0031"
           return 0
       }
       puthelp "privmsg $::logv :authlog $pseudo"
       puthelp "notice $nick :\0033Félicitations ! \037\0031Vous êtes maintenant identifié $nick.\037\0031"
       xauth $pseudo
       } else {
           puthelp "notice $nick :\0034Erreur ! \037\0031Mot de pas incorrect veuillez tapez le bon mot de pass merci.\037\0031"
           return 0
       }
}



Shini-log.tcl (Bot qui doit dire les log tel que auth c'est identifié auprès de bot principal).
tcl
#---------------#
# Shini-log.tcl #
#---------------#
 
# Bot Shini.
set ::Shi "Shini"
   
# Salon Log.
set ::logsal "#central-log"
   
# Proc auth-Log.
bind msg - authlog proc:xauth
proc proc:xauth { nick uhost hand text } {
   if [string match -nocase $nick $::Shi] {
       putserv "privmsg $::logsal :\0031\[\0034Chan-Log\0031\]\0031 \[\0033Auth\0031\] \037\0031Effectué par\037 \0034[join [lrange $text 1 end]]\0034"
   }
}
 
putlog "Shini-log.tcl"



Je pense que je fait un oublis, ou je fait mal les appels de procédures.
Si vous avez des pistes je suis preneur merci !
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#2
(sujet renommé, rien à voir avec le fait que ce soit une authentification SQL)

Comment sais-tu que la procédure ne se lance pas ?
Je ne vois pas de copie d'écran d'un .binds msg qui indiquerait le nombre de fois où le bind a été activé, et je ne vois pas de putlog de debug dans ta procédure.
tcl
proc proc:xauth { nick uhost hand text } {
   putlog "Message de $nick: $text"
   if {[string match -nocase $nick $::Shi]} {
       putserv "privmsg $::logsal :\0031\[\0034Chan-Log\0031\]\0031 \[\0033Auth\0031\] \037\0031Effectué par\037 \0034[join [lrange $text 1 end]]\0034"
   } else {
      putlog "$nick n'est pas $::Shi"
   }
}


Et utiliser string match quand tu peux te contenter d'une comparaison simple, je ne sais pas si c'est optimal.
  Répondre
#3
En effet la proc ne se lance pas en mettant les putlog

tcl
putlog "Message de $nick: $text"



Aucun retour.. Donc je pense que la proc n'es pas bonne.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#4
Donc, comme dit précédemment: .binds msg
Es-tu sûr que les eggdrops ne s'ignorent pas ? As-tu tenté de faire toi-même un /msg Shini-Log authlog c'est un test ? As-tu activé le mode +m en console pour voir en PL les MP que voit vraiment l'eggdrop ?
  Répondre
#5
Voici les retours

Citation :.[12:40:12] <Shini-Log> [12:40:15] Message de alias_angelius: c'est un test ?
.[12:40:12] <Shini-Log> [12:40:15] alias_angelius n'est pas Shini
.[12:40:24] <alias_angelius> .binds msg
.[12:40:24] <Shini-Log> [12:40:26] #alias_angelius# binds msg
.[12:40:24] <Shini-Log> Liaisons de commande:
.[12:40:24] <Shini-Log> TYPE FLAGS COMMAND HITS BINDING (TCL)
.[12:40:24] <Shini-Log> msg -|- authlog 1 proc:xauth

Et oui j'ai le mode +m d'activé en PL
Citation :.[12:42:21] <alias_angelius> .console
.[12:42:21] <Shini-Log> Your console is #central-log: mjkcobxs (msgs, joins, kicks/modes, cmds, misc, bots, files, server).
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#6
Donc la procédure marche bien, on dirait que Shini n'arrive pas à envoyer un MP à Shini-log ou bien Shini-log ignore Shini (as-tu vérifié la liste des ignore ?).

As tu essayé, depuis Shini, de faire .tcl putserv "PRIVMSG Shini-log :authlog autre test" ?
  Répondre
#7
Je m’incruste dans la discussion: ça n’est pas plus rapide d’envoyer des messages entre egg via botnet ?
  Répondre
#8
Pour les taches incrustées :
[Image: https://imgur.com/hbLOHdo.gif]

Inutile de m'indiquer la sortie, je connais.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#9
@crazy

Citation :.[14:51:16] <alias_angelius> .ignore
.[14:51:16] <Shini-Log> [14:51:16] #alias_angelius# ignores
.[14:51:16] <Shini-Log> No ignores.
.[14:51:28] <Shini-Log> [14:51:28] Message de Shini: autre test

Donc la aucun ignore, et sur le salon demander nous avons le retour :
Citation :.[14:51:29] <Shini-Log> [Chan-Log] [Auth] Effectué par test

Donc ce qui voudrait dire que la condition initiale n'es pas la bonne ?

@bds Non car via botnet quand le tcl sera fini j'ai pas franchement envie de dire toute la procédure.., certes la je galère sur un détail qui je suis sûre est un truc basique.. mais bon.

@Menz tu me tue !
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#10
Quelle condition initiale ?
Tu as dit que Shini envoyait bien le PM et que Shini-Log le recevait bien.
Avec la procédure proc:xauth qui contient les putlog, tu devrais avoir un retour en party-line. Ou bien Shini ne fait pas bien le PM, ajoute du debug pour savoir où tu passes.

Depuis le temps que tu fais des scripts, tu devrais savoir débuguer.
  Répondre
#11
cette condition :
tcl
if {[string match -nocase $nick $::logsal]} {



J'ai donc fait ainsi :
tcl
proc proc:xauth { nick uhost hand text } {
   putlog "Message de $nick: $text"
   set args [split $text]
   set victim [lindex $args 0]
   if {[string match -nocase $nick $::logsal]} {
       putserv "privmsg $::logsal :\0031\[\0034Chan-Log\0031\]\0031 \[\0033Auth\0031\] \037\0031Effectué par\037 \0034[lindex $text 0]\0034"
   } else {
      putlog "$nick n'est pas $::Shi"
      putserv "privmsg #service-bot :Putlog1 Ont regarde qui et la victim >$victim"
      putserv "privmsg #service-bot :Putlog2 Ont regarde ce que contient nick à la différence de victim ? >$nick"
   }
}


Lors de la commande auth nous avons donc sur le salon les retours qui nous donne :
Citation :.[18:09:55] <Shini-Log> Putlog1 Ont regarde qui et la victim >alias_angelius
.[18:09:56] <Shini-Log> Putlog2 Ont regarde ce que contient nick à la différence de victim ? >Shini
.[18:09:58] <Notice> de Shini Félicitations ! Vous êtes maintenant identifié alias_angelius.
Et dans le bot shini-log
Citation :.[18:09:54] <Shini-Log> [18:09:54] Message de Shini: alias_angelius
.[18:09:54] <Shini-Log> [18:09:54] Shini n'est pas Shini

J'ai donc rajouter $victim pour voir ce qu'il contenez par rapport à $nick. Donc $nick retourne le pseudo de l'envoyeur "le bot", et la victim la personne exécutant la commande de auth.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#12
Tu compares $nick à $::logsal qui contient le nom du salon.
Je suppose qu'il faudrait plutôt le comparer à $::Shi.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#13
C'est un peu du grand n'importe quoi que tu fais... J'avoue que je ne comprends plus rien
tcl
if {[string match -nocase $nick $::logsal]} {


Tu compares le pseudo de celui qui envoit le MP avec le nom du canal de log ?
Pourquoi tu ne fais pas simplement:
tcl
if {[string tolower $nick] eg [string tolower $::Shi]} {



Et donc, les questions importantes:
1. est-ce que Shi envoie bien le MP à Shi-log ?
2. est-ce que Shi-log le reçoit bien ?
3. la procédure se déclenche-t-elle ?
4. fonctionne-t-elle comme il faut ?

Fais les tests dans cet ordre, un par un, sinon tu ne pourras jamais faire fonctionner ton usine à gaz. Il faut être méthodique.
  Répondre
#14
CrazyCat a écrit :Tu compares le pseudo de celui qui envoit le MP avec le nom du canal de log ?

C'est ce que je dis.
Trouve tes propres réponses stp, c'est pas bien de copier sur le voisin :p


CrazyCat a écrit :
tcl
if {[string match -nocase $nick $::logsal]} {


Pourquoi tu ne fais pas simplement:
tcl
if {[string tolower $nick] eg [string tolower $::Shi]} {


parce que c'est environ 3.5 fois plus rapide pour un résultat égal :
Citation :[18:49:58] <MenzAgitat> .tcl time {if {[string match -nocase Shini ldfkjlkdfgdfgl]} {}} 1000000
[18:49:58] <Boole> Tcl: 0.183523 microseconds per iteration
[18:49:56] <MenzAgitat> .tcl time {if {[string tolower ldfkjlkdfgdfgl] eq [string tolower Shini]} {}} 1000000
[18:49:56] <Boole> Tcl: 0.643582 microseconds per iteration
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#15
Alors dans l'ordre.

Oui Shini envois bien le MP à Shini-log j'avais comme message : .[18:09:54] <Shini-Log> [18:09:54] Message de Shini: alias_angelius
La procédure se déclencher bien mise à part la partie
tcl
putserv "privmsg $::logsal :\0031\[\0034Chan-Log\0031\]\0031 \[\0033Auth\0031\] \037\0031Effectué par\037 \0034[lindex $text 0]\0034"



Donc mon erreur était de mélanger pseudo et salon de log Comme la stipuler Menz
Au final c'était bien la condition ci le soucis
tcl
if {[string match -nocase $nick $::logsal]} {



Je n'avais pas réfléchis au fait que je comparé mal la situation comme une buse..
En remplaçant $::logsal par $::Shi, le code devient fonctionnel.

Mais j'ai comme l'impression avoir oublié une utilité sur cette fonction de string match, j'avoue que j'ai pas mal sécher dessus, et en vue de vos exemples ça me parle pas plus que ça..
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Problème avec un script TCL (bind mode) Lyokomaster 3 3,631 15/03/2009, 18:05
Dernier message: Merwin

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)