This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

egg-fu 2.0.2 problem

Support & discussion of released scripts, and announcements of new releases.
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

now i got this error

Code: Select all

[12:45] can't read "date": no such variable
    while executing
"clock scan $date"
    (procedure "getdate" line 2)
    invoked from within
"getdate time"
    (procedure "myage" line 6)
    invoked from within
"myage"
    invoked from within
"putlog "\002egg\002-\002fu\002 \002$eggfu\002 loaded! (age: [myage], sex: $sex)
""
    (file "scripts/egg-fu_2.0.2.tcl" line 940)
now my tcl locks like this

Code: Select all

#eggdrop1.6 +/-
#                              ___                             
#   .-----..-----..-----. __ .'  _|.--.--.
#   |  -__||  _  ||  _  ||__||  ._||  |  |
#   |_____||___  ||___  |    |__|  |_____|
#          |_____||_____|
#                              version 2.0.2
#				
#
#                              Copyright (C) 2002, ch3mical
#                              CitizenK@mad.scientist.com
#                              irc.secsup.org (EFnet)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
# Version Information (Major Additions and Bug Fixes!) can be found in the
# Version.txt included in the package.
#
# Feature explanations, instructions, and HELP can be found in
# How-to.txt included in the package.
#
##########################################################################

# If you use the following code in any form partial or modifed, at least #
# give the programmer who did this much hard work his deserved credit!   #

##########################################################################
#
# Greetz:
# Tigrrr, psynapse, dilvie, yo momma, mickrip, poke, #trax
# one_, sunrpc, ^PLAID^, Tenebrous, Byte, KottoN, raz0rchiq, Law
# tekneeks, vortek, peeps on the west side, ziricon, and everyone else
#
# Thanks to:
# brainiac for being the beta-test monkey
#
# email your suggestions/questions/comments/bitches to:
# CitizenK@mad.scientist.com
#
##########################################################################


#@##### SETUP THE SCRIPT #######
# Please change the details below

# To work in all channels leave this blank
set workingchans ""

# List any other bots you want to be ignored
set otherbots "dark-bot infobot soundbot"

# Location of your word file
set wordfile "brain.txt"

# [0/1] Set this to 0 to turn off misdirection-learning (not recommended)
set mdirect 1

# This is the character that will PRECEED all !trigger commands (if 
#  enabled), set this to "-no-" to make triggers work without it
set it "!"

# [0/1] Require a !trigger command for learning?
set lrntrig 0
set ltrigger "set"

# [0/1] Require a !trigger command for questions?
# It's ok to set both triggers the same
set asktrig 0
set atrigger "ask"

# [hjmnoptx] Require which modes to use learn?
#  Set to "-" to allow anyone to teach egg-fu
set req(ln) "-|-"

# [hjmnoptx] Require which modes to use ask?
#  Set to "-" to allow anyone to ask
set req(ak) "-"

# [hjmnoptx] Require which modes to use <ctcp> or <notice>
#  Set to "-" to allow all (not recommended)
set req(cn) "o|o"

# Set the subject range here, this refers to how much of the sentence
# egg-fu will process, (default=4)
set range 4

### DONE ###

# These fields can be modifed if you wish!

#  !Q=question !A=answer !U=who asked
#  above items are replaced by the script with proper values
proc randy {} {
 set apb {
  {I heard that !Q is !A}
  {Did you know that !Q is !A?}
  {!Q is !A}
  {I'm sure !Q is !A}
  {!U: someone said that !Q is !A}
  {!Q might be !A}
  {Didn't you say !Q is !A?}
  {Could it be !Q is !A?}
  {I guess !Q is !A}
  {Hmmm. I think !Q is !A}
  {Well, !Q is !A}
  {!U, !Q is probably !A}
  {I bet !Q is !A}
  {Isn't !Q !A?}
  {!U: !Q is !A}
  {Do you think !Q is !A?}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc randn {} {
 set apb {
  {I don't know, !U.}
  {I'm not sure what !Q is.}
  {No idea, !U.}
  {Why don't you enlighten me, !U?}
  {Can't sleep clowns will eat me!}
  {I've got no idea, !U...}
  {Yo momma knows about !Q!}
  {!U: don't ask me, I don't know.}
  {I don't know what !Q is, !U.}
  {Well maybe you should tell me, !U?}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc anyanimal {} {
 set randanimal {
  {goat}
  {llama}
  {lemming}
  {gerbil}
  {penguin}
  {dung beetle}
  {billy goat}
  {grizzly bear}
  {ostrich}
  {drunken transient}
  {donkey}
  {sea monkey}
  {buffalo}
  {dog}
  {monkey}
  {freaky little hamster}
  {monkey faced eel}
  {iguana}
  {hippo}
  {bull}
  {cow}
  {duck}
  {zebra}
  {giraffe}
 }
 return [lindex $randanimal [rand [llength $randanimal]]]
}

# add/change these to personalize your bot!
proc anycolor {} {
 set apb {
  {red}
  {yellow}
  {orange}
  {green}
  {blue}
  {brown}
  {pink}
  {purple}
  {magenta}
  {black}
  {white}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
# these are NOUNS
proc anyitem {} {
 set apb {
  {screw driver}
  {fire hose}
  {corndog}
  {wrench}
  {excrement}
  {pig cheese}
  {barbie doll}
  {bleeding pimple}
  {trout}
  {headless corpse}
  {cattle prod}
  {blowup sheep}
  {dirty diaper}
  {dried cum stain}
  {portable cheese grater}
  {bottle of prozac}
  {flying detachable penis}
  {condom}
  {severed head}
  {UNIX manual}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
# these are ADJECTIVES
proc anyadj {} {
 set apb {
  {stupid}
  {silly}
  {ugly}
  {smelly}
  {hairy}
  {sticky}
  {used}
  {green}
  {pink}
  {purple}
  {abused}
  {torn}
  {broken}
  {squashed}
  {crusty}
  {thin}
  {fat}
  {old}
  {slick}
  {slippery}
  {spicy}
  {spiked}
  {blown up}
 }
 return [lindex [concat [concat $apb]] [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc anyday {} {
 set randday {
  {Monday}
  {Tuesday}
  {Wednesday}
  {Thursday}
  {Friday}
  {Saturday}
  {Sunday}
  {some day}
  {any day}
  {tomorrow}
  {yesterday}
 }
 return [lindex $randday [rand [llength $randday]]]
}

# add/change these to personalize your bot!
proc anymonth {} {
 set randmonth {
  {January}
  {February}
  {March}
  {April}
  {May}
  {June}
  {July}
  {August}
  {September}
  {October}
  {November}
  {December}
 }
 return [lindex $randmonth [rand [llength $randmonth]]]
}

#####################################################
### Don't need to touch the stuff below this line ###
#$###################################################

bind pubm $req(ak) * askquestion

bind pubm $req(ln) "* is *" learnit
bind pubm $req(ln) "* isn't *" learnit
#bind pubm $req(ln) "* it's *" learnit
#bind pubm $req(ln) "* are *" learnit

bind pubm - "* =~ *" alterit
bind pubm - "*--" karma_action
bind pubm - "*++" karma_action

bind pub o|o thaw thawit
bind pub m|m lock lockit
bind pub o|o freeze freezeit
bind pub m|m unlock unlockit
bind pub o|o forget forgetit
bind pub -|- karma karma_info

#bind dcc o|o "freeze" dcc_freezeit
#bind dcc o|o "forget" dcc_forgetit

set eggfu "2.0.2"
set floodcount 0

proc low {i} {return [string tolower $i]}
proc bit {} {global it;if {$it=="-no-"} {return ""} {return $it}}
proc botsnick {} {global botnick;return $botnick}

proc isfrozen {arg} {
 set i 0
 set text [getword $arg]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]
 if {[lindex $text 0] == "!"} {set i 1}
 if {[lindex $text 0] == "~"} {set i 1}
 return $i
}

proc isinop {arg} {
 set i 0
 if {$arg=="<reply>"} {set i 1}
 if {$arg=="<action>"} {set i 1}
 if {$arg=="<ctcp>"} {set i 1}
 if {$arg=="<notice>"} {set i 1}
 return $i
}

proc alterit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 regsub -all " s/" $text " " text
 regsub -all "/" $text " / " text
 set fseperator [lsearch -exact $text "=~"]
 set seperator [lsearch -exact $text "/"]
 set alterstring [lrange $text 0 [expr $fseperator -1]]
 set alterwhat [lrange $text 2 [expr $seperator -1]]
 set alterwith [lrange $text [expr $seperator +1] e]
 regsub -all " /" $alterwith "" alterwith
 set question [lrange [getword $alterstring] 1 e]
 set searchforwhat [lsearch -exact $question $alterwhat]

 if {[isfrozen $alterstring]} {
  putnotc $nick "'$alterstring' has been frozen."
 } elseif {$question == ""} {
  putnotc $nick "No variable set!"
 } elseif {$searchforwhat == "-1"} {
  putnotc $nick "'$alterwhat' not in '$alterstring'!"
 } {
  regsub -all $alterwhat $question $alterwith result
  delword $alterstring
  addword $alterstring $result
  putlog "!egg-fu! Alter: '$question' is now: $result"
  putnotc $nick "'$alterstring' is altered."
 }
}

proc freezeit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "freeze"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [getword $what]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has already been frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Freezing '$what'"
  delword $what
  addword $what "! $text"
  putnotc $nick "'$what' is now frozen."
 } {putnotc $nick "Freeze what?"}
}

proc thawit {nick host hand chan text} {
 set wpos [lsearch -exact $text "thaw"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [getword $what]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]

 if {![isfrozen $what]} {
  putnotc $nick "'$what' isn't frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Thawing '$what'"
  delword $what
  addword $what [lrange $text 1 e]
  putnotc $nick "'$what' is now unfrozen."
 } {putnotc $nick "Thaw what?"}
}

proc lockit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "lock"]
 set what [lrange $text [expr $wpos + 1] e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has been frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Locking '$what'"
  delword $what
  addword $what "~"
  putnotc $nick "'$what' is now locked."
 } {putnotc $nick "Lock what?"}
}

proc unlockit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "unlock"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [lindex [getword $what] e]

 if {$text == "~" && $what != ""} {
  delword $what
  putlog "!egg-fu! Unlocked '$what'"
  putnotc $nick "'$what' is now unlocked."
 } {putnotc $nick "Unlock what?"}
}

proc forgetit {nick host hand chan text} {
 global botsnick
 set wpos [lsearch -exact $text "forget"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [lrange [getword $what] 1 e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has been frozen."
 } elseif {$text == ""} {
  putnotc $nick "'$what' not found."
 } elseif {$what != "" && [llength $what] < 3} {
  delword $what
  putnotc $nick "'$what' forgotten."
 } {putnotc $nick "Forget what?"}
}

proc karma_info {nick host hand chan text} {
 global botsnick
 set karma_action [lindex $text 0]
 regsub -all "\\\?" $text "" text
 set karma [lindex $text 1]
 if {$karma == "me"} { set karma $nick }

 if {$karma == ""} {
  putnotc $nick "You have not entered a karma option (karma for/set/reset)"
 } elseif {$karma_action == "for"} {
  set answer [lrange [getword "<karma> $karma"] 1 e]
  if {$answer == "" || $answer == "0"} {
   putchan $chan "$karma has neutral karma"
  } {
   putchan $chan "$karma has karma of $answer"
  }
 } elseif {$karma_action == "set"} {
  set karma_setas [lindex $text 2]
  if {$karma == $nick} {
   putnotc $nick "Please don't karma yourself."
  } elseif {$karma_setas != ""} {
   putlog "!egg-fu! Karma: $karma been changed to $karma_setas"
   delword "<karma> $karma"
   addword "<karma> $karma" $karma_setas
   putchan $chan "$karma has now been set to $karma_setas"
  } {
   putnotc $nick "You have not entered a set value! (karma set <karma> <new value>)"
  }
 } elseif {$karma_action == "reset"} {
  if {$karma == $nick} {
   putnotc $nick "Please don't karma yourself."
  } else {
   delword "<karma> $karma"
   addword "<karma> $karma" ""
   putchan $chan "$karma has been reset"
  }
 }
}

proc karma_action {nick host hand chan text} {
 global botsnick
 regsub -all "\\\+\\\+" $text " \+\+" text
 regsub -all "\\\-\\\-" $text " \-\-" text
 set karma [lindex $text 0]
 set question [lrange [getword "<karma> $karma"] 1 e]
 if {$karma == "me"} {set karma $nick}
		
 if {$question == ""} {
  addword "<karma> $karma" 1
  putlog "!egg-fu! Karma: $karma set to 1"
 } elseif {[low $karma] == [low $nick]} {
  putnotc $nick "You cannot give yourself karma."
 } else {
  if {[lsearch -exact $text "\+\+"] == -1} {
   incr question -1
  } {
   incr question 1
  }
  delword "<karma> $karma"
  addword "<karma> $karma" $question
  putlog "!egg-fu! Karma: $karma set to $question"
 }
}

proc addword {keyword answer} {
  global botsnick wordfile mdirect
# let's learn from others
 if {$mdirect} {
  set fword [lindex $keyword 0]
#  putlog "!egg-fu! mDirect check: $fword"
  if {[string match *:* $fword]} { 
   if {[llength $keyword]>1} {set keyword [lrange $keyword 1 e]
   } {regsub -all ":" $keyword "" keyword}
#   putlog "!egg-fu! Cauterized: $fword"
  }
 }

# fix the 'mysterious disappearances' bug
 set feeler [lrange [getword $keyword] 1 e]
 if {$keyword != $feeler && ![isfrozen $keyword]} {
  set puts "$keyword => $answer"
  regsub -all "\\{" $puts "" puts
  regsub -all "\\}" $puts "" puts
  set fh [open $wordfile a]
  puts $fh $puts
  close $fh
  putlog "!egg-fu! Learn: $keyword => $answer"
 }
}

proc getword {keyword} {
 global botsnick wordfile
 set foundone 0
 set returnit {}
 set fh [open $wordfile r]
 while {![eof $fh]} {
  set stdin [string trim [gets $fh]]
  if {[eof $fh]} {break}
  set breaker [lsearch -exact $stdin "=>"]
  set getkey [low [lrange $stdin 0 [expr $breaker - 1]]]
  set getresult [low [lrange $stdin [expr $breaker + 1] e]]
  if {[string match -nocase "* $getkey *" "@ $keyword @"] || [string match -nocase "* $keyword *" "@ $getkey @"]} {
   set returnit $stdin;set foundone 1
   if {[rand 4]==1} {break}
  }
 }
 close $fh
 if {$foundone!=0} {return [string trim $returnit]}
}

proc delword {keyword} {
 global botsnick wordfile
 set fh [open $wordfile r]
 set return {}
 set del 0
 while {![eof $fh]} {
  set stdin [string trim [gets $fh]]
  set breaker [lsearch -exact $stdin "=>"]
  set getkey [low [lrange $stdin 0 [expr $breaker - 1]]]
  if {[eof $fh]} {break}
  if {![string match -nocase "* $keyword *" " $getkey "]} {
   lappend return $stdin
  } {incr del 1}
 }
 close $fh;
 set fh [open $wordfile w]
 foreach a $return {puts $fh $a}
 close $fh
 return $del
}

proc anynick {chan} { 
 global botsnick
 set apb [botsnick]
 while {$apb == [botsnick]} {
  if {$apb != [botsnick]} {break}
  set apb [lindex [split [chanlist "$chan"]] [rand [llength [split [chanlist "$chan"]]]]]
 }
 return $apb
}

proc anyrandq {text} {
 regsub -all "\\| " $text "\t" text
 set randq [lindex [split $text \t] [rand [llength [split $text \t]]]]
 return $randq
}

proc randomize {q n c} {
 set israndom [lsearch -exact $q "|"]
 if {$israndom!=-1} {set q [anyrandq $q]}
# i plan on adding other $options in the future
 regsub -all \\\$date $q [ctime [unixtime]] q
 regsub -all \\\$month $q [anymonth] q
 regsub -all \\\$day $q [anyday] q
 regsub -all \\\$animal $q [anyanimal] q
 regsub -all \\\$nick $q [anynick $c] q
# new as of 1.9
 regsub -all \\\$item $q [anyitem] q
 regsub -all \\\$adj $q [anyadj] q
# new as of 2.0
 regsub -all \\\$birthday $q [happybday] q
 regsub -all \\\$age $q [myage] q
 regsub -all \\\$sex $q [mysex] q
# regsub -all \\\{ $q "" q
# regsub -all \\\} $q "" q
 return [string trim $q]
}

proc mysex {} {
 set bc [open birth_certificate.egg r]
 set sex [gets $bc]
 set sex [gets $bc]
 close $bc;return $sex
}

proc myage {} {
 set bc [open birth_certificate.egg r]
 set bdate [gets $bc]
 close $bc

 set ztime [unoctal [mconv [getdate time]]]
 set btime [unoctal [mconv [lindex $bdate 1]]]
 set bdate [lindex $bdate 0]
 set today [getdate date]
 set month [unoctal [lindex [split $today /] 0]]
 set bmonth [unoctal [lindex [split $bdate /] 0]]
 set zyear [getdate year]
 set byear [lindex [split $bdate /] 2]
#putlog "$ztime $btime $bdate $today $month $bmonth $zyear $byear"
 if {$today==$bdate} {
  return [lconv [expr $ztime - $btime]]
 } elseif {$month==$bmonth} {
  return "[expr [unoctal [lindex [split $today /] 1]] - [unoctal [lindex [split $bdate /] 1]]] days"
 } elseif {$zyear==$byear} {
  return "[expr $month - $bmonth] months"
 } else {
  return "[expr $zyear - $byear] years"
 }
}

proc lconv {mins} {
 set i 0;set n $mins;set hour 0
 while {$i<$n} {
  incr i
  if {$i>$n} {break}
  if {$mins>59} {incr mins -60;incr hour}
 }
 set mins [unoctal $mins]
 set hour [unoctal $hour]
 #1440=24
 if {$mins!=0} {return "$hour hrs, $mins min"
 } {return "$hour hrs"}
}

proc mconv {args} {return [expr [lindex [split $args :] 1] + ([unoctal [lindex [split $args :] 0]] * 60)]}

proc getdate {arg} {
 set system [split [clock format [clock scan $date] -format "%m/%d/%Y@%H:%M"] @]
 set date [split [lindex $system 0] /]
 set time [lindex $system 1]
 set month [lindex $date 0]
 set day [lindex $date 1]
 set year [lindex $date 2]
 set date [join $date /]

 if {$arg=="date"} {return $date}
 if {$arg=="time"} {return $time}
 if {$arg=="month"} {return $month}
 if {$arg=="day"} {return $day}
 if {$arg=="year"} {return $year}
}

proc unoctal {args} {
 set args [split $args {}]
 set n [llength $args]
 set i 0
 while {$i<$n} {
  if {[string match 0 [lindex $args 0]]} {regsub -all "0 " $args "" args}
  incr i;set n [llength $args]
  if {$i>$n} {break}
 }
 return [join $args {}]
}

proc happybday {} {
 set bc [open birth_certificate.egg r]
 set bdate [lindex [gets $bc] 0];close $bc
 set bdiff [myage]

# !B is for born (birthdate), !D is for difference (age)
 set bday {
  {I was born on !B. I'm only !D old}
  {My birthday is !B}
  {My birthday is !B}
  {I'm only !D old!}
  {}
 }
 regsub -all "!B" $bday $bdate bday
 regsub -all "!D" $bday $bdiff bday
 return [lindex $bday [rand [llength $bday]]]
}

proc learnit {nick host hand chan text} {
 global botsnick lrntrig ltrigger otherbots req

 regsub -all "\\\"" $text "'" text

# death to leet hax0rz!
# regsub -all "\\\\n|\\\\a|\\\\b|\\\\f|\\\\r|\\\\t|\\\\v" $text "" text
 regsub -all "\007|\015|\022|\026|\028|\030" $text "" text
 regsub -all "\\\\" $text "\\\\\\\\" text
# regsub -all "\\\[" $text "\\\\\\\[" text
# regsub -all "\\\]" $text "\\\\\\\]" text

# regsub -nocase "'s " $text " is " text
 regsub -nocase " let is " $text " lets " text
 regsub -nocase " isn't " $text " is not " text
 set text [fixgrammar $text]
 
 set start [low [lindex $text 0]]
 set ignorewords {[botsnick] who what ok}

 if {($lrntrig) && [lindex $text 0]!="[bit]$ltrigger"} {
  set do_nothing 1
 } elseif {![string match *$nick* $otherbots]} {
# lets not forget about stripping! wooohoooo
  if {$lrntrig} {
   regsub -all -nocase "[bit]$ltrigger " $text "" text
  }

  set original {}
  set type [lsearch -exact [low $text] "is"]
  if {$type!="-1"} {set type "is"} {set type "are"}

  set whom [lsearch -exact $text "$type"]
  set getword [getword [lrange $text 0 [expr $whom -1]]]
  if {$getword!=""} {
   set breaker [lsearch -exact $getword "=>"]
   set keyword [lrange $getword 0 [expr $breaker - 1]]
   set original [lrange $getword [expr $breaker + 1] e]
  } else {
   set keyword [lrange $text 0 [expr $whom -1]]
  }

  set response [lrange $text [expr $whom + 1] e]

  if {![isinop [lindex $response 0]]} {
   set ll [lindex [split [lindex $response e] {}] e]
   while {$ll=="."} {
    set response "[lrange $response 0 end-1] [join [lrange [split [lindex $response e] {}] 0 end-1] {}]"
    set response [string trim $response]
    set ll [lindex [split [lindex $response e] {}] e]
   }
  } {
   if {![matchattr $hand $req(cn)]} {
    putnotc $nick "Sorry, you don't have access to do that."
    return 0
   }
  }

  set also [lindex $text [expr $whom + 1]]
# replace a few things
  regsub -all -nocase " my " $response " $nick's " response
  regsub -all -nocase " i am " $response " $nick is " response
  regsub -all -nocase "[botsnick] is " $response "I am " response
  regsub -all -nocase " [botsnick]'s " $response " my " response
  regsub -all -nocase "[botsnick], " $text "" text

  if {[string match *$start* $ignorewords]} {set text [lrange $text 1 e]}

  if {[string match -nocase no, $start] && ![isfrozen $keyword]} {delword $keyword}

  if {$original != "" && ![isfrozen $keyword]} {
   delword $keyword
   set response "$original | $response"
   set original {}
  }

  if {($original == "" && ![isfrozen $keyword]) && ([string length $keyword] >= 3 && [string length $keyword] <= 100)}  {
#   if {$start == "no,"} {putchan $chan "Ok $nick"}
   addword $keyword $response
  }
 }
}

proc fixgrammar {text} {
# If you can think of any other common things that need to be converted
# PLEASE tell me!! :)

 set text "@ $text @"
 regsub -all -nocase " i " $text " I " text
 regsub -all -nocase " i'm " $text " I'm " text
 regsub -all -nocase " i'd " $text " I'd " text
 regsub -all -nocase " i've " $text " I've " text
 regsub -all -nocase " i'll " $text " I'll " text
 regsub -all -nocase " u " $text " you " text
 regsub -all -nocase " r " $text " are " text
 regsub -all -nocase " ur " $text " your " text
 regsub -all -nocase " yer" $text " your" text
 regsub -all -nocase " fav " $text " favorite " text
 regsub -all -nocase " fav. " $text " favorite " text
 regsub -all -nocase " bish " $text " bitch " text
 regsub -all -nocase " whut " $text " what " text
 regsub -all -nocase " werd " $text " word " text
 regsub -all -nocase " werk " $text " work " text
 regsub -all -nocase " prolly " $text " probably " text
 regsub -all -nocase " better then " $text " better than " text
 return [string trim [lrange $text 1 [expr [llength $text] - 2]]]
}

proc askquestion {nick host hand chan text} {
 global botnick botsnick wordfile floodcount workingchans eggfu
 global asktrig atrigger randmy randmn otherbots range

 set botsnick [low $botnick]
 set lownick [low $nick]

 if {($asktrig && [lindex $text 0]!="[bit]$atrigger") || [string match -nocase *$nick* $otherbots]} {
  set do_nothing 1
 } elseif {(([lsearch -exact [low $workingchans] [low $chan]] != -1) || ($workingchans == "")) && [string length $text] != 1} {
		
  # dont forget to snip the !cmd	
  if {$asktrig == 1 && [lindex $text 0] == $atrigger} {regsub -all "$atrigger " $text "" text}

  regsub -all "\\\"" $text "'" text
  regsub -all "\\\!" $text "" text
  regsub -all "\\\?" $text "" text

  set ll [lindex [split [lindex $text e] {}] e]
  while {$ll=="."} {
   set text "[lrange $text 0 end-1] [join [lrange [split [lindex $text e] {}] 0 end-1] {}]"
   set text [string trim $text]
   set ll [lindex [split [lindex $text e] {}] e]
  }

  set text [string trim $text]

  set q(start) [lindex $text 0]
  set q(end) [lrange $text [expr [llength $text] - $range] e]
  set q(long) $text

  #if {$getquestion == "me?"} {set q(end) $nick}
  #regsub -all "me?" $q(end) "$nick" q(end)
  regsub -all "\007|\015|\022|\026|\028|\030" $q(start) "" q(start)

  set getword [getword $q(end)]
  set breaker [lsearch -exact $getword "=>"]
  set keyword [lrange $getword 0 [expr $breaker - 1]]
  if {[isfrozen $keyword]} {incr breaker}
  set q(ans) [lrange $getword [expr $breaker + 1] e]

  if {[isfrozen $q(ans)]} {set q(ans) [lrange $q(ans) 2 e]}
  if {$q(long)=="egg-fu"} {set q(ans) "<action> is running \002egg-fu $eggfu\002, by ch3mical"} 
  #if {$q(ans)=="" && $q(end)!=$q(long)} {set q(ans) $q(end)}

  set q(ans) [randomize $q(ans) $nick $chan]
  regsub -all "\\\$question" $q(ans) "$text" q(ans)
  regsub -all "\\\$keyword" $q(ans) "$q(long)" q(ans)
  regsub -all "\\{" $keyword "" keyword
  regsub -all "\\}" $keyword "" keyword
  regsub -all "\\{" $q(ans) "" q(ans)
  regsub -all "\\}" $q(ans) "" q(ans)

  set sendto $chan
  if {$q(start) == "tell"} {
   set whom [lsearch -exact $text "tell"] 
   set target [lindex $text [expr $whom + 1]]
   if {$target!=""} { 
    set sendto $target
    regsub -all "\\\$who" $q(ans) $target q(ans)
   }
  } {regsub -all "\\\$who" $q(ans) $nick q(ans)}

  if {$q(ans)!="" && $q(ans)!="~"} {
   set getstart [lindex $q(ans) 0] 
   set getrest [lrange $q(ans) 1 e]

   if {$getstart == "<reply>"} {
    putserv "PRIVMSG $sendto :$getrest"
    if {$sendto!=$nick && $sendto!=$chan} {putnotc $nick "Told $sendto \"$getrest\""}
   } elseif {$getstart == "<ctcp>"} {putserv "PRIVMSG $nick :\001$getrest\001"
   } elseif {$getstart == "<notice>"} {putnotc $sendto "$getrest" 
   } elseif {$getstart == "<action>"} {putserv "PRIVMSG $sendto :\001ACTION $getrest\001"
   } {
    regsub -all "!Q" [randy] $keyword randmy
    regsub -all "!A" $randmy $q(ans) randmy
    regsub -all "!U" $randmy $nick randmy
    putserv "PRIVMSG $sendto :$randmy"
   }
  } elseif {[string match -nocase [botsnick]* $q(start)] && $q(end) != ""} {
   if {[lindex $q(end) 0]==$q(start)} {set q(end) [lrange $q(end) 1 e]}
   regsub -all "\\?" $q(end) "" q(end)
   regsub -all "!Q" [randn] $q(end) randmn
   regsub -all "!A" $randmn $q(ans) randmn
   regsub -all "!U" $randmn $nick randmn
   putserv "PRIVMSG $sendto :$randmn"
  }
 }
 return 0
}

if {![file exists birth_certificate.egg]} {
 set coin [rand 10]
 if {$coin>=5} {set sex boy} {set sex girl}
 putlog "\002IT'S A [string toupper $sex]!!\002"
 putlog "\002Congratulations!\002 You are now the proud parent of an \002egg-fu\002 bot!"
 set bdate [clock format [clock seconds] -format "%m/%d/%Y@%H:%M"]
 putlog "I was born on \002$bdate\002"
 set bc [open birth_certificate.egg w]
 puts $bc $bdate
 puts $bc $sex;close $bc
 if {![file exists $wordfile]} {
  putlog "Creating Brain...";set wf [open $wordfile w]
 } {set wf [open $wordfile a+]}
 puts $wf "born => <reply> \$birthday"
 puts $wf "birthday => <reply> \$birthday"
 puts $wf "how old are you => <reply> I'm \$age old | <action> is \$age old"
 puts $wf "boy or girl => <reply> I'm a \$sex! | <action> is a \$sex"
 puts $wf "asl => <reply> \$age/\$sex/earth!"
 puts $wf "how => ~"
 puts $wf "who => ~"
 puts $wf "why => ~"
 puts $wf "what => ~"
 puts $wf "when => ~"
 puts $wf "where => ~"
 puts $wf "wtf => ~"
 close $wf
}
set bc [open birth_certificate.egg r]
set sex [gets $bc];set sex [gets $bc];close $bc
putlog "\002egg\002-\002fu\002 \002$eggfu\002 loaded! (age: [myage], sex: $sex)"
after i put this

Code: Select all

 set date [split [lindex $system 0] /]
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

maybe i put samthing from ????? reput it and give me full skript code :) ty
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

Use the first suggestion by speechles, the one using "clock seconds" rather than "clock scan $date"...
That one is correct...
NML_375
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

dozent work

Code: Select all

    while executing
"lindex $date 0"
    (procedure "getdate" line 4)
    invoked from within
"getdate time"
    (procedure "myage" line 6)
    invoked from within
"myage"
    invoked from within
"putlog "\002egg\002-\002fu\002 \002$eggfu\002 loaded! (age: [myage], sex: $sex)
""
    (file "scripts/egg-fu_2.0.2.tcl" line 940)
    invoked from within
"source scripts/egg-fu_2.0.2.tcl"

Code: Select all

#eggdrop1.6 +/-
#                              ___                             
#   .-----..-----..-----. __ .'  _|.--.--.
#   |  -__||  _  ||  _  ||__||  ._||  |  |
#   |_____||___  ||___  |    |__|  |_____|
#          |_____||_____|
#                              version 2.0.2
#				
#
#                              Copyright (C) 2002, ch3mical
#                              CitizenK@mad.scientist.com
#                              irc.secsup.org (EFnet)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
# Version Information (Major Additions and Bug Fixes!) can be found in the
# Version.txt included in the package.
#
# Feature explanations, instructions, and HELP can be found in
# How-to.txt included in the package.
#
##########################################################################

# If you use the following code in any form partial or modifed, at least #
# give the programmer who did this much hard work his deserved credit!   #

##########################################################################
#
# Greetz:
# Tigrrr, psynapse, dilvie, yo momma, mickrip, poke, #trax
# one_, sunrpc, ^PLAID^, Tenebrous, Byte, KottoN, raz0rchiq, Law
# tekneeks, vortek, peeps on the west side, ziricon, and everyone else
#
# Thanks to:
# brainiac for being the beta-test monkey
#
# email your suggestions/questions/comments/bitches to:
# CitizenK@mad.scientist.com
#
##########################################################################


#@##### SETUP THE SCRIPT #######
# Please change the details below

# To work in all channels leave this blank
set workingchans ""

# List any other bots you want to be ignored
set otherbots "dark-bot infobot soundbot"

# Location of your word file
set wordfile "brain.txt"

# [0/1] Set this to 0 to turn off misdirection-learning (not recommended)
set mdirect 1

# This is the character that will PRECEED all !trigger commands (if 
#  enabled), set this to "-no-" to make triggers work without it
set it "!"

# [0/1] Require a !trigger command for learning?
set lrntrig 0
set ltrigger "set"

# [0/1] Require a !trigger command for questions?
# It's ok to set both triggers the same
set asktrig 0
set atrigger "ask"

# [hjmnoptx] Require which modes to use learn?
#  Set to "-" to allow anyone to teach egg-fu
set req(ln) "-|-"

# [hjmnoptx] Require which modes to use ask?
#  Set to "-" to allow anyone to ask
set req(ak) "-"

# [hjmnoptx] Require which modes to use <ctcp> or <notice>
#  Set to "-" to allow all (not recommended)
set req(cn) "o|o"

# Set the subject range here, this refers to how much of the sentence
# egg-fu will process, (default=4)
set range 4

### DONE ###

# These fields can be modifed if you wish!

#  !Q=question !A=answer !U=who asked
#  above items are replaced by the script with proper values
proc randy {} {
 set apb {
  {I heard that !Q is !A}
  {Did you know that !Q is !A?}
  {!Q is !A}
  {I'm sure !Q is !A}
  {!U: someone said that !Q is !A}
  {!Q might be !A}
  {Didn't you say !Q is !A?}
  {Could it be !Q is !A?}
  {I guess !Q is !A}
  {Hmmm. I think !Q is !A}
  {Well, !Q is !A}
  {!U, !Q is probably !A}
  {I bet !Q is !A}
  {Isn't !Q !A?}
  {!U: !Q is !A}
  {Do you think !Q is !A?}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc randn {} {
 set apb {
  {I don't know, !U.}
  {I'm not sure what !Q is.}
  {No idea, !U.}
  {Why don't you enlighten me, !U?}
  {Can't sleep clowns will eat me!}
  {I've got no idea, !U...}
  {Yo momma knows about !Q!}
  {!U: don't ask me, I don't know.}
  {I don't know what !Q is, !U.}
  {Well maybe you should tell me, !U?}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc anyanimal {} {
 set randanimal {
  {goat}
  {llama}
  {lemming}
  {gerbil}
  {penguin}
  {dung beetle}
  {billy goat}
  {grizzly bear}
  {ostrich}
  {drunken transient}
  {donkey}
  {sea monkey}
  {buffalo}
  {dog}
  {monkey}
  {freaky little hamster}
  {monkey faced eel}
  {iguana}
  {hippo}
  {bull}
  {cow}
  {duck}
  {zebra}
  {giraffe}
 }
 return [lindex $randanimal [rand [llength $randanimal]]]
}

# add/change these to personalize your bot!
proc anycolor {} {
 set apb {
  {red}
  {yellow}
  {orange}
  {green}
  {blue}
  {brown}
  {pink}
  {purple}
  {magenta}
  {black}
  {white}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
# these are NOUNS
proc anyitem {} {
 set apb {
  {screw driver}
  {fire hose}
  {corndog}
  {wrench}
  {excrement}
  {pig cheese}
  {barbie doll}
  {bleeding pimple}
  {trout}
  {headless corpse}
  {cattle prod}
  {blowup sheep}
  {dirty diaper}
  {dried cum stain}
  {portable cheese grater}
  {bottle of prozac}
  {flying detachable penis}
  {condom}
  {severed head}
  {UNIX manual}
 }
 return [lindex $apb [rand [llength $apb]]]
}

# add/change these to personalize your bot!
# these are ADJECTIVES
proc anyadj {} {
 set apb {
  {stupid}
  {silly}
  {ugly}
  {smelly}
  {hairy}
  {sticky}
  {used}
  {green}
  {pink}
  {purple}
  {abused}
  {torn}
  {broken}
  {squashed}
  {crusty}
  {thin}
  {fat}
  {old}
  {slick}
  {slippery}
  {spicy}
  {spiked}
  {blown up}
 }
 return [lindex [concat [concat $apb]] [rand [llength $apb]]]
}

# add/change these to personalize your bot!
proc anyday {} {
 set randday {
  {Monday}
  {Tuesday}
  {Wednesday}
  {Thursday}
  {Friday}
  {Saturday}
  {Sunday}
  {some day}
  {any day}
  {tomorrow}
  {yesterday}
 }
 return [lindex $randday [rand [llength $randday]]]
}

# add/change these to personalize your bot!
proc anymonth {} {
 set randmonth {
  {January}
  {February}
  {March}
  {April}
  {May}
  {June}
  {July}
  {August}
  {September}
  {October}
  {November}
  {December}
 }
 return [lindex $randmonth [rand [llength $randmonth]]]
}

#####################################################
### Don't need to touch the stuff below this line ###
#$###################################################

bind pubm $req(ak) * askquestion

bind pubm $req(ln) "* is *" learnit
bind pubm $req(ln) "* isn't *" learnit
#bind pubm $req(ln) "* it's *" learnit
#bind pubm $req(ln) "* are *" learnit

bind pubm - "* =~ *" alterit
bind pubm - "*--" karma_action
bind pubm - "*++" karma_action

bind pub o|o thaw thawit
bind pub m|m lock lockit
bind pub o|o freeze freezeit
bind pub m|m unlock unlockit
bind pub o|o forget forgetit
bind pub -|- karma karma_info

#bind dcc o|o "freeze" dcc_freezeit
#bind dcc o|o "forget" dcc_forgetit

set eggfu "2.0.2"
set floodcount 0

proc low {i} {return [string tolower $i]}
proc bit {} {global it;if {$it=="-no-"} {return ""} {return $it}}
proc botsnick {} {global botnick;return $botnick}

proc isfrozen {arg} {
 set i 0
 set text [getword $arg]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]
 if {[lindex $text 0] == "!"} {set i 1}
 if {[lindex $text 0] == "~"} {set i 1}
 return $i
}

proc isinop {arg} {
 set i 0
 if {$arg=="<reply>"} {set i 1}
 if {$arg=="<action>"} {set i 1}
 if {$arg=="<ctcp>"} {set i 1}
 if {$arg=="<notice>"} {set i 1}
 return $i
}

proc alterit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 regsub -all " s/" $text " " text
 regsub -all "/" $text " / " text
 set fseperator [lsearch -exact $text "=~"]
 set seperator [lsearch -exact $text "/"]
 set alterstring [lrange $text 0 [expr $fseperator -1]]
 set alterwhat [lrange $text 2 [expr $seperator -1]]
 set alterwith [lrange $text [expr $seperator +1] e]
 regsub -all " /" $alterwith "" alterwith
 set question [lrange [getword $alterstring] 1 e]
 set searchforwhat [lsearch -exact $question $alterwhat]

 if {[isfrozen $alterstring]} {
  putnotc $nick "'$alterstring' has been frozen."
 } elseif {$question == ""} {
  putnotc $nick "No variable set!"
 } elseif {$searchforwhat == "-1"} {
  putnotc $nick "'$alterwhat' not in '$alterstring'!"
 } {
  regsub -all $alterwhat $question $alterwith result
  delword $alterstring
  addword $alterstring $result
  putlog "!egg-fu! Alter: '$question' is now: $result"
  putnotc $nick "'$alterstring' is altered."
 }
}

proc freezeit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "freeze"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [getword $what]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has already been frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Freezing '$what'"
  delword $what
  addword $what "! $text"
  putnotc $nick "'$what' is now frozen."
 } {putnotc $nick "Freeze what?"}
}

proc thawit {nick host hand chan text} {
 set wpos [lsearch -exact $text "thaw"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [getword $what]
 set apos [lsearch -exact $text "=>"]
 set text [lrange $text [expr $apos + 1] e]

 if {![isfrozen $what]} {
  putnotc $nick "'$what' isn't frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Thawing '$what'"
  delword $what
  addword $what [lrange $text 1 e]
  putnotc $nick "'$what' is now unfrozen."
 } {putnotc $nick "Thaw what?"}
}

proc lockit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "lock"]
 set what [lrange $text [expr $wpos + 1] e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has been frozen."
 } elseif {$what != ""} {
  putlog "!egg-fu! Locking '$what'"
  delword $what
  addword $what "~"
  putnotc $nick "'$what' is now locked."
 } {putnotc $nick "Lock what?"}
}

proc unlockit {nick host hand chan text} {
 global botsnick
 regsub -all "[botsnick], " $text "" text
 set wpos [lsearch -exact $text "unlock"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [lindex [getword $what] e]

 if {$text == "~" && $what != ""} {
  delword $what
  putlog "!egg-fu! Unlocked '$what'"
  putnotc $nick "'$what' is now unlocked."
 } {putnotc $nick "Unlock what?"}
}

proc forgetit {nick host hand chan text} {
 global botsnick
 set wpos [lsearch -exact $text "forget"]
 set what [lrange $text [expr $wpos + 1] e]
 set text [lrange [getword $what] 1 e]

 if {[isfrozen $what]} {
  putnotc $nick "'$what' has been frozen."
 } elseif {$text == ""} {
  putnotc $nick "'$what' not found."
 } elseif {$what != "" && [llength $what] < 3} {
  delword $what
  putnotc $nick "'$what' forgotten."
 } {putnotc $nick "Forget what?"}
}

proc karma_info {nick host hand chan text} {
 global botsnick
 set karma_action [lindex $text 0]
 regsub -all "\\\?" $text "" text
 set karma [lindex $text 1]
 if {$karma == "me"} { set karma $nick }

 if {$karma == ""} {
  putnotc $nick "You have not entered a karma option (karma for/set/reset)"
 } elseif {$karma_action == "for"} {
  set answer [lrange [getword "<karma> $karma"] 1 e]
  if {$answer == "" || $answer == "0"} {
   putchan $chan "$karma has neutral karma"
  } {
   putchan $chan "$karma has karma of $answer"
  }
 } elseif {$karma_action == "set"} {
  set karma_setas [lindex $text 2]
  if {$karma == $nick} {
   putnotc $nick "Please don't karma yourself."
  } elseif {$karma_setas != ""} {
   putlog "!egg-fu! Karma: $karma been changed to $karma_setas"
   delword "<karma> $karma"
   addword "<karma> $karma" $karma_setas
   putchan $chan "$karma has now been set to $karma_setas"
  } {
   putnotc $nick "You have not entered a set value! (karma set <karma> <new value>)"
  }
 } elseif {$karma_action == "reset"} {
  if {$karma == $nick} {
   putnotc $nick "Please don't karma yourself."
  } else {
   delword "<karma> $karma"
   addword "<karma> $karma" ""
   putchan $chan "$karma has been reset"
  }
 }
}

proc karma_action {nick host hand chan text} {
 global botsnick
 regsub -all "\\\+\\\+" $text " \+\+" text
 regsub -all "\\\-\\\-" $text " \-\-" text
 set karma [lindex $text 0]
 set question [lrange [getword "<karma> $karma"] 1 e]
 if {$karma == "me"} {set karma $nick}
		
 if {$question == ""} {
  addword "<karma> $karma" 1
  putlog "!egg-fu! Karma: $karma set to 1"
 } elseif {[low $karma] == [low $nick]} {
  putnotc $nick "You cannot give yourself karma."
 } else {
  if {[lsearch -exact $text "\+\+"] == -1} {
   incr question -1
  } {
   incr question 1
  }
  delword "<karma> $karma"
  addword "<karma> $karma" $question
  putlog "!egg-fu! Karma: $karma set to $question"
 }
}

proc addword {keyword answer} {
  global botsnick wordfile mdirect
# let's learn from others
 if {$mdirect} {
  set fword [lindex $keyword 0]
#  putlog "!egg-fu! mDirect check: $fword"
  if {[string match *:* $fword]} { 
   if {[llength $keyword]>1} {set keyword [lrange $keyword 1 e]
   } {regsub -all ":" $keyword "" keyword}
#   putlog "!egg-fu! Cauterized: $fword"
  }
 }

# fix the 'mysterious disappearances' bug
 set feeler [lrange [getword $keyword] 1 e]
 if {$keyword != $feeler && ![isfrozen $keyword]} {
  set puts "$keyword => $answer"
  regsub -all "\\{" $puts "" puts
  regsub -all "\\}" $puts "" puts
  set fh [open $wordfile a]
  puts $fh $puts
  close $fh
  putlog "!egg-fu! Learn: $keyword => $answer"
 }
}

proc getword {keyword} {
 global botsnick wordfile
 set foundone 0
 set returnit {}
 set fh [open $wordfile r]
 while {![eof $fh]} {
  set stdin [string trim [gets $fh]]
  if {[eof $fh]} {break}
  set breaker [lsearch -exact $stdin "=>"]
  set getkey [low [lrange $stdin 0 [expr $breaker - 1]]]
  set getresult [low [lrange $stdin [expr $breaker + 1] e]]
  if {[string match -nocase "* $getkey *" "@ $keyword @"] || [string match -nocase "* $keyword *" "@ $getkey @"]} {
   set returnit $stdin;set foundone 1
   if {[rand 4]==1} {break}
  }
 }
 close $fh
 if {$foundone!=0} {return [string trim $returnit]}
}

proc delword {keyword} {
 global botsnick wordfile
 set fh [open $wordfile r]
 set return {}
 set del 0
 while {![eof $fh]} {
  set stdin [string trim [gets $fh]]
  set breaker [lsearch -exact $stdin "=>"]
  set getkey [low [lrange $stdin 0 [expr $breaker - 1]]]
  if {[eof $fh]} {break}
  if {![string match -nocase "* $keyword *" " $getkey "]} {
   lappend return $stdin
  } {incr del 1}
 }
 close $fh;
 set fh [open $wordfile w]
 foreach a $return {puts $fh $a}
 close $fh
 return $del
}

proc anynick {chan} { 
 global botsnick
 set apb [botsnick]
 while {$apb == [botsnick]} {
  if {$apb != [botsnick]} {break}
  set apb [lindex [split [chanlist "$chan"]] [rand [llength [split [chanlist "$chan"]]]]]
 }
 return $apb
}

proc anyrandq {text} {
 regsub -all "\\| " $text "\t" text
 set randq [lindex [split $text \t] [rand [llength [split $text \t]]]]
 return $randq
}

proc randomize {q n c} {
 set israndom [lsearch -exact $q "|"]
 if {$israndom!=-1} {set q [anyrandq $q]}
# i plan on adding other $options in the future
 regsub -all \\\$date $q [ctime [unixtime]] q
 regsub -all \\\$month $q [anymonth] q
 regsub -all \\\$day $q [anyday] q
 regsub -all \\\$animal $q [anyanimal] q
 regsub -all \\\$nick $q [anynick $c] q
# new as of 1.9
 regsub -all \\\$item $q [anyitem] q
 regsub -all \\\$adj $q [anyadj] q
# new as of 2.0
 regsub -all \\\$birthday $q [happybday] q
 regsub -all \\\$age $q [myage] q
 regsub -all \\\$sex $q [mysex] q
# regsub -all \\\{ $q "" q
# regsub -all \\\} $q "" q
 return [string trim $q]
}

proc mysex {} {
 set bc [open birth_certificate.egg r]
 set sex [gets $bc]
 set sex [gets $bc]
 close $bc;return $sex
}

proc myage {} {
 set bc [open birth_certificate.egg r]
 set bdate [gets $bc]
 close $bc

 set ztime [unoctal [mconv [getdate time]]]
 set btime [unoctal [mconv [lindex $bdate 1]]]
 set bdate [lindex $bdate 0]
 set today [getdate date]
 set month [unoctal [lindex [split $today /] 0]]
 set bmonth [unoctal [lindex [split $bdate /] 0]]
 set zyear [getdate year]
 set byear [lindex [split $bdate /] 2]
#putlog "$ztime $btime $bdate $today $month $bmonth $zyear $byear"
 if {$today==$bdate} {
  return [lconv [expr $ztime - $btime]]
 } elseif {$month==$bmonth} {
  return "[expr [unoctal [lindex [split $today /] 1]] - [unoctal [lindex [split $bdate /] 1]]] days"
 } elseif {$zyear==$byear} {
  return "[expr $month - $bmonth] months"
 } else {
  return "[expr $zyear - $byear] years"
 }
}

proc lconv {mins} {
 set i 0;set n $mins;set hour 0
 while {$i<$n} {
  incr i
  if {$i>$n} {break}
  if {$mins>59} {incr mins -60;incr hour}
 }
 set mins [unoctal $mins]
 set hour [unoctal $hour]
 #1440=24
 if {$mins!=0} {return "$hour hrs, $mins min"
 } {return "$hour hrs"}
}

proc mconv {args} {return [expr [lindex [split $args :] 1] + ([unoctal [lindex [split $args :] 0]] * 60)]}

proc getdate {arg} {
 set system [split [clock format [clock seconds] -format "%m/%d/%Y@%H:%M"] @]
 set time [lindex $system 1]
 set month [lindex $date 0]
 set day [lindex $date 1]
 set year [lindex $date 2]
 set date [join $date /]

 if {$arg=="date"} {return $date}
 if {$arg=="time"} {return $time}
 if {$arg=="month"} {return $month}
 if {$arg=="day"} {return $day}
 if {$arg=="year"} {return $year}
}

proc unoctal {args} {
 set args [split $args {}]
 set n [llength $args]
 set i 0
 while {$i<$n} {
  if {[string match 0 [lindex $args 0]]} {regsub -all "0 " $args "" args}
  incr i;set n [llength $args]
  if {$i>$n} {break}
 }
 return [join $args {}]
}

proc happybday {} {
 set bc [open birth_certificate.egg r]
 set bdate [lindex [gets $bc] 0];close $bc
 set bdiff [myage]

# !B is for born (birthdate), !D is for difference (age)
 set bday {
  {I was born on !B. I'm only !D old}
  {My birthday is !B}
  {My birthday is !B}
  {I'm only !D old!}
  {}
 }
 regsub -all "!B" $bday $bdate bday
 regsub -all "!D" $bday $bdiff bday
 return [lindex $bday [rand [llength $bday]]]
}

proc learnit {nick host hand chan text} {
 global botsnick lrntrig ltrigger otherbots req

 regsub -all "\\\"" $text "'" text

# death to leet hax0rz!
# regsub -all "\\\\n|\\\\a|\\\\b|\\\\f|\\\\r|\\\\t|\\\\v" $text "" text
 regsub -all "\007|\015|\022|\026|\028|\030" $text "" text
 regsub -all "\\\\" $text "\\\\\\\\" text
# regsub -all "\\\[" $text "\\\\\\\[" text
# regsub -all "\\\]" $text "\\\\\\\]" text

# regsub -nocase "'s " $text " is " text
 regsub -nocase " let is " $text " lets " text
 regsub -nocase " isn't " $text " is not " text
 set text [fixgrammar $text]
 
 set start [low [lindex $text 0]]
 set ignorewords {[botsnick] who what ok}

 if {($lrntrig) && [lindex $text 0]!="[bit]$ltrigger"} {
  set do_nothing 1
 } elseif {![string match *$nick* $otherbots]} {
# lets not forget about stripping! wooohoooo
  if {$lrntrig} {
   regsub -all -nocase "[bit]$ltrigger " $text "" text
  }

  set original {}
  set type [lsearch -exact [low $text] "is"]
  if {$type!="-1"} {set type "is"} {set type "are"}

  set whom [lsearch -exact $text "$type"]
  set getword [getword [lrange $text 0 [expr $whom -1]]]
  if {$getword!=""} {
   set breaker [lsearch -exact $getword "=>"]
   set keyword [lrange $getword 0 [expr $breaker - 1]]
   set original [lrange $getword [expr $breaker + 1] e]
  } else {
   set keyword [lrange $text 0 [expr $whom -1]]
  }

  set response [lrange $text [expr $whom + 1] e]

  if {![isinop [lindex $response 0]]} {
   set ll [lindex [split [lindex $response e] {}] e]
   while {$ll=="."} {
    set response "[lrange $response 0 end-1] [join [lrange [split [lindex $response e] {}] 0 end-1] {}]"
    set response [string trim $response]
    set ll [lindex [split [lindex $response e] {}] e]
   }
  } {
   if {![matchattr $hand $req(cn)]} {
    putnotc $nick "Sorry, you don't have access to do that."
    return 0
   }
  }

  set also [lindex $text [expr $whom + 1]]
# replace a few things
  regsub -all -nocase " my " $response " $nick's " response
  regsub -all -nocase " i am " $response " $nick is " response
  regsub -all -nocase "[botsnick] is " $response "I am " response
  regsub -all -nocase " [botsnick]'s " $response " my " response
  regsub -all -nocase "[botsnick], " $text "" text

  if {[string match *$start* $ignorewords]} {set text [lrange $text 1 e]}

  if {[string match -nocase no, $start] && ![isfrozen $keyword]} {delword $keyword}

  if {$original != "" && ![isfrozen $keyword]} {
   delword $keyword
   set response "$original | $response"
   set original {}
  }

  if {($original == "" && ![isfrozen $keyword]) && ([string length $keyword] >= 3 && [string length $keyword] <= 100)}  {
#   if {$start == "no,"} {putchan $chan "Ok $nick"}
   addword $keyword $response
  }
 }
}

proc fixgrammar {text} {
# If you can think of any other common things that need to be converted
# PLEASE tell me!! :)

 set text "@ $text @"
 regsub -all -nocase " i " $text " I " text
 regsub -all -nocase " i'm " $text " I'm " text
 regsub -all -nocase " i'd " $text " I'd " text
 regsub -all -nocase " i've " $text " I've " text
 regsub -all -nocase " i'll " $text " I'll " text
 regsub -all -nocase " u " $text " you " text
 regsub -all -nocase " r " $text " are " text
 regsub -all -nocase " ur " $text " your " text
 regsub -all -nocase " yer" $text " your" text
 regsub -all -nocase " fav " $text " favorite " text
 regsub -all -nocase " fav. " $text " favorite " text
 regsub -all -nocase " bish " $text " bitch " text
 regsub -all -nocase " whut " $text " what " text
 regsub -all -nocase " werd " $text " word " text
 regsub -all -nocase " werk " $text " work " text
 regsub -all -nocase " prolly " $text " probably " text
 regsub -all -nocase " better then " $text " better than " text
 return [string trim [lrange $text 1 [expr [llength $text] - 2]]]
}

proc askquestion {nick host hand chan text} {
 global botnick botsnick wordfile floodcount workingchans eggfu
 global asktrig atrigger randmy randmn otherbots range

 set botsnick [low $botnick]
 set lownick [low $nick]

 if {($asktrig && [lindex $text 0]!="[bit]$atrigger") || [string match -nocase *$nick* $otherbots]} {
  set do_nothing 1
 } elseif {(([lsearch -exact [low $workingchans] [low $chan]] != -1) || ($workingchans == "")) && [string length $text] != 1} {
		
  # dont forget to snip the !cmd	
  if {$asktrig == 1 && [lindex $text 0] == $atrigger} {regsub -all "$atrigger " $text "" text}

  regsub -all "\\\"" $text "'" text
  regsub -all "\\\!" $text "" text
  regsub -all "\\\?" $text "" text

  set ll [lindex [split [lindex $text e] {}] e]
  while {$ll=="."} {
   set text "[lrange $text 0 end-1] [join [lrange [split [lindex $text e] {}] 0 end-1] {}]"
   set text [string trim $text]
   set ll [lindex [split [lindex $text e] {}] e]
  }

  set text [string trim $text]

  set q(start) [lindex $text 0]
  set q(end) [lrange $text [expr [llength $text] - $range] e]
  set q(long) $text

  #if {$getquestion == "me?"} {set q(end) $nick}
  #regsub -all "me?" $q(end) "$nick" q(end)
  regsub -all "\007|\015|\022|\026|\028|\030" $q(start) "" q(start)

  set getword [getword $q(end)]
  set breaker [lsearch -exact $getword "=>"]
  set keyword [lrange $getword 0 [expr $breaker - 1]]
  if {[isfrozen $keyword]} {incr breaker}
  set q(ans) [lrange $getword [expr $breaker + 1] e]

  if {[isfrozen $q(ans)]} {set q(ans) [lrange $q(ans) 2 e]}
  if {$q(long)=="egg-fu"} {set q(ans) "<action> is running \002egg-fu $eggfu\002, by ch3mical"} 
  #if {$q(ans)=="" && $q(end)!=$q(long)} {set q(ans) $q(end)}

  set q(ans) [randomize $q(ans) $nick $chan]
  regsub -all "\\\$question" $q(ans) "$text" q(ans)
  regsub -all "\\\$keyword" $q(ans) "$q(long)" q(ans)
  regsub -all "\\{" $keyword "" keyword
  regsub -all "\\}" $keyword "" keyword
  regsub -all "\\{" $q(ans) "" q(ans)
  regsub -all "\\}" $q(ans) "" q(ans)

  set sendto $chan
  if {$q(start) == "tell"} {
   set whom [lsearch -exact $text "tell"] 
   set target [lindex $text [expr $whom + 1]]
   if {$target!=""} { 
    set sendto $target
    regsub -all "\\\$who" $q(ans) $target q(ans)
   }
  } {regsub -all "\\\$who" $q(ans) $nick q(ans)}

  if {$q(ans)!="" && $q(ans)!="~"} {
   set getstart [lindex $q(ans) 0] 
   set getrest [lrange $q(ans) 1 e]

   if {$getstart == "<reply>"} {
    putserv "PRIVMSG $sendto :$getrest"
    if {$sendto!=$nick && $sendto!=$chan} {putnotc $nick "Told $sendto \"$getrest\""}
   } elseif {$getstart == "<ctcp>"} {putserv "PRIVMSG $nick :\001$getrest\001"
   } elseif {$getstart == "<notice>"} {putnotc $sendto "$getrest" 
   } elseif {$getstart == "<action>"} {putserv "PRIVMSG $sendto :\001ACTION $getrest\001"
   } {
    regsub -all "!Q" [randy] $keyword randmy
    regsub -all "!A" $randmy $q(ans) randmy
    regsub -all "!U" $randmy $nick randmy
    putserv "PRIVMSG $sendto :$randmy"
   }
  } elseif {[string match -nocase [botsnick]* $q(start)] && $q(end) != ""} {
   if {[lindex $q(end) 0]==$q(start)} {set q(end) [lrange $q(end) 1 e]}
   regsub -all "\\?" $q(end) "" q(end)
   regsub -all "!Q" [randn] $q(end) randmn
   regsub -all "!A" $randmn $q(ans) randmn
   regsub -all "!U" $randmn $nick randmn
   putserv "PRIVMSG $sendto :$randmn"
  }
 }
 return 0
}

if {![file exists birth_certificate.egg]} {
 set coin [rand 10]
 if {$coin>=5} {set sex boy} {set sex girl}
 putlog "\002IT'S A [string toupper $sex]!!\002"
 putlog "\002Congratulations!\002 You are now the proud parent of an \002egg-fu\002 bot!"
 set date [split [lindex $system 0] /]
 set bdate [clock format [clock seconds] -format "%m/%d/%Y@%H:%M"]
 putlog "I was born on \002$bdate\002"
 set bc [open birth_certificate.egg w]
 puts $bc $bdate
 puts $bc $sex;close $bc
 if {![file exists $wordfile]} {
  putlog "Creating Brain...";set wf [open $wordfile w]
 } {set wf [open $wordfile a+]}
 puts $wf "born => <reply> \$birthday"
 puts $wf "birthday => <reply> \$birthday"
 puts $wf "how old are you => <reply> I'm \$age old | <action> is \$age old"
 puts $wf "boy or girl => <reply> I'm a \$sex! | <action> is a \$sex"
 puts $wf "asl => <reply> \$age/\$sex/earth!"
 puts $wf "how => ~"
 puts $wf "who => ~"
 puts $wf "why => ~"
 puts $wf "what => ~"
 puts $wf "when => ~"
 puts $wf "where => ~"
 puts $wf "wtf => ~"
 close $wf
}
set bc [open birth_certificate.egg r]
set sex [gets $bc];set sex [gets $bc];close $bc
putlog "\002egg\002-\002fu\002 \002$eggfu\002 loaded! (age: [myage], sex: $sex)"
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

First off, you did'nt post the whole error-message...

Secondly, once again you've screwed up while editing, removing the line I earlier told you to restore...

Speechles told you to (quote):
speechles wrote:change:

Code: Select all

set system [split [concat [exec date +%m/%d/%Y@%H:%M]] @]
to:

Code: Select all

set system [split [clock format [clock seconds] -format "%m/%d/%Y@%H:%M"] @]
Just don't touch anything else (in the original script).
NML_375
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

ok i chenge that one line in original tcl now i have this error

Code: Select all

[13:04] can't use non-numeric string as operand of "*"
    while executing
"expr [lindex [split $args :] 1] + ([unoctal [lindex [split $args :] 0]] * 60)"
    (procedure "mconv" line 1)
    invoked from within
"mconv [lindex $bdate 1]"
    (procedure "myage" line 7)
    invoked from within
"myage"
    invoked from within
"putlog "\002egg\002-\002fu\002 \002$eggfu\002 loaded! (age: [myage], sex: $sex)
""
    (file "scripts/egg-fu_2.0.2.tcl" line 940)
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

so eny help ?:)
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

Dunno what the author was smoking, however, he screwed up mconv aswell.
It uses "args" as argument variable, which has special meaning and screws things up. Also, he uses lindex on $bdate (first line of the birth_certificate.egg file), which is not a list. Most likely, he ment to split it using @.

My best guess at what the code should look like is something like this, although the code is too messy to tell wether there are any other, similar, flaws; or if this "fix" will cause issues elsewhere...

Code: Select all

mconv {arg} {return [expr [lindex [split $arg :] 0] + [unoctal [lindex [split $arg :] 1]] * 60]}

Code: Select all

proc myage {} {
...
set bdate [split [gets $bc] @]
...
NML_375
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

Btw, bumping and sending duplicate posts as PM is generally not appreciated.
NML_375
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

Code: Select all

[13:30] missing close-brace: possible unbalanced brace in comment
    while executing
"proc myage {} {
set bdate [split [gets $bc] @]

proc getdate {arg} {
 set system [split [clock format [clock seconds] -format "%m/%d/%Y@%H:%M"] @]
 se..."
    (file "scripts/egg-fu_2.0.2.tcl" line 664)
    invoked from within
"source scripts/egg-fu_2.0.2.tcl"

dont now that iz wrong O.o
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

nml375 wrote:Btw, bumping and sending duplicate posts as PM is generally not appreciated.
yes im sorry :)
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

As I was way too lazy to rewrite the whole myage-proc, I simply pointed out the single line that needed editing...
Three dots is used to indicate there's part of the code/quote/etc that was supressed to emphasize the selected part

Obviously, the rest of the proc should remain unedited.
NML_375
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

hmmm i dont speek eng well i dont understood what you told now :(
P
PoHuIsT
Voice
Posts: 23
Joined: Mon Oct 22, 2007 7:49 am

Post by PoHuIsT »

plz wtite full code
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

This script is pretty much littered with bugs and other issues. Posting full code would be pretty pointless unless I would take the effort of rewriting and correcting all those issues. Atleast for me, it would probably be easier to write something from scratch, as I'd first have to get myself into the mind of the original coder. And to be honest, I hav'nt got either the time or the motivation of doing either.

I'd bet your best chances of getting that script working, is to contact the author.
NML_375
Post Reply