Op/deop avec $mid et $left

doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011 - 6 nov. 2008 à 18:18
doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011 - 8 nov. 2008 à 21:18
Bonjour, j'ai fait un petit code pour op/deop/voice/devoice quelqu'un mais jepense que je ne gère pas encore assez bien $mid et $left car ça ne marche pas du tout, je n'ai aucune réponse de mirc, même pas une petite erreur :s
(l'alias botoff n'est pas de moi et je sais plus de qui il est, l'alias ircop viens d'une de mes précédente question)
Merci de m'aider.
Je vous met si dessous le code

Alias botoff {
  if ($me ison $$1) && ($server == ircvoila2.tchat.orange.fr)  {
    var %i = $nick($$1,0,o)
    while %i {
      if $regex($nick($$1,%i,o),^(Niubot0[0-9]|Niubot1[0-9]|Niubot2[0-9]|Niubot3[0-9])$) { return $regml(1) }
      dec %i
    }
  }
}
alias ircop return $iif(O isincs $usermode,1,0)
on *:input:*:{
if ($left($1-,1) == !) {
    if ($mid($1,2) == d)  {
      if ($mid($1,3) == o) {
        if (($me isop #) || ($ircop)) {
          if $2 == $null {
            mode # -o $me
          }
          else {
            mode $chan -o $2
          }
        }
      }
      if ($mid($1-,3) == v) {
        if $2 == $null || $me !isop # || $ircop || $me isvo # {
          mode # -v $me
        }
        if $2 == $null || $me !isop # || !$ircop {
          echo -a �3;4 Vous n'êtes pas @op
          haltdef
        }
        if $2 == $null || $me isop # || $ircop || $me !isvo # {
          echo -a �3;4 Vous êtes déjà devoice
          haltdef
        }
        if $2 != $null || $me !isop # || !$ircop {
          echo -a �3;4 Vous n'êtes pas @op
          haltdef
        }
        if $2 != $null || $me isop # || $ircop || $2 !isvo # {
          mode # -v $2
        }
      }
    }
    if (mid($1-,2) == o) {        if $server ircvoila2.tchat.orange.fr && $2 $null && $me !isop # {
        msg $$botoff(#) op $$?*="Entrez votre mot de passe Niubot"
      }      if $server !ircvoila2.tchat.orange.fr || $2 $null || $me !isop # || $ircop {
        mode # +o $me
      }      if $server !ircvoila2.tchat.orange.fr || $2 $null || $me !isop # || !$ircop {
        echo -a �3;4 Vous n'êtes pas @op
        haltdef
      }
      if $2 != $null || $me !isop # || !$ircop {
        echo -a �3;4 Vous n'êtes pas @op
        haltdef
      }
      if $2 != $null || $me isop # || !$ircop || $2 !isop # {
        mode # +o $2
      }
      if $2 != $null || $me !isop # || $ircop || $2 !isop # {
        mode # +o $2
      }
    }
    if ($mid($1-,2) == v) {        if $server ircvoila2.tchat.orange.fr && $2 $null && $me !isvo # && $me !isop {
        msg $$botoff(#) voice $$?*="Entrez votre mot de passe Niubot"
      }      if $server !ircvoila2.tchat.orange.fr || $2 $null || $me !isop # || $ircop {
        mode # +v $me
      }      if $server !ircvoila2.tchat.orange.fr || $2 $null || $me !isop # || !$ircop {
        echo -a �3;4 Vous n'êtes pas @op
        haltdef
      }
      if $2 != $null || $me !isop # || !$ircop {
        echo -a �3;4 Vous n'êtes pas @op
        haltdef
      }
      if $2 != $null || $me isop # || $ircop || $2 !isvo # {
        mode # +v $2
      }
    }
  }
}

10 réponses

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
7 nov. 2008 à 01:08
Tiens, l'alias botoff me rappelle quelque chose :-)
Pour ta question, je te conseille de ne PAS utiliser $mid tant que tu pourras. Je trouve ton code illisible : pourquoi faire des $mid de partout quand, en réalité, tu veux vérifier si $1 !dop, $1 !dv, etc. ? De plus, il me semble que $mid prend 3 arguments et non deux, mais je n'ai pas de mIRC sous la main pour tester.

Au pire, le meilleur conseil à te donner est comme pour beaucoup de langages de débugguer toi-même en mettant des echo partout : si tu n'es pas sûr d'une ligne ou d'une condition, tu mets juste avant un /echo qui va te montrer si ton "==" a des chances de fonctionner, et juste après un "/echo -a J'ai réussi à passer la condition 1 ! donc etc."

Bon courage,
0
doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011
7 nov. 2008 à 07:10
PaDa merci alors pour l'alias botoff lol.
Oui tu as raison je vais passer par les $1 == ... (j'aime me compliquer la vie en fait lol). J'ai déjà testé de mettre des echo de partout, mais je ne reçois pas leurs réponse lol. Pour le $mid tu as raison je viens de voir qu'il comporte 3 arguments ( J'ai la facheuse habitude de regarder l'aide mirc un peu trop tard :x)
Merci bonne journée.
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
7 nov. 2008 à 10:58
salut
meme si le $mid prend 3 arguments ça peu aller avec 2

dans ce cas ça compte de gauche a droite et continu la suite ^^

exp:

$mid(abcdef,3) return cdef

il va falloir faire $mid(abcdef,3,1) return c

utilise $nickmode qui return ohv

$mid($nickmode,3,1) return v
$mid($nickmode,2,1) return h
$mid($nickmode,1,1) return o

mais bref pour moi j'utilise les hashtables et un simple evenement avec tokenize et ça reduit trop de lignes et de repetition

exp:

on met dans la hashtable les donnée sous forme
!op§mode $chan +o $2§mode $chan +o $nick

comme tu peut utilisé $chr(167)

on *:text:*:#:{
  tokenize $1 $+ § $+ $2 $+ § $+ $hget(nom,$1)
  if ($1 == $3) $iif($2 != $null,$4,$5)
}


biensur tu dois fair un on start et mettre hmake nom et hload nom fichier

et là aulieu de plus de 80 ligne tu aura moin de 10 et aussi rapide et le reste sont dans la hashtable

NB: j'ai pas testé mais j'ai dejà eu a faire quelque chose de ce genre dejà le code est fait et clair a toi de voir la suite :)
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
7 nov. 2008 à 11:00
excuse moi j'avais pas fais attention j'ai oublié le separateur c'est plutot

on *:text:*:#:{
  tokenize 167 $1 $+ § $+ $2 $+ § $+ $hget(nom,$1)
  if ($1 == $3) $iif($2 != $null,$4,$5)
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 1
7 nov. 2008 à 13:22
Heu... Le mec il dit qu'il débute plus ou moins (en tout cas il apprend)... Il a du mal avec $mid() et $left() et tu viens lui balancer des tokenize et des hash tables sans rien expliquer...

Un peu comme si un mec balance un pattern d'une expression régulière qui fait 10 lignes sans en expliquer le fonctionnement. Bonjour pour la compréhension...

Franchement, dans un but pédagogique, ce serait bien qu'il arrive déjà à bien comprendre le fonctionnement des identifieurs de base avant de s'attaquer à la gestion des structures de données complexes non? ...

Vu la tronche du code qu'il nous donne là, il vaut peut-être mieux voir avec lui la démarche algorithmique avant de passer à la technique de réalisation...

Enfin bon, il va falloir que je me remette un peu la tête dans l'aide de mIRC parce que ça me paraît loin tout ça...
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
7 nov. 2008 à 16:09
"Le mec il dit qu'il débute"

bah moi en voyant l'alias botoff je me dis pas qu'il est debutant moi je suis un debutant je n'utilise pas encore des regex dans mes codes :/


et un simple /help /tokenize et /help $hget pourra l'aidé en tan que quelqun qui fais de regex pareil nn?
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
7 nov. 2008 à 16:11
Serais tu nostalgique de ce merveilleux 'langage' :) !?

Sinon, c'est evident qu'il ne faut pas utiliser $mid (cf Pada) et que lui donner un code  (meme si super), niveau pedagogie, c'est jamais bien (cf Tofu)

Et WorldDMT, meme si ca parait tres gros, ton on text n'est qu'un vicieux code insecurise, la maniere dont il est ecrit permet d'executer nimporte quoi si l'on est intelligent.J'ai surement mal compris mais je pense que :

if ($1 == $3) $iif($2 != $null,$4,$5)

Si $1 == $3, ca implique que $1 != $null et que $3 != $null DONC que $2 != null, ce qui rend la condition inutile et donc le code faux ou illogique :/

Quelque truc pour faire chier :

if ($me ison $$1) && ($server == ircvoila2.tchat.orange.fr)  {
    var %i = $nick($$1,0,o)

si $1 n'existe pas, alors des la ligne du if, on arretera le code, remettre $$1 ds le /var n'est pas utile (idem ds le regex)

Et :

if $regex($nick($$1,%i,o),^(Niubot0[0-9]|Niubot1[0-9]|Niubot2[0-9]|Niubot3[0-9])$) { return $regml(1) }

pourquoi pas :
if $regex($nick($1,%i,o),^(Niubot\d+)$)
ou un truc du style (je suis pas sur que cette correction soit juste mais c'est l'idee qu'il faut voir.)
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
7 nov. 2008 à 16:12
WorldDMT, si tu relis bien tout les commentaire, tu comprendra que c'est Pada qui est a l'origine de l'alias botoff
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
7 nov. 2008 à 16:50
oui WIMS t'a raison pour le code :)

j'avais dis que j'avais pas testé mais bon je corrige

nom = nom
item = com

on @*:text:*:#:{
  if ($1 == $gettok($hget(nom,com,$1),1,167)) {
    $iif($2 != $null,$gettok($hget(nom,com,$1),2,167),$gettok($hget(nom,com,$1),3,167))
  }
}
0
doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011
8 nov. 2008 à 21:18
bonsoir
@Wims
if $regex($nick($1,%i,o),^(Niubot\d+)$) << le d+ corresponds à quoi? un identifieur pour les chiffres?
@WorldDMT
l'alias botoff n'est pas de moi
!op§mode $chan +o $2§mode $chan +o $nick << §mode j'ai pas tout compris a quoi cela sert :s désolé
de plus moi et les hashtable on est pas très copain lol, d'habitude je les fait faire par un amis mais la j'ai vraiment le désir de dévelloper seul mon apprentissage de mirc.
@tofu
Je "re"debute lol j'ai déjà fait pas mal de chose mais je n'étais pas seul on me guidais.
0
Rejoignez-nous