# `Noizu.Discord`
[🔗](https://github.com/noizu-labs-sdks/elixir-discord/blob/v0.1.0/lib/noizu/discord.ex#L1)

Discord REST API v10 client for Elixir.

**REST-only** — no gateway/websocket connection: this library sends requests
(messages, threads, reactions, webhooks, interaction callbacks) but does not
receive gateway events. Use HTTP interactions (`Noizu.Discord.Interactions`) to
receive slash commands and component clicks.

Every call returns `{:ok, term} | {:error, %Noizu.Discord.Error{}}` (errors are
returned, never raised; pass `meta: true` for `{:ok, term, meta}` with rate-limit
headers).

## Quick start

    # config/runtime.exs (optional — DISCORD_BOT_TOKEN is read as a fallback)
    config :noizu_discord, :client, token: System.get_env("DISCORD_BOT_TOKEN")

    client = Noizu.Discord.client()
    {:ok, me} = Noizu.Discord.Users.me(client)

    embed =
      Noizu.Discord.Embeds.new()
      |> Noizu.Discord.Embeds.title("Hello")
      |> Noizu.Discord.Embeds.description("From Elixir")

    {:ok, _msg} =
      Noizu.Discord.Channels.create_message(client, channel_id, %{
        content: "hi",
        embeds: [embed]
      })

    # Long markdown -> Discord content, split at 2000 chars
    for part <- markdown |> Noizu.Discord.Markdown.from_markdown() |> Noizu.Discord.Markdown.chunk() do
      Noizu.Discord.Channels.create_message(client, channel_id, %{content: part})
    end

    # History, lazily (newest first)
    client |> Noizu.Discord.Channels.messages_stream(channel_id) |> Enum.take(250)

## Modules

| Module | Surface |
|---|---|
| `Noizu.Discord.Client` | token, base URL, user agent, retry, Req options |
| `Noizu.Discord.Request` | request engine, retry/rate-limit policy |
| `Noizu.Discord.Users` | `/users/@me`, `/users/{id}` |
| `Noizu.Discord.Guilds` | guilds, channels, members, `/users/@me/guilds` |
| `Noizu.Discord.Channels` | channels, messages, threads, typing, pins |
| `Noizu.Discord.Reactions` | message reactions |
| `Noizu.Discord.Webhooks` | execute (no bot token), create, list |
| `Noizu.Discord.Interactions` | Ed25519 verification, callbacks |
| `Noizu.Discord.Embeds` | embed builders + limit validation |
| `Noizu.Discord.Markdown` | GFM conversion + 2000-char chunking |
| `Noizu.Discord.Pagination` | snowflake-cursor streams |
| `Noizu.Discord.Error` | structured errors |

# `client`

```elixir
@spec client(keyword()) :: Noizu.Discord.Client.t()
```

Builds a client — shorthand for `Noizu.Discord.Client.new/1`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
