You can control how Darkbot works using setup parameters.  You can
change these by directly editing setup.ini (when Darkbot is not running)
or by using the !set command (when logged in).  In setup.ini it will
look like this -

PARAMETER=value

Using the !set command will look like this -

!set PARAMETER=value

Using the !set command will save your changes to setup.ini.  Some of the
parameters will require a restart before they will be recognised.

Parameters are one of three different types, number, text, or boolean
(true or false).  For boolean values you can use any one of these to
specify "true" - true, 1, yes, ack, ok, one, positive, absolutely,
affirmative, ah ha, shit yeah, why not.  You can use any one of these to
specify "false" - false, 0, no, nack, nope, zero, negative, nah, no way,
get real, uh uh, fuck off, bugger off.  Only the first letter is
important, so there are many variations.

NOTE: Some of these parameters can only be set at compile time.  Exactly
which ones is currently subject to change, but they will all be
documented here in order to keep them in one place.  This can look like
this -

sh build.sh --enable-parameter1 --disable-parameter2 --with-parameter3=value


================ LANGUAGE ================

PARAMETER	LANG
DEFAULT		1
TYPE		Number, Compile time
EXAMPLE		--with-lang=1

Pick a number from the list below for the language you want your darkbot
to speak.  Default is 1, English.  The email address is the person
responsible for the translation.

------------------------------------------------------------------
1  = ENGLISH
2  = FRENCH	- Inajira <inajira@videotron.ca>
		- EfX <michel.efx@globetrotter.net>
		- eCHaLoTTe <echalotte@cablevision.qc.ca>
3  = SPANISH	- speed1 <speed@eduredes.edu.do>
4  = DUTCH	- Asmodai <asmodai@wxs.nl>
5  = LATIN	- Otaku <otaku@unixgeek.ml.org>
6  = GREEK	- Chris_CY <chriscy@cylink.net>
7  = EBONICS	- rapsux <bitter@ici.net>
8  = PIG LATIN	- Cloud <burtner@usa.net>
9  = RUSSIAN	- KOI8 encoding
10 = RUSSIAN	- CP1251 encoding
		- Oleg Drokin <green@ccssu.crimea.ua>
11 = PORTUGUESE	- Pincel <Pincel@darkbot.info>
12 = GERMAN	- C.Hoegl@gmx.net & marc@reymann.net
13 = ITALIAN	- daniele nicolucci <jollino@icemail.it>
14 = CHINESE	- James <jamespower@263.net>
15 = SWEDISH	- Ybznek <sunmo@seaside.se>
16 = NORWEGIAN	- [SoHo] <soho@int19h.com>
17 = ROMANIAN	- Radu <radu.negoescu@sante.univ-nantes.fr>
18 = ARABIC	- MrSiMo <mrsimo7@yahoo.fr>
19 = TAIWANISH	- ?
------------------------------------------------------------------
? = Email juice@darkbot.org if you want to help add other langs!
------------------------------------------------------------------


================ STARTUP, CONNECTION, IRC ================

    ==== ON START ====

PARAMATER	ENABLE_VERSION_CHECK
DEFAULT		false
TYPE		Boolean, Compile time
EXAMPLE		

Your darkbot tell you (at startup) what the latest version of darkbot
is.  We recommend keeping this disabled.


    ==== ON CONNECTION ====

PARAMATER	VERB
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Print out extra details while starting up?

 
PARAMATER	CHECK_STONED
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Check if servers are not responding, is so connect to next server in
list. (recommended) Some linux systems have problems with this. You'll
know if you're one of them if your bot disconnects every 5 minutes.

ALSO NOTE: If your bot seems to disconnect every 5 minutes, try turning
off CHECK_STONED.

 
PARAMATER	CONNECT_WAIT_TIMEOUT
DEFAULT		10
TYPE		Number

This is the time that darkbot will wait for a connection to the server,
before trying the next server. You may need to increase this if you are
on a slow connection. 


    ==== ON CONNECTED - IRC ==== 
 
PARAMATER	PERFORM_TIMER
DEFAULT		true
TYPE		Boolean

Send everything that's in PERFORM.INI to the IRC server every 60
seconds? Useful if the bot is banned, or X was split at the time darkbot
signed on.

 
PARAMATER	DEFAULT_UMODE
DEFAULT		"+i-ds"
TYPE		Text

What user modes do you want for darkbot?


    ==== ON IRC ==== 
 
PARAMATER	CTCP
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Reply to CTCP's? (PING/VERSION). 

 
PARAMETER	ANTI_IDLE
DEFAULT		false
TYPE		Boolean

Want your darkbot to always have less than 10 min idle? This isn't
usually needed since darkbots tend to talk a lot.


    ==== ONJOIN ==== 
 
PARAMATER	DISPLAY_SYNC
DEFAULT		false
TYPE		Boolean

When bot joins a channel, sometimes it's hard to tell when it's "synced"
and is no longer processing stuff -- this tells the channel the bot has
finished syncing. For example, if you try to login while it's still
syncing, it may just ignore your login request until it sees you in the
channel.


================ DATABASE MANAGEMENT ================ 

    ==== ON START ==== 
 
PARAMETER	SORT
DEFAULT		false
TYPE		Boolean

Sort your info2.db on startup? Will take forever if u have a large db.
If you have dividers or any sort of markers on your database and you
want to preserve their position leave this directive undefined. Sorting
the database will put all items listed in alphabetic order.


PARAMETER	FIND_DUPS
DEFAULT		false
TYPE		Boolean

When user's do the INFO command, and at startup, do you want to find and
remove duplicates database entries?

 
PARAMATER	SAVE_DUPS
DEFAULT		true
TYPE		Boolean

When duplicate topics are found, do you want to save them? (in case some
topics are accidently deleted).


    ==== PERMISSIONS ==== 
 
PARAMATER	GENERAL_QUESTIONS
DEFAULT		true
TYPE		Boolean

Do you want Darkbot to answer questions that match a topic without
addressing the bot?

 
PARAMATER	ALLOW_ADD_IN_MSG
DEFAULT		false
TYPE		Boolean

Turn this on if you want to be able to use the ADD function in private
message to the bot.

 
PARAMATER	ALLOW_DEL_IN_MSG
DEFAULT		false
TYPE		Boolean

Turn this on if you want to be able to use the DEL function in private
message to the bot.

 
PARAMATER	MSG_RESPONSES
DEFAULT		false
TYPE		Boolean

If you want your bot to be able to respond to things asked in private
messages, turn this option on. Use the above two defines to allow /
disallow adding or deleting entries in private.


PARAMATER	ENCRYPT_PASSWORDS
DEFAULT		false
TYPE		Boolean, Compile time
EXAMPLE		

Toggles the use of encrypted passwords in the userlist.db file. Turn
this off if you don't want your passwords encrypted. Also note that if
you're using encrypted passwords and you decide to  turn this option
off, you'll need to redo your userlist.db file. Note: If you're new to
Darkbot, you may want to turn this option off.
 
 
PARAMATER	REQ_ACCESS_ADD
DEFAULT		true
TYPE		Boolean

Minimal access level required to add topics?

 
PARAMATER	REQ_ACCESS_DEL
DEFAULT		true
TYPE		Boolean

Minimal access level required to to delete topics?


    ==== LOGS ==== 
 
PARAMATER	LOG_ADD_DELETES
DEFAULT		true
TYPE		Boolean

Do you want to log who adds/deletes topics? Log saved to
dat/logs/add_delete.log.

 
PARAMATER	LOG_PRIVMSG
DEFAULT		true
TYPE		Boolean

Do you want to log all privmsg's to your darkbot? (will be saved to
dat/logs/ dir).


==== SLEEP DIRECTIVES ==== 
 
PARAMATER	SLEEP_LEVEL
DEFAULT		3
TYPE		Number, Compile time
EXAMPLE		

Level at which user's can make darkbot shut up (aka hush). This is
useful for help channels when they want darkbot to quit talking while
they address something important in the chan.

 
PARAMATER	SLEEP_TIME
DEFAULT		300
TYPE		Number

How many seconds to sleep for?

 
PARAMATER	GOSLEEP_ACTION
DEFAULT		"\1ACTION falls asleep... ZzzZZzzZZzz\1"
TYPE		Text

PARAMATER	WAKEUP_ACTION
DEFAULT		"\1ACTION wakes up from a snooze..\1"
TYPE		Text

What you would want your Darkbot to say when sleep and wake up commands
are issued? (If you want you can change what is between 'ACTION' and
'\1')


==== DATA SIZE ==== 
 
PARAMATER	MAX_DATA_SIZE
DEFAULT		400
TYPE		Number, Compile time
EXAMPLE		

The max length your database replies will be. This will be useful to
people loading their database into ram - if your data is all less than
400 chars, then you can save some ram.... Longer replies allows you to
do more, for example, with bitwise operator PIPE.

 
PARAMATER	MAX_TOPIC_SIZE
DEFAULT		50
TYPE		Number, Compile time
EXAMPLE		

The max length your database topics will be.


==== OUTPUTS - TIMERS ==== 
 
PARAMATER	LASTCOMM_TIME
DEFAULT		5
TYPE		Number

LASTCOMM_TIME is the length of time (in seconds) that your bot will not
reply to a topic already asked. Thus if someone asked your bot about
"mirc" that question could not be asked again in the same format for N
seconds (or till the question is out of buffer). This prevents the bot
from falling prey to users who like to repeat.


PARAMATER	OUTPUT1_COUNT
DEFAULT		4
TYPE		Number

PARAMATER	OUTPUT1_DELAY
DEFAULT		1
TYPE		Number

PARAMATER	OUTPUT2_COUNT
DEFAULT		6
TYPE		Number

PARAMATER	OUTPUT2_DELAY
DEFAULT		2
TYPE		Number

The output timers. Darkbot does not output text without first putting it
into a queue list. If the bot has several lines of text waiting to be
sent, it starts to delay longer and longer between output, so it can't
flood itself off of IRC. Explanation:

If text in queue is < OUTPUT1_COUNT, output it. If text in queue is >
OUTPUT1_COUNT, delay OUTPUT1_DELAY seconds. If queue is > OUTPUT2_COUNT,
delay OUTPUT2_DELAY seconds. If number of text in queue is higher than
OUTPUT_PURGE_COUNT, then just delete all unneeded output (ie; any text
and notices, but leaving in stuff like kicks and modes) The defaults
below are recommended, as the bot isn't going to flood off. If you are
having the bot delete output messages and you'd like to increase the
queue, update the  OUTPUT_PURGE_COUNT to a larger number. Just keep in
mind if someone floods your bot with a lot of VERSION requests, the bot
will sit there outputting a lot of version replies instead of deleting
them, causing it to act as if it's just sitting there not doing anything
when you ask it something in your channel.

 
PARAMATER	OUTPUT3_DELAY
DEFAULT		3
TYPE		Number

If still < OUTPUT_PURGE_COUNT and > OUTPUT2_COUNT then delay
OUTPUT3_DELAY secs.

 
PARAMATER	OUTPUT_PURGE_COUNT
DEFAULT		7
TYPE		Number

When all else fails... if more than OUTPUT_PURGE_COUNT delete them all!
No use in making the bot output slowly over a long period of time...
imagine if you set this to 50, and had an OUTPUT3_DELAY of 3 secs..
thats 50*3 secs till the bot is ready to output any new data to you!


======== OUTPUT MESSAGES ======== 

    ==== OUTPUT MESSAGES - ON TOPICS ==== 
  
PARAMATER	EXISTING_ENTRY
DEFAULT		"Sorry, there is an existing entry under keyword"
TYPE		Text

Message to give when adding an existent topic.

  
PARAMATER	NO_ENTRY
DEFAULT		"I was unable to find entry:"
TYPE		Text

Message to give when there is no mentioned topic.


    ==== OUTPUT MESSAGES - ON SEARCH ==== 

PARAMATER	CANT_FIND
DEFAULT		"Was unable to find"
TYPE		Text

PARAMATER	NO_TOPIC
DEFAULT		"Sorry, I don't have any entry for"
TYPE		Text

PARAMATER	TRY_FIND
DEFAULT		"What am I trying to find"
TYPE		Text

These are the messages Darkbot will give on unaccomplished search
queries.


    ==== OUTPUT MESSAGES - ON NONEXISTENT TEXT ==== 
 
PARAMATER	WHUT
DEFAULT		"hmmm?"
TYPE		Text

Answer to give in case Darkbot's nick is mentioned without any further
text.

 
PARAMATER	RANDOM_WHUT
DEFAULT		true
TYPE		Boolean

Gives a random response from dat/whut.rdb instead what is specified on
'!set WHUT'.

  
PARAMATER	DUNNO_Q
DEFAULT		"*shrug*"
TYPE		Text

Answer to give in case there is no reply on Darkbot's database.


PARAMATER	RANDOM_DUNNO
DEFAULT		true
TYPE		Boolean

For those wanting the DUNNO_Q response to be random, turn this option
ON, and darkbot will ignore the default definition and use a random line
from dat/dunno.db


======== RANDOM STUFF ========= 
 
PARAMATER	RANDOM_STUFF
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Will read from a random line in dat/randomstuff.ini and say something
random in the home channel. ALSO if nothing is said in darkbot's home
channel it will say a randomstuff every  RAND_IDLE as long as no one
says anything. (default = define) UNDEFining this directive will not
allow you to add RDBs or randomstuff entries. If you really want your
bot not to say anything from randomstuff.ini and keed adding random
replies, increase the time _TIME and _IDLE defines to, for example,
54750, which corresponds to 365 days :)

 
PARAMATER	RAND_STUFF_TIME
DEFAULT		3600
TYPE		Number

Time in seconds to randomly say something from randomstuff.ini.

 
PARAMATER	RAND_IDLE
DEFAULT		1800
TYPE		Number

Time in secs to say something in home chan when no one says anything.
This overrides the RAND_STUFF_TIME counter.

 
PARAMATER	RAND_LEVEL
DEFAULT		2
TYPE		Number, Compile time
EXAMPLE		

Level at which user's can on-line add new randomstuff topics, this also
is the level at which users will be able to add RDB topics.


PARAMATER	RANDQ
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

This is a new feature which enables the RANDQ channel command, which
will output a random quote from your randomstuff.ini containing the
specified search string.


PARAMATER	BACKUP_RANDOMSTUFF
DEFAULT		false
TYPE		Boolean

This define backs up your randomstuff file every time you add a random
quote, in case you would like to do so.


================ IRC - CHANNEL RELATED ================ 

    ==== REGISTERED USERS ON JOIN ACTIONS ==== 
 
PARAMATER	JOIN_GREET
DEFAULT		true
TYPE		Boolean

Have the bot do auto-greet (setinfo) to registered users?


PARAMATER	SLASTCOMM_TIME
DEFAULT		60
TYPE		Number

This is the length of time to NOT allow someone to be recounted when
they rejoin your channels, which tends to clutter up everyone's screen
with the setinfo. This basically keeps track of who joined in the last
___ seconds, and does not do their setinfo during that amount of time.

 
PARAMATER	VOICE_USERS_ON_JOIN
DEFAULT		false
TYPE		Boolean

Have the bot VOICE users when they join?


PARAMATER	OP_USERS_ON_LOGIN
DEFAULT		false
TYPE		Boolean

Have the bot OP users when they login?


    ==== USERS LOOKOUT ==== 
 
PARAMATER	DO_WHOIS
DEFAULT		false
TYPE		Boolean

Want to be alerted when a user who joins is in "questionable" other
channels? This option only works on networks which their IRCD's allows
NOTICE to be sent using /notice @#chan.

 
PARAMATER	MAX_LASTSEEN
DEFAULT		604800
TYPE		Number

Max length in seconds to keep a lastseen (default = 604800 (7 days)).

 
PARAMATER	SEEN_REPLY
DEFAULT		"in the last 7 days."
TYPE		Text

If you change the above time (MAX_LASTSEEN), be sure to update the
SEEN_REPLY to the respective time length.


    ==== COMPLAINT MESSAGES ==== 
 
PARAMATER	COMPLAIN_REASON
DEFAULT		"grrr, kick me again and I'm going to..."
TYPE		Text

Message Darkbot will send to the channel where it was kicked from.

 
PARAMATER	BITCH_ABOUT_DEOP
DEFAULT		false
TYPE		Boolean

will complain in the chan that the Darkbot is deoped in.


PARAMATER	BITCH_DEOP_REASON
DEFAULT		"grr, someone op me!"
TYPE		Text

What do you want your Darkbot to say when is not oped?


    ==== CHAN OP DIRECTIVES ==== 
 
PARAMATER	DO_CHANBOT_CRAP
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Enable this if you want to make your darkbot bloated with stuff like
!KICK, !UP, !WACK, etc. Basically anything dealing with channel modes
and kicking commands. This includes PERMBANS. On linux, without this,
your darkbot bin will shrink considerably.

 
PARAMATER	AUTOTOPIC_TIME
DEFAULT		1800
TYPE		Number

Autotopic time interval in seconds.


    ==== KICKS AND BANS ==== 
 
PARAMATER	DEFAULT_KICK
DEFAULT		"Requested!"
TYPE		Text

What do you want your Darkbot to say when kicks someone? Note when you
apply a kick with reason this setting will not overwrite it.

 
PARAMATER	KICK_ON_BAN
DEFAULT		false
TYPE		Boolean

Kick people out when they are banned?


    ==== KICKS AND BANS - FLOODS ==== 
 
PARAMATER	KICK_ON_CHANNEL_NOTICE
DEFAULT		true
TYPE		Boolean

Sometimes morons like to /notice flood channels. This define will make
the bot kick those people when they do a channel notice.

 
PARAMATER	BAN_ON_CHANNEL_NOTICE
DEFAULT		false
TYPE		Boolean

If you want to take it a step further, you can also have the bot ban the
user@host too.

 
PARAMATER	BAN_BY_HOST
DEFAULT		false
TYPE		Boolean

Finally, we can ban by *@host. This requires the above two to be turned
on.


    ==== KICKS AND BANS - DARKBOT'S OWN FLOOD PROTECTION ==== 
 
PARAMATER	FLOOD_KICK
DEFAULT		true
TYPE		Boolean

Define this if you want your Darkbot to KICK out the people who flood
it. NOTE: This means flooding your BOT, not your CHANNEL. If you don't
define this, it will just ignore the user.

 
PARAMATER	FLOOD_REASON
DEFAULT		"Don't flood!"
TYPE		Text

What do you want your Darkbot to say when someone is flooding it?


================ MISCELLANEOUS ================ 
 
PARAMATER	GOOGLE
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Google search feature.


PARAMATER	METAR
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

METAR search feature.

 
PARAMATER	WEATHER
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		
 
WEATHER search feature.

 
PARAMATER	TAF
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

TAF search feature.

 
PARAMATER	QUIZ
DEFAULT		false
TYPE		Boolean, Compile time
EXAMPLE		

Bot's online QUIZ.

 
PARAMATER	QUIZ_TIMER
DEFAULT		25
TYPE		Number

How long to wait before giving the answer?

 
PARAMATER	QUIZ_REPEAT_TIMER
DEFAULT		20
TYPE		Number

Don't allow another quiz until this time has expired (since the last
answer).

 
PARAMATER	DO_MATH_STUFF
DEFAULT		true
TYPE		Boolean, Compile time
EXAMPLE		

Do you want your bot to do math commands?

 
PARAMATER	STATUS
DEFAULT		false
TYPE		Boolean, Compile time
EXAMPLE		

Parse luser data? May cause SIG_SEGV on some ircd's (ie; non ircu)
Basically all this does is display network info like opers, servers, avg
#  of users on the servers, etc.


================ AID DIRECTIVES ================ 
 
PARAMATER	HELP_GREET
DEFAULT		false
TYPE		Boolean

Give user's who join a NOTICE with info on how to use the darkbot? I
don't bother with this anymore since my bot knows how to respond to most
general questions users ask. If your bot is new and doesn't know much,
then you may want to have it tell people how to use it.


PARAMATER	AUTOHELP_GUESTS
DEFAULT		false
TYPE		Boolean

This define just sends a message to the channel, whenever a "Guest" user
joins, asking the user if they need any help. This is useful  for help
channels.


If you change anything on the next 5 directives be careful not to remove
or change the position of '%s'.
 
PARAMATER	L100(s,a,b,c,d,e,f)
DEFAULT		S("NOTICE %s :I can be triggered by various \
forms of speech, all which must be addressed to me, in one of the \
following formats:  %s %s %s or even %s .... In my database, you can \
find a topic by saying my nick, <topic> .  eg; \37%s nuke\37  ..... \
to do a search on a word, or partial text, just type:  <mynick>, search \
<text>   ... eg; \37%s search nuke\37\n",s,a,b,c,d,e,f)
TYPE		Text
EXAMPLE		

PARAMATER	L101(a,b,c,d)
DEFAULT		S("NOTICE %s :I can also be triggered with even more \
human formats: \37%s who is bill gates?\37  .. You can also phrase it \
in a question: \37%s where is msie?\37 ...For more info \
about me, visit http:www.darkbot.org\n",a,b,c,d)
TYPE		Text
EXAMPLE		

PARAMATER	L102(a,b,c,d)
DEFAULT		S("NOTICE %s :Welcome to %s, %s. Before \
asking your question, type %cHELP for a list of help topics.\n", a,b,c,d)
TYPE		Text
EXAMPLE		

PARAMATER mySetinfo
DEFAULT		"My !setinfo variables are: ^ nick, % Number of joins, & \
Channel, $ user@host. Example: !setinfo ^ has joined & % times!!  (also, if \
you make the first char of your SETINFO a \"+\" the setinfo will be shown \
as an ACTION)"
TYPE		Text
EXAMPLE		

 
PARAMATER myVariables
DEFAULT		"data variables are: N~ (Nick), C~ (Chan), T~ \
(Time/date) B~ (Botnick), Q~ (Question asked), R~ (random nick), !~ \
(command char), S~ (current Server), P~ (current port) V~ (botVer), W~ \
(db WWW site), H~ (u@h), t~ (unixtime), BAN (sets a ban), TEMPBAN (bans \
for 60 sec)"
TYPE		Text
EXAMPLE		

Variables for the data replies.
