Packages

A Gleam library for interacting with the Discord API

Current section

Files

Jump to
shimmer src shimmer.gleam
Raw

src/shimmer.gleam

import gleam/io
import gleam/string
import gleam/dynamic
import gleam/erlang
import gleam/result
import gleam/option.{None, Option, Some}
import gleam/int
import gleam/otp/process
import shimmer/types/message.{Message}
import shimmer/ws/event_loop.{IdentifyInfo, websocket_actor}
import shimmer/ws/ws_utils.{open_gateway}
pub type HandlersBuilder {
HandlersBuilder(
on_ready: Option(fn() -> Nil),
on_message: Option(fn(Message) -> Nil),
)
}
pub type Handlers {
Handlers(on_ready: fn() -> Nil, on_message: fn(Message) -> Nil)
}
pub type Client {
Client(token: String, handlers: Handlers, intents: Int)
}
pub fn handlers_builder() -> HandlersBuilder {
HandlersBuilder(on_ready: None, on_message: None)
}
pub fn on_ready(builder: HandlersBuilder, f: fn() -> Nil) -> HandlersBuilder {
HandlersBuilder(..builder, on_ready: Some(f))
}
pub fn on_message(
builder: HandlersBuilder,
f: fn(Message) -> Nil,
) -> HandlersBuilder {
HandlersBuilder(..builder, on_message: Some(f))
}
pub fn handlers_from_builder(builder: HandlersBuilder) -> Handlers {
Handlers(
on_ready: builder.on_ready
|> option.unwrap(or: fn() { Nil }),
on_message: builder.on_message
|> option.unwrap(or: fn(_) { Nil }),
)
}
pub fn connect(client: Client) -> Nil {
websocket_actor(IdentifyInfo(token: client.token, intents: client.intents))
Nil
}