= Robut The friendly plugin-enabled HipChat bot. == Installation and usage Robut can be installed by running gem install robut. This installs the +robut+ binary. When run, +robut+ reads a Chatfile, connects to the specified HipChat server and chatroom, and feeds every line said in the chatroom through the plugins configured by the Chatfile. Once robut is running, the plugins listen to what's being said in the chatroom. Most plugins listen for @replies to robut: @robut lunch? # => "Banh Mi!" @robut calc 1 + 1 # => 2 Others listen to everything, and don't require an @reply. Some of the included plugins require extra gems to be installed: [Robut::Plugin::TWSS] requires the twss gem [Robut::Plugin::Meme] requires the meme_generator gem [Robut::Plugin::Calc] requires the calc gem [Robut::Plugin::Rdio] requires the rdio and sinatra gems == The Chatfile When the +robut+ command runs, it looks for and evals ruby code in a file called +Chatfile+ in the current directory. You can override the configuration file by passing +robut+ a path to a Chatfile as the first parameter: robut /path/to/Chatfile The Chatfile is just ruby code. A simple example can be found here: Chatfile[https://github.com/justinweiss/robut/blob/master/examples/Chatfile] === Adding and configuring plugins Plugins are ruby classes, so enabling a plugin just requires requiring the plugin file, optionally configuring the plugin class, and adding the class to the global plugin list: require 'robut/plugin/lunch' Robut::Plugin::Lunch.places = ["Banh Mi", "Mad Oven", "Mod Pizza", "Taphouse"] Robut::Plugin.plugins << Robut::Plugin::Lunch Each plugin can be configured differently, or not at all. It's best to look at the docs for the plugins you want to use to figure out what kind of configuration they support. Some plugins might require storage (like the `lunch` plugin). You can configure the type of storage you want to use based on the need for persistence. The default is the HashStore which is in-memory only. Below is an example of using the YamlStore. Robut::Connection.configure do |config| # ... Robut::Storage::YamlStore.file = "~/.robut_store" config.store = Robut::Storage::YamlStore end === Configuring the HipChat connection The Chatfile also configures the HipChat connection. This is done in a Robut::Connection.configure block: # Configure the robut jabber connection and you're good to go! Robut::Connection.configure do |config| config.jid = '...@chat.hipchat.com/bot' config.password = 'password' config.nick = 'My Nick' config.room = '...@conf.hipchat.com' # Example of the YamlStore which uses a yaml file for persistence Robut::Storage::YamlStore.file = "~/.robut_store" config.store = Robut::Storage::YamlStore # Add a logger if you want to debug the connection # config.logger = Logger.new(STDOUT) end This block usually goes at the end of the Chatfile. == Built-in plugins Robut includes a few plugins that we've found useful: [Robut::Plugin::Calc] a simple calculator.

Example: @robut calc 1 + 1 # => 2 [Robut::Plugin::Lunch] a random decider for lunch locations.

Example: @robut lunch? # => "Banh Mi!" [Robut::Plugin::Meme] an interface to memegenerator.net.

Example: @robut meme Y_U_NO FIX THE BUILD? [Robut::Plugin::Sayings] a simple regex listener and responder.

Example: You're the worst robot ever, @robut. # => I know. [Robut::Plugin::TWSS] an interface to the TWSS gem. Listens to anything said in the chat room and responds "That's what she said!" where appropriate.

Example: well hurry up, you're not going fast enough # => "That's what she said!" [Robut::Plugin::Echo] echo back whatever it gets.

Example: @robut echo hello word [Robut::Plugin::Say] invokes the "say" command (text-to-speech).

Example: @robut say this rocks [Robut::Plugin::Ping] responds with "pong".

Example: @robut ping [Robut::Plugin::Later] performs the given command after waiting an arbitrary amount of time.

Example: @robut in 5 minutes echo @justin wake up! [Robut::Plugin::Rdio] uses the Rdio[http://www.rdio.com] API and a simple web server to queue and play songs on Rdio.

Example: @robut play ok computer == Writing custom plugins You can supply your own plugins to Robut. To create a plugin, subclass Robut::Plugin::Base and implement the handle(time, sender_nick, message) to perform any plugin-specific logic. Robut::Plugin::Base provides a few helper methods that are documented in its class definition. == Contributing Once you've made your great commits: 1. Fork robut 2. Create a topic branch - git checkout -b my_branch 3. Push to your branch - git push origin my_branch 4. Send me a pull request 5. That's it! == Todo * Support connections to multiple rooms * More plugins!