Advertisement
Guest User

Untitled

a guest
Sep 28th, 2017
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.34 KB | None | 0 0
  1. # Wer diesen text loescht oder veraendert ist lame :-)
  2. #
  3. # script by: IrAl^KbK
  4. # update by: Puchalke
  5. #
  6. # email: iral_kbk@web.de ; iral_kbk@gmx.de ; kotmann@gmx.de
  7. #
  8. # Brain.tcl tested on eggdrop1.4
  9. #
  10. # ein kleines labber-script, ich habe nicht vor weitere verbesserte versionen
  11. # davon herauszugeben, wenn ihr dazu lust habt, wuerde es mich freuen
  12. # wenn ihr mir euren code senden wuerdet, weil mich diese art KI
  13. # sehr interessiert.
  14. #
  15. # dieses script ist fuer deutsche sprache ausgelegt, sollte aber in
  16. # englisch auch funktionieren.
  17. #
  18. # gruesse zum erschaffer des 3xBot.tcl, dem ich zu verdanken hab, das ich
  19. # das letzte problem mit einem befehl aus seinem script loesen konnte...
  20. # auf den waere ich ohne dem script wahrscheinlich erst nach einem halben
  21. # jahr gekommen :-)
  22.  
  23. ### variablen ###
  24. # C:\Windrop\brain.db
  25. ######!WICHTIG!######
  26.  
  27. set brain_brain_url "./brain.db"
  28.  
  29. # dient dazu, dass der bot nicht saetze, in denen sein eigener name vorkommt, lernt
  30. set botsnick [string range $botname 0 [expr [string last ! $botname]-1]]
  31.  
  32. # von folgenden usern wird nichts gelernt. hier keine wildcards benutzen!
  33. set dont_learn_from "user1 user2"
  34.  
  35. # auf folgende user wird nicht reagiert
  36. set dont_react_to "user3"
  37.  
  38. # Hier die Channels eingeben auf denen der Bot reden soll.
  39. # "*" fuer alle Channels
  40. set add_chan "#moin_PN"
  41.  
  42. # Hier die Channels eingeben auf denen der Bot saetze sammeln soll.
  43. # "*" fuer alle Channels
  44. set add_chan "#moin_PN"
  45.  
  46. # die trefferquote ( je hoeher die zahl, desto mehr redet der bot, aber
  47. # die cpu muss drunter leiden :-)
  48. # der wert 10550 war bei meinem bot (linux-kernel 2.2.16 500mhz-cpu) kein
  49. # problem, um den bot gegen floods zu schuetzen sollte man es nicht ueber
  50. # 500 setzen schaetze ich mal *g*
  51. # 150 ist der standartwert, wenn der bot nicht sofort loslabbert sollte
  52. # man sich nicht wundern, weil er erstmal saetze sammeln muss. ab 16000
  53. # zeilen sollte es schon ganz gut gehen
  54.  
  55. set brain_treffer 600
  56.  
  57.  
  58. # ein paar feineinstellungen, keine von den zahlen darf den
  59. # in $brain_treffer gesetzten wert ueberschreiten
  60. # je kleiner der wert,desto besser. man sollte aber nicht uebertreiben,
  61. # weil die cpu auslastung hochgeht. am besten einfach so lassen :-)
  62.  
  63. # moeglichst viele woerter treffen. je groesser der wert, desto eher aufgabe
  64. set b_subbbbb 0
  65.  
  66. # weniger woerter treffen
  67. set b_sub [expr $brain_treffer * 0.1]
  68.  
  69. # noch weniger
  70. set b_subbb [expr $brain_treffer * 0.5]
  71.  
  72. # nach einzelnen woertern suchen
  73. set b_subbbb [expr $brain_treffer * 0.9]
  74.  
  75. #################
  76.  
  77. ##################### do not edit anything below ###############################
  78.  
  79. ### binds ###
  80. bind pubm - * brain_add
  81. bind pubm - * brain_readfiles
  82. #############
  83.  
  84.  
  85.  
  86. #######################
  87. #### woerter adden ####
  88. #######################
  89.  
  90. # returns:
  91. # 0: satz gelernt
  92. # 1: aus diesem channel soll nichts gelernt werden
  93. # 2: satz nicht gelernt, da botname drin vorkam
  94. # 3: satz nicht gelernt, da von nick nichts gelernt werden darf
  95. # 4: satz bereits im hirn vorhanden
  96.  
  97. proc brain_add { nick uhost hand chan arg } {
  98. global brain_brain_url add_chan botsnick dont_learn_from
  99.  
  100. if {([lsearch -exact $add_chan $chan] == -1) && ($add_chan != "*")} {return 1}
  101.  
  102. set arg_low [join [string tolower [lindex $arg 0]]]
  103. if { ([string match *$botsnick* $arg_low] > 0)
  104. || ([lsearch -exact $arg_low \#] >= 0)
  105. || ([lsearch -exact $arg_low ign] >= 0) } {
  106. return 2
  107. }
  108.  
  109. if { ([lsearch -exact $dont_learn_from $nick] >= 0)} {
  110. return 3
  111. }
  112.  
  113. set msg [lrange $arg 0 end]
  114. set tmpfile [open $brain_brain_url a+]
  115.  
  116. regsub -all -- Ä $msg Ae msg
  117. regsub -all -- Ü $msg Ue msg
  118. regsub -all -- Ö $msg Oe msg
  119. regsub -all -- ä $msg ae msg
  120. regsub -all -- ü $msg ue msg
  121. regsub -all -- ö $msg oe msg
  122. regsub -all -- ß $msg ss msg
  123. regsub -all -- \\\\ $msg \\\\\\\\ msg
  124. regsub -all -- \\\[ $msg \\\\\[ msg
  125. regsub -all -- \\\] $msg \\\\\] msg
  126. regsub -all -- \\\} $msg \\\\\} msg
  127. regsub -all -- \\\{ $msg \\\\\{ msg
  128. regsub -all -- \\\" $msg \\\\\" msg
  129.  
  130. set sentence [join $msg]
  131.  
  132. puts $tmpfile $sentence
  133. close $tmpfile
  134. return 0
  135. }
  136.  
  137. ###############################################
  138. #### woerter zufällig aus den files suchen ####
  139. ###############################################
  140.  
  141. # returns:
  142. # 0: es wurde was gesagt
  143. # 1: nichts gesagt
  144. # 2: auf nick durfte nicht geantwortet werden
  145. # 3: satz nur ein wort lang, deshalb nicht reagiert
  146. # 4: channel ist nicht zur antwort freigegeben
  147.  
  148. proc brain_readfiles { nick uhost hand chan arg } {
  149. global brain_brain_url brain_treffer b_sub b_subbb b_subbbb b_subbbbb add_chan dont_react_to
  150.  
  151. if { ([lsearch -exact $dont_react_to $nick] >= 0)} {
  152. return 2
  153. }
  154.  
  155. if {[llength [split $arg " "]] == "1"} { return 3 }
  156.  
  157. if {([lsearch -exact $add_chan $chan] == -1) && ($add_chan != "*")} { return 4 }
  158.  
  159. regsub -all -- \\\\ $arg \\\\\\\\ arg
  160. regsub -all -- \\\[ $arg \\\\\[ arg
  161. regsub -all -- \\\] $arg \\\\\] arg
  162. regsub -all -- \\\} $arg \\\\\} arg
  163. regsub -all -- \\\{ $arg \\\\\{ arg
  164. regsub -all -- \\\" $arg \\\\\" arg
  165. regsub -all -- Ä $arg Ae arg
  166. regsub -all -- Ü $arg Ue arg
  167. regsub -all -- Ö $arg Oe arg
  168. regsub -all -- ä $arg ae arg
  169. regsub -all -- ü $arg ue arg
  170. regsub -all -- ö $arg oe arg
  171. regsub -all -- ß $arg ss arg
  172.  
  173. set sentence_in [join $arg]
  174. set brain_tmp_nr [rand [llength [split $arg " "]]]
  175.  
  176. set x_zz 1
  177. while {$x_zz < 150} {
  178. incr x_zz
  179. set brain_tmp_nz [rand [llength [split $arg " "]]]
  180. if {($brain_tmp_nz != $brain_tmp_nr)} {
  181. break
  182. }
  183. }
  184.  
  185. set x_yx 1
  186. while {$x_yx < 150} {
  187. incr x_yx
  188. set brain_tmp_nu [rand [llength [split $arg " "]]]
  189. if {($brain_tmp_nu != $brain_tmp_nr) && ($brain_tmp_nz != $brain_tmp_nu)} {
  190. break
  191. }
  192. }
  193.  
  194. set brain_tmp [lindex $arg [rand 2]]
  195. set brain_tmp_zwo [lindex $arg $brain_tmp_nu]
  196. set brain_tmp_drei [lindex $arg $brain_tmp_nz]
  197.  
  198. if {$brain_tmp == "ich"} { regsub -- ich $brain_tmp du brain_tmp }
  199. if {$brain_tmp == "du"} { regsub -- du $brain_tmp ich brain_tmp }
  200. if {$brain_tmp == "ihr"} { regsub -- ihr $brain_tmp ich brain_tmp }
  201. if {$brain_tmp == "wir"} { regsub -- wir $brain_tmp ihr brain_tmp }
  202.  
  203. if {$brain_tmp == "mir"} { regsub -- mir $brain_tmp dir brain_tmp }
  204. if {$brain_tmp == "dir"} { regsub -- dir $brain_tmp mir brain_tmp }
  205. if {$brain_tmp == "euch"} { regsub -- euch $brain_tmp mir brain_tmp }
  206. if {$brain_tmp == "uns"} { regsub -- uns $brain_tmp euch brain_tmp }
  207.  
  208. if {$brain_tmp == "mein"} { regsub -- mein $brain_tmp dein brain_tmp }
  209. if {$brain_tmp == "dein"} { regsub -- dein $brain_tmp mein brain_tmp }
  210. if {$brain_tmp == "euer"} { regsub -- euer $brain_tmp mein brain_tmp }
  211. if {$brain_tmp == "unser"} { regsub -- unser $brain_tmp euer brain_tmp }
  212.  
  213. if {$brain_tmp == "meinem"} { regsub -- meinem $brain_tmp deinem brain_tmp }
  214. if {$brain_tmp == "deinem"} { regsub -- deinem $brain_tmp meinem brain_tmp }
  215. if {$brain_tmp == "eurem"} { regsub -- eurem $brain_tmp meinem brain_tmp }
  216. if {$brain_tmp == "unserm"} { regsub -- unserm $brain_tmp eurem brain_tmp }
  217. if {$brain_tmp == "unserem"} { regsub -- unserem $brain_tmp eurem brain_tmp }
  218.  
  219. if {$brain_tmp == "meinen"} { regsub -- meinen $brain_tmp deinen brain_tmp }
  220. if {$brain_tmp == "deinen"} { regsub -- deinen $brain_tmp meinen brain_tmp }
  221. if {$brain_tmp == "euren"} { regsub -- euren $brain_tmp meinen brain_tmp }
  222. if {$brain_tmp == "unsern"} { regsub -- unsern $brain_tmp euren brain_tmp }
  223. if {$brain_tmp == "unseren"} { regsub -- unseren $brain_tmp euren brain_tmp }
  224.  
  225. if {$brain_tmp == "meiner"} { regsub -- meiner $brain_tmp deiner brain_tmp }
  226. if {$brain_tmp == "deiner"} { regsub -- deiner $brain_tmp meiner brain_tmp }
  227.  
  228. if {$brain_tmp == "will"} { regsub -- will $brain_tmp willst brain_tmp }
  229. if {$brain_tmp == "willst"} { regsub -- willst $brain_tmp will brain_tmp }
  230. if {$brain_tmp == "wollt"} { regsub -- wollt $brain_tmp will brain_tmp }
  231. if {$brain_tmp == "wollen"} { regsub -- wollen $brain_tmp wollt brain_tmp }
  232.  
  233. if {$brain_tmp == "habe"} { regsub -- habe $brain_tmp hast brain_tmp }
  234. if {$brain_tmp == "hast"} { regsub -- hast $brain_tmp hab brain_tmp }
  235. if {$brain_tmp == "habt"} { regsub -- habt $brain_tmp hab brain_tmp }
  236. if {$brain_tmp == "haben"} { regsub -- haben $brain_tmp habt brain_tmp }
  237.  
  238. if {$brain_tmp == "bin"} { regsub -- bin $brain_tmp bist brain_tmp }
  239. if {$brain_tmp == "bist"} { regsub -- bist $brain_tmp bin brain_tmp }
  240. if {$brain_tmp == "seid"} { regsub -- seid $brain_tmp bin brain_tmp }
  241. if {$brain_tmp == "sind"} { regsub -- sind $brain_tmp seid brain_tmp }
  242.  
  243.  
  244. if {$brain_tmp_zwo == "ich"} { regsub -- ich $brain_tmp_zwo du brain_tmp_zwo }
  245. if {$brain_tmp_zwo == "du"} { regsub -- du $brain_tmp_zwo ich brain_tmp_zwo }
  246. if {$brain_tmp_zwo == "ihr"} { regsub -- ihr $brain_tmp_zwo ich brain_tmp_zwo }
  247. if {$brain_tmp_zwo == "wir"} { regsub -- wir $brain_tmp_zwo ihr brain_tmp_zwo }
  248.  
  249. if {$brain_tmp_zwo == "mir"} { regsub -- mir $brain_tmp_zwo dir brain_tmp_zwo }
  250. if {$brain_tmp_zwo == "dir"} { regsub -- mir $brain_tmp_zwo mir brain_tmp_zwo }
  251. if {$brain_tmp_zwo == "euch"} { regsub -- euch $brain_tmp_zwo mir brain_tmp_zwo }
  252. if {$brain_tmp_zwo == "uns"} { regsub -- uns $brain_tmp_zwo euch brain_tmp_zwo }
  253.  
  254. if {$brain_tmp_zwo == "mein"} { regsub -- mein $brain_tmp_zwo dein brain_tmp_zwo }
  255. if {$brain_tmp_zwo == "dein"} { regsub -- dein $brain_tmp_zwo mein brain_tmp_zwo }
  256. if {$brain_tmp_zwo == "euer"} { regsub -- euer $brain_tmp_zwo mein brain_tmp_zwo }
  257. if {$brain_tmp_zwo == "unser"} { regsub -- unser $brain_tmp_zwo euer brain_tmp_zwo }
  258.  
  259. if {$brain_tmp_zwo == "meinem"} { regsub -- meinem $brain_tmp_zwo deinem brain_tmp_zwo }
  260. if {$brain_tmp_zwo == "deinem"} { regsub -- deinem $brain_tmp_zwo meinem brain_tmp_zwo }
  261. if {$brain_tmp_zwo == "euren"} { regsub -- euren $brain_tmp_zwo meinen brain_tmp_zwo }
  262. if {$brain_tmp_zwo == "unsern"} { regsub -- unsern $brain_tmp_zwo euren brain_tmp_zwo }
  263. if {$brain_tmp_zwo == "unseren"} { regsub -- unseren $brain_tmp_zwo euren brain_tmp_zwo }
  264.  
  265. if {$brain_tmp_zwo == "meiner"} { regsub -- meiner $brain_tmp_zwo deiner brain_tmp_zwo }
  266. if {$brain_tmp_zwo == "deiner"} { regsub -- deiner $brain_tmp_zwo meiner brain_tmp_zwo }
  267.  
  268. if {$brain_tmp_zwo == "will"} { regsub -- will $brain_tmp_zwo willst brain_tmp_zwo }
  269. if {$brain_tmp_zwo == "willst"} { regsub -- willst $brain_tmp_zwo will brain_tmp_zwo }
  270. if {$brain_tmp_zwo == "wollt"} { regsub -- wollt $brain_tmp_zwo will brain_tmp_zwo }
  271. if {$brain_tmp_zwo == "wollen"} { regsub -- wollen $brain_tmp_zwo wollt brain_tmp_zwo }
  272.  
  273.  
  274. if {$brain_tmp_drei == "ich"} { regsub -- ich $brain_tmp_drei du brain_tmp_drei }
  275. if {$brain_tmp_drei == "du"} { regsub -- du $brain_tmp_drei ich brain_tmp_drei }
  276. if {$brain_tmp_drei == "ihr"} { regsub -- ihr $brain_tmp_drei ich brain_tmp_drei }
  277. if {$brain_tmp_drei == "wir"} { regsub -- wir $brain_tmp_drei ihr brain_tmp_drei }
  278.  
  279. if {$brain_tmp_drei == "mir"} { regsub -- mir $brain_tmp_drei dir brain_tmp_drei }
  280. if {$brain_tmp_drei == "dir"} { regsub -- mir $brain_tmp_drei mir brain_tmp_drei }
  281. if {$brain_tmp_drei == "euch"} { regsub -- euch $brain_tmp_drei mir brain_tmp_drei }
  282. if {$brain_tmp_drei == "uns"} { regsub -- uns $brain_tmp_drei euch brain_tmp_drei }
  283.  
  284. if {$brain_tmp_drei == "meinem"} { regsub -- meinem $brain_tmp_drei deinem brain_tmp_drei }
  285. if {$brain_tmp_drei == "deinem"} { regsub -- deinem $brain_tmp_drei meinem brain_tmp_drei }
  286. if {$brain_tmp_drei == "euren"} { regsub -- euren $brain_tmp_drei meinen brain_tmp_drei }
  287. if {$brain_tmp_drei == "unsern"} { regsub -- unsern $brain_tmp_drei euren brain_tmp_drei }
  288. if {$brain_tmp_drei == "unseren"} { regsub -- unseren $brain_tmp_drei euren brain_tmp_drei }
  289.  
  290. if {$brain_tmp_drei == "meiner"} { regsub -- meiner $brain_tmp_drei deiner brain_tmp_drei }
  291. if {$brain_tmp_drei == "deiner"} { regsub -- deiner $brain_tmp_drei meiner brain_tmp_drei }
  292.  
  293. if {$brain_tmp_drei == "mein"} { regsub -- mein $brain_tmp_drei dein brain_tmp_drei }
  294. if {$brain_tmp_drei == "dein"} { regsub -- dein $brain_tmp_drei mein brain_tmp_drei }
  295. if {$brain_tmp_drei == "euer"} { regsub -- euer $brain_tmp_drei mein brain_tmp_drei }
  296. if {$brain_tmp_drei == "unser"} { regsub -- unser $brain_tmp_drei euer brain_tmp_drei }
  297.  
  298. set tmpfile [open $brain_brain_url r]
  299. set output [split [read $tmpfile] "\r\n"]
  300. close $tmpfile
  301. set output_vurb [lindex $output [rand [llength $output]]]
  302. set x_xx 1
  303. set treffer_eins [expr $brain_treffer - $b_subbbbb]
  304.  
  305. while {$x_xx < $treffer_eins} {
  306. incr x_xx
  307. set sentence_out [join $output_vurb]
  308. if {([lsearch -exact $output_vurb $brain_tmp] >-1)
  309. && ([lsearch -exact $output_vurb $brain_tmp_zwo] >-1)
  310. && ([lsearch -exact $output_vurb $brain_tmp_drei] >-1)
  311. && ([string compare $sentence_out $sentence_in] != 0)} {
  312. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  313. break
  314. } else {
  315. set output_vurb [lindex $output [rand [llength $output]]]
  316. }
  317. }
  318.  
  319. set x_xx 1
  320. set treffer_eins [expr $brain_treffer - $b_sub]
  321.  
  322. while {$x_xx < $treffer_eins} {
  323. incr x_xx
  324. set sentence_out [join $output_vurb]
  325. if {([lsearch $output_vurb $brain_tmp] >-1)
  326. && ([lsearch $output_vurb $brain_tmp_zwo] >-1)
  327. && ([string compare $sentence_out $sentence_in] != 0)} {
  328. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  329. return 0
  330. } else {
  331. set output_vurb [lindex $output [rand [llength $output]]]
  332. }
  333. }
  334.  
  335. set z_rq 1
  336. set treffer_eins [expr $brain_treffer - $b_subbb]
  337.  
  338. while {$z_rq < $treffer_eins} {
  339. incr z_rq
  340. set sentence_out [join $output_vurb]
  341. if {([lsearch $output_vurb $brain_tmp] >-1)
  342. && ([lsearch $output_vurb $brain_tmp_drei] >-1)
  343. && ([string compare $sentence_out $sentence_in] != 0)} {
  344. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  345. return 0
  346. } else {
  347. set output_vurb [lindex $output [rand [llength $output]]]
  348. }
  349. }
  350.  
  351. set y_rq 1
  352. set treffer_eins [expr $brain_treffer - $b_subbb]
  353.  
  354. while {$y_rq < $treffer_eins} {
  355. incr y_rq
  356. set sentence_out [join $output_vurb]
  357. if {([lsearch $output_vurb $brain_tmp_zwo] >-1)
  358. && ([lsearch $output_vurb $brain_tmp_drei] >-1)
  359. && ([string compare $sentence_out $sentence_in] != 0)} {
  360. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  361. return 0
  362. } else {
  363. set output_vurb [lindex $output [rand [llength $output]]]
  364. }
  365. }
  366.  
  367. set y_rq 1
  368. set treffer_eins [expr $brain_treffer - $b_subbbb]
  369.  
  370. while {$y_rq < $treffer_eins} {
  371. incr y_rq
  372. set sentence_out [join $output_vurb]
  373. if {([lsearch $output_vurb $brain_tmp_zwo] >-1)
  374. && ([string compare $sentence_out $sentence_in] != 0)} {
  375. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  376. return 0
  377. } else {
  378. set output_vurb [lindex $output [rand [llength $output]]]
  379. }
  380. }
  381.  
  382. set y_rq 1
  383.  
  384. while {$y_rq < $treffer_eins} {
  385. incr y_rq
  386. set sentence_out [join $output_vurb]
  387. if {([lsearch $output_vurb $brain_tmp_drei] >-1)
  388. && ([string compare $sentence_out $sentence_in] != 0)} {
  389. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  390. return 0
  391. } else {
  392. set output_vurb [lindex $output [rand [llength $output]]]
  393. }
  394. }
  395.  
  396. set y_rq 1
  397.  
  398. while {$y_rq < $treffer_eins} {
  399. incr y_rq
  400. set sentence_out [join $output_vurb]
  401. if {([lsearch $output_vurb $brain_tmp] >-1)
  402. && ([string compare $sentence_out $sentence_in] != 0)} {
  403. utimer [expr [llength $output_vurb]/2] [putserv "privmsg $chan :$sentence_out"]
  404. return 0
  405. } else {
  406. set output_vurb [lindex $output [rand [llength $output]]]
  407. }
  408. }
  409. return 1
  410. }
  411.  
  412. putlog "*** $botsnick's Gehirn erfolgreich initialisiert. *** (brain.tcl)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement