Hi!
Some notes about usability, after a short time of using rbot. In my opinion the best time to tell about usability issues, because you dont know the program a lot and thus look at it in a unbiassed way.
(Note: I used supybot before for some days and now want to try something else for some reasons. That's why I sometimes refer to this bot. Perhaps you know supybot; Then it will be easier for you to understand me.)
First thing that made me wonder is that even if I said "rbot -h" it still wanted to start rbot instead of giving me usage information.
Second was, after I searched through the code to see how you load the config, that even after I wrote "rbot ." at the commandline you still did not create a new config file and instead want to start with the default config. I see reasons for that if you intended to only overwrite some settings with the configfiles I have in the specified folder.
So I would suggest to add a rbot-wizard, like supybot has. It sets up a config in the current directory. It asks for the network I am using, what nick the bot should have, whether I want to create an owner and how his nick and password will be. Even what plugins I want to load.
You could ask for advanced or newbie options. This should include the question whether I want to import the default config from /etc/rbot or create my own from scratch.
Such a tool would be very nice. (I suggest you try it to know what I mean.)
I think you should keep an eye on the command names. Currently you use rmlart, but delquote and such. Would be better if both use rm or del. (I think this applies to other commands, too. So this is only an example.)
How do you handle the fact that there could be more than one plugin defining the same command? This will not happen if all plugins are written by you, I agree. But what if I want to use 2+ 3rd party plugins? I would suggest using Plugin.command for that.
You also send more than one message at a time (if the response is too long for one message). I liked the method of supybot to only give me one message and telling me that there are "(N more messages)". So I don't accidently spam a channel.
I would do it like this:
Write a @@more@@(or similar) in each description. Cut the description at @@more@@ if it would be too long and provide the next message on "more" command from the user. If there is not @@more@@ tag, simply truncate the string at the position where it is too long and provide the rest as above.
Supybot uses bold text and keywords. That enhances the clarity. I can see at one view what I want to know. E.g. it bolds the command and parameters in the help message.
help shows something like: lart|praise|addlart|addpraise|rmlart|rmpraise in the plugins section. wtf?
If I did understood this correct, you want to list the plugins. But as I dont think there is a plugin of such a weird name. So you seem to list all of the plugins commands. I think you should really only show the name of the plugin here. That would be much cleaner.
You also give me help to more than one command if I only requested help on one of them. If you intended to show related info, use something like "See also:" in manpages. Or better: Show the plugin this command is from. So I can ask for help on that plugin if I want related commands.
I would prefer something like this:
---
<<me>> help Plugin
<<rbot>> Plugin: This is a plugin to do this and that. You could even do something. Do you want more information?
<<me>> more
<<rbot>> Plugin: dothis, dothat, dosomething
<<me>> help Plugin dothis
<<rbot>> Plugin.dothis <arg1> [<arg2>]: Do anything usefull. <arg1> means this.
<arg2> means that.
---
The sentence "Do you want more information?" would perhaps reflect your way of conversation like commands and responses better than "(N more messages)".
Supybot also has an interesting way of storing and accessing configuration. Dunno how you do this. My idea:
---
<<me>> config Plugins.Plugin1
<<rbot>> @group, someGenericOption
<<me>> config Plugins.Plugin1.group
<<rbot>> anotherOption, #channelDependentOption, @yetAnotherGroup
<<me>> config Plugins.Plugin1.chanDepOption
<<rbot>> "Default string for new channels"
<<me>> config Plugins.Plugin1.chanDepOption.#channel1
<<rbot>> "Some string that was configured for channel1"
<<me>> config Plugins.Plugin1.chanDepOption.#channel1 "Much shorter string"
---
This is again with ideas from supybot.
Notify me if you dont understood me(unknown command) or if I used the command in a wrong way. I think "What a crazy fool! Did you mean |help stats?" should tell me something. But I dont know what you mean with the last part.
Optional plaintext responses would be nice, too. Simply "Error: This or that is wrong." or "Operation succeeded.". For more demure channels.
Would imply: Short version of the more thingy: "(N more messages)" (What version is used would depend on the plainResponses config option.)
Think I am finished for now. ;)
I'll write more when I get more ideas. I also will try to write some plugins after I read the ruby book. ;)
I hope if you don't want to implement something for this or that reason you will tell me. And perhaps we can discuss it.
Thanks for this bot,
Dennis
P.S. I never intended to say supybot is better than rbot or anything like that. It just has some ideas implemented, that I like. But it is not how I would imagine a bot to be. That's why I came to use rbot.
I saw the very easy way of writing plugins, with it's fast to understand hooks. I hope this continues in the UI part. :)
See this posting as my way to try to help you making the best know IRC bot.