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 -