README.md

# Kaguya

**A small but powerful IRC bot**

## Installation

  1. Add kaguya to your list of dependencies in `mix.exs`:
  ```elixir
        def deps do
          [{:kaguya, "~> x.y.z"}]
        end
    ```

  2. Run `mix deps.get`

  3. Ensure kaguya is started before your application:
  ```elixir
        def application do
          [applications: [:kaguya]]
        end
    ```

  4. Configure kaguya in config.exs:
  ```elixir
        config :kaguya,
          server: "my.irc.server",
          port: 6666,
          bot_name: "kaguya",
          modules: [],
          channels: ["#kaguya"]
    ```

## Usage
By default Kaguya won't do much. This is an example of a module which will
perform a few simple commands:
```elixir
defmodule Kaguya.Module.Simple do
  use Kaguya.Module, "simple"

  handle "PRIVMSG" do
    match "!ping", :pingHandler
    match "!say ~message", :sayHandler
  end

  def pingHandler(message), do: reply "pong!"
  def sayHandler(message, %{message: response}), do: reply response
end
```

This module defines two commands to be handled. `!ping`, to which the bot
will respond `pong!`, and `!say [some message]` which will have
the bot echo the message the user gave. The `~` indicates a
trailing match in which all characters following `!say ` will be matched
against.

Once you've written a module you need to specify that it be loaded.
You can do this by modifying the config parameter `modules` to include
the name of the module you wrote. In the config would look like:
```elixir
  config :kaguya,
    ...
    modules: [Kaguya.Module.Simple, ...],
    ...
```

You can find a more full featured example in `example/basic.ex`.