set maxidleaide 25 set maxidleplus 25 set maxidleop 10 timer 1 idle_away proc idle_away {} { global maxidleaide maxidleplus maxidleop botnick foreach t [timers] { if {[lindex $t 1]=="idle_away"} {return 0} } timer 1 idle_away set JeSuisLa 0 set AideEstLa 0 set Westla 0 set Nbreop 0 set Nbreplus 0 set NbreUsers 0 foreach user [chanlist #aide] { if {[nick2hand $user #Aide] == "CService"} { set Westla 1 } elseif {[nick2hand $user #Aide] == "Aide"} { set AideEstLa 1 } elseif {$user == $botnick} { set JeSuisLa 1 } elseif [isop $user #aide] { incr Nbreop } elseif [isvoice $user #aide] { incr Nbreplus } elseif {[nick2hand $user #aide] == "*"} { incr NbreUsers } else { } } if $Nbreplus { set maxidleplus [expr 45 - [expr 5 * [expr $NbreUsers / $Nbreplus]]] } else { set maxidleplus 60 } if {$maxidleplus < 15} { set maxidleplus 15 } if [botisop #Aide] { foreach user [chanlist #aide] { if {([getchanidle $user #aide] > $maxidleaide) && ![matchattr [nick2hand $user #aide] AGTCOJRPMHNZb]} { petitban $user "#aide" "Idle-Kick ($maxidleaide minutes) --- Youhou, tu dors ?" } elseif {$Westla && $JeSuisLa && $AideEstLa && [isop $user #Aide] && ![matchattr [nick2hand $user #Aide] b] && ([getchanidle $user #Aide] > $maxidleop)} { pushmode #aide -o $user putbot Aide "notice $user IDLE-OP ---> -o !" } elseif {[isvoice $user #Aide] && ([getchanidle $user #Aide] > $maxidleplus)} { pushmode #aide -v $user putbot Aide "notice $user IDLE ---> -v !" } else { } } } if {!$Westla && !$AideEstLa && !$Nbreop && $JeSuisLa} { foreach op [userlist o|o #aide] { set idx [hand2idx $op] if {$idx != -1} { putdcc $idx "*** AideBot te signale que X n'est plus sur le canal et qu'il est le seul Op en poste... ***" } } } elseif {[llength [chanlist #aide]] == 0} { jump } elseif !$JeSuisLa { foreach admin [userlist A] { set idx [hand2idx $admin] if {$idx != -1} { putdcc $idx "*** AideBot te signale qu'il n'est connecté à aucun serveur présentement... ***" } } } putserv "who #aide" } bind raw - 352 estaway proc estaway {from keyword args} { set etat [lindex [split $args] 6] set nick [lindex [split $args] 5] if {$etat == "G+"} { pushmode #aide -v $nick putbot Aide "notice $nick AWAY ---> -v !" } return 0 } ################################### # Vérification des 10 minutes ... # ################################### set liste10min "" bind join AGTCOHMRP "#Aide *" join10min proc join10min {nick host hand chan} { global liste10min if [matchattr $hand S] {return 0} if ![string match "* $hand *" " $liste10min "] { lappend liste10min $hand timer 10 timer_join10min } } proc timer_join10min {} { global liste10min set hand [lindex $liste10min 0] set liste10min [lrange $liste10min 1 end] if {$hand != ""} { if {[isvoice [hand2nick $hand] #Aide] & ([hand2idx $hand] == -1)} { sendnote AideBot $hand "Allô! Juste un petit rappel: Quand tu entres sur le canal pour aider (comme il y a quelques minutes), il est entendu que tu devrais venir dans le bot aussi, afin de pouvoir échanger avec les autres membres et que ceux-ci puissent aussi communiquer rapidement avec toi en cas de besoin. Merci! :-)" pushmode #aide -v [hand2nick $hand] putbot Aide "notice [hand2nick $hand] HORS BOT ---> -v !" putlog "10 min +v hors bot: $hand a été averti[mf $hand "" "e"]" } } } ######################### # Auto away dans le bot # ######################### set max_idle(time) 20 set max_idle(freq) 2 proc check_idle {} { global max_idle foreach t [timers] { if {[lindex $t 1]=="check_idle"} {return 0} } timer $max_idle(freq) check_idle foreach user [dcclist chat] { set idx [lindex $user 0] if {([getdccidle $idx] > [expr $max_idle(time)*60]) && ([getdccaway $idx] == "")} { setdccaway $idx "Mis[mf [idx2hand $idx] "" "e"] AWAY après $max_idle(time) minutes d'inactivité sur le bot." } } return 0 } check_idle ##################################### # Détection d'anti-idle dans le bot # ##################################### bind filt p * antiantiidle proc antiantiidle {idx text} { if ![matchattr [idx2hand $idx] A] { catch [aaidle [getuser [idx2hand $idx] xtra vrainick] $idx [string tolower [lindex $text 0]] [string tolower [lrange $text 1 end]]] } return $text } set dernieres_commandes(qui) "" set dernieres_erreurs(qui) "" set dernieres_lignes(qui) "" set liste_commandes "=" foreach tmp [binds dcc] { lappend liste_commandes [lindex $tmp 2] } unset tmp proc aaidle {hand idx commande args} { global dernieres_erreurs dernieres_commandes dernieres_lignes liste_commandes if {[string index $commande 0] == "."} { if ![string match "* [string range $commande 1 end]*" $liste_commandes] { set buf $commande if [info exists dernieres_erreurs($hand)] { if {($buf == [lindex $dernieres_erreurs($hand) 0]) & ($buf == [lindex $dernieres_erreurs($hand) 1])} { putlog "AAidle (erreur répétée) - Averti & loggué: <$hand> $commande" exec echo "[date] @ [time] -> [getuser $hand xtra vrainick] <- Erreur répétée: \[ $commande \]" >> /aide/www/admins/AAI-log.txt putdcc $idx "Note \[AideBot\]: Hey, t'es-tu vraiment là toi ou ton script s'embale? :o)" } } else { set dernieres_erreurs($hand) "0 0" } lappend dernieres_erreurs($hand) $buf set dernieres_erreurs($hand) [lrange $dernieres_erreurs($hand) 1 2] aaidlenicks erreurs $hand } else { set buf "$commande [lindex [lrange $args 0 end] 0]" if [info exists dernieres_commandes($hand)] { if {($buf == [lindex $dernieres_commandes($hand) 0]) & ($buf == [lindex $dernieres_commandes($hand) 1])} { if [string match "*$commande*" ".op .jump"] { putlog "AAidle (commande répétée) - \[Commande protégée contre l'exclusion!\]: <$hand> $commande ..." } else { putlog "AAidle (commande répétée) - Averti & loggué: <$hand> $commande ..." exec echo "[date] @ [time] -> [getuser $hand xtra vrainick] <- Commande répétée: \[ $commande ... \]" >> /aide/www/admins/AAI-log.txt putdcc $idx "Note \[AideBot\]: Hey, t'es-tu vraiment là toi ou ton script s'embale? :o)" } } } else { set dernieres_commandes($hand) "0 0" } lappend dernieres_commandes($hand) $buf set dernieres_commandes($hand) [lrange $dernieres_commandes($hand) 1 2] aaidlenicks commandes $hand } } elseif {[string index $commande 0] == ","} { } else { set ligne "$commande [lindex [lrange $args 0 end] 0]" set buf $ligne if [info exists dernieres_lignes($hand)] { if {($buf == [lindex $dernieres_lignes($hand) 0]) & ($buf == [lindex $dernieres_lignes($hand) 1])} { putlog "AAidle (ligne répétée) - Averti & loggué: <$hand> $ligne" exec echo "[date] @ [time] -> [getuser $hand xtra vrainick] <- Ligne répétée: \[ $ligne \]" >> /aide/www/admins/AAI-log.txt putdcc $idx "Note \[AideBot\]: Hey, t'es-tu vraiment là toi ou ton script s'embale? :o)" } } else { set dernieres_lignes($hand) "0 0" } lappend dernieres_lignes($hand) $buf set dernieres_lignes($hand) [lrange $dernieres_lignes($hand) 1 2] aaidlenicks lignes $hand } } proc aaidlenicks {type hand} { global dernieres_erreurs dernieres_commandes dernieres_lignes if {$type == "erreurs"} { set ou [lsearch $dernieres_erreurs(qui) $hand] if {$ou == -1} { lappend dernieres_erreurs(qui) $hand if {[llength $dernieres_erreurs(qui)] > 10} { unset dernieres_erreurs([lindex $dernieres_erreurs(qui) 0]) set dernieres_erreurs(qui) [lrange $dernieres_erreurs(qui) 1 end] } } else { set dernieres_erreurs(qui) [lreplace $dernieres_erreurs(qui) $ou $ou] lappend dernieres_erreurs(qui) $hand } } elseif {$type == "commandes"} { set ou [lsearch $dernieres_commandes(qui) $hand] if {$ou == -1} { lappend dernieres_commandes(qui) $hand if {[llength $dernieres_commandes(qui)] > 10} { unset dernieres_commandes([lindex $dernieres_commandes(qui) 0]) set dernieres_commandes(qui) [lrange $dernieres_commandes(qui) 1 end] } } else { set dernieres_commandes(qui) [lreplace $dernieres_commandes(qui) $ou $ou] lappend dernieres_commandes(qui) $hand } } else { set ou [lsearch $dernieres_lignes(qui) $hand] if {$ou == -1} { lappend dernieres_lignes(qui) $hand if {[llength $dernieres_lignes(qui)] > 10} { unset dernieres_lignes([lindex $dernieres_lignes(qui) 0]) set dernieres_lignes(qui) [lrange $dernieres_lignes(qui) 1 end] } } else { set dernieres_lignes(qui) [lreplace $dernieres_lignes(qui) $ou $ou] lappend dernieres_lignes(qui) $hand } } }