README.md

# ExIdobata

An [Idobata.io](https://idobata.io/en/home) ([Japanese](https://idobata.io/ja/home)) client in Elixir.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `ex_idobata` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ex_idobata, "~> 0.1"}
  ]
end
```

## Hook

To post messages or images to use hook API.

### Usage

```elixir
alias ExIdobata.Hook
```

```elixir
# room UUID, it's the last part of hook API,
# for examle https://idobata.io/hook/custom/00000000-0000-0000-0000-000000000000

room_uuid = "00000000-0000-0000-0000-000000000000"
```

```elixir
# post plain text message

Hook.contents()
|> Hook.source("Hi")
|> Hook.post(room_uuid)

# post Markdown message

Hook.contents()
|> Hook.source("# Hi")
|> Hook.markdown()
|> Hook.post(room_uuid)

# post HTML message

Hook.contents()
|> Hook.source("<h1>Hi</h1>")
|> Hook.html()
|> Hook.post(room_uuid)

# post message with image

Hook.contents()
|> Hook.source("hi")
|> Hook.image("./hello.gif")
|> Hook.post(room_uuid)
```

#### Use environment variable

If `room_uuid` omitted, the function `post` uses a value of environemnt variable `IDOBATA_HOOK_ROOM_UUID` as UUID.
To use another environment variable, pass a tuple with `:system` and the variable name (e.g., `{:system, "ANOTHER_ROOM_UUID"}`).

## GraphQL API

### Gets an access token

```elixir
access_token = ExIdobata.API.AccessToken.get(email, password)
```

This access token used API functions described below.

### Gets a viewer

```elixir
viewer = ExIdobata.API.Viewer.get(access_token)
# `viewer.name` is an account user name
```

### Gets rooms

```elixir
rooms = ExIdobata.API.Room.get(access_token)
```

### Posts a message

To post a plain text message.

```elixir
ExIdobata.API.post(access_token, room, "Hi")
```

It's same as bellow.

```elixir
ExIdobata.API.post(access_token, room, "Hi", :plain)
```

To post a Markdown message.

```elixir
ExIdobata.API.post(access_token, room, "*Hi*", :markdown)
```

To post a HTML message.

```elixir
ExIdobata.API.post(access_token, room, "<h1>Hi</h1>", :html)
```