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 |
Summary
Functions
Builds a client — shorthand for Noizu.Discord.Client.new/1.
Functions
@spec client(keyword()) :: Noizu.Discord.Client.t()
Builds a client — shorthand for Noizu.Discord.Client.new/1.