----------------------------------------------------------
The TO-DO List For Darkbot
----------------------------------------------------------
These are features that are in the planning stages, or 
that haven't been completely worked out, yet.  Also, any
suggestions that people have made, that are planning to 
be added, will be listed here.

Features and bugs are also being tracked via the sf.net
trackers at http://sourceforge.net/projects/darkbot
----------------------------------------------------------

- Freenode uses different identd syntax n=blah@host, update
  masking to use this and remove the n= part.

- Make setnick command not spit out the message in room 
  about changing nicks after the effect.

- Add escape character for | in topic responses so you can
  output a | rather than use multiline replies. Other places
  need escape character options too.

- Add option to make the bot not kick/ban people who are
  logged in with access to the bot.

- Add googlesque queries to search command, so you can 
  excluse words from searches.
- plural functions still needs to be implemented in spots,
  about half of the functions use a different parsing  
  mechanism that still works, because I hadn't thought of 
  adding a "startarg" parameter to my db_argstostr() 
  function before that point. i will update these later.

- chanserv_topic function needs to be a private message
  command and accept channel arguments (easy, but to 
  remember for later).

- atoi needs to be swapped for strtol in all places 
  since atoi isn't as safe. 

- Some kind of solution for large numbers needs to be
  worked out for use with the unixtime user command. 
  Implementations with 32 bit instead of 64 bit longs 
  are limited to time representations in a range
  consisting of only up to one more place value than 
  the current unixtime, and is a system dependant 
  value.

- Add some kind of escape sequence or special parsing 
  for topics that start with key words like "WHAT", these
  words are also recognized internally by the bot for 
  answering questions.  

- Multi-channel randomstuffs. I want to make it possible 
  for every channel specified in setup.ini as the home 
  channel, in the case of multiple home channels, has
  their own randomstuff timers that output randomstuffs
  according to the action going on, for each specific 
  channel.

- Write things to replace the stuff that Windows can't do.
  Backup command, etc.

- Make the output of the MEM command more useful and friendly.

- Add internet movie database (http://www.imdb.com) and 
  slashdot news (http://slashdot.org) searches.

- Single login, remembered across channel part/joins etc.

- Changing the bot's nick needs some testing and tweaking.

- IPv6.

- Merge acronym, 21, lurker, syndet, pantheon, and serv 
  into darkbot.  All are linked to from the darkbot pages.

----------------------------------------------------------
onefang's TO-DO List For Darkbot
----------------------------------------------------------

Add a show parameters command.

Deal with scripts/dbcron one way or another.

Double check the in code summaries for setup parameters.

Allow multiple command characters - SETCHAR !'~

Convert use of the obsolete gethostbyname() to getaddrinfo().

The alarm() may not be portable enough.  Replace multiple alarm() calls
with a single setitimer() call.  Give alarm() the benefit of the doubt
for now.

The first argument passed to the various select() calls could be better,
it's more efficient to actually calculate that.

Add a callback to the webinfo structure and otherwise restructure the
web stuff so that disabling a web command can #ifdef out all the code for
that command.

Merge all the scripts plus convertdb into darkbot so that all admin
stuff can be done from IRC, command line, or text UI.

Make the replaceable params in responses consistant.  X~ and %X.

If possible, make all !set foo=bar stuff change the current state of the
bot rather than requiring a restart.

Scripting or modules.  Scripting using Lua is a really good option. 
A limited subset could be used for the calc command as well.

Find a cross pratform Windows/unix GUI toolkit we can live with and
create a GUI for darkbot admin.  LCB wants a web based one.  I just want
to make it modular, and allow different front ends.

Make multiple random responses easier to setup.
  admin: bot add foo bar | baz | some other response
  user: foo is also blah
  admin: bot add foo | another answer

Menu in PM.  Plain one liner, colour one liner, multiple lines, colour multiple lines.
  user: /msg bot menu
  >bot<: Main menu - 1) factiod comands, 2) user commands, 3) channel commands, B) backup one menu, Q) quit menu.
  user: /msg bot menu big
  >bot<: Main menu - 
  >bot<:   1) factiod comands
  >bot<:   2) user commands
  >bot<:   3) channel commands
  >bot<:   B) backup one menu
  >bot<:   Q) quit menu.

Don't give long answers in channel, only in PM.  Instead, give a summary
in channel, and inform user that a longer response is available via PM.
  bot: summary of foo bar.  (PM "foo bar" for more.)
  luser: PM "foo bar"
  bot: PM "foo bar" means to send me a private message you idiot.  Try this command "/msg bot foo bar".

Make the bot gender definable, defaulting to female.  Allow users to
register their gender.  Auto convert all relevant text to proper gender.

Add memos "tell onefang that foo", as opposed to factoid telling "tell
onefang about bah".  Allow memos to yourself.  Fix alarm and tie that in
as well, alarms to others and to self.  Limit memos & alarms to karma
memos & alarms per hour to limit abuse.

Allow unlogged in users to create factiods, and change these factoids, plus
make additions to factoids.
  luser: blah is humbug.
  user: blah?
  bot: luser tells me that blah is humbug.  luser may have been drunk at the time.
  luser: known fact is wrong.
  user: what is known fact?
  bot: Known fact is correct.  On the other hand, luser thinks that known fact is wrong. 

Channel logging, and playback to PM.

wtf, add a karma system.
  use it to sort the unlogged user added factoids.
    bot: luser tells me that blah is humbug.  Others have more to say, but I trust luser more.  (PM "blah" for more.)
  Use it to refer people to the highest karma person.
    bot: Dunno, ask High_Karma_Dude.
  Use no karma and negative karma as extra security levels.  No karma = -1, negative karma = (karma / 100) - 2

Keep track of how much she has been fed, deny taking food from strangers
(low/no karama users).  This implies that botsnack become an information command.

data include files.
  Keep track of what database include files are not used for a while, and unload
  them, keeping the questions and a pointer to the file though.

Multiple server/channel support like xchat.
  Allow different data per server/channel, using includes for common stuff.
  Allow different setup per server/channel.

Keep track of unanswered questions, for two reasons -
  So the admin can look through it later and add factiods if needed.
  If the user is still around (and given a suitable timeout) answer the
  question if an answer arrives.

Implement the Porter-Stemmer algorithm to improve English-language
searching as per the drupal module of the same name.  It reduces each
word in the index to its basic root or stem (e.g. 'blogging' to 'blog')
so that variations on a word ('blogs', 'blogger', 'blogging', 'blog')
are considered equivalent when searching.  This generally results in
more relevant results.  Also, start by stripping out all punctuation. 
On the other hand, question marks mean it is more likely to be a
question.  Same applies to use of the W words near the beginning, they
are more likely to be questions.

Add a locale to weather codes database or search facility.  Combine all
the weather commands into one.  Make it return metric results.

Command to guess a users timezone, and show time in that zone.

Random greetings, random channel topics, etc.

Interface other shell commands, but be secure.  In fact, setup a chroot
for arbitrary shell commands.

Allow DCC to and from a file server.

Channel protection - mass join, mass kick.
