Système de commande en masse avec délai

Description

__________________________________
Mass.Commands.System version 1.1.1
10.06.2007 par TropNul
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
___________
Description
¯¯¯¯¯¯¯¯¯¯¯
Ce système de commande en masse va vous permettre de faire, au choix:
un mass OP(+o), un mass DEOP(-o)
un mass VOICE(+v), un mass DEVOICE(-v)
un mass HALFOP(+h), un mass DEHALFOP(-h)
un mass EXCEPTION(e), un mass INVITATION (I)
un mass OWNER(+q), un mass DEOWNER(-q)
un mass ADMIN(+a), un mass DEADMIN(-a)
un mass KICK(k), un mass KICKBAN(kb)
un mass BAN(b)
_____________________
Syntaxe d'Utilisation
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
/MassComSys.Main <paramètre1> <paramètre2> [paramètre3] [paramètre4] [paramètre5]
/MassComSys.Main [+|-]<aeIqovhkb|kb> <délai{100-1500}|d> #nomdusalon [type] [raison]

Pour le délai, il faut préciser soit un nombre dans l'intervalle 100-1500 ou la lettre d
______________________
Type de ban par défaut
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
2 (*!*@hôte.domaine)
___________________________
Type d'Exception par défaut
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
2 (*!*@hôte.domaine)
_______________________________________
Type de masque pour l'Invite par défaut
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
2 (*!*@hôte.domaine)
_________________________
Raison de kick par défaut
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Pas de raison
___________________________________
Délai en chaque commande par défaut
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
0.5 sec (500 ms)
_______________________
Toutes les possibilités
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
/MassComSys.Main +v 500|d #salon
/MassComSys.Main +v 500|d
/MassComSys.Main -v 500|d #salon
/MassComSys.Main -v 500|d
/MassComSys.Main +o 500|d #salon
/MassComSys.Main +o 500|d
/MassComSys.Main -o 500|d #salon
/MassComSys.Main -o 500|d
/MassComSys.Main +h 500|d #salon
/MassComSys.Main +h 500|d
/MassComSys.Main -h 500|d #salon
/MassComSys.Main -h 500|d
/MassComSys.Main k 500|d #salon parce que
/MassComSys.Main k 500|d parce que !
/MassComSys.Main b 500|d #salon 2
/MassComSys.Main b 500|d #salon
/MassComSys.Main b 500|d 3
/MassComSys.Main b 500|d
/MassComSys.Main kb 500|d #salon 5 parce que !
/MassComSys.Main kb 500|d #salon parce que !
/MassComSys.Main kb 500|d 2 parce que !
/MassComSys.Main kb 500|d parce que !
___________________________________________________________________
Et pour les serveurs qui le permettent, s'ajoutent les possibilités
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
/MassComSys.Main +q 500|d #salon
/MassComSys.Main +q 500|d
/MassComSys.Main -q 500|d #salon
/MassComSys.Main -q 500|d
/MassComSys.Main +a 500|d #salon
/MassComSys.Main +a 500|d
/MassComSys.Main -a 500|d #salon
/MassComSys.Main -a 500|d
/MassComSys.Main e 500|d #salon 2
/MassComSys.Main e 500|d #salon
/MassComSys.Main e 500|d 3
/MassComSys.Main e 500|d
/MassComSys.Main I 500|d #salon 2
/MassComSys.Main I 500|d #salon
/MassComSys.Main I 500|d 3
/MassComSys.Main I 500|d
___________
Généralités
¯¯¯¯¯¯¯¯¯¯¯
1. Toutes les commandes sont MANUELLES pour des raisons de sécurité.
2. Pour le délai, il faut préciser soit un nombre dans l'intervalle 100-1500 ou la lettre d

Source / Exemple :


; ----------------------------------------------
; Mass.Commands.System-v1.1.1@10.06.2007@TropNul
; ----------------------------------------------

; Gestion & Afichage des erreurs
Alias MassComSys.Error {
  If ($1 == nochan) && $2 {
    Echo -atei9 Pas sur le salon ou format du nom de salon incorrect $+($chr(3),06,$2,$chr(3)) !
  }
  ElseIf ($1 == notop) && $2 {
    Echo -atei9 Vous n'êtes pas opérateur sur le salon désiré $+($chr(3),06,$2,$chr(3)) !
  }
  ElseIf ($1 == nopar) && $2 {
    Echo -atei9 Le paramètre $+($chr(3),06,$2,$chr(3)) est incorrect ! Utilisez /MassComSys.Main [+|-]<aeIqovhkb|kb> <délai{100-1500}|d> #nomdusalon [type] [raison]
  }
  ElseIf ($1 == nodlay) && $2 {
    Echo -atei9 Le délai précisé en second paramètre est incorrect $+($chr(3),06,$2,$chr(3)) !
  }
  Halt
}

Alias MassComSys.Main {
  ; Initialisation ...
  Var %i = 1 , %a = $null , %b = $null , %r = $null , %t = $null , %k = $modespl
  Var %u = $null , %z = $null , %l = $null , %f = $null
  ; Création(si non existante) de la table où sera mise en attente les commandes de masse
  If !$hget(MassCommS) { Var %z = 1 | MassCommSys.Load }
  Else { Var %z = $calc($hfind(MassCommS,/^(\d+)/i,0,r) +1) }
  ; %x est le temps en millliseconde du délai observé entre chaque commande mise en attente
  If ($2 isnum 100-1500) { Var %x = $2 }
  ElseIf ($2 == d) { Var %x = $hget(MassCommS,delay) } 
  Else { MassComSys.Error nodlay $2 }
  If $3 {
    ; Si le troisième paramètre est un nom de salon où vous êtes, il est pris comme le salonCible
    If ($3 ischan) { Var %c = $ifmatch }
    ; Si le troisième paramètre est un nombre, allouer localement comme étant le type de ban voulu à appliquer ultérieurement
    ; Dans cette même condition, allouer à %r la raison de kick, si l'appel est un masskick
    ElseIf ($3 !ischan) && ($3 isnum) {
      Var %t = $3 | If $4- { Var %r = $+(:,$4-) }
    }
    ; Sinon, produire une erreur
    Else { MassComSys.Error nochan $3 }
  }
  ; Si le troisième paramètre n'existe pas
  ElseIf !$3 {
    If ($active ischan) { Var %c = $ifmatch }
    Else { MassComSys.Error nochan null }
  }
  ; %j contient le nombre de pseudo sur le salonCible  
  Var %j = $nick(%c,0)
  ; Si vous n'êtes ni opérateur ni ircop, produire une erreur !
  If ($me !isop %c) && (o !isin $usermode) { MassComSys.Error notop %c }
  ; Si le quatrième paramètre est un nombre, allouer localement comme étant le type de ban voulu à appliquer ultérieurement
  ; Dans cette même condition, allouer à %r la raison de kick, si l'appel est un masskick
  If ($4 isnum) { Var %t = $4 | If $5- { Var %r = $+(:,$5-) } }
  ElseIf $4- { Var %r = $+(:,$4-) }
  ; Vérification que le mode demandé soit connu.
  If $regex($1,/^([+-][aohqv]|[eIkb](?(?<=k)b?))$/i) {
    ; Sauvegarde du mode dans %l
    ; %f contient la condition qui sera vérifiée avant d'appliquer les modes
    Var %l = $1 , %f = $replace(%l,+o,!isop,+h,!ishop,+v,!isvoice,-v,isvoice)
  }
  ; Autrement, produire une erreur !
  Else { MassComSys.Error nopar 1 }
  ; Si le commande voulue est un ban en masse et que le type n'est toujours pas connu à ce niveau, allouer comme défaut == 2
  If (b isin %l) && !%t { Var %t = 2 }
  ; Maintenant, création des listes de pseudos/d'adresses qui seront mises en attente avec les modes voulus !
  While (%i <= %j) {
    Var %Nck = $nick(%c,%i)
    Var %Add = $address(%Nck,2)
    If !$MassCommSys.Find(%Nck).nick && !$MassCommSys.Find($gettok(%Add,2,64)).addr {
      If $regex(%l,/^([eIkb](?(?<=k)b?))$/i) {
        If (%Nck != $me) && (%Add != $address($me,2)) && (%Nck !isop %c) && (%Nck !ishop %c) {
          If (%l == k) { Var %a = %Nck $+ $chr(44) $+ $iif(%a,%a) }
          ElseIf $regex(%l,/^[eIb]$/i) { Var %a = $address(%Nck,%t) $+ $chr(32) $+ $iif(%a,%a) }
          ElseIf (%l == kb) {
            Var %u = $address(%Nck,%t) $+ $chr(32) $+ $iif(%u,%u)
            Var %a = %Nck $+ $chr(44) $+ $iif(%a,%a) $+ $iif(%u,$chr(59) $+ %u)
          }
        }
      }
      ElseIf $regex(%l,/^(-[aohq])/i) {
        If (%Nck != $me) && ($address(%Nck,2) != $address($me,2)) {
          Var %a = %Nck $+ $chr(32) $+ $iif(%a,%a)
        }
      }
      Else {
        If (%Nck $iif(%f,%f,isreg) %c) { Var %a = %Nck $+ $chr(32) $+ $iif(%a,%a) }
      }
      ; La condition suivante vérifie en fonction de $modespl (%k) qu'un multiple de %k est atteint
      ; et que %a contient au moins un item !
      If !$calc(%i % %k) && %a {
        Var %Itm = $+(%z,$chr(59),%c,$chr(59),%l,$iif(%r,$chr(59) $+ %r))
        Var %Dat = %a
        Inc %z
        HAdd MassCommS %Itm %Dat
        Var %a = $nick(%b,%i) , %u = $address($nick(%b,%i),%t)
      }
    }
    Inc %i
  }
  ; S'il reste toujours des items dans %a après la boucle, les gérer ici !
  If %a {
    Var %Itm = $+(%z,$chr(59),%c,$chr(59),%l,$iif(%r,$chr(59) $+ %r))
    Var %Dat = %a , %a = $null , %u = $null
    Inc %z
    HAdd MassCommS %Itm %Dat
    HAdd MassCommS MAX %z
  }
  ; Génération du compteur de queue si non existant et appel de " MassCommSys.Proc "
  If !$timer(MassComm) { .TimerMassComm -m 0 %x MassCommSys.Proc }
}

Alias MassCommSys.Proc {
  Var %e = 2 , %f = $hget(MassCommS,MAX)
  ; Cette fonction va chercher tant que la table contiendra plus de 2 items, le premier item !!
  ; Précisément, l'item nommé 1*
  If $hfind(MassCommS,1 $+ *,1,w) {
    Var %It = $ifmatch , %Da = $hget(MassCommS,%It)
    ; %Mo contient le mode à applique, %Ch le salonCible
    Var %Mo = $gettok(%It,3,59) , %Ch = $gettok(%It,2,59)
    ; Revérifier si l'on est opérateur ou ircop :p
    If ($me isop %Ch) || (o isin $usermode) {
      ; Faire chaque commande en attente ici !
      If (%Mo == k) {
        Var %Re = $iif($gettok(%It,4-,59),$ifmatch,:Pas de raison)
        RAW -q KICK %Ch %Da %Re
      }
      ElseIf (%Mo == kb) {
        Var %Re = $iif($gettok(%It,4-,59),$ifmatch,:Pas de raison)
        Var %Nk = $gettok(%Da,1,59) , %Ad = $gettok(%Da,2-,59) , %MoB = $+(+,$str(b,$numtok(%Ad,32)))
        RAW -q KICK %Ch %Nk %Re
        RAW -q MODE %Ch %MoB %Ad
      }
      ElseIf $regex(%Mo,/^([eIb])$/i) {
        Var %MoB = $+(+,$str($iif($regml(1) == i,$upper($ifmatch),$ifmatch),$numtok(%Da,32))) | RAW -q MODE %Ch %MoB %Da
      }
      ElseIf $regex(%Mo,/^(([+-])([aqohv]))$/i) {
        Var %NMo = $+($regml(2),$str($regml(3),$numtok(%Da,32)))
        RAW -q MODE %Ch %NMo %Da
      }
    }
    ; Décrémentation du nombre total de commandes en attente
    ; Effacement de la commande venant d'être effectuée !
    HAdd MassCommS MAX $calc(%f -1) | HDel MassCommS %It
    ; Et finalement, boucler dans la table afin de décaler toutes les commandes restantes
    While $hfind(MassCommS,%e $+ *,1,w) {
      Var %It = $ifmatch , %Da = $hget(MassCommS,%It)
      Var %NIt = $calc($gettok(%It,1,59) -1) $+ $chr(59) $+ $gettok(%It,2-,59)
      HAdd MassCommS %NIt %Da
      HDel MassCommS %It
      Inc %e
    }
  }
  ; Si l'item 1* n'est pas trouvé, alors tout arrêter :o)
  ; Cela signifie que toutes les commandes en attente ont été faites !
  Else { .TimerMassComm off }
}

dialog MComSys {
  title "Mass Command System"
  size -1 -1 148 124
  option dbu
  text "Délai (en ms) entre chaque commande", 1, 27 11 50 14
  combo 2, 82 12 33 79, size vsbar drop
  text "Pseudonymes exceptés", 3, 6 30 61 8
  text "Adresses exceptées", 4, 75 30 53 8
  box "", 5, 2 1 144 121
  list 6, 7 41 55 50, size vsbar
  list 7, 66 41 75 50, size vsbar
  edit "", 8, 7 93 55 10, autohs
  edit "", 9, 66 93 75 10, autohs
  button "Ajouter", 10, 8 106 25 12, flat
  button "Enlever", 11, 37 106 25 12, flat
  button "Ajouter", 12, 76 106 25 12, flat
  button "Enlever", 13, 105 106 25 12, flat
}

On *:Dialog:MComSys:*:*:{
  If ($devent == init) {
    ; Initialisé et mettre en Hash table si inexistante
    MassCommSys.Load
    ; Remplir le combo du 'délai'
    DidTok $dname 2 59 100;200;300;400;500;600;700;800;900;1000;1100;1200;1300;1400;1500
    ; Sélectionner le 'délai' déjà dans la base
    Var %d = $calc($hget(MassCommS,delay) / 100)
    Did -c $dname 2 %d
    ; Remplir les list des pseudonymes et adresses en exception.
    MassCommSys.Excpt 6 nick
    MassCommSys.Excpt 7 addr
  }
  ElseIf ($devent == sclick) {
    ; Bouton pour mettre un pseudonyme en exception
    If ($did == 10) {
      If $did(8) { MassCommSys.Add $dname 8 nick $ifmatch }
      Else { MassCommSys.Warn 2 | Did -f $dname 8 }
    }
    ; Bouton pour enlever un pseudonyme
    ElseIf ($did == 11) {
      If $did(6).seltext { MassCommSys.Del nick $ifmatch }
      Else { MassCommSys.Warn 3 | Did -f $dname 6 }
    }
    ; Bouton pour mettre une adresse en exception
    ElseIf ($did == 12) {
      If $did(9) { MassCommSys.Add $dname 9 addr $ifmatch }
      Else { MassCommSys.Warn 5 | Did -f $dname 9 }
    }
    ; Bouton pour enlever une addresse
    ElseIf ($did == 13) {
      If $did(7).seltext { MassCommSys.Del addr $ifmatch }
      Else { MassCommSys.Warn 6 | Did -f $dname 7 }
    }
    ; Lorqu'il y'a une sélection dans le combo du 'délai'
    ElseIf ($did == 2) { HAdd MassCommS delay $did(2).seltext }
  }
  ; A la fermeture du dialog, sauvegarder les données !
  ElseIf ($devent == close) { MassCommSys.Save }
}

menu menubar,channel {
  Mass Command System
  .Configuration:Dialog -m MComSys MComSys
  -
}

On *:Start:{
  If $hget(MassCommS) {
    MassCommSys.Save | HFree MassCommS
  }
  MassCommSys.Load
}
On *:DisConnect:MassCommSys.Save
On *:Exit:MassCommSys.Save
On *:Load:{
  If !$isdir(MComSys) { MkDir MComSys }
  If $exists($MassCommSys.Dir) { Write -c $MassCommSys.Dir }
  Write $MassCommSys.Dir
  Write $MassCommSys.Dir delay
  Write $MassCommSys.Dir 500
  Write $MassCommSys.Dir nick.except.1
  Write $MassCommSys.Dir IriX
  Write $MassCommSys.Dir addr.except.1
  Write $MassCommSys.Dir 3753371872.Net|2758010278.tv
  MassCommSys.Load
}
On *:UnLoad:{ Remove -b $MassCommSys.Dir | RmDir MComSys }

Alias -l MassCommSys.Dir { Return MComSys\data.txt }
Alias -l MassCommSys.Save { If $hget(MassCommS) { HSave MassCommS $MassCommSys.Dir } }
Alias -l MassCommSys.Load {
  If !$hget(MassCommS) {
    HMake MassCommS 100 | HLoad MassCommS $MassCommSys.Dir
  }
}

; Fonction pour remplir les 'list' des éléments en exception
Alias -l MassCommSys.Excpt {
  Var %i = 1 , %id = $1
  Did -r $dname %id
  While $hfind(MassCommS,$+($2,.except.,%i),1,n) {
    Var %dat = $hget(MassCommS,$ifmatch)
    DidTok $dname %id 124 %dat
    Inc %i
  }
}

; Fontion pour avertir l'utilisateur lors d'un erreur dans le dialog
Alias -l MassCommSys.Warn {
  If ($1 == 1) { NoOp $input(Le pseudonyme $+(",$2,") est déjà $crlf dans la base d'exception,ow,Elément existant) }
  ElseIf ($1 == 2) { NoOp $input(Aucun pseudonyme entré,ow,Champs vide) }
  ElseIf ($1 == 3) { NoOp $input(Aucun pseudonyme selectionné,ow,Pas de selection) }
  ElseIf ($1 == 4) { NoOp $input(L'adresse $+(",$2,") est déjà $crlf dans la base d'exception,ow,Elément existant) }
  ElseIf ($1 == 5) { NoOp $input(Aucune adresse entrée,ow,Champs vide) }
  ElseIf ($1 == 6) { NoOp $input(Aucune adresse selectionnée,ow,Pas de selection) }
}

; Fonction pour chercher si un pseudonyme ou une adresse est un exception
Alias -l MassCommSys.Find {
  Var %a = $1 , %Typ = $prop , %i = 1
  While $hfind(MassCommS,$+(%Typ,.except.,%i),1,n) {
    Var %Dat = $hget(MassCommS,$ifmatch)
    If $istok(%Dat,%a,124) { Return 1 }
    Inc %i
  }
  Return 0
}

; Fonction pour rajouter un pseudonyme ou une adresse dans la base d'exception
; MassCommSys.Add $dname 8 nick $ifmatch
Alias -l MassCommSys.Add {
  Var %i = 1 , %Dat , %Itm , %Entry = $4 , %Typ = $3 , %ReloadId = $iif(%Typ == nick,6,7)
  While $hfind(MassCommS,$+(%Typ,.except.,%i),1,n) {
    Var %Itm = $ifmatch
    Var %Dat = $hget(MassCommS,%Itm)
    If $findtok(%Dat,%Entry,1,124) {
      MassCommSys.Warn 1 %Entry
      Did -f $1 $2 | Halt
    }
    Inc %i
  }
  Did -r $1 $2
  If ($numtok(%Dat,124) >= 20) {
    Var %Itm = $+(%Typ,.except.,%i) , %Dat = %Entry
    HAdd MassCommS %Itm %Dat
    MassCommSys.Excpt %ReloadId %Typ
  } 
  Else {
    %Dat = %Dat $+ $chr(124) $+ %Entry
    HAdd MassCommS %Itm %Dat
    MassCommSys.Excpt %ReloadId %Typ
  }
}

; Fonction pour enlever un pseudonyme ou une adresse de la base d'exception.
; MassCommSys.Del nick $ifmatch 
Alias -l MassCommSys.Del {
  Var %Rem = $2 , %Typ = $1 , %ReloadId = $iif(%Typ == nick,6,7)
  Var %i = 1 , %Dat , %Itm
  While $hfind(MassCommS,$+(%Typ,.except.,%i),1,n) {
    Var %Itm = $ifmatch
    Var %Dat = $hget(MassCommS,%Itm)
    If $findtok(%Dat,%Rem,1,124) {
      Var %Fnd = $ifmatch
      If ($numtok(%Dat,124) == 1) {
        HDel MassCommS %Itm
        Var %w = $calc(%i +1)
        While $hfind(MassCommS,$+(%Typ,.except.,%w),1,n) {
          Var %It = $ifmatch , %Da = $hget(MassCommS,%It)
          Var %NIt = $+(%Typ,.except.,$calc(%w -1))
          HAdd MassCommS %NIt %Da | HDel MassCommS %It
          Inc %w
        } 
      }
      Else {
        %Dat = $deltok(%Dat,%Fnd,124)
        HAdd MassCommS %Itm %Dat
      }
      MassCommSys.Excpt %ReloadId %Typ
      Halt
    }
    Inc %i
  }
}

; -----
; Eof()
; -----

Conclusion :


___________________
Installation (LOAD)
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Pour installer le système, décidez d'abord quelle langue vous allez utiliser.
Dans chaque cas, le fichier *_commented.mrc est facultatif (uniquement pour aider à comprendre)

Placez le fichier MCommSys-FR-v1.1.1.mrc dans le répertoire de votre logiciel mIRC

Manuellement:

1. Tapez dans la fenêtre 'status' de mIRC la commande suivante:

/load -rs MCommSys-FR-v1.1.1.mrc

Avec l'éditeur de script:

1. Tapez la combinaison de touche ALT R
2. Vous êtes maintenant dans l'éditeur de scripts, onglet 'remotes'.
3. Cliquez sur le menu File/Load
4. Choisissez le fichier que vous avez placer précédemment.
5. Cliquer sur OK
________________________
Désinstallation (UNLOAD)
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Manuellement:

1. Tapez dans la fenêtre 'status' de mIRC la commande suivante:

/unload -rs MCommSys-FR-v1.1.1.mrc

Avec l'éditeur de script:

1. Tapez la combinaison de touche ALT R
2. Vous êtes maintenant dans l'éditeur de scripts, onglet 'remotes'.
3. Cliquez sur le menu File/Unload
4. Choisissez le fichier MCommSys-FR-v1.1.1.mrc
5. Cliquer sur OK
_________
ATTENTION
¯¯¯¯¯¯¯¯¯
Lors de la désinstallation, la base de données du système de masse sera effacée
et mise dans la corbeille (par sécurité).
Si vous pensez avoir fait une erreur, restaurez donc le fichier de la corbeille.
______________
Configurations
¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Pour configurer, selectionner 'Mass Command System' dans le menubar ou en faisant
un click-droit sur le fond de n'importe quel salon.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.