Communauté Eggdrop
[Résolu] Aide sur une commande - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : [Résolu] Aide sur une commande (/showthread.php?tid=1639)

Pages : 1 2


RE: Aide sur une commande - Alucard`68 - 07/11/2016

CrazyCat j'ai suivi tes conseils et comme dit plus haut je n'ai aucun message d'erreur en PL mais rien ne fonctionne d'ou le faite que je ne sais absolument pas comment régler la chose.
J'ai aussi changer les putquick en putlogs et les bind pubm en bind pub.
Malgré tous ces changement cela ne fonctionne pas et je n'ai toujours aucun message d'erreur en PL.
Franchement je ne sais pas quoi faire ...


RE: Aide sur une commande - aliasangelius - 07/11/2016

As-tu fait un .rehash
A la fin de ton tcl tout en bas rajoute ceci :

TCL
putlog "test chargé !"



Peut-tu montré les modifications que tu à apporter.
Et en PL de ton eggdrop, peut-tu tapez la commande : .channels
Pour qu'ont puisse voir certaines choses merci d'avance.


RE: Aide sur une commande - Alucard`68 - 07/11/2016

alors voici le putlog
Code :
[18:20:01] «Thor» [18:19:57] test chargé !
le code
TCL
set vhostjoinpart {
  *@faucheur.enjoy-tchat.fr
}
 
 
bind pub - !vien vien
bind pub - !oust oust
 
proc vien { nick host hand channel arg } {
 global vhostjoinpart vien
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if {[string match -nocase $vhost $host]} {
     putlogs "privmsg #lm-staff :\00312Ok, \0037$nick \00312! je rejoins \0034$chan"
     channel add $chan
     savechannels
    }
  }
  return
}
 
proc oust { nick host hand channel arg } {
 global vhostjoinpart oust
 set chan [lindex $arg 0]
 foreach vhost [array names $::vhostjoinpart] {
   if [string match -nocase $vhost $host] {
     putlogs "privmsg #lm-staff :\00312Ok, \0037$nick \00312! je part de \0034$chan"
     channel remove $chan
     savechannels
     }
  }
  return
}
 
putlog "test chargé !"


et le .channel
Code :
[18:28:46] «Thor» [18:28:42] #AngeDesOm# (#LinuxMint) channel
[18:28:46] «Thor» Canal #LinuxMint, 4 members, mode +trn:
[18:28:46] «Thor» Sujet du canal: [Linux Mint] Bienvenue sur le salon d'entraide dédié à Linux Mint. Pour connaître les commandes tapez !cmd Forum francophone dédié à Linux Mint ==> https://www.forum-francophone-linuxmint.fr/
[18:28:46] «Thor» (n = owner, m = master, o = op, d = deop, b = bot)
[18:28:46] «Thor»  NICKNAME      HANDLE     JOIN  IDLE  USER@HOST
[18:28:46] «Thor» @Thor          *         18:27       <- it's me!
[18:28:46] «Thor»  AngeDesOmbres AngeDesOm  ---  N      Ange@Faucheur.EnjOy-Tchat.fr
[18:28:46] «Thor»  rodrigue7000  *          ---         ~rodrigue7@EnjOy-TchaT-C0A70CF9.dynamic.voo.be
[18:28:46] «Thor» @Tux           *          ---         Gardien@tchat-discut.fr
[18:28:46] «Thor» Fin de renseigements du canal.



RE: Aide sur une commande - CrazyCat - 07/11/2016

Je te montre vite fait comment faire un debug, en modifiant ta procédure "vien":
TCL
proc vien { nick host hand channel arg } {
   global vhostjoinpart vien
   putlog "Bind vien déclenché"
   set chan [lindex $arg 0]
   putlog "Canal visé: $chan"
   foreach vhost [array names $::vhostjoinpart] {
      putlog "Test: $host vs $vhost"
      if {[string match -nocase $vhost $host]} {
         putlog "privmsg #lm-staff :\00312Ok, \0037$nick \00312! je rejoins \0034$chan"
         channel add $chan
         savechannels
      } else {
         putlog "Pas bon"
      }
   }
   return
}



Au moins, tu verras exactement ce qui se passe dans ton script.

Et note que si tu utilises global, tu n'as pas besoin d'utiliser $::, et vice-versa.


RE: Aide sur une commande - aliasangelius - 07/11/2016

(07/11/2016, 18:14)aliasangelius a écrit : Et en PL de ton eggdrop, peut-tu tapez la commande : .channels

tu as oublié le "s", La sa te retourne qu'un seul salon.

Et fait la modification que Crazy ta faite, sa va permettre de mieux situé le problème.


RE: Aide sur une commande - Alucard`68 - 07/11/2016

CrazyCat j'ai donc mis ton code j'ai bien e des retours en PL
Code :
19:09:57] «Thor» [19:09:53] Bind vien déclenché
[19:09:57] «Thor» [19:09:53] Canal visé: #Test
donc si je lie bien et comprend bien mon problème vien au niveau du foreach ?


RE: Aide sur une commande - CrazyCat - 08/11/2016

A priori, oui: il ne passe pas dans ton foreach.


RE: Aide sur une commande - aliasangelius - 08/11/2016

Bonjour Smile

En faisant ainsi :

TCL
set vhostjoinpart "*@faucheur.enjoy-tchat.fr"
 
 
#########################
## Liste des commandes ##
#########################
 
#Ajout/suppression d'un salon pour le robot
bind pub - !oust unassign
proc unassign {nick host hand chan text} {
   global botnick unassign vhostjoinpart
   # on crée $cleave qui est le canal à quitter
   set cleave [join [lrange [split $text] 0 0]]
   if {[validchan $cleave]} { 
      # le canal cible est valide, on le retire
      channel remove $cleave
      foreach pseudo $vhostjoinpart {
         putquick "NOTICE $pseudo:Je suis bien partie de $cleave"
      }
   } else {
      putserv "NOTICE $nick :Je ne connais pas le canal $cleave"
   }
}
 
bind pub - !vien assign
proc assign {nick host hand chan text} {
    global botnick assign vhostjoinpart
   # on crée $cjoin qui est le canal à rejoindre
    set cleave [join [lrange [split $text] 0 0]]
    channel add $cleave
    foreach pseudo $vhostjoinpart {
        putquick "NOTICE $pseudo: $botnick a bien été atribué au salon $cleave"
     }
}



J'ai rechercher sur le forum, comme je n'es pas travaillé énorme sur les vhost, j'espère que ça va fonctionner !


RE: Aide sur une commande - CrazyCat - 08/11/2016

La réponse d'alias est à peu près juste dans le sens où il utilise correctement le foreach.

Le script que j'ai corrigé est presque bon, j'ai volontairement laissé l'erreur qui bloque le système, à savoir:
TCL
foreach vhost [array names $::vhostjoinpart] {


Pourquoi array names dans une simple liste ? La solution est juste de parcourir la liste:
TCL
foreach vhost $::vhostjoinpart {



Voici un mini-script de vérification du fonctionnement:
TCL
set vhostjoinpart {
  *@faucheur.enjoy-tchat.fr
}
 
proc test1 {host} {
  foreach vhost $::vhostjoinpart {
     if { [string match -nocase $vhost $host] } {
        puts "Matched $host against $vhost"
     } else {
        puts "failed $host against $vhost"
     }
  }
}
 
proc test2 {host} {
  foreach vhost [array names $::vhostjoinpart] {
     if { [string match -nocase $vhost $host] } {
        puts "Matched $host against $vhost"
     } else {
        puts "failed $host against $vhost"
     }
  }
}
 
puts "Test 1:"
test1 "user@blabla.com"
test1 "roger@faucheur.enjoy-tchat.fr"
test1 "berthe@Faucheur.Enjoy-Tchat.fr"
 
puts "Test 2:"
test2 "user@blabla.com"
test2 "roger@faucheur.enjoy-tchat.fr"
test2 "berthe@Faucheur.Enjoy-Tchat.fr"



Et le résultat:
Code :
crazycat@raspian:~ $ tclsh foreach.tcl
Test 1:
failed user@blabla.com against *@faucheur.enjoy-tchat.fr
Matched roger@faucheur.enjoy-tchat.fr against *@faucheur.enjoy-tchat.fr
Matched berthe@Faucheur.Enjoy-Tchat.fr against *@faucheur.enjoy-tchat.fr
Test 2:
crazycat@raspian:~ $
On voit bien que array names ne ramène rien.


RE: Aide sur une commande - aliasangelius - 08/11/2016

Oh ! Donc si je comprend bien, sa ramène une liste vide dans le cas présent actuel.
Ce qui donne la possibilité (d'obtenir une chaine vide).

Si je comprend bien ton code, ainsi que son explications ci dessus.
J'ai pas penser à vérifier sur le wiki Sad

Donc voilà la solution niquel Wink

Maintenant il à toutes les infos pour le fonctionnement c'est good.


RE: Aide sur une commande - Alucard`68 - 09/11/2016

Salut,

Donc j'ai copié ton code aliasangelius fonctionne très bien Very Happy
Maintenant je vais étudier le code et le décortiquer pour bien comprendre celui-ci tout en m'aidant du wiki.
Merci à vous deux pour votre aide. Smile

Bye.


RE: Aide sur une commande - aliasangelius - 09/11/2016

Ravis d'avoir pu t'aider Smile