Communauté Eggdrop
Soucis de majuscules. - 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 : Soucis de majuscules. (/showthread.php?tid=1220)



Soucis de majuscules. - aliasangelius - 23/07/2012

Bonjour,

Voilà j'ai un soucis sur la prise en charges des majuscules lors d'un enregistrement.

Donc je tape la commande /msg Resa register TestPseuDo TestPseuDo unpass
Et sa me dit bien que la commande à était effectué.
Par contre lorsque je désire me connecté pour que sa prenne en charge la réservation de pseudo sa ne fonctionne pas.

J'ai fait des testes sur des pseudos en minuscules et celà fonctionne très bien.
Par contre avec des majuscules cela ne fonctionne pas.

Voici le code.

TCL
if {$destinataire=="$OperServ(nickp)"} {
          if {$commande=="register"} {
             set arg [split $arg]
             set dir [lindex $arg 4]
             set dir [::nickdebug $dir]
             set configs(nickdir) "/home/ircshell/ircd/Nick"
             if {$dir==""} {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m9]"
                return
             }
             file dirname $configs(nickdir)/$dir
             if [file exist $dir] {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m10]"
                return
             }
             set dir $configs(nickdir)/$dir
             catch {exec mkdir $dir}
             set fo "[open $dir/identd.txt w]"
             puts -nonewline $fo [lindex $arg 5]
             close $fo
             set fo "[open $dir/clef-reg.txt w]"
             puts -nonewline $fo [lindex $arg 6]
             close $fo
             putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m12] [::msgcat::mc m13]"
             putdcc $OperServ(idx) ":$OperServ(nick) PRIVMSG $OperServ(log) :[::msgcat::mc m5] [::msgcat::mc m11] \037\0034$pseudo\037\0034"
          }
        }





RE: Soucis de majuscules. - CrazyCat - 23/07/2012

Ben je te dirais de toujours travailler en minuscules. Comme de toutes manières ça ne fait pas de différences sur IRC, un petit [string tolower $pseudo] au départ et voila.


RE: Soucis de majuscules. - aliasangelius - 24/07/2012

Bah j'ai fait comme sa en modifiant :

TCL
proc controling_server {idx arg} {
   variable OperServ
   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] :]
   set event [lindex $arg 1]
   set nick [string trim [lindex $arg 0] :]
   set pseudo "[string trim $arg1 :]"
   set commande [string trim [lindex $arg 3] :]
   set destinataire [lindex $arg 2]
   if {$arg2=="PING"} {
      putdcc $OperServ(idx) ":$OperServ(serv) PONG $OperServ(ip) :$OperServ(serv)"
    }
    if {$event=="PRIVMSG"} {
      if {$destinataire=="$OperServ(nick)"} {
         if {$commande=="VERSION"} {
            putdcc $OperServ(idx) ":$OperServ(nick) NOTICE $pseudo :[::msgcat::mc m7]"
            putdcc $OperServ(idx) ":$OperServ(nick) PRIVMSG $OperServ(log) :[::msgcat::mc m5] [::msgcat::mc m8] \037\0034$pseudo\037\0034"
         }
      }
    if {$destinataire=="$OperServ(nickp)"} {
          if {$commande=="register"} {
             set arg [split $arg]
             set dir [lindex $arg 4]
             set dir [::nickdebug $dir]
             set configs(nickdir) "/home/ircshell/ircd/Nick"
             set pseudo [string tolower $pseudo]
             if {$dir==""} {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m9]"
                return
             }
             file dirname $configs(nickdir)/$dir
             if [file exist $dir] {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m10]"
                return
             }
             set dir $configs(nickdir)/$dir
             catch {exec mkdir $dir}
             set fo "[open $dir/identd.txt w]"
             puts -nonewline $fo [lindex $arg 5]
             close $fo
             set fo "[open $dir/clef-reg.txt w]"
             puts -nonewline $fo [lindex $arg 6]
             close $fo
             putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m12] [::msgcat::mc m13]"
             putdcc $OperServ(idx) ":$OperServ(nick) PRIVMSG $OperServ(log) :[::msgcat::mc m5] [::msgcat::mc m11] \037\0034$pseudo\037\0034"
          }
        }
} }



Mais cela na pas fonctionner.
J'ai même tenter de faire un :

TCL
if {[string tolower $pseudo]} {
....



Résultat pareil et j'ai même tenter de faire lors de l'ouverture (open) de rajouter le string tolower $pseudo.
Mais pareil rien n'as fonctionné.

Edit : Je n'avais pas mis le code complet. La c'est bon tout et mis.


RE: Soucis de majuscules. - CrazyCat - 24/07/2012

Déjà :
TCL
if { [string tolower $pseudo] }


Ca, se sera toujours vrai, tu testes juste que le string tolower fonctionne.

Ensuite, il faut qu'on sache ce que contient $arg. Et tu crées des variables qui sont identiques à plusieurs reprise, et aussi tu mets du code qui ne fait rien, comme par exemple:
TCL
file dirname $configs(nickdir)/$dir


Citation :file dirname name: Renvoie un nom comportant tout les composants de chemin de name excluant le dernier élément. Si name est un nom de fichier relatif et contient seulement un élément de chemin, alors retourne "." (ou ":" sur le Macintosh). Si name se refère à un répertoire racine, alors le répertoire racine est renvoyé. Par exemple, file dirname c:/ retourne c:/. Notez que la substitution tilde sera effectuée seulement si c'est nécessaire pour que la commande aboutisse. Par exemple, file dirname ~/src/foo.c retourne ~/src, alors que file dirname ~ retourne /home (ou quelque chose de similaire).
Donc, ça renvoie quelque chose, il doit y avoir un set ... avant file dirname.

Voici une version un peu corrigée
TCL
proc controling_server {idx arg} {
   variable OperServ
   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] :]
   set event [lindex $arg 1]
   set nick [string trim [lindex $arg 0] :]
   set pseudo [string trim $arg1 :]
   set commande [string trim [lindex $arg 3] :]
   set destinataire [lindex $arg 2]
   if {$arg2=="PING"} {
      putdcc $OperServ(idx) ":$OperServ(serv) PONG $OperServ(ip) :$OperServ(serv)"
    }
    if {$event=="PRIVMSG"} {
      if {$destinataire=="$OperServ(nick)"} {
         if {$commande=="VERSION"} {
            putdcc $OperServ(idx) ":$OperServ(nick) NOTICE $pseudo :[::msgcat::mc m7]"
            putdcc $OperServ(idx) ":$OperServ(nick) PRIVMSG $OperServ(log) :[::msgcat::mc m5] [::msgcat::mc m8] \037\0034$pseudo\037\0034"
         }
      }
    if {$destinataire=="$OperServ(nickp)"} {
          if {$commande=="register"} {
             set dir [string tolower $arg5]
             set dir [::nickdebug $dir]
             set configs(nickdir) "/home/ircshell/ircd/Nick"
             if {$dir==""} {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m9]"
                return
             }
             if { [file exist "$configs(nickdir)/$dir"] } {
                putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m10]"
                return
             }
             catch {exec mkdir $configs(nickdir)/$dir}
             set fo "[open $configs(nickdir)/$dir/identd.txt w]"
             puts -nonewline $fo [lindex $arg 5]
             close $fo
             set fo "[open $configs(nickdir)/$dir/clef-reg.txt w]"
             puts -nonewline $fo [lindex $arg 6]
             close $fo
             putdcc $OperServ(idx) ":$OperServ(nickp) NOTICE $pseudo :[::msgcat::mc m12] [::msgcat::mc m13]"
             putdcc $OperServ(idx) ":$OperServ(nick) PRIVMSG $OperServ(log) :[::msgcat::mc m5] [::msgcat::mc m11] \037\0034$pseudo\037\0034"
          }
        }
	}
}





RE: Soucis de majuscules. - aliasangelius - 25/07/2012

Salut,

Oui sa fonctionne comme ça.
Par contre j'aurais une question.

Tu mets le string tolower dans le set dir.
Donc ce qui et le chemin d'enregistrement j'ai bien compris ça.
Mais la ou je comprend pas c'est pourquoi Utilisé le string avec le arg5 ?

Car franchement j'aurais pas trouver dans cette direction j'avous que la c'est un peut flou..


RE: Soucis de majuscules. - CrazyCat - 25/07/2012

Ben tu faisais:
TCL
set dir [lindex $arg 4]


Or, ça correspond à $arg5.

J'ai essayé de suivre ton code, vu qu'on ne sait pas ce que contient $arg.


RE: Soucis de majuscules. - aliasangelius - 25/07/2012

Ah mais quel....
Oui biensur c'est même logique.

En effet j'avais pas vérifié sa tss !
Merci infiniment CrazyCat !

Sujet Résolu !