Communauté Eggdrop

Version complète : Flag dans un bnd join..
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour,

Je suis actuellement sur un projet de code Tcl qui fera un système de Services.
Ya bien évidament un système de auto-op pour des Robots que je doit prévoir dans mon projet actuel.

Seulement le problème que je rencontre c'est que je ne trouve pas comment faire..
J'ai essayer d'inclure le sytème de flag par bind join directement dans le bind join sans utiliser bien évidament matchattr car je veux passer par une variable.

Donc J'ai bien évidament mis des putlog au niveau de chaque ligne de code au niveau du bind join voir si j'avais un retour ou pas et je n'es absolument rien.
Même en erreur PL je n'es absolument rien.. je ne trouve pas d'ou peut venir le soucis si quelqu'un pouvais m'aider Smile

Je met des * pour ne pas spam le nom de reseau ^^

Voici Donc le code Tcl en question :

TCL
#*************************************************************#
# Tcl Service en cour de Création pour le réseau **********   #
#                                                             #
# By alias_angelius.                                          #
#*************************************************************#
 
namespace eval ::robot {
    package require msgcat
    package require Tcl 8.5
    # Ici ont met le salon ou ont désire mettre le auto-op/voice.
    variable sal "#Accueil"
    # Ici ont mets le temps d'opage et de voice en secondes.
    variable opsec 3
    # Ici ont met le message pour le/les Robot(s)/users en msgcat.
    ::msgcat::mcset fr m0 "\0034Auto-voice et Auto-op accepter pour le Robot.\0034"
    # Langue qu'ont désire mettre pour msgcat.
    ::msgcat::mclocale fr
    # Ici ont met le flag que les robot/users doivent avoir pour l'auto-op/voice.
    variable xflag "I|I"
    # Auteur.
    variable veraut "Service.tcl V1.0 by alias_angelius."
    putlog "\002\0034$::robot::veraut\002\0034"
    
    # Procédure de Join sur le salon défini.
    proc robotjoin {nick host hand chan} {
        if {$nick == $::botnick} {return 0}
        if {$::robot::sal == "" && [botisop $chan]}
        putserv "privmsg ::robot::sal :[::msgcat::mc m0]"
        utimer $::robot::opsec [list ::robot::verif $nick $chan]
    }
    
    # Procédure d'auto-Voice/Op Robot.
    proc verif {nick chan} {
        if {[isop $nick $chan]} {return}
            putserv "mode $chan +ov $nick $nick"
    }
    
    # Package.
    if {[catch {package require Tcl 8.5}]} {
        putlog "\002auto-op-voice.tcl\002 : Vous avez besoin de Tcl en version 8.5 au moins pour pouvoir utiliser ce script."
        return
    }
    # Les binds.
    bind join - "$::robot::xflag" [namespace current]::robotjoin
}


Ben, c'est pourtant simple comme erreur.
Ce que tu fais:
TCL
bind join - "$::robot::xflag" [namespace current]::robotjoin



Ce que nous dis la doc : "Syntaxe: bind join <flags> <mask> <proc>"
Donc, tu as mis "-" en flags et "I|I" en mask. Or (je cite encore) : Le mask est de la forme "#channel nick!user@host" et peut contenir des widlcards.
Essaye donc:
TCL
bind join $::robot::xflag "*" [namespace current]::robotjoin


Salut CrazyCat,

J'avais essayer de cette façon aussi et je n'es eut aucun retour de cette manière aussi..

J'ai mis comme tu as dit pour vérifier si j'avais omis une chose ou pas mais apparament non.
Et toujours aucune erreur detecter..
Est-ce que tu as bien un utilisateur avec le flag I qui rejoint le canal ?
Oui il à bien le flag +I et il rejoint bien le canal
salut,

relis bien ta ligne
TCL
if {$::robot::sal == "" && [botisop $chan]}


il ne manque rien??
djkenny a écrit :relis bien ta ligne
TCL
if {$::robot::sal == "" && [botisop $chan]}


il ne manque rien??
Pas faux.
Et de plus, pour ne pas appeler la procédure pour rien, tu peux modifier ton bind en :
TCL
bind join $::robot::xflag "$::robot::sal *" [namespace current]::robotjoin



Et pour la dernière fois, 2 conseils:
  1. Ne pas mettre de majuscules dans un nom de salon
  2. Faire des comparaisons de noms de salons avec string tolower
Salut,

Désolé pour le retard de la réponse..

Donc oui il manque bien quelque chose en effet.
J'ai donc tester avec string tolower avec un llength split mais bon toujours aucune réponse..

Je pense que j'ai du me tromper je montre la modification car je ne vois pas comment faire pour inserer autrement si je me suis tromper.

TCL
proc robotjoin {nick host hand chan} {
        if {$nick == $::botnick} {return 0}
        if { [string tolower $chan] ne [string tolower $::robot::sal] } { return 0; }
            if { [llength [split $chan]] == 0 } {
        if {$::robot::sal == "" && [botisop $chan]}
        putserv "privmsg ::robot::sal :[::msgcat::mc m0]"
        utimer $::robot::opsec [list ::robot::verif $nick $chan]
            }
    }



à moins que je me suis complêtement gourer je ne vois pas mon erreur.
Et en PL je n'es aucun retour d'erreur.
Résumons nous... Tu veux faire ton putserv (et ton utimer) quand quelqu'un avec le flag I entre sur le canal. Et bien sûr, il faut que ton eggdrop soit op sur le canal ?
TCL
proc robotjoin {nick host hand chan} {
   if {$nick == $::botnick} { return 0 }
   if { [string tolower $chan] ne [string tolower $::robot::sal] } { return 0 }
   if {![botisop $chan]} { return 0 }
   putserv "privmsg $::robot::sal :[::msgcat::mc m0]"
   utimer $::robot::opsec [list ::robot::verif $nick $chan]
   return 1
}


Salut,

Donc suite à une discution avec CrazyCat sur le réseaux Irc Zeolia.
J'ai demander ce que signifier mon erreur dans le code donc voici notre conversation pour qui et un suivi Smile

Citation :[15:19:41] (alias_angelius) Salut CrazyCat
[15:19:59] (alias_angelius) excuse moi CrazyCat mais j'aurait une question stupide "pour ne pas changer"
[15:20:24] (alias_angelius) le code que tu ma mis sur le forum fonctionne correctement
[15:20:40] (alias_angelius) mais mon erreur était
[15:20:42] (alias_angelius) if {$::robot::sal == "" && [botisop $chan]}
[15:21:00] (alias_angelius) donc la variable d'appel du salon
[15:21:18] (alias_angelius) ?
[15:21:31] (alias_angelius) car moi je voulais faire par exemple :
[15:21:54] (alias_angelius) en fesant ça que sa vérifie si l'eggdrop à bien le staus d'opérateur sur le salon en faite
[15:22:02] (alias_angelius) ça que je ne comprend pas :/
[15:22:16] (@CrazyCat) Attends, je me remets sur le code que je t'ai filé
[15:22:31] (alias_angelius) x)
[15:22:51] (@CrazyCat) Oui, donc ton $::robot::sal == "" ne sert à rien
[15:23:23] (alias_angelius) ah ? je comprend pas en faite l'erreur.. désolé mais j'aimerais la comprendre pour ne pas recommencer
[15:23:38] (@CrazyCat) variable sal "#Accueil" <-- donc $::robot::sal n'est jamais égal à ""
[15:23:51] (@CrazyCat) Donc tu ne passes jamais ta condition
[15:24:09] (alias_angelius) d'accord
[15:24:40] (alias_angelius) donc la sa fonctionne sa voice,op correctement me reste à voir pourquoi le message ne s'éxécute pas
[15:24:56] (@CrazyCat) le putserv ?
[15:25:16] (alias_angelius) oui
[15:25:34] (@CrazyCat) putserv "privmsg $::robot::sal :[::msgcat::mc m0]" <-- j'avais copié ta ligne, il manquait un $
[15:25:39] (@CrazyCat) (j'ai corrigé)
[15:26:20] (alias_angelius) ah ouais OMG
[15:26:30] (alias_angelius) la bourde..
[15:26:58] (@CrazyCat) Non. Le boulet. Et pas moi, hein Smile
[15:27:01] (alias_angelius) oui impécable
[15:27:10] (alias_angelius) +1 CrazyCat ^^
[15:27:24] (@CrazyCat) Mais bon, erreur habituelle ça
[15:27:30] (alias_angelius) je peux poster que c'est résolu en affichant notre discution sur le forum ?
[15:27:37] (alias_angelius) oui tout à fait CrazyCat
[15:27:39] (@CrazyCat) Bien sûr
[15:27:45] (alias_angelius) j'aurait du faire plus attention
[15:27:55] (alias_angelius) en tout cas je t'en remercie beaucoup

Voilà sujet Résolu merci beaucoup de l'aide Smile