Advertisement
Guest User

Untitled

a guest
Oct 8th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.70 KB | None | 0 0
  1. ##############################################################################
  2. #
  3. # The Summoner
  4. # v1.11 (28/02/2012) ©2011 MenzAgitat
  5. #
  6. # IRC: irc.epiknet.org #boulets / #eggdrop
  7. #
  8. # Mes scripts sont téléchargeables sur http://www.eggdrop.fr
  9. #
  10. ##############################################################################
  11.  
  12. #
  13. # Description
  14. #
  15. # Ce script vous permet d'invoquer tout un tas de trucs et de machins de façon
  16. # totalement imprévisible, pour en faire l'usage que vous voudrez.
  17. #
  18. # Un exemple sera beaucoup plus parlant :
  19. # <MenzAgitat> !invoque et le refourgue à CrazyCat
  20. # <Eggdrop> MenzAgitat invoque un yorkshire et le refourgue à CrazyCat
  21. # <MenzAgitat> !invoque et s'en met partout
  22. # <Eggdrop> MenzAgitat invoque sa belle mère et s'en met partout
  23. #
  24. # La commande !summoner_stats permet au propriétaire de l'eggdrop d'afficher
  25. # le nombre d'invocations disponibles dans la base de données.
  26. #
  27. # J'ai repris l'idée d'un script équivalent que j'ai vu fonctionner sur un bot
  28. # et dont je ne connais ni le nom, ni l'auteur. Donc bravo à cet auteur anonyme
  29. # pour cette chouette idée.
  30. #
  31. # Pour activer The Summoner sur un chan, vous devez taper ceci en partyline de
  32. # l'eggdrop :
  33. # .chanset #NomDuChan +summoner
  34. # et ceci pour le désactiver :
  35. # .chanset #NomDuChan -summoner
  36. #
  37.  
  38. #
  39. # Changelog
  40. #
  41. # 1.0
  42. # - 1ère version
  43. # 1.1
  44. # - Ajout d'un antiflood.
  45. # - Ajout de nouvelles invocations.
  46. # - Amélioration du générateur de nombres aléatoires.
  47. # 1.11
  48. # - Correction d'un bug avec l'antiflood.
  49. # - Correction d'une erreur dans la description : la commande pour activer
  50. # ou désactiver le script est .chanset et non pas .channel set
  51. # - Re-modification du générateur de nombres aléatoires.
  52. # - Quelques optimisations du code.
  53. # - Ajout de quelques nouvelles invocations.
  54. #
  55.  
  56. #
  57. # Licence
  58. #
  59. # Cette création est mise à disposition selon le Contrat
  60. # Attribution-NonCommercial-ShareAlike 3.0 Unported disponible en ligne
  61. # http://creativecommons.org/licenses/by-nc-sa/3.0/ ou par courrier postal à
  62. # Creative Commons, 171 Second Street, Suite 300, San Francisco, California
  63. # 94105, USA.
  64. # Vous pouvez également consulter la version française ici :
  65. # http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr
  66. #
  67.  
  68. if {[info commands ::summoner::uninstall] eq "::summoner::uninstall"} { ::summoner::uninstall }
  69. # Note pour les programmeurs :
  70. # 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.
  71. 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 }
  72. 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 }
  73. package require Tcl 8.5
  74. namespace eval summoner {
  75.  
  76.  
  77.  
  78. ############################################################################
  79. ### Configuration
  80. ############################################################################
  81.  
  82. # Commande publique :
  83. variable summoner_cmd "!invoque"
  84.  
  85. # Autorisations requises pour utiliser The Summoner :
  86. variable summoner_auth "-|-"
  87.  
  88. # Anti-flood (0 = désactivé, 1 = activé)
  89. variable antiflood 1
  90.  
  91. # Combien de commandes sont autorisées en combien de temps ?
  92. # exemple : "5:60" = 5 commandes maximum en 60 secondes;
  93. # les suivantes seront ignorées.
  94. variable flood_limit "5:60"
  95.  
  96. # Intervalle de temps minimum entre l'affichage de 2 messages
  97. # avertissant que l'anti-flood a été déclenché (ne réglez pas
  98. # cette valeur trop bas afin de ne pas être floodé par les messages
  99. # d'avertissement de l'anti-flood...)
  100. variable antiflood_msg_interval 20
  101.  
  102. # Bibliothèque d'invocations
  103. # Les variables suivantes sont autorisées dans la bibliothèque d'invocations :
  104. # %randnick% = un nick aléatoire pris sur le chan (ne pouvant être celui de
  105. # l'user qui demande l'invocation, ni l'eggdrop, ni les bots du botnet).
  106. # %botnick% = le nick de l'eggdrop.
  107. # Vous pouvez également utiliser des codes de couleur, gras, etc...
  108. #
  109. variable summons {
  110. {la directive 135}
  111. {une horde de lemmings}
  112. {un nain}
  113. {Pacman}
  114. {un rouleau de PQ}
  115. {un meuporg}
  116. {une DeLorean}
  117. {un sextoy}
  118. {un fouet}
  119. {l'anneau unique}
  120. {un tank}
  121. {le pare-feu OpenOffice}
  122. {un elfe}
  123. {un coup de pied au cul}
  124. {un BigMac}
  125. {une choppe de bière}
  126. {un lave-vaisselle}
  127. {Chuck Norris}
  128. {un canard radioactif}
  129. {Pikachu}
  130. {les teletubbies}
  131. {Obi-Wan Kenobi}
  132. {Justin Bieber}
  133. {un Lapin Crétin}
  134. {un poireau}
  135. {Rocco Siffredi}
  136. {une ventouse}
  137. {Monsieur Propre}
  138. {un zombie}
  139. {un écran bleu}
  140. {Clara Morgane}
  141. {une vache}
  142. {un fromage qui pue}
  143. {un bocal de cornichons}
  144. {un pot de nutella}
  145. {un parapluie}
  146. {Homer Simpson}
  147. {une erreur 404}
  148. {un briquet}
  149. {une batte de baseball}
  150. {un manche à balai}
  151. {SuperMan}
  152. {Batman}
  153. {un calin}
  154. {un bisou}
  155. {un sumotori}
  156. {la grande question sur la vie, l'univers et le reste}
  157. {sa belle-mère}
  158. {sa copine}
  159. {une pelle}
  160. {un sac de sable}
  161. {un génie}
  162. {un feu follet}
  163. {un bantha}
  164. {un orc}
  165. {un troll}
  166. {son slip}
  167. {un truc}
  168. {un machin}
  169. {des petits hommes verts}
  170. {le Grand Schtroumpf}
  171. {un blougou à sens giratoire inverse}
  172. {une grue de chantier}
  173. {l'armée}
  174. {un disque dur}
  175. {un poil de cul}
  176. {un bouquet de fleurs}
  177. {un bisounours}
  178. {une bombe atomique}
  179. {un pet}
  180. {sa mauvaise haleine}
  181. {une mauvaise odeur}
  182. {le cri qui tue}
  183. {un truc à ressort}
  184. {un caillou}
  185. {un OVNI}
  186. {une tarte à la crème}
  187. {un percepteur des impôts}
  188. {un politicien}
  189. {ses amies les bêtes}
  190. {un yorkshire}
  191. {un psychopathe}
  192. {une paire de tongs}
  193. {des chaussettes sales}
  194. {sa gentillesse}
  195. {une bonne dose de courage}
  196. {une femme de ménage}
  197. {une flaque d'eau}
  198. {ses mains}
  199. {une pizza}
  200. {un grain de sable}
  201. {un truc inutile}
  202. {un truc mou}
  203. {un marteau et un clou}
  204. {une corde}
  205. {une excuse à deux balles}
  206. {une bonne excuse}
  207. {une poupée gonflable}
  208. {un sabre laser}
  209. {une huitre}
  210. {une machine infernale}
  211. {un trou noir}
  212. {son formidable sens de l'humour}
  213. {un tentacule}
  214. {une couille}
  215. {un opossum enflammé}
  216. {un meuble Ikea sans sa notice}
  217. {un cactus}
  218. {un truc en peluche}
  219. {des emmerdes}
  220. {un pétard}
  221. {un bug}
  222. {une péniche}
  223. {une poutre}
  224. {un carnet de chèques}
  225. {un suppositoire effervescent}
  226. {Pedobear}
  227. {la fée Clochette}
  228. {un doigt}
  229. {l'Apocalypse}
  230. {un bordel monstrueux}
  231. {un truc louche}
  232. {une chèvre}
  233. {une boule de feu}
  234. {un jedi}
  235. {un creeper}
  236. {une megadrive}
  237. {un contrôle fiscal}
  238. {Super Mario}
  239. {un luminou}
  240. {un ticket de loto gagnant}
  241. {sa mère}
  242. {un gâteau sec}
  243. {un truc de dingue}
  244. {Tux}
  245. {une hallebarde}
  246. {Christine Albanel}
  247. {Dédé le cochon}
  248. {Bill Gates}
  249. {un spam}
  250. {un vibromasseur}
  251. {une voiture à pédales}
  252. {un débogueur}
  253. {un uppercut}
  254. {un extincteur}
  255. {une boîte à outils}
  256. {une bouteille de sa cuvée spéciale}
  257. {ses meilleures intentions}
  258. {sa main baladeuse}
  259. {sa bonne volonté}
  260. {un démon}
  261. {les CRS}
  262. {une diversion}
  263. {le toutou à sa mémère}
  264. {une paire de menottes}
  265. {Frigide Barjot}
  266. {un pv de 90€}
  267. {une baguette magique}
  268. {un punk}
  269. {un tricycle à 4 roues}
  270. {une odeur épouvantable}
  271. {un pied de nez}
  272. {un furoncle}
  273. {un miracle}
  274. {un vieillard}
  275. {%botnick%}
  276. {%randnick%}
  277. }
  278.  
  279. ############################################################################
  280. ### Fin de la configuration
  281. ############################################################################
  282.  
  283.  
  284.  
  285. ##############################################################################
  286. ### initialisation
  287. ##############################################################################
  288. variable scriptname "The Summoner"
  289. variable version "1.11.20120228"
  290. setudef flag summoner
  291. variable pi [expr {4.0*atan(1.0)}]
  292. # initialisation de l'antiflood
  293. scan $flood_limit "%d:%d" ::summoner::max_instances ::summoner::instance_length
  294. array set ::summoner::instance {}
  295. array set ::summoner::antiflood_msg {}
  296. # procédure de désinstallation
  297. # (le script se désinstalle totalement avant chaque rehash ou à chaque relecture au moyen de la commande "source" ou autre)
  298. proc uninstall {args} {
  299. putlog "Désallocation des ressources de \002$::summoner::scriptname\002..."
  300. foreach binding [lsearch -inline -all -regexp [binds *[set ns [string range [namespace current] 2 end]]*] " \{?(::)?$ns"] {
  301. unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4]
  302. }
  303. foreach running_timer [timers] {
  304. if { [string match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] }
  305. }
  306. foreach running_utimer [utimers] {
  307. if { [string match "*[namespace current]::*" [lindex $running_utimer 1]] } { killutimer [lindex $running_utimer 2] }
  308. }
  309. namespace delete ::summoner
  310. }
  311. }
  312.  
  313. ##############################################################################
  314. ### procédure principale
  315. ##############################################################################
  316. proc ::summoner::main {nick host hand chan arg} {
  317. if { (![channel get $chan summoner]) || (($summoner::antiflood == 1) && ([::summoner::antiflood $chan])) } { return }
  318. puthelp "PRIVMSG $chan :$nick invoque [::summoner::format_reply $nick $chan [lindex $::summoner::summons [expr ([clock clicks -milliseconds] % [llength $::summoner::summons])]]] [::summoner::strip_codes $arg]"
  319. }
  320.  
  321. ##############################################################################
  322. ### formatage d'une réponse et substitution des variables
  323. ##############################################################################
  324. proc ::summoner::format_reply {nick chan text} {
  325. regsub -all "%randnick%" $text [::summoner::randnick [regsub -all {\W} $nick {\\&}] $chan] text ; # "
  326. regsub -all "%botnick%" $text [regsub -all {\W} $::botnick {\\&}] text ; # "
  327. # neutralisation des antislashes (sauf codes de contrôle \001 \002 \003 \022 \037 \026 \017)
  328. regsub -all {(?!\\001|\\002|\\003|\\022|\\037|\\026|\\017)(\\)} $text {\\\\} text
  329. return [join $text]
  330. }
  331.  
  332. ##############################################################################
  333. ### suppression de la couleur, gras, soulignement, ...
  334. ##############################################################################
  335. proc ::summoner::strip_codes {text} {
  336. return [::tcl::string::map {"\017" ""} [stripcodes abcgru $text]]
  337. }
  338.  
  339. ##############################################################################
  340. ### retourne un nick aléatoire parmi les users présents sur le chan
  341. ### (sauf l'eggdrop, sauf les autres eggs du botnet, sauf l'user qui a posé la
  342. ### question)
  343. ##############################################################################
  344. proc ::summoner::randnick {nick chan} {
  345. set users_list [lreplace [set users [chanlist $chan -b|]] [set index [lsearch $users $nick]] $index]
  346. set users_list [lreplace $users_list [set index [lsearch $users_list $::botnick]] $index]
  347. if {![llength $users_list]} { return "quelqu'un" }
  348. return [lindex $users_list [rand [llength $users_list]]]
  349. }
  350.  
  351. ##############################################################################
  352. ### contrôle du flood
  353. ##############################################################################
  354. proc ::summoner::antiflood {chan} {
  355. set hash [md5 $chan]
  356. if {![info exists ::summoner::antiflood_msg($hash)]} { set ::summoner::antiflood_msg($hash) 0 }
  357. if {![info exists ::summoner::instance($hash)]} { set ::summoner::instance($hash) 0 }
  358. if { $::summoner::instance($hash) >= $::summoner::max_instances } {
  359. if { $::summoner::antiflood_msg($hash) == 0 } {
  360. set ::summoner::antiflood_msg($hash) 1
  361. if { ![::tcl::string::match *c* [lindex [split [getchanmode $chan]] 0]] } {
  362. 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"
  363. } else {
  364. 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"]."
  365. }
  366. utimer $summoner::antiflood_msg_interval [list ::summoner::antiflood_msg_reset $hash]
  367. }
  368. return 1
  369. } else {
  370. incr ::summoner::instance($hash)
  371. utimer $::summoner::instance_length [list ::summoner::antiflood_close_instance $hash]
  372. return 0
  373. }
  374. }
  375. proc ::summoner::antiflood_close_instance {hash} {
  376. if { ([info exists ::summoner::instance($hash)]) && ($::summoner::instance($hash) > 0) } {
  377. incr ::summoner::instance($hash) -1
  378. }
  379. }
  380. proc ::summoner::antiflood_msg_reset {hash} {
  381. set ::summoner::antiflood_msg($hash) 0
  382. }
  383.  
  384. ##############################################################################
  385. ### accorde au singulier ou au pluriel
  386. ##############################################################################
  387. proc ::summoner::plural {value singular plural} {
  388. if { ($value >= 2) || ($value <= -2) } { return $plural } { return $singular }
  389. }
  390.  
  391. ##############################################################################
  392. ### commande !summoner_stats : affiche le nombre d'invocations dans la base
  393. ### de données
  394. ##############################################################################
  395. proc ::summoner::stats {nick host hand chan arg} {
  396. puthelp "PRIVMSG $chan :\00314\[[set ::summoner::scriptname]\]\003 \002[llength $::summoner::summons]\002 invocations dans la base de données."
  397. }
  398.  
  399. ##############################################################################
  400. ### binds
  401. ##############################################################################
  402. bind evnt - prerehash ::summoner::uninstall
  403. bind pub $::summoner::summoner_auth $::summoner::summoner_cmd ::summoner::main
  404. bind pub n !summoner_stats ::summoner::stats
  405.  
  406.  
  407. putlog "\002$::summoner::scriptname\002 v$::summoner::version (©2011 MenzAgitat) a été chargé."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement