Packages

A purely Gleam Discord library built from the ground up with stratus.

Current section

Files

Jump to
glyph src models api.gleam
Raw

src/models/api.gleam

//// This contains all types needed to communicate with either the Gateway or REST API.
import gleam/option.{type Option}
/// The data structure Discord uses for UUIDs: https://discord.com/developers/docs/reference#snowflakes
pub type Snowflake =
String
/// Model for a Discord Application: https://discord.com/developers/docs/resources/application
/// Note to self: summary is deprecated and will be removed in v11
pub type Application {
Application(
id: Snowflake,
name: String,
icon: Option(String),
description: String,
rpc_origins: Option(List(String)),
bot_public: Bool,
bot_require_code_grant: Bool,
bot: Option(Bot),
terms_of_service_url: Option(String),
privacy_policy_url: Option(String),
owner: Option(Owner),
summary: Option(String),
verify_key: String,
team: Option(Team),
guild_id: Option(Snowflake),
primary_sku_id: Option(Snowflake),
slug: Option(String),
cover_image: Option(String),
flags: Option(Int),
approximate_guild_count: Option(Int),
redirect_uris: Option(List(String)),
interactions_endpoint_url: Option(String),
role_connections_verification_url: Option(String),
tags: Option(List(String)),
install_params: Option(InstallParams),
custom_install_url: Option(String),
)
}
/// Model for a Discord User: https://discord.com/developers/docs/resources/user#user-object
/// Some additional fields marked as optional here due to the use of partial user objects
/// in other areas of the API.
pub type User {
User(
id: Snowflake,
username: String,
discriminator: String,
global_name: Option(String),
avatar: Option(String),
bot: Option(Bool),
system: Option(Bool),
mfa_enabled: Option(Bool),
banner: Option(String),
accent_color: Option(Int),
locale: Option(String),
email: Option(String),
flags: Option(Int),
premium_type: Option(Int),
public_flags: Option(Int),
avatar_decoration: Option(String),
)
}
pub type Bot =
User
pub type Owner =
User
/// Model for a Team object: https://discord.com/developers/docs/topics/teams#data-models-team-object
pub type Team {
Team(
id: Snowflake,
icon: Option(String),
members: List(Member),
name: String,
owner_user_id: Snowflake,
)
}
/// Model for a Team Member object: https://discord.com/developers/docs/topics/teams#data-models-team-member-object
pub type Member {
Member(membership_state: Int, team_id: Snowflake, user: User, role: String)
}
/// Model for Membership State: https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum
pub type MembershipState {
INVITED
// -> 1
ACCEPTED
// -> 2
}
/// Model for Install Params: https://discord.com/developers/docs/resources/application#install-params-object
pub type InstallParams {
InstallParams(scopes: List(String), permissions: String)
}