ircbot
An irc bot framework that offers easy-to-use by plugins
Config
Edit "config/xxx.yml" as your environment.
* host: irc server host
* port: irc server port
* nick: nick name for this bot
* user: user name for this bot
* real: real name for this bot
* help: help message for this bot
* channels: startup channel names
* plugins: plugin names
* timeout: bot will exit when no new pings come for this sec
Usage
(installed gem)
% ircbot -f config/xxx.yml
(in source dir)
% ruby -Ku -rubygems -Ilib bin/ircbot -f config/xxx.yml
Plugin
In ircbot world, we define functions as plugin (Ircbot::Plugin).
Instance methods:
* reply : this method is called when privmsg event is fired,
and reply message(the returned string) to the channel.
args: [text, nick, message object]
* setup : used for initializer
* help : used from "plugins" plugin
* [ANY] : any methods can be invoked by "<NICK>.<PLUGN_NAME>.<METHOD_NAME>"
Accessor methods:
* message : message object same as 3rd argument
* direct? : whether the message is directly toward to the bot or not
* config : hash of given config file
Setup
Install gems via bundler like this.
% bundle install --path vendor
Example
When you want echo bot, define the function as plugin first.
plugins/echo.rb:
class EchoPlugin < Ircbot::Plugin
def reply(text)
text
end
end
Advanced
Messages are passed into plugins automatically.
If you don't want this plugin chain, throw :done will help you.
config:
plugins: a b
class APlugin < Ircbot::Plugin
def reply(text)
throw :done, "This is A"
end
end
class BPlugin < Ircbot::Plugin
def reply(text)
"This is B"
end
end
BPlugin#reply will be never invoked.
Daemons
Plugin initializer automatically calls "setup" method.
So you can start daemon in it.
plugins/time_signal.rb:
class TimeSignalPlugin < Ircbot::Plugin
def setup
@daemon = Thread.new {
sleep 60
self.bot.broadcast Time.now
}
end
def stop
@daemon.kill
return "Stopped time signal"
end
end
When the bot name is 'airi', this will act as following.
05:11 <airi> Mon Apr 09 05:11:22 +0900 2012
05:12 <airi> Mon Apr 09 05:12:22 +0900 2012
05:12 <maiha> airi.time_signal.stop
05:12 <airi> Stopped time signal
PluginAttributes
When you want to give options or attributes to plugins,
write it into config.plugins as Array(Hash)
config/xxx.yml
plugins:
- irc
-
name: watchdog
db: "postgres://localhost/ircbot"
This will generate two plugins
1. Ircbot::Plugin(name:irc)
2. Ircbot::Plugin(name:watchdog, attrs=>{name=>watchdog,db=>postgres...})
And the given options can be found in plugin by [] method.
class Watchdog < Ircbot::Plugin
def setup
db = self[:db]
puts "connecting to #{db}"
...
Required
* irc-net gem
Authors: [email protected] Links: github.com/maiha/ircbot