README.md in safubot-0.0.1 vs README.md in safubot-0.0.2
- old
+ new
@@ -1,43 +1,94 @@
# safubot - an evented chatbot framework for Ruby
+## <a name="overview">Overview</a>
+Safubot is a chatbot framework for Twitter and XMPP which aims to abstract away the idiosyncracies of the underlying APIs, allowing you to focus on writing request-processing logic. Of course, if you want to use service-specific features (such as responding to timeline tweets) it lets you do that too!
+
## <a name="installation">Installation</a>
+ gem install safubot
+## <a name="requirements">Requirements</a>
+Safubot uses [MongoDB](http://www.mongodb.org) for storage. It's [easy to install](http://www.mongodb.org/display/DOCS/Quickstart+Unix) and pretty awesome!
+
## <a name="documentation">Documentation</a>
+[http://rdoc.info/gems/safubot](http://rdoc.info/gems/safubot)
-## <a name="example">Example Usage</a>
+## <a name="example">Sample Usage</a>
require 'safubot'
class NiftyBot < Safubot::Bot
def initialize
+ # Check the MongoMapper docs (http://www.mongomapper.com/documentation/) if you want
+ # to do something more sophisticated than an authless localhost connection.
super(:database => "niftybot")
+ # To access the underlying delegation targets:
+ # Safubot::Twitter::Bot bot.twitter
+ # ::Twitter::Client bot.twitter.client
+ # ::TweetStream::Client bot.twitter.stream
enable_twitter({
:username => "niftybot",
:consumer_key => CONSUMER_KEY,
:consumer_secret => CONSUMER_SECRET,
:oauth_token => OAUTH_TOKEN,
:oauth_token_secret => OAUTH_TOKEN_SECRET
})
+ # Similarly, for XMPP:
+ # Safubot::XMPP::Bot bot.xmpp
+ # ::Blather::Client bot.xmpp.client
enable_xmpp({
:jid => "niftybot@jabber.org/niftyhost",
:password => JABBER_PASSWORD
})
+ # A Request can be sourced from a:
+ # * Twitter mention
+ # * Twitter DM
+ # * XMPP chat message
+ # The "respond" method will reply using the appropriate medium.
on(:request) do |req|
if req.text.match /nifty/i
respond req, "Yep, I'm a nifty bot! :3"
else
raise ArgumentError, "This isn't nifty at all! :("
end
end
+ # Any unhandled errors encountered during request processing
+ # will come through here.
on(:request_error) do |req, e|
respond req, "#{e}"
end
end
end
# You can run this from inside another EventMachine loop if
# you don't want it to block indefinitely.
NiftyBot.new.run
+
+## <a name="example">Specific Examples</a>
+
+### Find the last processed request from a user
+
+ on(:request) do |req|
+ req.user.requests.where(:processed => true).sort(:created_at.desc).first
+ end
+
+### Update our twitter account
+
+ @twitter.client.update("Hello there, wonderful, scary world of Twitter! I am so *not* a spambot.")
+
+### Reply to a non-request timeline tweet
+
+ @twitter.on(:timeline) do |tweet|
+ if tweet.raw['user']['screen_name'] == "unnali"
+ @twitter.reply tweet, "Is HaeSeun OSS yet? :O"
+ end
+ end
+
+### Start an unprompted conversation with an XMPP user.
+
+ @xmpp.on(:ready) do
+ @xmpp.tell('^_^@jabber.org', "You'd best be maintaining safubot!")
+ end
+