Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##############################################################################
- #
- # The Summoner
- # v1.11 (28/02/2012) ©2011 MenzAgitat
- #
- # IRC: irc.epiknet.org #boulets / #eggdrop
- #
- # Mes scripts sont téléchargeables sur http://www.eggdrop.fr
- #
- ##############################################################################
- #
- # Description
- #
- # Ce script vous permet d'invoquer tout un tas de trucs et de machins de façon
- # totalement imprévisible, pour en faire l'usage que vous voudrez.
- #
- # Un exemple sera beaucoup plus parlant :
- # <MenzAgitat> !invoque et le refourgue à CrazyCat
- # <Eggdrop> MenzAgitat invoque un yorkshire et le refourgue à CrazyCat
- # <MenzAgitat> !invoque et s'en met partout
- # <Eggdrop> MenzAgitat invoque sa belle mère et s'en met partout
- #
- # La commande !summoner_stats permet au propriétaire de l'eggdrop d'afficher
- # le nombre d'invocations disponibles dans la base de données.
- #
- # J'ai repris l'idée d'un script équivalent que j'ai vu fonctionner sur un bot
- # et dont je ne connais ni le nom, ni l'auteur. Donc bravo à cet auteur anonyme
- # pour cette chouette idée.
- #
- # Pour activer The Summoner sur un chan, vous devez taper ceci en partyline de
- # l'eggdrop :
- # .chanset #NomDuChan +summoner
- # et ceci pour le désactiver :
- # .chanset #NomDuChan -summoner
- #
- #
- # Changelog
- #
- # 1.0
- # - 1ère version
- # 1.1
- # - Ajout d'un antiflood.
- # - Ajout de nouvelles invocations.
- # - Amélioration du générateur de nombres aléatoires.
- # 1.11
- # - Correction d'un bug avec l'antiflood.
- # - Correction d'une erreur dans la description : la commande pour activer
- # ou désactiver le script est .chanset et non pas .channel set
- # - Re-modification du générateur de nombres aléatoires.
- # - Quelques optimisations du code.
- # - Ajout de quelques nouvelles invocations.
- #
- #
- # Licence
- #
- # Cette création est mise à disposition selon le Contrat
- # Attribution-NonCommercial-ShareAlike 3.0 Unported disponible en ligne
- # http://creativecommons.org/licenses/by-nc-sa/3.0/ ou par courrier postal à
- # Creative Commons, 171 Second Street, Suite 300, San Francisco, California
- # 94105, USA.
- # Vous pouvez également consulter la version française ici :
- # http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr
- #
- if {[info commands ::summoner::uninstall] eq "::summoner::uninstall"} { ::summoner::uninstall }
- # Note pour les programmeurs :
- # Dans la version 1.6.19 d'eggdrop, le numéro de version affiché par .vbottree et [numversion] est incorrect; il affiche 1061800 ou 1061801, ce qui correspond à la version 1.6.18. On utilise donc une autre technique pour vérifier le numéro de version.
- if { [join [split [string range [lindex $version 0] 0 5] "."] ""] < 1620 } { putloglev o * "\00304\002\[The Summoner - ERREUR\]\002\003 La version de votre eggdrop est \00304\002$version\002\003; The Summoner ne fonctionnera correctement que sur les eggdrops version 1.6.20 ou supérieure." ; return }
- if { [info tclversion] < 8.5 } { putloglev o * "\00304\002\[The Summoner - ERREUR\]\002\003 The Summoner nécessite que Tcl 8.5 (ou plus) soit installé pour fonctionner. Votre version actuelle de Tcl est \00304\002$tcl_version\002\003." ; return }
- package require Tcl 8.5
- namespace eval summoner {
- ############################################################################
- ### Configuration
- ############################################################################
- # Commande publique :
- variable summoner_cmd "!invoque"
- # Autorisations requises pour utiliser The Summoner :
- variable summoner_auth "-|-"
- # Anti-flood (0 = désactivé, 1 = activé)
- variable antiflood 1
- # Combien de commandes sont autorisées en combien de temps ?
- # exemple : "5:60" = 5 commandes maximum en 60 secondes;
- # les suivantes seront ignorées.
- variable flood_limit "5:60"
- # Intervalle de temps minimum entre l'affichage de 2 messages
- # avertissant que l'anti-flood a été déclenché (ne réglez pas
- # cette valeur trop bas afin de ne pas être floodé par les messages
- # d'avertissement de l'anti-flood...)
- variable antiflood_msg_interval 20
- # Bibliothèque d'invocations
- # Les variables suivantes sont autorisées dans la bibliothèque d'invocations :
- # %randnick% = un nick aléatoire pris sur le chan (ne pouvant être celui de
- # l'user qui demande l'invocation, ni l'eggdrop, ni les bots du botnet).
- # %botnick% = le nick de l'eggdrop.
- # Vous pouvez également utiliser des codes de couleur, gras, etc...
- #
- variable summons {
- {la directive 135}
- {une horde de lemmings}
- {un nain}
- {Pacman}
- {un rouleau de PQ}
- {un meuporg}
- {une DeLorean}
- {un sextoy}
- {un fouet}
- {l'anneau unique}
- {un tank}
- {le pare-feu OpenOffice}
- {un elfe}
- {un coup de pied au cul}
- {un BigMac}
- {une choppe de bière}
- {un lave-vaisselle}
- {Chuck Norris}
- {un canard radioactif}
- {Pikachu}
- {les teletubbies}
- {Obi-Wan Kenobi}
- {Justin Bieber}
- {un Lapin Crétin}
- {un poireau}
- {Rocco Siffredi}
- {une ventouse}
- {Monsieur Propre}
- {un zombie}
- {un écran bleu}
- {Clara Morgane}
- {une vache}
- {un fromage qui pue}
- {un bocal de cornichons}
- {un pot de nutella}
- {un parapluie}
- {Homer Simpson}
- {une erreur 404}
- {un briquet}
- {une batte de baseball}
- {un manche à balai}
- {SuperMan}
- {Batman}
- {un calin}
- {un bisou}
- {un sumotori}
- {la grande question sur la vie, l'univers et le reste}
- {sa belle-mère}
- {sa copine}
- {une pelle}
- {un sac de sable}
- {un génie}
- {un feu follet}
- {un bantha}
- {un orc}
- {un troll}
- {son slip}
- {un truc}
- {un machin}
- {des petits hommes verts}
- {le Grand Schtroumpf}
- {un blougou à sens giratoire inverse}
- {une grue de chantier}
- {l'armée}
- {un disque dur}
- {un poil de cul}
- {un bouquet de fleurs}
- {un bisounours}
- {une bombe atomique}
- {un pet}
- {sa mauvaise haleine}
- {une mauvaise odeur}
- {le cri qui tue}
- {un truc à ressort}
- {un caillou}
- {un OVNI}
- {une tarte à la crème}
- {un percepteur des impôts}
- {un politicien}
- {ses amies les bêtes}
- {un yorkshire}
- {un psychopathe}
- {une paire de tongs}
- {des chaussettes sales}
- {sa gentillesse}
- {une bonne dose de courage}
- {une femme de ménage}
- {une flaque d'eau}
- {ses mains}
- {une pizza}
- {un grain de sable}
- {un truc inutile}
- {un truc mou}
- {un marteau et un clou}
- {une corde}
- {une excuse à deux balles}
- {une bonne excuse}
- {une poupée gonflable}
- {un sabre laser}
- {une huitre}
- {une machine infernale}
- {un trou noir}
- {son formidable sens de l'humour}
- {un tentacule}
- {une couille}
- {un opossum enflammé}
- {un meuble Ikea sans sa notice}
- {un cactus}
- {un truc en peluche}
- {des emmerdes}
- {un pétard}
- {un bug}
- {une péniche}
- {une poutre}
- {un carnet de chèques}
- {un suppositoire effervescent}
- {Pedobear}
- {la fée Clochette}
- {un doigt}
- {l'Apocalypse}
- {un bordel monstrueux}
- {un truc louche}
- {une chèvre}
- {une boule de feu}
- {un jedi}
- {un creeper}
- {une megadrive}
- {un contrôle fiscal}
- {Super Mario}
- {un luminou}
- {un ticket de loto gagnant}
- {sa mère}
- {un gâteau sec}
- {un truc de dingue}
- {Tux}
- {une hallebarde}
- {Christine Albanel}
- {Dédé le cochon}
- {Bill Gates}
- {un spam}
- {un vibromasseur}
- {une voiture à pédales}
- {un débogueur}
- {un uppercut}
- {un extincteur}
- {une boîte à outils}
- {une bouteille de sa cuvée spéciale}
- {ses meilleures intentions}
- {sa main baladeuse}
- {sa bonne volonté}
- {un démon}
- {les CRS}
- {une diversion}
- {le toutou à sa mémère}
- {une paire de menottes}
- {Frigide Barjot}
- {un pv de 90€}
- {une baguette magique}
- {un punk}
- {un tricycle à 4 roues}
- {une odeur épouvantable}
- {un pied de nez}
- {un furoncle}
- {un miracle}
- {un vieillard}
- {%botnick%}
- {%randnick%}
- }
- ############################################################################
- ### Fin de la configuration
- ############################################################################
- ##############################################################################
- ### initialisation
- ##############################################################################
- variable scriptname "The Summoner"
- variable version "1.11.20120228"
- setudef flag summoner
- variable pi [expr {4.0*atan(1.0)}]
- # initialisation de l'antiflood
- scan $flood_limit "%d:%d" ::summoner::max_instances ::summoner::instance_length
- array set ::summoner::instance {}
- array set ::summoner::antiflood_msg {}
- # procédure de désinstallation
- # (le script se désinstalle totalement avant chaque rehash ou à chaque relecture au moyen de la commande "source" ou autre)
- proc uninstall {args} {
- putlog "Désallocation des ressources de \002$::summoner::scriptname\002..."
- foreach binding [lsearch -inline -all -regexp [binds *[set ns [string range [namespace current] 2 end]]*] " \{?(::)?$ns"] {
- unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4]
- }
- foreach running_timer [timers] {
- if { [string match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] }
- }
- foreach running_utimer [utimers] {
- if { [string match "*[namespace current]::*" [lindex $running_utimer 1]] } { killutimer [lindex $running_utimer 2] }
- }
- namespace delete ::summoner
- }
- }
- ##############################################################################
- ### procédure principale
- ##############################################################################
- proc ::summoner::main {nick host hand chan arg} {
- if { (![channel get $chan summoner]) || (($summoner::antiflood == 1) && ([::summoner::antiflood $chan])) } { return }
- puthelp "PRIVMSG $chan :$nick invoque [::summoner::format_reply $nick $chan [lindex $::summoner::summons [expr ([clock clicks -milliseconds] % [llength $::summoner::summons])]]] [::summoner::strip_codes $arg]"
- }
- ##############################################################################
- ### formatage d'une réponse et substitution des variables
- ##############################################################################
- proc ::summoner::format_reply {nick chan text} {
- regsub -all "%randnick%" $text [::summoner::randnick [regsub -all {\W} $nick {\\&}] $chan] text ; # "
- regsub -all "%botnick%" $text [regsub -all {\W} $::botnick {\\&}] text ; # "
- # neutralisation des antislashes (sauf codes de contrôle \001 \002 \003 \022 \037 \026 \017)
- regsub -all {(?!\\001|\\002|\\003|\\022|\\037|\\026|\\017)(\\)} $text {\\\\} text
- return [join $text]
- }
- ##############################################################################
- ### suppression de la couleur, gras, soulignement, ...
- ##############################################################################
- proc ::summoner::strip_codes {text} {
- return [::tcl::string::map {"\017" ""} [stripcodes abcgru $text]]
- }
- ##############################################################################
- ### retourne un nick aléatoire parmi les users présents sur le chan
- ### (sauf l'eggdrop, sauf les autres eggs du botnet, sauf l'user qui a posé la
- ### question)
- ##############################################################################
- proc ::summoner::randnick {nick chan} {
- set users_list [lreplace [set users [chanlist $chan -b|]] [set index [lsearch $users $nick]] $index]
- set users_list [lreplace $users_list [set index [lsearch $users_list $::botnick]] $index]
- if {![llength $users_list]} { return "quelqu'un" }
- return [lindex $users_list [rand [llength $users_list]]]
- }
- ##############################################################################
- ### contrôle du flood
- ##############################################################################
- proc ::summoner::antiflood {chan} {
- set hash [md5 $chan]
- if {![info exists ::summoner::antiflood_msg($hash)]} { set ::summoner::antiflood_msg($hash) 0 }
- if {![info exists ::summoner::instance($hash)]} { set ::summoner::instance($hash) 0 }
- if { $::summoner::instance($hash) >= $::summoner::max_instances } {
- if { $::summoner::antiflood_msg($hash) == 0 } {
- set ::summoner::antiflood_msg($hash) 1
- if { ![::tcl::string::match *c* [lindex [split [getchanmode $chan]] 0]] } {
- putquick "PRIVMSG $chan :\00304:::\00314 Contrôle de flood activé pour la commande \002$::summoner::summoner_cmd\002 : pas plus de $::summoner::max_instances [::summoner::plural $::summoner::max_instances "requête" "requêtes"] toutes les $::summoner::instance_length [::summoner::plural $::summoner::max_instances "seconde" "secondes"].\003"
- } else {
- putquick "PRIVMSG $chan :::: Contrôle de flood activé pour la commande $::summoner::summoner_cmd : pas plus de $::summoner::max_instances [::summoner::plural $::summoner::max_instances "requête" "requêtes"] toutes les $::summoner::instance_length [::summoner::plural $::summoner::max_instances "seconde" "secondes"]."
- }
- utimer $summoner::antiflood_msg_interval [list ::summoner::antiflood_msg_reset $hash]
- }
- return 1
- } else {
- incr ::summoner::instance($hash)
- utimer $::summoner::instance_length [list ::summoner::antiflood_close_instance $hash]
- return 0
- }
- }
- proc ::summoner::antiflood_close_instance {hash} {
- if { ([info exists ::summoner::instance($hash)]) && ($::summoner::instance($hash) > 0) } {
- incr ::summoner::instance($hash) -1
- }
- }
- proc ::summoner::antiflood_msg_reset {hash} {
- set ::summoner::antiflood_msg($hash) 0
- }
- ##############################################################################
- ### accorde au singulier ou au pluriel
- ##############################################################################
- proc ::summoner::plural {value singular plural} {
- if { ($value >= 2) || ($value <= -2) } { return $plural } { return $singular }
- }
- ##############################################################################
- ### commande !summoner_stats : affiche le nombre d'invocations dans la base
- ### de données
- ##############################################################################
- proc ::summoner::stats {nick host hand chan arg} {
- puthelp "PRIVMSG $chan :\00314\[[set ::summoner::scriptname]\]\003 \002[llength $::summoner::summons]\002 invocations dans la base de données."
- }
- ##############################################################################
- ### binds
- ##############################################################################
- bind evnt - prerehash ::summoner::uninstall
- bind pub $::summoner::summoner_auth $::summoner::summoner_cmd ::summoner::main
- bind pub n !summoner_stats ::summoner::stats
- putlog "\002$::summoner::scriptname\002 v$::summoner::version (©2011 MenzAgitat) a été chargé."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement