Lire et comparer un endroit précis d'une ligne dans un .txt ?

Résolu
Signaler
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009
-
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009
-
hello



Je fait une except list ( ou liste d'amis) sous mdx dans laquelle s'affiche les pseudos avec une ptite icone devant.

Cette list servira à stocker les personnes que mes protections de salons ne devront pas prendre en compte

J'ai juste un petit soucis

Avec la commande write central/friend/ami.txt $did(4) $address($did(4)(#,1),3)

( $did(4) étant l'edit du dilaogue ou l'on entre le pseudo qui s'affichera dans la list)

Par exemple pour le pseudo pepito ca écrit bien dans le fichier ami.txt une ligne :

pepito *!*lol@*.proxad.net ( il y a donc un espace entre le pseudo et le mask).

Mon dialogue affiche donc bien que le pseudo
(pour une facilité de reconnaissance des personnes que l'on aura mis
dans cette except liste) et aussi le mask mais uniquement dans le
fichier ami.txt , car baser l'except liste sur le pseudo uniquement
n'étant pas fiable (suffit que l'user pepito change de nick pour x
raison et hop il ne sera plus pris en compte) la reconnaissance la
meilleure pour moi reste donc le mask pour que les protections evitent
de kick ou ban



Ma question est donc : comment faire un code qui lit dans le fichier ami.txt et compare non pas le pseudo mais le mask
de l'user pour que les protections evitent les users protégés (suivant
un alias que j'incorporerais dans mes protections de salons)

12 réponses

Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
Voilà ce que j'ai testé et qui fonctionne (ArKanis pourra confirmer :()

/Write ami.txt ArKanis *!*Arka@*.by.Rockweb.org

on *:text:list:#: if ($read(ami.txt,w,$+(*,$address($nick,3),*))) msg # kikoolol $nick !

Après vérifie si tu as pas un on text dans la même remote...
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
quand tu write , il suffit de separé le pseudo du mask par un token et
ensuite $token($read(tonfichier,N),1,C) retournera le pseudo dans le
fichier

$token($read(tonfichier,N),2,C) retournera le mask de ce pseudo =)

ou C est le token

le write serais comme ca write central/friend/ami.txt $+($did(4),C,$address($did(4),3))
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
euh, $read(central/friend/ami.txt,w,*mask*) te retounera la ligne où se trouve mask, sinon retournera rien :)
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

En gros ce que je veux c'est que lorsque mon bot doit kick il y ait une
ligne qui avant de le faire : lise le mask de l'user avec quelque chose
comme je crois : $address($snick(#,1),3)

Et compare avec les mask se trouvant dans ma liste d'amis , et si oui il kick pas la personne , sinon il la kick



en gros si par exemple mon bot veux kick l'user

pepito lol@blabla-*-**-**-**-*.fbx.proxad.net



Et que dans ma liste ami.txt j'ai justement l'user pepito *!*lol@*.fbx.proxad.net

Pas de kick

Ca serait donc quelque chose comme : if $read(central/friend/ami.txt,w,*mask*) == $address($snick(#,1),3) halt (ou l'inverse).

(Vue qu' il y a plusieurs lignes dans mon fichier ami.txt parce que il
y a plusieurs pseudos avec leur mask dedans il faut que le code cherche
dans tout le fichier ,ca ne doit pas être tout à fait ca...
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
if $read(central/friend/ami.txt,w,$+(*,*!*lol@*.fbx.proxad.net,*))

Si ça te retourne quelque chose, ça te donnera:

pepito *!*lol@*.fbx.proxad.net

Donc si $gettok($ifmatch,1,32) = pepito, tu kick pas

($gettok(phrase blabla,1,32) te retournera phrase)
($ifmatch = la valeur de ton dernier "if")
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

La syntaxe que tu me donne est pour comparer si l'user sur le canal qui va être kické est dans ma liste via son nick :

$gettok($ifmatch,1,32) = pepito

Moi c'est pas ce que je veux ,si i la changé de
pseudo en autre chose ca ne correspondra pas , je veux pas que ca
comapre et trouve si le mask se trouvant dans ami.txt est celui de
pepito , mais si le mask de pepito est dans la liste ami.txt

Je veux juste que la variable lise le mask de pepito , lise les mask se
trouvant dans la liste ami.txt et que si c'est le cas il kick pas



exemple : si bot veut kick pour flood : analyse du mask de l'user , comparaison des masks se trouvant dans la liste ami.txt , trouvé = pas kick
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
donc ça revient à ma première réponse...



euh, $read(central/friend/ami.txt,w,*mask*) te retounera la ligne où se trouve mask, sinon retournera rien :)

Bien entendu, faut remplacer mask par ce que tu veux rechercher...

As-tu testé au moins ?
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

Pour test j'ai fait ca parmis d'autres éssais basés sur vos conseils et ce que moi je tente aussi :



on *:text:!list:#:{

Var %i = 1

While (%i <= $lines(central/friend/ami.txt)) {

if
$istok($address($snick(#,1),3)(central/friend/ami.txt),$strip($gettok($1-,%i,32),182)
$true) { /msg # Bienvenue4 $nick Tu est dans ma protect liste }

inc %i

}

}



Ce qui devrait renvoyer le msg sur le salon si le mask du pseudo disant
!list se trouve dans la liste ami.txt , mais ce n'est pas le cas , rien
à faire je n'arrive pas à mettre en pratique la comparaison du mask de
l'user avec ceux se trouvants dans ma liste ami.txt
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

Heuuu opssss c'est pas le bon j'en suis a celui la



on *:text:!list:#:{

Var %i = 1

While (%i <= $lines(central/friend/ami.txt)) {

if
$istok((central/friend/ami.txt),182),$gettok($address($snick(#,1),3) ==
$true) { msg # Bienvenue $nick 3Tu est dans ma protect liste }

inc %i

}

}



Mais qui de toute facon ne marche pas
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
et si tu testais ça:

on *:text:!list:#: if ($read(central/friend/ami.txt,w,$+(*,$address($nick,3),*))) msg # bienvenue $nick tu es dans ma protect liste
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

Niet
Messages postés
288
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
14 février 2009

je Viens de tester effectivement la ca marche , reste à l'appliquer pour a véritable utilisation

Je suis surpris que il n'y ai pas besoin de plus de codes pour par
exemple scruter le fichier ami.txt en passant d'une ligne à la suivante
avec un Var %i = 1

While (%i <= $lines du fichier etc..

Mon fichier contient plusieurs users déja , donc une ligne pour chaque
, mais pourtant le code fonctionne bien si la personne est dedans via
son mask quelque soit la ligne ou il se trouve , et ne réagis donc pas
si la personne se trouvant sur le canal n'est pas dans cette liste ,
donc c'est à prioris ok

Pareil le fait de ne pas voir de code de comparaison ou de vérification
du mask user et mask étant dans ami.txt via un token ou gettok ou isin
m'étonne

Bref je le test à fond et si il s'avere totalement opérationnel tu gagne un accept