#!/path/to/eggdrop
# ^- set that to the directory eggdrop is in ie "#!/users/lamest/egg/eggdrop"
#
# This is a sample configuration file for your bot.  You will definitely
# want to edit this, to set up your bot.  Right now it creates a bot called
# "LamestBot" which sits on channel #lamest.
#
# The most vital things are listed at the top of this file, with the more
# complicated or obscure options further down.  So you don't necessarily
# need to edit this whole thing, although it might be a good idea if you
# want your bot to be hard to spot, and to work exactly the way you want
# it to.


#####  GENERAL STUFF  #####


# the stuff people will see in /whois
set nick "Lamestbot"
set altnick "Llamabot"      ;# if the nick you want is in use
set username "lamest"       ;# does not work if you have ident running!
set realname "/msg LamestBot hello"

# who's running this bot?
set admin "Lamer <email: lamer@lamest.lame.org>"

# [0/1] let users introduce themselves to the bot via 'hello'?
set learn-users 1

# many irc ops check for bots that respond to 'hello'.  you can change this
# to another word by uncommenting the following two lines, and changing
# "myword" to the word you want to use instead of 'hello' (it must be a
# single word)
# novice users are not expected to understand what these two lines do; they
# are just here to help you.  for more information on 'bind', check the file
# 'tcl-commands.doc'
#unbind msg - hello *msg:hello
#bind msg - myword *msg:hello

# the server list -- the bot will start at the first server listed, and cycle
# through them whenever it's disconnected
# (please note: you need to change these servers to YOUR networks servers)

set servers {
  raistlin.toledolink.com:6667
  nukem.winternet.com:6667
  irc.iceworld.org:6667
  eclipse.v-wave.com:6667
  helios.insnet.com:6667
}

# The `strict-servernames' variable should be set to 1 if you do not want
# the server list updated when a server reports itself differently than
# the name used to contact it.  There are some servers that will return
# an non-resolving server name in order to exploit this "server list
# updating" in eggdrop to cause them to not be able to reconnect.

set strict-servernames 0

# if no port is specified on a .jump, which port should I use?
set default-port 6667

# what IRC network are you on?  this is just info to share with others on
# your botnet, for human curiosity only.
set network "I.didnt.edit.my.config.file.net"

# [0/1] even if all the servers are down, cycle forever and keep trying to
# connect?
set never-give-up 1

# how many seconds to wait for a response when connecting to a server
# before giving up and moving on?
set server-timeout 15

# if the number of servers on the net gets below this number, it will
# jump to a new server (ie, it will assume it's on the losing end of a
# netsplit) -- set to 0 to turn off
# [most irc networks use TS now, so it's to your advantage to turn this off]
set servlimit 0

# Check for stoned servers? (i.e. Where the server connection has
# died, but eggdrop hasn't been notified yet).  
set check-stoned 1

# [0/1] if the bot's nickname is changed (for example, if the intended
# nickname is already in use) keep trying to get the nick back?
set keep-nick 1

# [0/1] allow users to store an info line?
set use-info 1

# [0/1] if this is set, a leading '~' on user@hosts WON'T be stripped off
set strict-host 0

# what timezone is you bot in?  this is simply used for scripting purposes.
set timezone "EST"

# several variables exist to better blend your egg in.  they are
# ctcp-version, ctcp-finger, and ctcp-userinfo.  you can use set
# to set them to values you like.


#####  CHANNEL PROTECTION  #####


# do this for each channel you wish to sit on:
# NOTE: for some reason Tcl won't let you put comments inside { } -- so
#   don't try it, cos it'll mess up your channel definition

channel add #lamest {
  chanmode "+nt-likm"
  idle-kick 0
  need-op { putserv "PRIVMSG #lamest :op me please!" }
  need-invite { putserv "PRIVMSG #lamest :let me in!" }
  need-key { putserv "PRIVMSG #lamest :let me in!" }
  need-unban { putserv "PRIVMSG #lamest :let me in!" }
  need-limit { putserv "PRIVMSG #lamest :let me in!" }
}

# the things inside the { } are CHANNEL OPTIONS -- they can be set within
# the "channel add" command, or by using a "channel set" command as in the
# examples below.  they list all the options you can set for a channel.

# chanmode
#   what modes will be enforced?  '+' modes will always be kept on, '-' modes
#   will always be kept off
# idle-kick
#   kick channel members after how many minutes of being idle?
#   (leave out to disable, or set to 0)
# need-op
#   script to run (if any) when the bot needs to be op'd on this channel
# need-invite
#   script to run (if any) when the bot gets locked out of the channel
#   because the channel is +i
# need-key
#   script to run (if any) when the bot gets locked out of the channel
#   because it doesn't have the channel key
# need-unban
#   script to run (if any) when the bot gets banned from this channel
# need-limit
#   script to run (if any) when the bot gets locked out of the channel
#   because the channel limit is full

# note that "need-op", "need-invite", etc, are limited to 120 characters,
# so if you want to so something more complicated, just write a proc,
# and make them call your proc.

# there are also a lot of options that can be turned on or off for each
# channel.  to turn an option on, put a + in front of it.  to turn it off,
# put a - in front of it.  ie, to have auto-op, put:
#   +autoop
# to turn it off, put:
#   -autoop

#   clear all channel bans when the bot joins?  (ie, force the channel's
#   ban list to match the bot's internal list)
channel set #lamest -clearbans

#   when a ban is set, kick people who are on the channel and match the
#   new ban?  (ie, they were on the channel before the ban)
channel set #lamest +enforcebans

#   only activate bans on the channel when necessary?  (this keeps the
#   channel's ban list from getting excessively long.  the bot still remem-
#   bers every ban, but it only activates a ban on the channel when it sees
#   someone join who matches that ban.)
channel set #lamest +dynamicbans

#   allow bans to be made by users directly?  (if turned off, the bot will
#   require all bans to be made through the bot's console)
channel set #lamest +userbans

#   op users with the +o (op) flag as soon as they join the channel?
#   (hint: this is a BAD IDEA)
channel set #lamest +autoop

#   only let users with +o (op) flag be channel ops?
channel set #lamest -bitch

#   say a user's info line when she joins the channel?
channel set #lamest +greet

#   re-op a user with the +o (op) flag if they get deopped?
channel set #lamest +protectops

#   log the channel status line every 5 minutes? (some people think
#   it's annoying; i think it's neat)
channel set #lamest +statuslog

#   de-op someone that enters the channel with server ops (ie, netsplit
#   ops) when they didn't have them before the split?
channel set #lamest +stopnethack

#   remember people who deop/kick/ban the bot or valid ops, and punish them?
#   users with +f (friend) flag are exempt from revenge
channel set #lamest +revenge

#   prevent this channel from being listed on the botnet?  (for paranoid
#   people)
channel set #lamest -secret

#   share user channel info for this channel?
channel set #lamest -shared

# here's a shorter example:
channel add #botcentral {
  chanmode "+mntisl 1"
  idle-kick 1
}
channel set #botcentral +bitch +clearbans +enforcebans -greet +revenge


#####  LOG FILES  #####


# you can have up to 5 log files.  at midnight every day, the old log files
# are renamed and a new log file begins.  by default, the old one is called
# "(logfilename).yesterday", and any logfiles before yesterday are erased.

# events are logged by certain categories -- this way you can specify
# exactly what kind of events you want sent to various logfiles.  the
# events are:
#   m  private msgs/ctcps to the bot
#   k  kicks, bans, mode changes on the channel
#   j  joins, parts, netsplits on the channel
#   p  public chatter on the channel
#   s  server connects/disconnects/notices
#   b  information about bot linking and userfile sharing
#   c  commands people use (via msg or dcc)
#   x  file transfers and file-area commands
#   r  (if defined in eggdrop.h) EVERYTHING sent to the bot by the server
#   o  other: misc info, errors -- IMPORTANT STUFF
#   w  wallops: msgs between IRCops (be sure to set the bot +w in init-server)

# each logfile also belongs to a certain channel.  events of type 'k', 'j',
# and 'p' are logged to whatever channel they happened on.  most other
# events are currently logged to every channel.  you can make a logfile
# belong to all channels by assigning it to channel "*".  there are also
# five user-defined levels ('1'..'5') which are used by Tcl scripts.

# in 'eggdrop.log' put msgs, commands, and errors from any channel:
logfile mkco * "eggdrop.log"
# in 'lame.log' put joins, parts, and mode changes from #lame:
logfile jk #lamest "lamest.log"

# [0/1] timestamp entries in the log file? (generally a good idea)
set log-time 1

# [0/1] keep logfiles for more than 48 hours -- instead of being called
# "(logfilename).yesterday", the log files are named by the current date,
# and kept around forever (eventually your directory might get full, so
# be careful with this!)
set keep-all-logs 0

# once a day the logfiles are switched out and started fresh --
# this specifies when that should happen (in military time)
# [note that a leading 0 will make Tcl think this is an octal value,
# something you probably don't want.]
set switch-logfiles-at 300

# this is the default console mode -- what masters will see automatically
# when they dcc chat with the bot (masters can alter their own console
# flags once they connect, though) -- it uses the same event flags as
# the log files
# (note that the console channel is automatically set to your "primary"
# channel -- the one you defined first in this file.  masters can change
# their console channel with the '.console' command, however.)
set console "mkcobxs"


#####  FILES AND DIRECTORIES  #####


# the userfile: where user records are stored
set userfile "LamestBot.user"

# the notefile: where private notes between users are stored
set notefile "LamestBot.notes"

# maximum number of notes to allowed stored for each user
# (to prevent flooding)
set max-notes 50

# where the help files can be found (and there are plenty)
set help-path "help/"

# where miscellaneous info files are
set text-path "text/"

# a good place to temporarily store files (ie: /tmp)
set temp-path "/tmp"

# the MOTD is displayed when people dcc chat to the bot.
# check 'help set motd' for tons of motd options.
set motd "motd"


#####  FILE SYSTEM  #####


# the file transfer area works via dcc chat.  you can turn the file system
# off by not defining the 'files-path' below.

# this is the 'root' directory for the file system (set it to "" if you
# don't want a file system)
set files-path "/home/mydir/filesys"

# if you want to allow uploads, set this to the directory uploads should be
# put into
set incoming-path "/home/mydir/filesys/incoming"

# [0/1] alternately, you can set this, and uploads will go to the current
# directory that a user is in
set upload-to-pwd 0

# eggdrop creates a '.filedb' file in each subdirectory of your dcc area,
# to keep track of its own file system info -- if you can't do that (like
# if the dcc path isn't owned by yours) or you just don't want it to do
# that, specify a path here where you'd like all the database files to
# be stored instead (otherwise, just leave it blank)
set filedb-path ""

# set maximum number of people that can be in the file area at once
# (0 to make it effectively infinite)
set max-file-users 20

# set maximum number of simultaneous downloads to allow for each user
set max-dloads 3

# set the block size for dcc transfers (ircII uses 512 bytes, but admits
# that may be too small -- 1024 is standard these days)
# set this to 0 to use turbo-dcc (recommended)
set dcc-block 0

# maximum allowable file size that will be received, in K
# (default is 1024K = 1M)
set max-filesize 1024

# [0/1] copy files into the /tmp directory before sending them?  this is
# useful on most systems for file stability.  (someone could move a file
# around while it's being downloaded, and mess up the transfer.)  but if
# your directories are NFS mounted, it's a pain, and you'll want to set
# this to 0.
set copy-to-tmp 1


#####  STARTUP  #####


die "Please edit your config file."

# You MUST remove that line for this config file to work.  This has been
# added to prevent you from starting up a bot that is not fully configured.
# Bots that have not been fully configured may join the wrong IRC network,
# the wrong channels, or generally do things that you do not want.  Please
# make sure that you have double-checked the settings you want.


#####  MODULES  ######

#
# this is only relevant to people who compiled with modules support
#
##### IF YOU USE MODULES AND DONT READ THIS YOU ARE A TOTAL WAD #####
#
# choose your encryption method now, 'cause once it's there it aint
# changing till you get a new userfile, capish? at this stage that leaves
# you with one option: blowfish
# uncomment this line to load blowfish *NEEDED*
loadmodule blowfish
#
#uncoment this line to load assoc support *OPTIONAL*
#loadmodule assoc
#
#uncoment this line to load the transfer module, you NEED this for
#filesys or share modules *RECOMMENDED*
#loadmodule transfer
#
#uncoment this line to load the file system module *OPTIONAL*
#loadmodule filesys
#
#this provides the userfile sharing support *OPTIONAL*
#loadmodule share
#
#this provdies support for encrypted botnet chat (like wire.tcl) *OPTIONAL*
#loadmodule wire

#####  END OF IMPORTANT STUFF  #####


#####  BOTNET  #####


# you probably shouldn't deal with this until reading 'botnet.doc' or
# something.  you need to know what you're doing.

# if you want to use a different nickname on the botnet than you use on
# IRC, set it here:
#set botnet-nick "LlamaBot"

# what telnet port should this bot answer?
# NOTE: if you are running more than one bot on the same machine, you will
#   want to space the telnet ports at LEAST 5 apart... 10 is even better
listen 3333 all

# Squelch the error message when rejecting a DCC CHAT or SEND?
# Normally it tells the DCC user that the CHAT or SEND has been rejected
# because they don't have access, but sometimes IRC server operators
# detect bots that way.
set quiet-reject 1

# if you would rather have one port for the botnet, and one for normal
# users, you will want something like this instead:
#listen 3333 bots
#listen 4444 users
# note: there are more options listed for the listen command in
# doc/tcl-commands.doc

# [0/1] share user data with other bots on the channel?
set share-users 0

# [0/1] share user greets with other bots on the channel if shareing user data?
set share-greet 0

# [0/1] allow other bots userfiles to overwrite yours?
set passive 0

# [0/1] users with the +o (global op) flag will still need the +p (party
# line) flag to join the dcc chat party line?
set require-p 0

# [0/1] allow people to telnet in, type 'NEW', and become a new user?
set open-telnets 0

# how long (in seconds) should i wait for a connect (dcc chat, telnet,
# relay, etc) before it times out?
set connect-timeout 15


#####  MORE ADVANCED STUFF  #####


# are you behind a firewall?  uncomment this and specify your socks host
#set firewall "proxy:178"
# or, for a Sun "telnet passthru" firewall, set it this way
# (does anyone besides Sun use this?)
#set firewall "!sun-barr.ebay:3666"

# if you're using virtual hosting (your machine has more than 1 IP), you
# may want to specify the particular IP to bind to.  you can specify
# either by hostname or by IP.  you may also want to set the hostname
# here if eggdrop has trouble detecting it when it starts up.  (it will
# let you know if it has trouble -- trust me.)
#set my-hostname "virtual.host.com"
#set my-ip "99.99.0.0"

#
# if you have a NAT firewall (you box has an IP in one of the following
# ranges: 192.168.0.0-192.168.255.255, 172.16.0.0-172.31.255.255,
# 10.0.0.0-10.255.255.255 and your firewall transparently changes your
# address to a unique address for your box.) or you have IP masquerading
# between you and the rest of the word, and /dcc chat,/ctcp chat or
# userfile shareing arent working. Enter you outside IP here, and
# #define HAVE_NAT in eggdrop.h
# Do not enter anything for my-ip or my-hostname.
#set nat-ip "127.0.0.1"

# if you want all dcc file transfers to use 1 particular listening port
# (this pretty much limits you to one concurrent file transfer at a time),
# either because you're behind a firewall, or for other security reasons,
# set it here
#set reserved-port 9076

# if you want to dynamically change channel settings, and have them saved
# for next time the bot restarts, define this filename ( the filename
# you set here *MUST* exist else the bot won't load. Just create an empty
# file for this to work)
#set channel-file "LamestBot.chan"

# script to run (if any) when first connecting to a server
set init-server { putserv "MODE $botnick +iw-s" }

# how many msgs in how many seconds from the same host constitutes a flood?
set flood-msg 5:60
# how many public msgs in how many seconds?
set flood-chan 10:60
# how many joins/nick changes in how many seconds?
set flood-join 5:60
# how many CTCPs in how many seconds?
set flood-ctcp 3:60

# temporary bans will last how many minutes?
set ban-time 120
# temporary ignores will last how many minutes?
set ignore-time 15

# normally the user file is saved once an hour, on the hour
# you can change that here (for example, "20" means to save every
# hour at 20 minutes past the hour)
set save-users-at 00

# normally users are notified once and hour, on the hour, if they have any 
# notes on the bot.  You can change that here (for example, "15" means to
# notify every hour at 15 minutes past the hour)
set notify-users-at 00

# send a note to anybody when I learn new users?
set notify-newusers "HQ"

# if compiled with owner, the following user(s) will ALWAYS have the
# owner (+n) flag
set owner "MrLame, MrsLame"

# what flags should new users get as a default?
# check 'help whois' for tons of motd options.
set default-flags "px"

# what user-defined fields should be displayed in a '.whois'?
# this will only be shown if the user has one of these xtra fields
# set with 'user-set'.
set whois-fields "url birthday"

# some networks allow you to stack lots of channel modes into one
# line.  as of november 1996, the major networks allowed:
#    EFnet      4
#    IRCnet     3
#    Undernet   6
#    Dalnet     6
# they're all guaranteed to support at least 3, so that's the default,
# but if you know your network supports more, you may want to adjust
# this value. this value must be less that or equal to 6.
set modes-per-line 3

# maximum number of lines to queue to the server.
# if you're going to dump large chunks of text to people over irc,  you
# will probably want to raise this -- most people are fine at 300 though
set max-queue-msg 300

# time (in seconds) to wait for someone to return from a netsplit
set wait-split 300

# time (in seconds) that someone must have been off-channel before
# re-displaying their info
set wait-info 180

# time (in seconds) that a dcc file transfer can remain inactive
# before being timed out
set xfer-timeout 300

# time (in days) to let stored notes live before expiring them
set note-life 60

# there are situations where sharebot userfile resynchronization
# can fail to work correctly.  because of this, it is no longer 
# advised to turn this feature on.  i've lost the mail from the
# person that spelled out the flaw, so i can't give him/her credit 
# right now or explain it (sorry). 
set allow-resync 0

# when sharing user lists, ignore +n modes from other bots?  this will
# only work if you are NON-PASSIVE  (ie, only the master bot is able to
# use this -- and every slave will need to have 'set owner ...' or
# they will lose their owners when they download the user list
set private-owner 0

# number of messages from a user on dcc before the are considered to be
# flooding (and therefor get booted)
set dcc-flood-thr 3

# answer lower case ctcp's (non rfc compliant)
set lowercase-ctcp 0

# answer HOW MANY stacked ctcp's at once 
set answer-ctcp 3

# trigger bindings for ignores users?
set trigger-on-ignore 0

# use raw bindings?
set raw-binds 0

# die on receiving a SIGHUP?
set die-on-sighup 0

# die on receiving a SIGTERM?
set die-on-sigterm 0

# some IRC Networks use the ircdu's SILENCE command 
# else it is useless to use this
set use-silence 0

# allow people from other bots (in your bot-net) to boot people off 
# your bot's party line? 
# values:
#   0 - allow *no* outside boots
#   1 - allow boots from sharebots
#   2 - allow any boots
set remote-boots 2

# define this if you want to bounce all server bans 
set bounce-bans 0

# to enable the 'tcl' and 'set' command (let owners directly execute
# Tcl commands)? - a security risk!! - comment out these 2 lines
unbind dcc n tcl *dcc:tcl
unbind dcc n set *dcc:set

# to add the 'simul' command (masters can manipulate other people on
# the party line)? comment out this line
unbind dcc n simul *dcc:simul

# enable console mode 'r'?  this mode shows every raw message from the 
# server to owners with console 'r' selected -- will take a bit more 
# cpu.  
# NOTE: This is a large security hole, allowing people to see missent
#       messages to the bot containing password
set use-console-r 0

# maximum number of dcc connections you will allow - you can increase this
# later, but never decrease it, 50 seems to be enough for everybody
set max-dcc 50

# maximum number of logfiles to allow - this can be increased if needed
set max-logs 5

#   /* add the 'dccsimul' tcl command (needed by certain scripts like */
#   /* action.fix.tcl) */
set enable-simul 0


#####  SCRIPTS  #####


# load that toolkit of useful scripts (some script packages may depend
#   on this being loaded)
source scripts/toolkit.tcl
# these are some commonly loaded (and needed) scripts.
source scripts/toolbox.tcl
source scripts/action.fix.tcl
