Vos identifiants
Bienvenue
Voir tous les scripts
Pour mirc 6.1 et moins
Pour mirc 6.2
Pour mirc 6.3
Pour mirc 7.1
Top 10
Vous aimez ou détestez
Soumettre un script
Foire aux questions
Forum de discussion



Les bases du Scripting
Le virus "irc.worm.gen"
Le mIRC D'Or
Snippets
ScreenShots
Le Défi du moment
Tag-moi-ça
Le Pire de l'IRC
L'IRC pour les nuls
Configurer UnrealIRCD
Configurer votre box
Attention à l'arnaque!
Usenet et les News
Arrêter de fumer
Un peu d'orthographe
Unreal/Anope Admin
mIRC Script Server
Proxy Web Chat
Magneto for Unreal
Super Poupées
Tour de cartes
L'Equipe
Partenariat
Administration

Web Of Trust
www.chat.exolia.net (Francophone)
fantasya.org (Francophone)

                                            

Créer des fonctions de type $fct()

Article soumis par Vlad le 14/10/02

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) }

© Babylon Scripting - 2002 Vlad



Réagir à cet article (2 commentaires)

Titre de l'article Date d'édition Auteur Comm
Différence entre un bot client et un bot de service 01/08/02 Averell 8
Le link entre serveurs - comment ça marche 29/09/02 Averell 1
Créer des fonctions de type $fct() 14/10/02 Vlad 2
Les expressions régulières 9/03/03 Averell 1
Avoir le Saint du jour - Snippet 15/11/04 Vestax 1
Un script open-source 2/2/08 Averell 2


Retour à la page des tutoriaux