Ce tutoriel est en faite un script commenté qui vous
permettra de créer des fonctions $fct (comme celle de mIRC)
Fonction
$users
Le but : mIRC propose l'option ulist qui liste en echo les users ayant des access
sur votre mIRC. Le probleme auquel nous somme confronté c'est que l'on ne peut
pas envoyé les reponses de notre requete vers un dialog par exemple, il faut donc
programmé une fonction proposant les memes options (voir plus) mais proposant
de definir la commande associé aux reponses (exemple : did -a $dname id).
Voici donc le code commenté:
La Syntaxe voulu de la fonction
$users(commande, [level],
[< | <= | == | => | >])
Soit cette userlist
ExeptFlood:*!*@service*
ExeptFlood:*!*cservice@undernet.org
10:Vlad!*bs706@*
10:Chanserv!*@service*
4:cobail!*bs706@*
1:test!*bs706@*
$users(echo -s) devra afficher sur la fenêtre status
tous les users de la list soit :
ExeptFlood:*!*@service*
ExeptFlood:*!*cservice@undernet.org
10:Vlad!*bs706@*
10:Chanserv!*@service*
4:cobail!*bs706@*
1:test!*bs706@*
$users(did -a dialog_dexemple id,10) devra ajouter
dans une liste (dialog) les users d'access égal à 10 soit :
Vlad!*bs706@*
Chanserv!*@service*
il faudra pouvoir également spécifier l'opérateur
$users(did -a dialog_dexemple id,4,>=) devra ajoute
dans une liste (dialog) les users d'access égal et supérieur à 4 soit :
*!*@service*
*!*cservice@undernet.org
Vlad!*bs706@*
Chanserv!*@service*
cobail!*bs706@*
à noter que les operateurs sur les strings devront également etre utilisables
(isin...) il faudra donc que l'opérateur soit une variable définissable par le
parametre 3 de la fonction
Voici donc le code
alias users {
; sauvegarde les paramètres actuel
; de mIRC dans les fichiers ini
; correspondant (donc
la userlist)
.saveini
; boucle lisant tous les users de la liste
var %inc.line = 0 | while
($readini($usersdir,users,n $+ %inc.line)) {
; vérifie les conditions initiales :
; si une recherche spécifique est
; demandée appelle l'identifieur
; ulevel sinon renvoie tous les
; users à la commande spécifiée
%tmp = $ifmatch | if
($2) { [
$ $+ [ ulevel $+ ( $2 , %tmp , $3 , $1 ) ] ] }
| else { $1 %tmp
} | inc %inc.line }
; [ $ $+ [ ulevel $+
( $2 , %tmp , $3 , $1 ) ] ]
; peut vous paraitre barbare,
; en faite cela permet d'appeler
; la fonction $ulevel
; par exemple si la commande souhaitée
; est 'echo -a' le level '10' et l'opérateur '<='
; et la ligne du user en cours de
; lecture ExeptFlood:*!*@service*
; soit la commande $users(echo -a,10,<=)
; cette ligne renvera
; $ulevel( 10 , ExeptFlood:*!*@service* , <= , echo -a )
; les [ ] exterme permette d'évaluer la
; fonction $ulevel
et ceux a l'intérieur
; d'évaluer les paramètres $* et variables %*
halt
}
; note : j'appelle un identifieur pour vous
; apprendre à
le faire, tout est faisable
; dans le meme alias
alias -l ulevel {
; verifie qu'un opérateur est spécifié si
;oui la variable %operator
prend sa
; valeur si non, la variable prend
la valeur '=='
%operator = $iif($3,$3,==)
; verifie que la comparaison level
; spécifié - level du user en
cours est
; vrai si oui renvoie le user
à la
; commande spécifiée dans le $users
if ($gettok($2,1,58) %operator $1) { $4
$gettok($2,2,58) }
; return est nécessaire pour continuer
; le traitement du while
de l'alias users
return
}
; identifieur renvoyant le chemin du
; fichier ou
se trouve les users
alias usersdir
{ return $readini($mircini,rfiles,n0) }
la fonction est sous la forme $fonction(paramatre1,param2,...)
pour des raisons de facilité
utiliser une fonction sous la forme: /fonction param1 param2
... implique de mettre des $gettok($1-,?,32)
pour recupérer les paramettres alors qu'avec $fonction(paramatre1,param2,...)
: $1 = param1 , $2 = param 2 etc
J'espere que cela vous aura aidé, n'hésitez pas à me demander d'expliciter certaines
parties du code si ce n'est pas clair.
Exemple rapidos
Copier simplement le code ci-dessous dans un remote vide
et taper /userlist [level] [opérateur]
alias userlist { .set -u1 %tmp.levelsearch $1 | set -u1 %tmp.operatorsearch $2 | dialog -m userlist userlist }
dialog userlist {
title "userlist"
size -1 -1 173 116
option dbu
list 1, 5 6 162 103, size
button "", 2, 68 67 1 1, hide ok
}
on *:dialog:userlist:init:0: { $users(did -a $dname 1, [
%tmp.levelsearch ] , [ %tmp.operatorsearch ] ) }
alias users {
.saveini
var %inc.line = 0 | while
($readini($usersdir,users,n $+ %inc.line)) {
%tmp = $ifmatch
| if ($2) { [
$ $+ [ ulevel $+ ( $2 , %tmp , $3 , $1 ) ] ] }
| else { $1 %tmp
} | inc %inc.line }
halt
}
alias -l ulevel {
%operator = $iif($3,$3,==)
if ($gettok($2,1,58) %operator $1) { $4
$gettok($2,2,58) }
return
}
alias usersdir { return $readini($mircini,rfiles,n0) }
©
|