Réduire ses timers mIRC
Eviter de multiplier ses timers à l’infini, ça évite de ramer et de prendre de la charge CPU pour rien ;-)
C’était à l’occasion d’un code pour tester des spambots.
Mais il suffit d’adapter ! Le principe : on construit une table qui retient les prochains timestamps UNIX où l’action devra être
exécutée.
Et chaque seconde, on vérifie cette table. Si nécessaire, on exécute l’action et on met à jour pour le prochain coup.
;alias principal pour lancer le système ;utilisation: /xtest_spambots alias xtest_spambots .timer 0 1 xtest_test_ceux_qui_doivent ;nombre de secondes entre chaque /msg au spambot suspecté ;utilisation: $xtest_lap alias xtest_lap return 15 ;nombre d'essais avant abandon ;utilisation: $xtest_num alias xtest_num return 3 ;ajout d'un spambot (on stockera deux valeurs : le nombre d'essais restants, et l'heure du prochain /msg : ;pour que ca fonctionne, on initialise la première fois au ctime + 2secondes) ;utilisation: /add_spambot pseudo alias add_spambot { hadd -m spambot_times $1 $xtest_num hadd -m spambot_next_msg $1 $calc( $ctime +2) } ;retrait d'un spambot du système ;utilisation: /del_spambot pseudo alias del_spambot { hdel -m spambot_times $1 hdel -m spambot_next_msg $1 } ;alias de /msg : tu changeras comme tu veux ;utilisation: /xtest_msg pseudo alias xtest_msg msg $1 BLAH ! ;alias pour tester les spambots qui le doivent alias xtest_test_ceux_qui_doivent { ;on parcourt toute la hashtable var %i 1 while ($hget(spambot_next_msg,%i).item) { var %nick $ifmatch ;on regarde si le CTIME stocké est infèrieur au $ctime actuel : si oui, on doit /msg if ($hget(spambot_next_msg,%nick) < = $ctime) { ;on /msg (on est là pour ca) xtest_msg %nick ;on décrémente le nombre de fois à tester encore hdec -m spambot_times %nick ;si ca arrive à 0, on efface le spambot de la table (je mets "<=" par sécurité, pour pas que ca /msg infiniment si ca rate une fois...) if ($hget(spambot_times,%nick) <= 0) { del_spambot %nick } ;sinon, on règle le prochain CTIME de test else { hadd -m spambot_next_msg %nick $calc($ctime + $xtest_lap) } } inc %i } }
- the end -