WHOIS CHAN SÉQUENTIEL

ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014 - 13 déc. 2007 à 12:35
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 - 18 déc. 2007 à 17:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45030-whois-chan-sequentiel

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
18 déc. 2007 à 17:36
Il y a également un autre "avantage" qui je crois n'est pas décrit dans l'explication de TropNul : les variables locales ont priorité sur les globales du point de vue de mIRC.
C'est à dire que quand tu écris "%variable", mIRC va d'abord chercher si une variable locale de ce nom existe. Si non, il cherchera dans les variables globales.

Alias blah1 {
set %x Je suis globale
blah2
}
Alias blah2 {
echo -a 1:: %x
var %x = Je suis locale
echo -a 2:: %x
}

Ca permet donc en particulier de concevoir des scripts qui ne vont pas rentrer en conflit avec d'autres remotes qui utiliseraient les mêmes noms de variables : si tu utilises le plus possible des locales, tu es sûr 1/ de ne pas écraser une variable d'un autre remote dans le script de la personne, 2/ de ne pas lire une valeur qui viendrait d'un autre remote et donc avoir des comportements innatendus.

Attention cependant. Les variables locales ne sont connues que dans l'alias où tu les utilise. Elles ne sont pas connues dans les aliases appelés depuis ton premier alias, comme on pourrait s'y attendre.

Je termine en faisant remarquer que "dans le monde mIRC", les scripteurs ont l'habitude de très très peu utiliser les variables globales, pour les raisons évoquées ci-dessus. Quand ils ont besoin d'une "variable" qui resterait et serait accessible partout, ils font en général autrement (stockage dans un fichier .ini ou hashtable en général)

Bonne continuation
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
18 déc. 2007 à 17:22
Merci beaucoup TropNul, excellente explication !!!! sincèrement merci beaucoup pour cette réponse complète, je tâcherai d'en tenir compte lors de mes prochains codes.
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
18 déc. 2007 à 17:15
Il existe 2 sortes de variables. L'une etant 'locale', l'autre 'globale'. Il faut etre attentif lors de la programmation afin de savoir ou utilises des globales, et ou utiliser des locales.

Les variables globales doivent etre utilisees uniquement et si et seulement si la variable doit toujours exister meme a l'exterieur de la fonction (alias) ou elle a ete creee. Apres leurs creation, elles resteront dans la memoire tant que l'utilisateur/le programmeur n'aura pas ordonne leurs 'destruction'.

Les variables locales ne peuvent exister hors du champ d'application de la fonction (alias) ou elles ont ete creees. Cela permet de ne pas surcharger la memoire car elles se 'detruisent' d'elles memes apres l'execution de la fonction.

Dans le langage mIRC, pour creer une variable globale, il faut utiliser la commande < /set %nom > et pour creer une variable locale, il faut faire < /var %nom OU /set -l %nom >

Voyons quelques exemples.

alias globvar {
If %test { unset %test }
set %test salut toi
echo -s %test
}

alias locvar1 {
If %test { unset %test }
var %test = salut toi
echo -s %test
}

alias locvar2 {
If %test { unset %test }
set -l %test salut toi
echo -s %test
}

Executes ces alias et apres chaque execution, regarde dans les variables de mIRC. Si %test existe, alors la variable est globale. Autrement, elle etait locale. :)

J'espere que tout cela t'aidera a mieux cerner les 2 concepts de variables globales et locales.

Cordialement.
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
18 déc. 2007 à 10:04
en fait pour tout te dire hisoka2501, je decouvre a peine les hashtable, donc j'avais pas pensé pour ce type de programme.
En ce qui concerne les timer, impossible de mettre un timer sur mon script (nnscript).
J'ai essaté pleins de truc ca me fou une erreur a chaque fois. Donc j'ai fait un truc qui fonctionnait chez moi. apres je suis totalement d'accord qu'il n'est pas optimal.
j'espere que mes prochains codes seront mieux, je compte bien progresser.

quelle est la difference entre set et var ? parce que les deux ont la meme fonction au final non ?
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
17 déc. 2007 à 22:03
pour ce genre de choses par pitiée utilisez au moin les hash tables, au pire les /var
mais pas de /set !!!
la fonction pause me gene VRAIMENT beaucoup

j'aurais plutot vu un timer qui appele une fonction qui a la fin de son traitement rappele un autre timer (un timer a la fois)
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
16 déc. 2007 à 16:09
merci beaucoup pour ces précisions, en effet c'est beaucoup plus simple comme cela !
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
16 déc. 2007 à 15:36
C'est une notation courte pour les "if".

Je te donne un exemple plus parlant :

if (condition) {
set %x 1
}
else {
set %x 2
}

Peut s'écrire :
set %x $iif(condition,1,2)

Ca fait plus court, et une fois qu'on a pris l'habitude, pour certaines choses simples, c'est beaucoup plus lisible.
Il ne faut cependant pas l'utiliser à tord et à travers et finir avec des lignes de 50 conditions de long...
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
16 déc. 2007 à 13:55
Merci à toi RCA ArKanis,

même si je suis pas un bon codeur ca fait plaisir de recevoir des compliments.
Promis j'essaierai de faire un truc plus utile la prochaine fois :p
et merci encore pour tes conseils.
En revanche comment traduire en français le "$iif($1 ischan,$1,$active)"
Je n'ai jamais utilisé ce genre de notation, pourrais-tu me l'expliquer s'il te plait ?
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
16 déc. 2007 à 00:58
très très très loin d'être le pire code d'ircfr ...
perso j'en vois pas l'utilité, mais ça n'a pas l'air d'être si mal codé ...


echo @WhoResult $timestamp
devient :
echo -t @WhoResult

;###################### dans la section Alias ######################
alias setchan {

j'en doute ...
tu devrais tout mettre dans la section Remote, c'est tellement plus simple à installer ^^

au passage, ton alias setchan est très largement optimisable ... De plus, ce n'est pas $2 mais $1
alias setchan var %channel = $iif($1 ischan,$1,$active)

Dernier détail : tu n'utilises même pas cet alias dans ton code ...

tu devrais enlever les / restants

bravo pour ton orthographe et ta grammaire, ça fait vraiment plaisir à voir :) (au passage, je ne te complimente pas ircland :()
très bonne continuation, tu es un des rares qui le mérite vraiment ces derniers temps !
ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
13 déc. 2007 à 22:06
ah oui une chose, pour dizaine, si on veut changer lesalon on doit modifier bcp de ligne genre :

14 : set %nbrnick $nick(#dizaine,0)
18 : echo -a 8 [INFO]  - 3 Debut du whoischan sur dizaine !
20 : var %nicktest = $nick(#dizaine,%i)
21 : set %chanwho dizaine
29 : echo -a 8 [INFO]  - 3 Fin du whoischan sur dizaine !

tu aura pu que remplacer ca par %channel

et puis tu set le channel part :
alias setchan {
if ($2 == $empty) {
%channel = $active
}
else {
%channel = $2
}
}
ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
13 déc. 2007 à 21:56
Bon ok, un peu abusé Pire script de ircfr, mais quand meme, il est plutot mal concu ton script.
Si tu veux, vien visité MoteurProg.com dans la section irc, tu pourra posé tes question et
on sera plusieurs a te repondre!
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
13 déc. 2007 à 17:58
L'idee de faire un whois toutes les X secondes/millisecondes est bonne et je suis sur que ca tombe dans la categorie des "Ca peut servir, donc je garde".

Par contre, tu devrais le faire un peu plus generaliste. Que ca fonctionne pour tous les serveurs (donc, a oublier la verification de l'age), et cela en faisant uniquement un systeme de queue de whois.

J'en avais fait un pour un antispam y'a de ca des mois... J'avais utilise uniquement un timer toutes les 5 secondes qui se redeclenchait des lors que la RAW 318 (pour 'end of whois' je crois (meaculpa si ce n'est pas celle-la (pas le temps de verifier (mais vous voyez l'idee ;) )))) et donc nul besoin de faire une 'pause' avec les COM objects (bien que c'est sympa pour apprendre les COM objects ;) ).

A toi de voir maintenant pour les modifications pour 'generaliser' ta source ainsi permettant a beaucoup plus de monde de l'apprecier.

Cote optimisations, il y'en a plusieurs:

(1) Indente tes codes correctement, que l'on puisse au moins lire rapidement ceux-ci. (ce n'est pas une optimisation mais plus de l'esthetisme ;) )

(2) Les '/' ne sont pas necessaires pour appeler une commande.
e.g: /echo @WhoResult $timestamp 8 %nickwho - 4 %asvwho  ( %chanwho )
devient
echo @WhoResult $timestamp 8 %nickwho - 4 %asvwho  ( %chanwho )

(3) Lorsque tu as besoin de variables qui seront utilisees uniquement dans l'evenement/la fonction appelant(e), nul besoin d'en faire des globales. Preferes plutot des variables locales. Ainsi

set %nickwho $6
set %asvwho $9
set %maskbanwho $4
set %fullasvwho $9-

devient
var %nickwho $6 , %asvwho $9 , %maskbanwho = $4 , %fullasvwho = $9-

ou meme

set -l %nickwho $6
set -l %asvwho $9
set -l %maskbanwho $4
set -l %fullasvwho $9-

(4) nul besoin de faire

set %nbrnick $nick(#dizaine,0)
var %i = 1
var %MAX = %nbrnick

Fais plutot
var %i 1 , %MAX $nick(#dizaine,0)

Voila pour le moment :)

Cordialement,
tropnul
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
13 déc. 2007 à 14:43
alors je vais expliquer le topo ... one more time :s

donc je suis sur 2 tchat .. les deux ont un salon "dizaine" réservé aux mineurs pour un serveur et pour les -20ans pour l'autre serveur.
avec mes 23 piges je vais dragouiller de la petite jeunette mineur...
le but si tu y penses un peu c'est de detecter les mecs de 40 piges qui viennent sur ces salons pour ados ...
et pourquoi je le fais pas sur les on join ? ... reponse plus haut dans les commentaires.
kakulupia44 Messages postés 6 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 15 décembre 2007
13 déc. 2007 à 14:38
humm qu'elle est l'utilité de savoir l'age des users
ah si ses pour mieux dragué sinon je vois pas trop a quoi sa sert ton truc
enfin bon
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
13 déc. 2007 à 14:04
Ok merci pour ces explications
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
13 déc. 2007 à 13:33
oui tout a fait pada, je vais m'expliquer.
Je frequente actuellement 2 réseaux.
Le premier m'affiche l'asv que les gens ont remplis par l'applet du site correspondant. donc facile de voir l'age.
Le deuxieme affiche un asv formaté un peu bizarre mais la encore l'age est toujours a la meme place.
Evidement ce script ne fonctionne pas pour les personne passant par mirc.
Il est destiné aux Ops de site ou les utilisateurs passent majoritairement par applet.

Pour le reseau 1, le realname affiche : 17 M 75 par exemple
pour le reseau 2, le realname affiche : 17M00275

Dans tous les cas je retrouve l'age en premier donc facilement repérable.
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
13 déc. 2007 à 13:28
Je ne comprends pas ce code.. j'ai pas tout lu, ni le commentaire précédent, mais il est adapté pour quel réseau ? Je vois qu'il y a une histoire d'age avec le /whois, je ne vais sur aucun réseau qui donne l'age de ses utilisateurs, peux-tu au moins expliquer un peu ?
watchmeimfamous Messages postés 7 Date d'inscription dimanche 5 novembre 2006 Statut Membre Dernière intervention 18 décembre 2007
13 déc. 2007 à 13:16
huh un peu assassin .... mais bon j'accepte les critiques volontier.
La fenetre s'ouvre dans mon script au demarrage avec comme tu dis le on start. mais je l'ai mis pour que la personne le mette en c/c sur son script.
En ce qui concerne un autre salon que dizaine il suffit de changer #dizaine .. et non pas refaire tout le script .. et changer le >19 par un autre truc.
les pauses sont faites car le script execute trop vite les /who et ne retient pas les asv.
en ce qui concerne les onjoin, je suis d'accord, tu peux gerer ca avec un on join mais si tu le fait sur 50 salons ton script rame a mort.
autant le faire de temps en temps ... enfin je prefere perso.
en ce qui concerne le fait d'etre ircop ou pas ca depend. J'ai mis ca car souvent les bots sont réunis sur un salon en +O ... donc ca aide pour le filtre.
effectivement je suis débutant et j'utilise ce script. Il me convient et peut etre que d'autre personnes aimeront. dsl si ce n'est pas le cas pour toi ... on ne peux pas plaire a tout le monde. Mais de la a qualifier de pirecode de ircfr ... bon c'est peut etre un peu excessif ... ya largement pire ...
mais bon comme je dis je suis ouvert aux critiques et ca me derange pas. Merci d'avoir pris la peine de me donner ton avis.
ircland Messages postés 99 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 9 septembre 2014
13 déc. 2007 à 12:35
Le pire script de Ircfr, le code et l'utilisation parrait que ca vien d'un débutant.
Le script fonctionne que sur le salon dizzaine... si on veut le changer on doit tous refaire,
si ya un Robot... faut lui mettre l'ASV dans le code... ce qui est aucunement pratique,
Ya souvent le nom du bot dans son asv genre: $nick $+ , Robot de gestion. ou un truck du genre...
peut importe c'est totalement ouf ton truck... Les utilisateurs doivent eux meme ouvrir la @window
avec une commande plutôt stupid : /window -zg0nk0e @WhoResult 0 0 825 560 tahoma 13
juste faire alias ouvre { /window -zg0nk0e @WhoResult 0 0 825 560 tahoma 13 }
serai deja bien mais encore... on *:start: { /ouvre }
et a chaque commande tu t'assure que la fenetre est ouverte et sinon tu l'ouvre....
je comprend pas l'utilité de la fonction pause si ton script fait que whois les personnes d'un salon...
ca prend pas une journée c'est quelque milisecondes si tes ircop ou peut etre quelque seconde si tu
es un user normal...
Pourquoi ne joue tu pas avec les joint et asv au lieu de tjs who... quand y join tu check direct si
ya l'age requise pour etre là...

Bref, je te donne 1/10 et je suis généreux!
Rejoignez-nous