Soyez le premier à donner votre avis sur cette source.
Vue 4 680 fois - Téléchargée 197 fois
; ---------------------------------------------- ; 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() ; -----
/MassComSys.Main [+|-] <délai{100-1500}|d> <Wims,ArKanis,Nsh|e> #nomdusalon [type] [raison]
donnes moi des exemples stp :)
pour les -e et -I, c'est comme le -b, la fonction ne les gère pas.
bien qu'il soit toujours possible de rajouter cela maintenant que le hash table est
présent en permanence.
dans la toute première version, il y avait un hfree à la fin du timer.
il se peut fort bien que je rajoute ces fonctions donc.
voici ce qu'il en résulte:
/MassComSys.Main [+|-] <délai{100-1500}|d> #nomdusalon [type] [raison]
:o)
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.