Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Failed to load latest commit information.
extras Remove annoying deploy sound command
spec Remove broken !iou
web Remove stats from web
.gitignore Ignore rbenv-versions
.ruby-version.example Don't force a ruby on us
.rvmrc 1.9.3
Gemfile !last_deploy fetches info about last deploy
Gemfile.lock !last_deploy fetches info about last deploy README: typo
Rakefile Support Ctrl-C again
config.yml.example Support ignoring of commands


Flower is a Flowdock Bot

Flowdock is a team collaboration and group chat service, similar to Campfire.

Flowdock is also the group chat service of choice at the Mynewsdesk R&D dept. To make it more fun and/or usable, we made this bot.

Flower was made to be easy to extend with your own commands.

How do I use it?

  1. Create a new Flowdock account for your Flower bot. Give it a nick, for example "Bot", or "Steve".
  2. Download/clone the repository
  3. Copy and rename config.yml.example to config.yml, and fill it with your settings
  4. Run the bot in the background: rake run &
  5. Write "!job" and smile!

All commands are prefixed with ! Run:

$ git grep 'respond_to'

to see which commands you can use

Writing my own commands

You should write your own commands to make Flower fun and/or useful for your team.

This is easy. Simply create a class like this in lib/commands that inherits Flower::Command:

class MyCommand < Flower::Command
  respond_to "testing"
  def self.respond(command, message, sender, flower)
    # Do something with "flower"
    flower.say("Only testing")
  def self.description
    "Text that describes your command. It's used in the built-in Help command."

MyCommand.respond will be invoked when a message prefix matches what you respond_to. Arguments passed are:

  • command - The matched command
  • message - The entire message
  • sender - A hash with sender user id/nick info: {:id => 123, :nick => "Jonas"}
  • flower - The Flower instance, that can say or paste something
Something went wrong with that request. Please try again.