From d598c18e44207510df03215b9e994b0f185bf987 Mon Sep 17 00:00:00 2001
From: jchristgit The ratelimiter is fully asynchronous internally. In theory, it also supports
queueing requests in an asynchronous manner. However, support for this is
currently not implemented in If you want to make one or multiple asynchronous requests manually, you can
-use the following pattern:
Nostrum.Api
.req = :gen_statem.send_request(Nostrum.Api.Ratelimiter, {:queue, request})
+use the following pattern:
req = :gen_statem.send_request(Nostrum.Api.Ratelimiter, {:queue, request})
# ...
-response = :gen_statem.receive_response(req, timeout)
where request
is a map describing the request to run - see Nostrum.Api
+response = :gen_statem.receive_response(req, timeout)
where request
is a map describing the request to run - see Nostrum.Api
for more information. You can also send multiple requests at the same time
and wait for their response: see :gen_statem.reqids_add/3
and
:gen_statem.wait_response/3
for more information.
Interface for Discord's rest API.
By default all methods in this module are ran synchronously. If you wish to have async rest operations I recommend you execute these functions inside of a task.
Examples
# Async Task
-t = Task.async fn ->
- Nostrum.Api.get_channel_messages(12345678912345, :infinity, {})
-end
+t = Task.async fn ->
+ Nostrum.Api.get_channel_messages(12345678912345, :infinity, {})
+end
messages = Task.await t
# A lot of times we don't care about the return value of the function
-Task.start fn ->
- messages = ["in", "the", "end", "it", "doesn't", "even", "matter"]
- Enum.each messages, &Nostrum.Api.create_message!(12345678912345, &1)
-end
Currently, responses from the REST api will have id
fields as string
.
+Task.start fn ->
+ messages = ["in", "the", "end", "it", "doesn't", "even", "matter"]
+ Enum.each messages, &Nostrum.Api.create_message!(12345678912345, &1)
+end
Currently, responses from the REST api will have id
fields as string
.
Everything received from the WS connection will have id
fields as int
.
If you're processing a response from the API and trying to access something in the cache
based off of an id
in the response, you will need to convert it to an int
using
-String.to_integer/1
. I'm open to suggestions for how this should be handled going forward.
Example
messages = Nostrum.Api.get_pinned_messages!(12345678912345)
+String.to_integer/1
. I'm open to suggestions for how this should be handled going forward.Example
messages = Nostrum.Api.get_pinned_messages!(12345678912345)
authors =
- Enum.map messages, fn msg ->
- author_id = String.to_integer(msg.author.id)
- Nostrum.Cache.User.get!(id: author_id)
- end
+ Enum.map messages, fn msg ->
+ author_id = String.to_integer(msg.author.id)
+ Nostrum.Cache.User.get!(id: author_id)
+ end
@@ -2902,13 +2902,13 @@ Nostrum.Api.add_guild_member(
+Nostrum.Api.add_guild_member(
41771983423143937,
18374719829378473,
access_token: "6qrZcUqja7812RVdnEKjpzOL4CvHBFG",
nick: "nostrum",
- roles: [431849301, 913809431]
-)
+ roles: [431849301, 913809431]
+)
Nostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)
+Nostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)
Nostrum.Api.begin_guild_prune(81384788765712384, 1)
-{:ok, %{pruned: 0}}
+Nostrum.Api.begin_guild_prune(81384788765712384, 1)
+{:ok, %{pruned: 0}}
Nostrum.Api.create_channel_invite(41771983423143933)
-{:ok, Nostrum.Struct.Invite{}}
+Nostrum.Api.create_channel_invite(41771983423143933)
+{:ok, Nostrum.Struct.Invite{}}
-Nostrum.Api.create_channel_invite(41771983423143933, max_uses: 20)
-{:ok, %Nostrum.Struct.Invite{}}
+Nostrum.Api.create_channel_invite(41771983423143933, max_uses: 20)
+{:ok, %Nostrum.Struct.Invite{}}
Nostrum.Api.create_dm(150061853001777154)
-{:ok, %Nostrum.Struct.Channel{type: 1}}
+Nostrum.Api.create_dm(150061853001777154)
+{:ok, %Nostrum.Struct.Channel{type: 1}}
Nostrum.Api.create_global_application_command(
- %{name: "edit", description: "ed, man! man, ed", options: []}
-)
+Nostrum.Api.create_global_application_command(
+ %{name: "edit", description: "ed, man! man, ed", options: []}
+)
Nostrum.Api.create_group_dm(["6qrZcUqja7812RVdnEKjpzOL4CvHBFG"], %{41771983423143937 => "My Nickname"})
-{:ok, %Nostrum.Struct.Channel{type: 3}}
+Nostrum.Api.create_group_dm(["6qrZcUqja7812RVdnEKjpzOL4CvHBFG"], %{41771983423143937 => "My Nickname"})
+{:ok, %Nostrum.Struct.Channel{type: 3}}
Nostrum.Api.create_guild_channel(81384788765712384, name: "elixir-nostrum", topic: "craig's domain")
-{:ok, %Nostrum.Struct.Channel{guild_id: 81384788765712384}}
+Nostrum.Api.create_guild_channel(81384788765712384, name: "elixir-nostrum", topic: "craig's domain")
+{:ok, %Nostrum.Struct.Channel{guild_id: 81384788765712384}}
image = "data:image/png;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8="
-Nostrum.Api.create_guild_emoji(43189401384091, name: "nostrum", image: image, roles: [])
+Nostrum.Api.create_guild_emoji(43189401384091, name: "nostrum", image: image, roles: [])
Nostrum.Api.create_guild_role(41771983423143937, name: "nostrum-club", hoist: true)
+Nostrum.Api.create_guild_role(41771983423143937, name: "nostrum-club", hoist: true)
response = %{
+response = %{
type: 4,
- data: %{
+ data: %{
content: "I copy and pasted this code."
- }
-}
-Nostrum.Api.create_interaction_response(interaction, response)
As an alternative to passing the interaction ID and token, the
+
}
+}
+Nostrum.Api.create_interaction_response(interaction, response)
As an alternative to passing the interaction ID and token, the
original Nostrum.Struct.Interaction.t/0
can also be passed
directly. See create_interaction_response/2
.
message_reference
field in your call. The complete structure
documentation can be found on the Discord Developer
Portal,
-but simply passing message_id
will suffice:def my_command(msg) do
+but simply passing message_id
will suffice:def my_command(msg) do
# Reply to the author - ``msg`` is a ``Nostrum.Struct.Message``
- Nostrum.Api.create_message(
+ Nostrum.Api.create_message(
msg.channel_id,
content: "Hello",
- message_reference: %{message_id: msg.id}
- )
-end
Passing a list will merge the settings provided
+
message_reference: %{message_id: msg.id}
+ )
+end
Passing a list will merge the settings provided
Nostrum.Api.create_message(43189401384091, content: "hello world!")
+Nostrum.Api.create_message(43189401384091, content: "hello world!")
-Nostrum.Api.create_message(43189401384091, "hello world!")
+Nostrum.Api.create_message(43189401384091, "hello world!")
import Nostrum.Struct.Embed
embed =
- %Nostrum.Struct.Embed{}
- |> put_title("embed")
- |> put_description("new desc")
-Nostrum.Api.create_message(43189401384091, embeds: [embed])
+ %Nostrum.Struct.Embed{}
+ |> put_title("embed")
+ |> put_description("new desc")
+Nostrum.Api.create_message(43189401384091, embeds: [embed])
-Nostrum.Api.create_message(43189401384091, file: "/path/to/file.txt")
+Nostrum.Api.create_message(43189401384091, file: "/path/to/file.txt")
-Nostrum.Api.create_message(43189401384091, content: "hello world!", embeds: [embed], file: "/path/to/file.txt")
+Nostrum.Api.create_message(43189401384091, content: "hello world!", embeds: [embed], file: "/path/to/file.txt")
-Nostrum.Api.create_message(43189401384091, content: "Hello @everyone", allowed_mentions: :none)
+Nostrum.Api.create_message(43189401384091, content: "Hello @everyone", allowed_mentions: :none)
# Using a Nostrum.Struct.Emoji.
-emoji = %Nostrum.Struct.Emoji{id: 43819043108, name: "foxbot"}
-Nostrum.Api.create_reaction(123123123123, 321321321321, emoji)
+emoji = %Nostrum.Struct.Emoji{id: 43819043108, name: "foxbot"}
+Nostrum.Api.create_reaction(123123123123, 321321321321, emoji)
# Using a base 16 emoji string.
-Nostrum.Api.create_reaction(123123123123, 321321321321, "\xF0\x9F\x98\x81")
+Nostrum.Api.create_reaction(123123123123, 321321321321, "\xF0\x9F\x98\x81")
For other emoji string examples, see Nostrum.Struct.Emoji.api_name/0
.
Nostrum.Api.delete_channel(421533712753360896)
-{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}
+Nostrum.Api.delete_channel(421533712753360896)
+{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}
Nostrum.Api.delete_guild(81384788765712384)
-{:ok}
+Nostrum.Api.delete_guild(81384788765712384)
+{:ok}
Nostrum.Api.delete_guild_role(41771983423143937, 392817238471936)
+Nostrum.Api.delete_guild_role(41771983423143937, 392817238471936)
Nostrum.Api.delete_invite("zsjUsC")
+Nostrum.Api.delete_invite("zsjUsC")
Nostrum.Api.delete_message(43189401384091, 43189401384091)
+Nostrum.Api.delete_message(43189401384091, 43189401384091)
Nostrum.Api.edit_message(43189401384091, 1894013840914098, content: "hello world!")
+Nostrum.Api.edit_message(43189401384091, 1894013840914098, content: "hello world!")
-Nostrum.Api.edit_message(43189401384091, 1894013840914098, "hello world!")
+Nostrum.Api.edit_message(43189401384091, 1894013840914098, "hello world!")
import Nostrum.Struct.Embed
embed =
- %Nostrum.Struct.Embed{}
- |> put_title("embed")
- |> put_description("new desc")
-Nostrum.Api.edit_message(43189401384091, 1894013840914098, embeds: [embed])
+ %Nostrum.Struct.Embed{}
+ |> put_title("embed")
+ |> put_description("new desc")
+Nostrum.Api.edit_message(43189401384091, 1894013840914098, embeds: [embed])
-Nostrum.Api.edit_message(43189401384091, 1894013840914098, content: "hello world!", embeds: [embed])
+Nostrum.Api.edit_message(43189401384091, 1894013840914098, content: "hello world!", embeds: [embed])
Nostrum.Api.get_application_information
-{:ok,
-%{
+{:ok,
+%{
bot_public: false,
bot_require_code_grant: false,
description: "Test",
icon: nil,
id: "172150183260323840",
name: "Baba O-Riley",
- owner: %{
+ owner: %{
avatar: nil,
discriminator: "0042",
id: "172150183260323840",
username: "i own a bot"
- },
-}}
+ },
+}}
Nostrum.Api.get_channel(381889573426429952)
-{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}
+Nostrum.Api.get_channel(381889573426429952)
+{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}
Nostrum.Api.get_channel_invites(43189401384091)
-{:ok, [%Nostrum.Struct.Invite{} | _]}
+Nostrum.Api.get_channel_invites(43189401384091)
+{:ok, [%Nostrum.Struct.Invite{} | _]}
Nostrum.Api.get_channel_message(43189401384091, 198238475613443)
+Nostrum.Api.get_channel_message(43189401384091, 198238475613443)
Nostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})
+Nostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})
iex> Nostrum.Api.get_current_user_guilds(limit: 1)
-{:ok, [%Nostrum.Struct.Guild{}]}
+iex> Nostrum.Api.get_current_user_guilds(limit: 1)
+{:ok, [%Nostrum.Struct.Guild{}]}
iex> Nostrum.Api.get_global_application_commands
-{:ok,
- [
- %{
+{:ok,
+ [
+ %{
application_id: "455589479713865749",
description: "ed, man! man, ed",
id: "789841753196331029",
name: "edit"
- }
- ]}
+ }
+ ]}
Nostrum.Api.get_guild(81384788765712384)
-{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}
+Nostrum.Api.get_guild(81384788765712384)
+{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}
Nostrum.Api.get_guild_channels(81384788765712384)
-{:ok, [%Nostrum.Struct.Channel{guild_id: 81384788765712384} | _]}
+Nostrum.Api.get_guild_channels(81384788765712384)
+{:ok, [%Nostrum.Struct.Channel{guild_id: 81384788765712384} | _]}
Nostrum.Api.get_guild_invites(81384788765712384)
-{:ok, [%Nostrum.Struct.Invite{} | _]}
+Nostrum.Api.get_guild_invites(81384788765712384)
+{:ok, [%Nostrum.Struct.Invite{} | _]}
Nostrum.Api.get_guild_member(4019283754613, 184937267485)
+Nostrum.Api.get_guild_member(4019283754613, 184937267485)
Nostrum.Api.get_guild_prune_count(81384788765712384, 1)
-{:ok, %{pruned: 0}}
+Nostrum.Api.get_guild_prune_count(81384788765712384, 1)
+{:ok, %{pruned: 0}}
Nostrum.Api.get_guild_roles(147362948571673)
+Nostrum.Api.get_guild_roles(147362948571673)
Nostrum.Api.get_invite("zsjUsC")
+Nostrum.Api.get_invite("zsjUsC")
-Nostrum.Api.get_invite("zsjUsC", with_counts: true)
+Nostrum.Api.get_invite("zsjUsC", with_counts: true)
Nostrum.Api.get_pinned_messages(43189401384091)
+Nostrum.Api.get_pinned_messages(43189401384091)
Nostrum.Api.get_user_dms()
-{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}
+Nostrum.Api.get_user_dms()
+{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}
Nostrum.Api.list_guild_members(41771983423143937, limit: 1)
+Nostrum.Api.list_guild_members(41771983423143937, limit: 1)
Nostrum.Api.modify_channel(41771983423143933, name: "elixir-nostrum", topic: "nostrum discussion")
-{:ok, %Nostrum.Struct.Channel{id: 41771983423143933, name: "elixir-nostrum", topic: "nostrum discussion"}}
+Nostrum.Api.modify_channel(41771983423143933, name: "elixir-nostrum", topic: "nostrum discussion")
+{:ok, %Nostrum.Struct.Channel{id: 41771983423143933, name: "elixir-nostrum", topic: "nostrum discussion"}}
-Nostrum.Api.modify_channel(41771983423143933)
-{:ok, %Nostrum.Struct.Channel{id: 41771983423143933}}
+Nostrum.Api.modify_channel(41771983423143933)
+{:ok, %Nostrum.Struct.Channel{id: 41771983423143933}}
Nostrum.Api.modify_current_user(avatar: "data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=")
+Nostrum.Api.modify_current_user(avatar: "data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=")
Nostrum.Api.modify_current_user_nick(41771983423143937, nick: "Nostrum")
-{:ok, %{nick: "Nostrum"}}
+Nostrum.Api.modify_current_user_nick(41771983423143937, nick: "Nostrum")
+{:ok, %{nick: "Nostrum"}}
Nostrum.Api.modify_guild(451824027976073216, name: "Nose Drum")
-{:ok, %Nostrum.Struct.Guild{id: 451824027976073216, name: "Nose Drum", ...}}
+Nostrum.Api.modify_guild(451824027976073216, name: "Nose Drum")
+{:ok, %Nostrum.Struct.Guild{id: 451824027976073216, name: "Nose Drum", ...}}
Nostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])
-{:ok}
+Nostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])
+{:ok}
Nostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: "elixir", roles: [])
+Nostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: "elixir", roles: [])
Nostrum.Api.modify_guild_member(41771983423143937, 637162356451, nick: "Nostrum")
-{:ok, %Nostrum.Struct.Member{}}
+Nostrum.Api.modify_guild_member(41771983423143937, 637162356451, nick: "Nostrum")
+{:ok, %Nostrum.Struct.Member{}}
Nostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: "foo-bar")
+Nostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: "foo-bar")
Nostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])
+Nostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])
Nostrum.Api.remove_guild_member(1453827904102291, 18739485766253)
-{:ok}
+Nostrum.Api.remove_guild_member(1453827904102291, 18739485766253)
+{:ok}
By default, nostrum will use Elixir.Nostrum.Cache.ChannelGuildMapping.ETS
to store the
mapping. To override this, set the [:caches, :channel_guild_mapping]
setting on nostrum's application configuration:
config :nostrum,
- caches: %{
+ caches: %{
channel_guild_mapping: MyBot.Nostrum.Cache.ChannelGuildMapping
- }
This setting must be set at compile time.
+ }This setting must be set at compile time.
:ordered_set
To change this configuration, you can add the following to your
config.exs
:
config :nostrum,
- caches: %{
- messages: {Nostrum.Cache.MessageCache.Mnesia,
+ caches: %{
+ messages: {Nostrum.Cache.MessageCache.Mnesia,
size_limit: 1000, eviction_count: 50,
table_name: :my_custom_messages_table_name,
- compressed: true, type: :set}
- }
You can also change the table name used by the cache by setting the + compressed: true, type: :set} + }
You can also change the table name used by the cache by setting the
table_name
field in the configuration for the messages
cache.
case Nostrum.Cache.PresenceCache.get(111133335555, 222244446666) do
- {:ok, presence} ->
- "They're #{presence.status}"
- {:error, _reason} ->
+case Nostrum.Cache.PresenceCache.get(111133335555, 222244446666) do
+ {:ok, presence} ->
+ "They're #{presence.status}"
+ {:error, _reason} ->
"They're dead Jim"
-end
+end
case Nostrum.Cache.UserCache.get(1111222233334444) do
- {:ok, user} ->
+case Nostrum.Cache.UserCache.get(1111222233334444) do
+ {:ok, user} ->
"We found " <> user.username
- {:error, _reason} ->
+ {:error, _reason} ->
"No es bueno"
-end
+end
handle_info/2
function in your consumer. For reference, this
-is the default implementation: def handle_info({:event, event}, state) do
- Task.start(fn ->
- try do
- __MODULE__.handle_event(event)
- rescue
+is the default implementation: def handle_info({:event, event}, state) do
+ Task.start(fn ->
+ try do
+ __MODULE__.handle_event(event)
+ rescue
e ->
- Logger.error("Error in event handler: #{Exception.format_error(e, __STACKTRACE__)}")
- end
- end)
+ Logger.error("Error in event handler: #{Exception.format_error(e, __STACKTRACE__)}")
+ end
+ end)
- {:noreply, state}
- end
+
{:noreply, state}
+ end
An example consumer could look as follows:
# Sourced from examples/event_consumer.ex
-defmodule ExampleSupervisor do
+defmodule ExampleSupervisor do
use Supervisor
- def start_link(args) do
- Supervisor.start_link(__MODULE__, args, name: __MODULE__)
- end
+ def start_link(args) do
+ Supervisor.start_link(__MODULE__, args, name: __MODULE__)
+ end
@impl true
- def init(_init_arg) do
- children = [ExampleConsumer]
+ def init(_init_arg) do
+ children = [ExampleConsumer]
- Supervisor.init(children, strategy: :one_for_one)
- end
-end
+ Supervisor.init(children, strategy: :one_for_one)
+ end
+end
-defmodule ExampleConsumer do
+defmodule ExampleConsumer do
use Nostrum.Consumer
alias Nostrum.Api
- def handle_event({:MESSAGE_CREATE, msg, _ws_state}) do
- case msg.content do
+ def handle_event({:MESSAGE_CREATE, msg, _ws_state}) do
+ case msg.content do
"!sleep" ->
- Api.create_message(msg.channel_id, "Going to sleep...")
+ Api.create_message(msg.channel_id, "Going to sleep...")
# This won't stop other events from being handled.
- Process.sleep(3000)
+ Process.sleep(3000)
"!ping" ->
- Api.create_message(msg.channel_id, "pyongyang!")
+ Api.create_message(msg.channel_id, "pyongyang!")
"!raise" ->
# This won't crash the entire Consumer.
@@ -212,9 +212,9 @@
_ ->
:ignore
- end
- end
-end
+ end
+ end
+end
@@ -2938,9 +2938,9 @@
handle_event(event)
Event
event
is a tuple describing the event. The tuple will include information in -the following format:{event_name, {event_payload(s)}, WSState.t}
For example, a message create will look like this
{:MESSAGE_CREATE, Nostrum.Struct.Message.t, WSState.t}
In some cases there will be multiple payloads when something is updated, so as +the following format:
{event_name, {event_payload(s)}, WSState.t}
For example, a message create will look like this
{:MESSAGE_CREATE, Nostrum.Struct.Message.t, WSState.t}
In some cases there will be multiple payloads when something is updated, so as to include the new and the old versions. In the event of there being two payloads, -the old payload will always be first, followed by the new payload.
{:USER_UPDATE, {old_user :: Nostrum.Struct.User.t, new_user :: Nostrum.Struct.User.t}, WSState.t()}
For a full listing of events, please see
+the old payload will always be first, followed by the new payload.Nostrum.Consumer.event/0
.{:USER_UPDATE, {old_user :: Nostrum.Struct.User.t, new_user :: Nostrum.Struct.User.t}, WSState.t()}
For a full listing of events, please see
Nostrum.Consumer.event/0
.
alias Nostrum.Cache.GuildCache
alias Nostrum.Struct.Guild.Member
-guild = GuildCache.get!(279093381723062272)
-member = Map.get(guild.members, 177888205536886784)
-member_perms = Member.guild_permissions(member, guild)
+guild = GuildCache.get!(279093381723062272)
+member = Map.get(guild.members, 177888205536886784)
+member_perms = Member.guild_permissions(member, guild)
-if :administrator in member_perms do
- IO.puts("This user has the administrator permission.")
-end
+if :administrator in member_perms do
+ IO.puts("This user has the administrator permission.")
+end
@@ -589,10 +589,10 @@ iex> Nostrum.Permission.from_bit(0x04000000)
-{:ok, :change_nickname}
+iex> Nostrum.Permission.from_bit(0x04000000)
+{:ok, :change_nickname}
-iex> Nostrum.Permission.from_bit(0)
+iex> Nostrum.Permission.from_bit(0)
:error
@@ -627,10 +627,10 @@ from_bit!(bit)
Examples
-iex> Nostrum.Permission.from_bit!(0x04000000)
+iex> Nostrum.Permission.from_bit!(0x04000000)
:change_nickname
-iex> Nostrum.Permission.from_bit!(0)
+iex> Nostrum.Permission.from_bit!(0)
** (ArgumentError) expected a valid bit, got: `0`
@@ -665,11 +665,11 @@ from_bitset(bitset)
Examples
-iex> Nostrum.Permission.from_bitset(0x08000002)
-[:manage_nicknames, :kick_members]
+iex> Nostrum.Permission.from_bitset(0x08000002)
+[:manage_nicknames, :kick_members]
-iex> Nostrum.Permission.from_bitset(0x4000000000000)
-[]
+iex> Nostrum.Permission.from_bitset(0x4000000000000)
+[]
@@ -699,10 +699,10 @@ is_permission(term)
Examples
-iex> Nostrum.Permission.is_permission(:administrator)
+iex> Nostrum.Permission.is_permission(:administrator)
true
-iex> Nostrum.Permission.is_permission(:not_a_permission)
+iex> Nostrum.Permission.is_permission(:not_a_permission)
false
@@ -737,7 +737,7 @@ to_bit(permission)
Examples
-iex> Nostrum.Permission.to_bit(:administrator)
+iex> Nostrum.Permission.to_bit(:administrator)
8
@@ -772,7 +772,7 @@ to_bitset(permissions)
Examples
-iex> Nostrum.Permission.to_bitset([:administrator, :create_instant_invite])
+iex> Nostrum.Permission.to_bitset([:administrator, :create_instant_invite])
9
diff --git a/Nostrum.Shard.Session.Compression.Zlib.html b/Nostrum.Shard.Session.Compression.Zlib.html
index c0ceaaf02..9e44a45ee 100644
--- a/Nostrum.Shard.Session.Compression.Zlib.html
+++ b/Nostrum.Shard.Session.Compression.Zlib.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Shard.Session.Compression.Zstd.html b/Nostrum.Shard.Session.Compression.Zstd.html
index 4afe312af..22ab67316 100644
--- a/Nostrum.Shard.Session.Compression.Zstd.html
+++ b/Nostrum.Shard.Session.Compression.Zstd.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Shard.Session.Compression.html b/Nostrum.Shard.Session.Compression.html
index a46c0cb7e..f6d058a73 100644
--- a/Nostrum.Shard.Session.Compression.html
+++ b/Nostrum.Shard.Session.Compression.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Shard.Session.html b/Nostrum.Shard.Session.html
index 8a932e8a5..0b5a03e66 100644
--- a/Nostrum.Shard.Session.html
+++ b/Nostrum.Shard.Session.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Shard.Supervisor.html b/Nostrum.Shard.Supervisor.html
index a971ab3e7..ffb68a157 100644
--- a/Nostrum.Shard.Supervisor.html
+++ b/Nostrum.Shard.Supervisor.html
@@ -14,7 +14,7 @@
-
+
@@ -478,8 +478,8 @@ disconnect(shard_num)
Examples
-iex> Nostrum.Shard.Supervisor.disconnect(4)
-%{shard_num: 4, ...}
+iex> Nostrum.Shard.Supervisor.disconnect(4)
+%{shard_num: 4, ...}
@@ -520,9 +520,9 @@ reconnect(opts)
Examples
-iex> resume = Nostrum.Shard.Supervisor.disconnect(4)
-%{shard_num: 4, ...}
-iex> Nostrum.Shard.Supervisor.reconnect(resume)
+iex> resume = Nostrum.Shard.Supervisor.disconnect(4)
+%{shard_num: 4, ...}
+iex> Nostrum.Shard.Supervisor.reconnect(resume)
diff --git a/Nostrum.Snowflake.html b/Nostrum.Snowflake.html
index 9c35e4fb6..5379093e0 100644
--- a/Nostrum.Snowflake.html
+++ b/Nostrum.Snowflake.html
@@ -14,7 +14,7 @@
-
+
@@ -366,19 +366,19 @@ cast(value)
Examples
-iex> Nostrum.Snowflake.cast(200317799350927360)
-{:ok, 200317799350927360}
+iex> Nostrum.Snowflake.cast(200317799350927360)
+{:ok, 200317799350927360}
-iex> Nostrum.Snowflake.cast("200317799350927360")
-{:ok, 200317799350927360}
+iex> Nostrum.Snowflake.cast("200317799350927360")
+{:ok, 200317799350927360}
-iex> Nostrum.Snowflake.cast(nil)
-{:ok, nil}
+iex> Nostrum.Snowflake.cast(nil)
+{:ok, nil}
-iex> Nostrum.Snowflake.cast(true)
+iex> Nostrum.Snowflake.cast(true)
:error
-iex> Nostrum.Snowflake.cast(-1)
+iex> Nostrum.Snowflake.cast(-1)
:error
@@ -441,7 +441,7 @@ creation_time(snowflake)
Examples
-iex> Nostrum.Snowflake.creation_time(177888205536886784)
+iex> Nostrum.Snowflake.creation_time(177888205536886784)
~U[2016-05-05 21:04:13.203Z]
@@ -476,7 +476,7 @@ dump(snowflake)
Examples
-iex> Nostrum.Snowflake.dump(109112383011581952)
+iex> Nostrum.Snowflake.dump(109112383011581952)
"109112383011581952"
@@ -512,12 +512,12 @@ from_datetime(datetime)
Examples
-iex> {:ok, dt, _} = DateTime.from_iso8601("2016-05-05T21:04:13.203Z")
-iex> Nostrum.Snowflake.from_datetime(dt)
-{:ok, 177888205536755712}
+iex> {:ok, dt, _} = DateTime.from_iso8601("2016-05-05T21:04:13.203Z")
+iex> Nostrum.Snowflake.from_datetime(dt)
+{:ok, 177888205536755712}
-iex> {:ok, dt, _} = DateTime.from_iso8601("1998-12-25T00:00:00.000Z")
-iex> Nostrum.Snowflake.from_datetime(dt)
+iex> {:ok, dt, _} = DateTime.from_iso8601("1998-12-25T00:00:00.000Z")
+iex> Nostrum.Snowflake.from_datetime(dt)
:error
@@ -576,16 +576,16 @@ is_snowflake(term)
Examples
-iex> Nostrum.Snowflake.is_snowflake(89918932789497856)
+iex> Nostrum.Snowflake.is_snowflake(89918932789497856)
true
-iex> Nostrum.Snowflake.is_snowflake(-1)
+iex> Nostrum.Snowflake.is_snowflake(-1)
false
-iex> Nostrum.Snowflake.is_snowflake(0xFFFFFFFFFFFFFFFF + 1)
+iex> Nostrum.Snowflake.is_snowflake(0xFFFFFFFFFFFFFFFF + 1)
false
-iex> Nostrum.Snowflake.is_snowflake("117789813427535878")
+iex> Nostrum.Snowflake.is_snowflake("117789813427535878")
false
diff --git a/Nostrum.StateMachineTranslator.html b/Nostrum.StateMachineTranslator.html
index ee4dbede8..3cb087f33 100644
--- a/Nostrum.StateMachineTranslator.html
+++ b/Nostrum.StateMachineTranslator.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.GuildShardMapping.ETS.html b/Nostrum.Store.GuildShardMapping.ETS.html
index 92b1459fe..787342016 100644
--- a/Nostrum.Store.GuildShardMapping.ETS.html
+++ b/Nostrum.Store.GuildShardMapping.ETS.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.GuildShardMapping.Mnesia.html b/Nostrum.Store.GuildShardMapping.Mnesia.html
index 34795531e..1a5eabed3 100644
--- a/Nostrum.Store.GuildShardMapping.Mnesia.html
+++ b/Nostrum.Store.GuildShardMapping.Mnesia.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.GuildShardMapping.html b/Nostrum.Store.GuildShardMapping.html
index 233f60f3f..85e40b9af 100644
--- a/Nostrum.Store.GuildShardMapping.html
+++ b/Nostrum.Store.GuildShardMapping.html
@@ -14,7 +14,7 @@
-
+
@@ -157,9 +157,9 @@
By default, nostrum will use Elixir.Nostrum.Store.GuildShardMapping.ETS
to store the
mapping. To override this, set the [:stores, :guild_shard_mapping]
setting
on nostrum's application configuration:
config :nostrum,
- stores: %{
+ stores: %{
guild_shard_mapping: MyBot.Nostrum.Store.GuildShardMapping
- }
This setting must be set at compile time.
+ }
This setting must be set at compile time.
diff --git a/Nostrum.Store.Supervisor.html b/Nostrum.Store.Supervisor.html
index 62e09bb21..e13784205 100644
--- a/Nostrum.Store.Supervisor.html
+++ b/Nostrum.Store.Supervisor.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.UnavailableGuild.ETS.html b/Nostrum.Store.UnavailableGuild.ETS.html
index b8999f51b..877d093cb 100644
--- a/Nostrum.Store.UnavailableGuild.ETS.html
+++ b/Nostrum.Store.UnavailableGuild.ETS.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.UnavailableGuild.Mnesia.html b/Nostrum.Store.UnavailableGuild.Mnesia.html
index f23ba5b34..de23d0304 100644
--- a/Nostrum.Store.UnavailableGuild.Mnesia.html
+++ b/Nostrum.Store.UnavailableGuild.Mnesia.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Store.UnavailableGuild.html b/Nostrum.Store.UnavailableGuild.html
index 5e9f96526..03d693fbe 100644
--- a/Nostrum.Store.UnavailableGuild.html
+++ b/Nostrum.Store.UnavailableGuild.html
@@ -14,7 +14,7 @@
-
+
@@ -158,9 +158,9 @@
By default, nostrum will use Elixir.Nostrum.Store.UnavailableGuild.ETS
to store
unavailable guilds. To override this, set the [:stores, :unavailable_guilds]
setting on nostrum's application configuration:
config :nostrum,
- stores: %{
+ stores: %{
unavailable_guilds: MyBot.Nostrum.Store.UnavailableGuild
- }
This setting must be set at compile time.
+
}
This setting must be set at compile time.
diff --git a/Nostrum.Struct.ApplicationCommand.html b/Nostrum.Struct.ApplicationCommand.html
index 435203c46..e64273c75 100644
--- a/Nostrum.Struct.ApplicationCommand.html
+++ b/Nostrum.Struct.ApplicationCommand.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.ApplicationCommandInteractionData.html b/Nostrum.Struct.ApplicationCommandInteractionData.html
index e27f445f5..8fba548a1 100644
--- a/Nostrum.Struct.ApplicationCommandInteractionData.html
+++ b/Nostrum.Struct.ApplicationCommandInteractionData.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.ApplicationCommandInteractionDataOption.html b/Nostrum.Struct.ApplicationCommandInteractionDataOption.html
index d18f06ef1..ebf6278e6 100644
--- a/Nostrum.Struct.ApplicationCommandInteractionDataOption.html
+++ b/Nostrum.Struct.ApplicationCommandInteractionDataOption.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.ApplicationCommandInteractionDataResolved.html b/Nostrum.Struct.ApplicationCommandInteractionDataResolved.html
index 4b9804235..38a15608e 100644
--- a/Nostrum.Struct.ApplicationCommandInteractionDataResolved.html
+++ b/Nostrum.Struct.ApplicationCommandInteractionDataResolved.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.AutoModerationRule.Action.html b/Nostrum.Struct.AutoModerationRule.Action.html
index f297794fd..fe6d408d4 100644
--- a/Nostrum.Struct.AutoModerationRule.Action.html
+++ b/Nostrum.Struct.AutoModerationRule.Action.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.AutoModerationRule.ActionMetadata.html b/Nostrum.Struct.AutoModerationRule.ActionMetadata.html
index e6a645102..344a3bf48 100644
--- a/Nostrum.Struct.AutoModerationRule.ActionMetadata.html
+++ b/Nostrum.Struct.AutoModerationRule.ActionMetadata.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.AutoModerationRule.TriggerMetadata.html b/Nostrum.Struct.AutoModerationRule.TriggerMetadata.html
index 0e17c9a56..ddf06cb86 100644
--- a/Nostrum.Struct.AutoModerationRule.TriggerMetadata.html
+++ b/Nostrum.Struct.AutoModerationRule.TriggerMetadata.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.AutoModerationRule.html b/Nostrum.Struct.AutoModerationRule.html
index 2144ffa79..87b3ff809 100644
--- a/Nostrum.Struct.AutoModerationRule.html
+++ b/Nostrum.Struct.AutoModerationRule.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Channel.html b/Nostrum.Struct.Channel.html
index ef7723360..26d7d9d3e 100644
--- a/Nostrum.Struct.Channel.html
+++ b/Nostrum.Struct.Channel.html
@@ -14,7 +14,7 @@
-
+
@@ -145,15 +145,15 @@
Channel Struct
-The channel struct is used by Nostrum to represent a Discord Channel Object. More information can be found on the Discord API Channel Documentation.
The struct can have one of several forms depending on the type of channel. You can read more about the individual channel types below.
A typical channel would appear as:
%Nostrum.Struct.Channel{
+The channel struct is used by Nostrum to represent a Discord Channel Object. More information can be found on the Discord API Channel Documentation.
The struct can have one of several forms depending on the type of channel. You can read more about the individual channel types below.
A typical channel would appear as:
%Nostrum.Struct.Channel{
guild_id: 766435015768539156,
id: 827333533688397865,
name: "announcements",
nsfw: false,
- permission_overwrites: [],
+ permission_overwrites: [],
position: 1,
type: 5,
-}
The channel struct implements String.Chars
protocol through the mention/1
function. This example uses our channel from the previous code block.
channel |> to_string()
+}
The channel struct implements String.Chars
protocol through the mention/1
function. This example uses our channel from the previous code block.
channel |> to_string()
"<#766435015768539156>"
@@ -168,16 +168,16 @@
Example
-> guild_id = Nostrum.Cache.ChannelGuildMapping.get(1229955694258684005)
+> guild_id = Nostrum.Cache.ChannelGuildMapping.get(1229955694258684005)
1226944827137069107
-> {:ok, guild} = Nostrum.Cache.GuildCache.get(guild_id)
-{:ok,
- %Nostrum.Struct.Guild{
+> {:ok, guild} = Nostrum.Cache.GuildCache.get(guild_id)
+{:ok,
+ %Nostrum.Struct.Guild{
id: 1226944827137069107,
name: "Craig Cat Zone",
...
-}}
-> guild.channels[channel_id].name
+}}
+> guild.channels[channel_id].name
"cat-general"
@@ -2904,7 +2904,7 @@ mention(channel)
Examples
channel
-|> Nostrum.Struct.Channel.mention()
+|> Nostrum.Struct.Channel.mention()
"<#381889573426429952>"
diff --git a/Nostrum.Struct.Component.ActionRow.html b/Nostrum.Struct.Component.ActionRow.html
index 71b8b1813..3708c3c7c 100644
--- a/Nostrum.Struct.Component.ActionRow.html
+++ b/Nostrum.Struct.Component.ActionRow.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.Button.html b/Nostrum.Struct.Component.Button.html
index 604f84750..85507f292 100644
--- a/Nostrum.Struct.Component.Button.html
+++ b/Nostrum.Struct.Component.Button.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.ChannelSelect.html b/Nostrum.Struct.Component.ChannelSelect.html
index 6c726ca21..790969e03 100644
--- a/Nostrum.Struct.Component.ChannelSelect.html
+++ b/Nostrum.Struct.Component.ChannelSelect.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.DefaultValue.html b/Nostrum.Struct.Component.DefaultValue.html
index f7564a17b..93ddb76d1 100644
--- a/Nostrum.Struct.Component.DefaultValue.html
+++ b/Nostrum.Struct.Component.DefaultValue.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.MentionableSelect.html b/Nostrum.Struct.Component.MentionableSelect.html
index e9d11454f..c8fca612c 100644
--- a/Nostrum.Struct.Component.MentionableSelect.html
+++ b/Nostrum.Struct.Component.MentionableSelect.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.Option.html b/Nostrum.Struct.Component.Option.html
index 6002f4a6b..f4a2b045e 100644
--- a/Nostrum.Struct.Component.Option.html
+++ b/Nostrum.Struct.Component.Option.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.RoleSelect.html b/Nostrum.Struct.Component.RoleSelect.html
index 7064be86e..ac7724757 100644
--- a/Nostrum.Struct.Component.RoleSelect.html
+++ b/Nostrum.Struct.Component.RoleSelect.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.SelectMenu.html b/Nostrum.Struct.Component.SelectMenu.html
index c333f1ea3..ebc97361d 100644
--- a/Nostrum.Struct.Component.SelectMenu.html
+++ b/Nostrum.Struct.Component.SelectMenu.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.TextInput.html b/Nostrum.Struct.Component.TextInput.html
index d95d0d076..7194251a2 100644
--- a/Nostrum.Struct.Component.TextInput.html
+++ b/Nostrum.Struct.Component.TextInput.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.UserSelect.html b/Nostrum.Struct.Component.UserSelect.html
index ac46f2a23..90168b41f 100644
--- a/Nostrum.Struct.Component.UserSelect.html
+++ b/Nostrum.Struct.Component.UserSelect.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Component.html b/Nostrum.Struct.Component.html
index 2fd8b8ef6..86d57cabd 100644
--- a/Nostrum.Struct.Component.html
+++ b/Nostrum.Struct.Component.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Author.html b/Nostrum.Struct.Embed.Author.html
index bed92e121..ae8b8a068 100644
--- a/Nostrum.Struct.Embed.Author.html
+++ b/Nostrum.Struct.Embed.Author.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Field.html b/Nostrum.Struct.Embed.Field.html
index d3b3e0aa7..b1e99f124 100644
--- a/Nostrum.Struct.Embed.Field.html
+++ b/Nostrum.Struct.Embed.Field.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Footer.html b/Nostrum.Struct.Embed.Footer.html
index f596880d1..b8929ba0b 100644
--- a/Nostrum.Struct.Embed.Footer.html
+++ b/Nostrum.Struct.Embed.Footer.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Image.html b/Nostrum.Struct.Embed.Image.html
index 1e1783282..4e0ecb432 100644
--- a/Nostrum.Struct.Embed.Image.html
+++ b/Nostrum.Struct.Embed.Image.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Provider.html b/Nostrum.Struct.Embed.Provider.html
index 67a1998ab..ee3a5af3d 100644
--- a/Nostrum.Struct.Embed.Provider.html
+++ b/Nostrum.Struct.Embed.Provider.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Thumbnail.html b/Nostrum.Struct.Embed.Thumbnail.html
index 80f7a2c9a..4cac98eac 100644
--- a/Nostrum.Struct.Embed.Thumbnail.html
+++ b/Nostrum.Struct.Embed.Thumbnail.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.Video.html b/Nostrum.Struct.Embed.Video.html
index f04b9afca..43a87f498 100644
--- a/Nostrum.Struct.Embed.Video.html
+++ b/Nostrum.Struct.Embed.Video.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Embed.html b/Nostrum.Struct.Embed.html
index 388b8b5b5..57dc3ee05 100644
--- a/Nostrum.Struct.Embed.html
+++ b/Nostrum.Struct.Embed.html
@@ -14,7 +14,7 @@
-
+
@@ -148,63 +148,63 @@
Nostrum.Struct.Embed
s can be built using this module's builder functions
or standard Map
syntax:
iex> import Nostrum.Struct.Embed
...> embed =
-...> %Nostrum.Struct.Embed{}
-...> |> put_title("craig")
-...> |> put_description("nostrum")
-...> |> put_url("https://google.com/")
-...> |> put_timestamp("2016-05-05T21:04:13.203Z")
-...> |> put_color(431_948)
-...> |> put_field("Field 1", "Test")
-...> |> put_field("Field 2", "More test", true)
+...> %Nostrum.Struct.Embed{}
+...> |> put_title("craig")
+...> |> put_description("nostrum")
+...> |> put_url("https://google.com/")
+...> |> put_timestamp("2016-05-05T21:04:13.203Z")
+...> |> put_color(431_948)
+...> |> put_field("Field 1", "Test")
+...> |> put_field("Field 2", "More test", true)
...> embed
-%Nostrum.Struct.Embed{
+%Nostrum.Struct.Embed{
title: "craig",
description: "nostrum",
url: "https://google.com/",
timestamp: "2016-05-05T21:04:13.203Z",
color: 431_948,
- fields: [
- %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
- %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
- ]
-}
+
fields: [
+ %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
+ %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
+ ]
+}
Using structs
You can also create Nostrum.Struct.Embed
s from structs, by using the
-Nostrum.Struct.Embed
module. Here's how the example above could be build using structs
defmodule MyApp.MyStruct do
+Nostrum.Struct.Embed
module. Here's how the example above could be build using structs defmodule MyApp.MyStruct do
use Nostrum.Struct.Embed
- defstruct []
+ defstruct []
- def title(_), do: "craig"
- def description(_), do: "nostrum"
- def url(_), do: "https://google.com/"
- def timestamp(_), do: "2016-05-05T21:04:13.203Z"
- def color(_), do: 431_948
+ def title(_), do: "craig"
+ def description(_), do: "nostrum"
+ def url(_), do: "https://google.com/"
+ def timestamp(_), do: "2016-05-05T21:04:13.203Z"
+ def color(_), do: 431_948
- def fields(_) do
- [
- %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
- %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
- ]
- end
- end
+ def fields(_) do
+ [
+ %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
+ %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
+ ]
+ end
+ end
-iex> Nostrum.Struct.Embed.from(%MyApp.MyStruct{})
-%Nostrum.Struct.Embed{
+iex> Nostrum.Struct.Embed.from(%MyApp.MyStruct{})
+%Nostrum.Struct.Embed{
title: "craig",
description: "nostrum",
url: "https://google.com/",
timestamp: "2016-05-05T21:04:13.203Z",
color: 431_948,
- fields: [
- %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
- %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
- ]
-}
See this modules callbacks for a list of all the functions that can be implemented.
The implementation of these callbacks is optional. Not implemented functions will simply
+
fields: [
+ %Nostrum.Struct.Embed.Field{name: "Field 1", value: "Test"},
+ %Nostrum.Struct.Embed.Field{name: "Field 2", value: "More test", inline: true}
+ ]
+}
See this modules callbacks for a list of all the functions that can be implemented.
The implementation of these callbacks is optional. Not implemented functions will simply
be ignored.
@@ -1343,15 +1343,15 @@ put_author(embed, name, url, icon_url)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_author(embed, "skippi", "https://github.com/skippi", nil)
-%Nostrum.Struct.Embed{
- author: %Nostrum.Struct.Embed.Author{
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_author(embed, "skippi", "https://github.com/skippi", nil)
+%Nostrum.Struct.Embed{
+ author: %Nostrum.Struct.Embed.Author{
name: "skippi",
url: "https://github.com/skippi",
icon_url: nil
- }
-}
+ }
+}
@@ -1385,9 +1385,9 @@ put_color(embed, value)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_color(embed, 431948)
-%Nostrum.Struct.Embed{color: 431948}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_color(embed, 431948)
+%Nostrum.Struct.Embed{color: 431948}
@@ -1421,9 +1421,9 @@ put_description(embed, value)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_description(embed, "An elixir library for the discord API.")
-%Nostrum.Struct.Embed{description: "An elixir library for the discord API."}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_description(embed, "An elixir library for the discord API.")
+%Nostrum.Struct.Embed{description: "An elixir library for the discord API."}
@@ -1464,26 +1464,26 @@ put_field(embed, name, value, inline \\ nil
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_field(embed, "First User", "b1nzy")
-%Nostrum.Struct.Embed{
- fields: [
- %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"}
- ]
-}
-
-iex> embed = %Nostrum.Struct.Embed{
-...> fields: [
-...> %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"}
-...> ]
-...> }
-...> Nostrum.Struct.Embed.put_field(embed, "Second User", "Danny")
-%Nostrum.Struct.Embed{
- fields: [
- %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"},
- %Nostrum.Struct.Embed.Field{name: "Second User", value: "Danny"}
- ]
-}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_field(embed, "First User", "b1nzy")
+%Nostrum.Struct.Embed{
+ fields: [
+ %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"}
+ ]
+}
+
+iex> embed = %Nostrum.Struct.Embed{
+...> fields: [
+...> %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"}
+...> ]
+...> }
+...> Nostrum.Struct.Embed.put_field(embed, "Second User", "Danny")
+%Nostrum.Struct.Embed{
+ fields: [
+ %Nostrum.Struct.Embed.Field{name: "First User", value: "b1nzy"},
+ %Nostrum.Struct.Embed.Field{name: "Second User", value: "Danny"}
+ ]
+}
@@ -1573,13 +1573,13 @@ put_image(embed, url)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_image(embed, "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg")
-%Nostrum.Struct.Embed{
- image: %Nostrum.Struct.Embed.Image{
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_image(embed, "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg")
+%Nostrum.Struct.Embed{
+ image: %Nostrum.Struct.Embed.Image{
url: "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg"
- }
-}
+ }
+}
@@ -1613,13 +1613,13 @@ put_thumbnail(embed, url)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_thumbnail(embed, "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg")
-%Nostrum.Struct.Embed{
- thumbnail: %Nostrum.Struct.Embed.Thumbnail{
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_thumbnail(embed, "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg")
+%Nostrum.Struct.Embed{
+ thumbnail: %Nostrum.Struct.Embed.Thumbnail{
url: "https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg"
- }
-}
+ }
+}
@@ -1653,9 +1653,9 @@ put_timestamp(embed, value)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_timestamp(embed, "2018-04-21T17:33:51.893000Z")
-%Nostrum.Struct.Embed{timestamp: "2018-04-21T17:33:51.893000Z"}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_timestamp(embed, "2018-04-21T17:33:51.893000Z")
+%Nostrum.Struct.Embed{timestamp: "2018-04-21T17:33:51.893000Z"}
@@ -1689,9 +1689,9 @@ put_title(embed, value)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_title(embed, "nostrum")
-%Nostrum.Struct.Embed{title: "nostrum"}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_title(embed, "nostrum")
+%Nostrum.Struct.Embed{title: "nostrum"}
@@ -1725,9 +1725,9 @@ put_url(embed, value)
Examples
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_url(embed, "https://github.com/Kraigie/nostrum")
-%Nostrum.Struct.Embed{url: "https://github.com/Kraigie/nostrum"}
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_url(embed, "https://github.com/Kraigie/nostrum")
+%Nostrum.Struct.Embed{url: "https://github.com/Kraigie/nostrum"}
diff --git a/Nostrum.Struct.Emoji.html b/Nostrum.Struct.Emoji.html
index 08fb8466a..68d4a56cd 100644
--- a/Nostrum.Struct.Emoji.html
+++ b/Nostrum.Struct.Emoji.html
@@ -14,7 +14,7 @@
-
+
@@ -146,26 +146,26 @@
Mentioning Emojis in Messages
A Nostrum.Struct.Emoji
can be mentioned in message content using the String.Chars
-protocol or mention/1
.
emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: "foxbot"}
-Nostrum.Api.create_message!(184046599834435585, "#{emoji}")
-%Nostrum.Struct.Message{content: "<:foxbot:437093487582642177>"}
+protocol or mention/1
.emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: "foxbot"}
+Nostrum.Api.create_message!(184046599834435585, "#{emoji}")
+%Nostrum.Struct.Message{content: "<:foxbot:437093487582642177>"}
-emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
-Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Emoji.mention(emoji)}")
-%Nostrum.Struct.Message{content: "<:tealixir:436885297037312001>"}
+
emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
+Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Emoji.mention(emoji)}")
+%Nostrum.Struct.Message{content: "<:tealixir:436885297037312001>"}
Using Emojis in the Api
A Nostrum.Struct.Emoji
can be used in Nostrum.Api
by using its api name
-or the struct itself.
emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
-Nostrum.Api.create_reaction(381889573426429952, 436247584349356032, Nostrum.Struct.Emoji.api_name(emoji))
-{:ok}
+or the struct itself.emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
+Nostrum.Api.create_reaction(381889573426429952, 436247584349356032, Nostrum.Struct.Emoji.api_name(emoji))
+{:ok}
-emoji = %Nostrum.Struct.Emoji{id: 436189601820966923, name: "elixir"}
-Nostrum.Api.create_reaction(381889573426429952, 436247584349356032, emoji)
-{:ok}
See Nostrum.Struct.Emoji.api_name/0
for more information.
+emoji = %Nostrum.Struct.Emoji{id: 436189601820966923, name: "elixir"}
+Nostrum.Api.create_reaction(381889573426429952, 436247584349356032, emoji)
+{:ok}
See Nostrum.Struct.Emoji.api_name/0
for more information.
@@ -638,12 +638,12 @@ api_name(emoji)
Examples
-iex> emoji = %Nostrum.Struct.Emoji{name: "Γ¡É"}
-...> Nostrum.Struct.Emoji.api_name(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{name: "Γ¡É"}
+...> Nostrum.Struct.Emoji.api_name(emoji)
"Γ¡É"
-iex> emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: "foxbot"}
-...> Nostrum.Struct.Emoji.api_name(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: "foxbot"}
+...> Nostrum.Struct.Emoji.api_name(emoji)
"foxbot:437093487582642177"
@@ -679,16 +679,16 @@ image_url(emoji)
Examples
-iex> emoji = %Nostrum.Struct.Emoji{id: 450225070569291776}
-iex> Nostrum.Struct.Emoji.image_url(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: 450225070569291776}
+iex> Nostrum.Struct.Emoji.image_url(emoji)
"https://cdn.discordapp.com/emojis/450225070569291776.png"
-iex> emoji = %Nostrum.Struct.Emoji{id: 406140226998894614, animated: true}
-iex> Nostrum.Struct.Emoji.image_url(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: 406140226998894614, animated: true}
+iex> Nostrum.Struct.Emoji.image_url(emoji)
"https://cdn.discordapp.com/emojis/406140226998894614.gif"
-iex> emoji = %Nostrum.Struct.Emoji{id: nil, name: "Γ¡É"}
-iex> Nostrum.Struct.Emoji.image_url(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: nil, name: "Γ¡É"}
+iex> Nostrum.Struct.Emoji.image_url(emoji)
nil
@@ -723,16 +723,16 @@ mention(emoji)
Examples
-iex> emoji = %Nostrum.Struct.Emoji{name: "👍"}
-...> Nostrum.Struct.Emoji.mention(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{name: "👍"}
+...> Nostrum.Struct.Emoji.mention(emoji)
"👍"
-iex> emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
-...> Nostrum.Struct.Emoji.mention(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: "tealixir"}
+...> Nostrum.Struct.Emoji.mention(emoji)
"<:tealixir:436885297037312001>"
-iex> emoji = %Nostrum.Struct.Emoji{id: 437016804309860372, name: "blobseizure", animated: true}
-...> Nostrum.Struct.Emoji.mention(emoji)
+iex> emoji = %Nostrum.Struct.Emoji{id: 437016804309860372, name: "blobseizure", animated: true}
+...> Nostrum.Struct.Emoji.mention(emoji)
"<a:blobseizure:437016804309860372>"
diff --git a/Nostrum.Struct.Event.AutoModerationRuleExecute.html b/Nostrum.Struct.Event.AutoModerationRuleExecute.html
index ef1c53b10..ded0a1752 100644
--- a/Nostrum.Struct.Event.AutoModerationRuleExecute.html
+++ b/Nostrum.Struct.Event.AutoModerationRuleExecute.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.ChannelPinsUpdate.html b/Nostrum.Struct.Event.ChannelPinsUpdate.html
index 580a4d9d8..e4836f8bf 100644
--- a/Nostrum.Struct.Event.ChannelPinsUpdate.html
+++ b/Nostrum.Struct.Event.ChannelPinsUpdate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildBanAdd.html b/Nostrum.Struct.Event.GuildBanAdd.html
index 0c8b93693..c23320d70 100644
--- a/Nostrum.Struct.Event.GuildBanAdd.html
+++ b/Nostrum.Struct.Event.GuildBanAdd.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildBanRemove.html b/Nostrum.Struct.Event.GuildBanRemove.html
index 593dc7a44..18c5239f3 100644
--- a/Nostrum.Struct.Event.GuildBanRemove.html
+++ b/Nostrum.Struct.Event.GuildBanRemove.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildIntegrationDelete.html b/Nostrum.Struct.Event.GuildIntegrationDelete.html
index 311f5dfe4..bacd9a317 100644
--- a/Nostrum.Struct.Event.GuildIntegrationDelete.html
+++ b/Nostrum.Struct.Event.GuildIntegrationDelete.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildIntegrationsUpdate.html b/Nostrum.Struct.Event.GuildIntegrationsUpdate.html
index 15aaf0131..b4c0a61e6 100644
--- a/Nostrum.Struct.Event.GuildIntegrationsUpdate.html
+++ b/Nostrum.Struct.Event.GuildIntegrationsUpdate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildScheduledEventUserAdd.html b/Nostrum.Struct.Event.GuildScheduledEventUserAdd.html
index 92c8e34ac..4c2896cf6 100644
--- a/Nostrum.Struct.Event.GuildScheduledEventUserAdd.html
+++ b/Nostrum.Struct.Event.GuildScheduledEventUserAdd.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.GuildScheduledEventUserRemove.html b/Nostrum.Struct.Event.GuildScheduledEventUserRemove.html
index 74bccf6da..9c464752a 100644
--- a/Nostrum.Struct.Event.GuildScheduledEventUserRemove.html
+++ b/Nostrum.Struct.Event.GuildScheduledEventUserRemove.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.InviteCreate.html b/Nostrum.Struct.Event.InviteCreate.html
index df4b8020c..3fcf44df5 100644
--- a/Nostrum.Struct.Event.InviteCreate.html
+++ b/Nostrum.Struct.Event.InviteCreate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.InviteDelete.html b/Nostrum.Struct.Event.InviteDelete.html
index 30feb1b83..14611a1f3 100644
--- a/Nostrum.Struct.Event.InviteDelete.html
+++ b/Nostrum.Struct.Event.InviteDelete.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageDelete.html b/Nostrum.Struct.Event.MessageDelete.html
index dcaafef6f..3b3dfd836 100644
--- a/Nostrum.Struct.Event.MessageDelete.html
+++ b/Nostrum.Struct.Event.MessageDelete.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageDeleteBulk.html b/Nostrum.Struct.Event.MessageDeleteBulk.html
index 5b0b0a64d..c791d2508 100644
--- a/Nostrum.Struct.Event.MessageDeleteBulk.html
+++ b/Nostrum.Struct.Event.MessageDeleteBulk.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageReactionAdd.html b/Nostrum.Struct.Event.MessageReactionAdd.html
index d73e20b90..207391a34 100644
--- a/Nostrum.Struct.Event.MessageReactionAdd.html
+++ b/Nostrum.Struct.Event.MessageReactionAdd.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageReactionRemove.html b/Nostrum.Struct.Event.MessageReactionRemove.html
index 5516e8f3e..a52a18ec0 100644
--- a/Nostrum.Struct.Event.MessageReactionRemove.html
+++ b/Nostrum.Struct.Event.MessageReactionRemove.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageReactionRemoveAll.html b/Nostrum.Struct.Event.MessageReactionRemoveAll.html
index f703e0098..70a6b6a16 100644
--- a/Nostrum.Struct.Event.MessageReactionRemoveAll.html
+++ b/Nostrum.Struct.Event.MessageReactionRemoveAll.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.MessageReactionRemoveEmoji.html b/Nostrum.Struct.Event.MessageReactionRemoveEmoji.html
index 8ac1dfa73..cd711e8dd 100644
--- a/Nostrum.Struct.Event.MessageReactionRemoveEmoji.html
+++ b/Nostrum.Struct.Event.MessageReactionRemoveEmoji.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.PartialApplication.html b/Nostrum.Struct.Event.PartialApplication.html
index 57669f573..80cd6b3df 100644
--- a/Nostrum.Struct.Event.PartialApplication.html
+++ b/Nostrum.Struct.Event.PartialApplication.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.PollVoteChange.html b/Nostrum.Struct.Event.PollVoteChange.html
index 1ddd6fbb4..b8e7c4b45 100644
--- a/Nostrum.Struct.Event.PollVoteChange.html
+++ b/Nostrum.Struct.Event.PollVoteChange.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.Ready.html b/Nostrum.Struct.Event.Ready.html
index b595fa326..c5e607d42 100644
--- a/Nostrum.Struct.Event.Ready.html
+++ b/Nostrum.Struct.Event.Ready.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.SpeakingUpdate.html b/Nostrum.Struct.Event.SpeakingUpdate.html
index 9916e2653..777e57af5 100644
--- a/Nostrum.Struct.Event.SpeakingUpdate.html
+++ b/Nostrum.Struct.Event.SpeakingUpdate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.ThreadListSync.html b/Nostrum.Struct.Event.ThreadListSync.html
index 07b1c5da1..56db70527 100644
--- a/Nostrum.Struct.Event.ThreadListSync.html
+++ b/Nostrum.Struct.Event.ThreadListSync.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.ThreadMembersUpdate.html b/Nostrum.Struct.Event.ThreadMembersUpdate.html
index dd2941bcd..5bb6dc141 100644
--- a/Nostrum.Struct.Event.ThreadMembersUpdate.html
+++ b/Nostrum.Struct.Event.ThreadMembersUpdate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.TypingStart.html b/Nostrum.Struct.Event.TypingStart.html
index 357050da0..f0b1039b4 100644
--- a/Nostrum.Struct.Event.TypingStart.html
+++ b/Nostrum.Struct.Event.TypingStart.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.VoiceReady.html b/Nostrum.Struct.Event.VoiceReady.html
index 90ba557e6..f4fd67cec 100644
--- a/Nostrum.Struct.Event.VoiceReady.html
+++ b/Nostrum.Struct.Event.VoiceReady.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.VoiceServerUpdate.html b/Nostrum.Struct.Event.VoiceServerUpdate.html
index 4255d7957..c3df6f1a5 100644
--- a/Nostrum.Struct.Event.VoiceServerUpdate.html
+++ b/Nostrum.Struct.Event.VoiceServerUpdate.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Event.VoiceState.html b/Nostrum.Struct.Event.VoiceState.html
index e85c12458..11cb874a6 100644
--- a/Nostrum.Struct.Event.VoiceState.html
+++ b/Nostrum.Struct.Event.VoiceState.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.AuditLog.html b/Nostrum.Struct.Guild.AuditLog.html
index cc2062f72..72b1fa682 100644
--- a/Nostrum.Struct.Guild.AuditLog.html
+++ b/Nostrum.Struct.Guild.AuditLog.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.AuditLogEntry.html b/Nostrum.Struct.Guild.AuditLogEntry.html
index 0beb4e7c0..cfb00c66e 100644
--- a/Nostrum.Struct.Guild.AuditLogEntry.html
+++ b/Nostrum.Struct.Guild.AuditLogEntry.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.Ban.html b/Nostrum.Struct.Guild.Ban.html
index f7e48933e..e3c2e62fb 100644
--- a/Nostrum.Struct.Guild.Ban.html
+++ b/Nostrum.Struct.Guild.Ban.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.Integration.Account.html b/Nostrum.Struct.Guild.Integration.Account.html
index f3bcce220..353779f18 100644
--- a/Nostrum.Struct.Guild.Integration.Account.html
+++ b/Nostrum.Struct.Guild.Integration.Account.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.Integration.Application.html b/Nostrum.Struct.Guild.Integration.Application.html
index 69b55359c..f1c4e2be8 100644
--- a/Nostrum.Struct.Guild.Integration.Application.html
+++ b/Nostrum.Struct.Guild.Integration.Application.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.Integration.html b/Nostrum.Struct.Guild.Integration.html
index 97802be8f..aa059236b 100644
--- a/Nostrum.Struct.Guild.Integration.html
+++ b/Nostrum.Struct.Guild.Integration.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.Member.Flags.html b/Nostrum.Struct.Guild.Member.Flags.html
index 2aeeb627f..ea469841a 100644
--- a/Nostrum.Struct.Guild.Member.Flags.html
+++ b/Nostrum.Struct.Guild.Member.Flags.html
@@ -14,7 +14,7 @@
-
+
@@ -481,13 +481,13 @@ from_integer(flag_value)
Examples
-iex> Nostrum.Struct.Guild.Member.Flags.from_integer(9)
-%Nostrum.Struct.Guild.Member.Flags{
+iex> Nostrum.Struct.Guild.Member.Flags.from_integer(9)
+%Nostrum.Struct.Guild.Member.Flags{
did_rejoin: true,
completed_onboarding: false,
bypasses_verification: false,
started_onboarding: true
-}
+}
@@ -523,13 +523,13 @@ to_integer(flag_struct)
Examples
-iex> my_flags = %Nostrum.Struct.Guild.Member.Flags{
+iex> my_flags = %Nostrum.Struct.Guild.Member.Flags{
...> did_rejoin: true,
...> completed_onboarding: false,
...> bypasses_verification: false,
...> started_onboarding: true
-...> }
-iex> Nostrum.Struct.Guild.Member.Flags.to_integer(my_flags)
+...> }
+iex> Nostrum.Struct.Guild.Member.Flags.to_integer(my_flags)
9
diff --git a/Nostrum.Struct.Guild.Member.html b/Nostrum.Struct.Guild.Member.html
index 5fe8eef15..27bb52eb0 100644
--- a/Nostrum.Struct.Guild.Member.html
+++ b/Nostrum.Struct.Guild.Member.html
@@ -14,7 +14,7 @@
-
+
@@ -147,13 +147,13 @@
Mentioning Members in Messages
A Nostrum.Struct.Guild.Member
can be mentioned in message content using the String.Chars
-protocol or mention/1
.
member = %Nostrum.Struct.Guild.Member{user_id: 120571255635181568}
-Nostrum.Api.create_message!(184046599834435585, "#{member}")
-%Nostrum.Struct.Message{content: "<@120571255635181568>"}
+protocol or mention/1
.member = %Nostrum.Struct.Guild.Member{user_id: 120571255635181568}
+Nostrum.Api.create_message!(184046599834435585, "#{member}")
+%Nostrum.Struct.Message{content: "<@120571255635181568>"}
-member = %Nostrum.Struct.Guild.Member{user_id: 89918932789497856}
-Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Guild.Member.mention(member)}")
-%Nostrum.Struct.Message{content: "<@89918932789497856>"}
+member = %Nostrum.Struct.Guild.Member{user_id: 89918932789497856}
+Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Guild.Member.mention(member)}")
+%Nostrum.Struct.Message{content: "<@89918932789497856>"}
@@ -767,12 +767,12 @@ avatar_url(member, guild_id, image_format \
Examples
-iex> member = %Nostrum.Struct.Guild.Member{
+iex> member = %Nostrum.Struct.Guild.Member{
...> user_id: 165023948638126080,
...> avatar: "4c8319db8ea745275a1399f8f8aa74ab"
-...> }
+...> }
iex> guild_id = 1226944827137069107
-iex> Nostrum.Struct.Guild.Member.avatar_url(member, guild_id)
+iex> Nostrum.Struct.Guild.Member.avatar_url(member, guild_id)
"https://cdn.discordapp.com/guilds/1226944827137069107/users/165023948638126080/avatars/4c8319db8ea745275a1399f8f8aa74ab.png"
@@ -813,10 +813,10 @@ guild_channel_permissions(member, guild, ch
Examples
-guild = Nostrum.Cache.GuildCache.get!(279093381723062272)
-member = Map.get(guild.members, 177888205536886784)
+guild = Nostrum.Cache.GuildCache.get!(279093381723062272)
+member = Map.get(guild.members, 177888205536886784)
channel_id = 381889573426429952
-Nostrum.Struct.Guild.Member.guild_channel_permissions(member, guild, channel_id)
+Nostrum.Struct.Guild.Member.guild_channel_permissions(member, guild, channel_id)
#=> [:manage_messages]
@@ -851,9 +851,9 @@ guild_permissions(member, guild)
Examples
-guild = Nostrum.Cache.GuildCache.get!(279093381723062272)
-member = Map.get(guild.members, 177888205536886784)
-Nostrum.Struct.Guild.Member.guild_permissions(member, guild)
+guild = Nostrum.Cache.GuildCache.get!(279093381723062272)
+member = Map.get(guild.members, 177888205536886784)
+Nostrum.Struct.Guild.Member.guild_permissions(member, guild)
#=> [:administrator]
@@ -888,8 +888,8 @@ mention(member)
Examples
-iex> member = %Nostrum.Struct.Guild.Member{user_id: 177888205536886784}
-...> Nostrum.Struct.Guild.Member.mention(member)
+iex> member = %Nostrum.Struct.Guild.Member{user_id: 177888205536886784}
+...> Nostrum.Struct.Guild.Member.mention(member)
"<@177888205536886784>"
diff --git a/Nostrum.Struct.Guild.Role.html b/Nostrum.Struct.Guild.Role.html
index 4fe5fdd59..acae981c1 100644
--- a/Nostrum.Struct.Guild.Role.html
+++ b/Nostrum.Struct.Guild.Role.html
@@ -14,7 +14,7 @@
-
+
@@ -146,13 +146,13 @@
Mentioning Roles in Messages
A Nostrum.Struct.Guild.Role
can be mentioned in message content using the String.Chars
-protocol or mention/1
.
role = %Nostrum.Struct.Guild.Role{id: 431886897539973131}
-Nostrum.Api.create_message!(184046599834435585, "#{role}")
-%Nostrum.Struct.Message{}
+protocol or mention/1
.role = %Nostrum.Struct.Guild.Role{id: 431886897539973131}
+Nostrum.Api.create_message!(184046599834435585, "#{role}")
+%Nostrum.Struct.Message{}
-role = %Nostrum.Struct.Guild.Role{id: 431884023535632398}
-Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Guild.Role.mention(role)}")
-%Nostrum.Struct.Message{}
+role = %Nostrum.Struct.Guild.Role{id: 431884023535632398}
+Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.Guild.Role.mention(role)}")
+%Nostrum.Struct.Message{}
@@ -672,8 +672,8 @@ mention(role)
Examples
-iex> role = %Nostrum.Struct.Guild.Role{id: 431886639627763722}
-...> Nostrum.Struct.Guild.Role.mention(role)
+iex> role = %Nostrum.Struct.Guild.Role{id: 431886639627763722}
+...> Nostrum.Struct.Guild.Role.mention(role)
"<@&431886639627763722>"
diff --git a/Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html b/Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html
index cb8c86b56..956b2937f 100644
--- a/Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html
+++ b/Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.ScheduledEvent.User.html b/Nostrum.Struct.Guild.ScheduledEvent.User.html
index eddc50eb6..253fcc689 100644
--- a/Nostrum.Struct.Guild.ScheduledEvent.User.html
+++ b/Nostrum.Struct.Guild.ScheduledEvent.User.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.ScheduledEvent.html b/Nostrum.Struct.Guild.ScheduledEvent.html
index 73cc55d0f..20d2f1573 100644
--- a/Nostrum.Struct.Guild.ScheduledEvent.html
+++ b/Nostrum.Struct.Guild.ScheduledEvent.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.SystemChannelFlags.html b/Nostrum.Struct.Guild.SystemChannelFlags.html
index b1a06302b..3e8f1f3e7 100644
--- a/Nostrum.Struct.Guild.SystemChannelFlags.html
+++ b/Nostrum.Struct.Guild.SystemChannelFlags.html
@@ -14,7 +14,7 @@
-
+
@@ -548,15 +548,15 @@ from_integer(flag_value)
Examples
-iex> Nostrum.Struct.Guild.SystemChannelFlags.from_integer(3)
-%Nostrum.Struct.Guild.SystemChannelFlags{
+iex> Nostrum.Struct.Guild.SystemChannelFlags.from_integer(3)
+%Nostrum.Struct.Guild.SystemChannelFlags{
suppress_guild_reminder_notifications: false,
suppress_join_notification_replies: false,
suppress_join_notifications: true,
suppress_premium_subscriptions: true,
suppress_role_subscription_purchase_notification_replies: false,
suppress_role_subscription_purchase_notifications: false
-}
+}
@@ -590,11 +590,11 @@ to_integer(flag_struct)
Examples
-iex> my_flags = %Nostrum.Struct.Guild.SystemChannelFlags{
+iex> my_flags = %Nostrum.Struct.Guild.SystemChannelFlags{
...> suppress_join_notifications: true,
...> suppress_join_notification_replies: true
-...> }
-iex> Nostrum.Struct.Guild.SystemChannelFlags.to_integer(my_flags)
+...> }
+iex> Nostrum.Struct.Guild.SystemChannelFlags.to_integer(my_flags)
9
diff --git a/Nostrum.Struct.Guild.UnavailableGuild.html b/Nostrum.Struct.Guild.UnavailableGuild.html
index 792d8ce38..f1b12df0f 100644
--- a/Nostrum.Struct.Guild.UnavailableGuild.html
+++ b/Nostrum.Struct.Guild.UnavailableGuild.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Guild.html b/Nostrum.Struct.Guild.html
index 1c698ffe4..2e4722a39 100644
--- a/Nostrum.Struct.Guild.html
+++ b/Nostrum.Struct.Guild.html
@@ -14,7 +14,7 @@
-
+
@@ -2400,11 +2400,11 @@ banner_url(guild, image_format \\ "web
Examples
-iex> guild = %Nostrum.Struct.Guild{banner: "656477617264736e6f7764656e",
-...> id: 112233445566778899}
-iex> Nostrum.Struct.Guild.banner_url(guild)
+iex> guild = %Nostrum.Struct.Guild{banner: "656477617264736e6f7764656e",
+...> id: 112233445566778899}
+iex> Nostrum.Struct.Guild.banner_url(guild)
"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.webp"
-iex> Nostrum.Struct.Guild.banner_url(guild, "png")
+iex> Nostrum.Struct.Guild.banner_url(guild, "png")
"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.png"
@@ -2441,11 +2441,11 @@ discovery_splash_url(guild, image_format \\
Examples
-iex> guild = %Nostrum.Struct.Guild{discovery_splash: "656477617264736e6f7764656e",
-...> id: 112233445566778899}
-iex> Nostrum.Struct.Guild.discovery_splash_url(guild)
+iex> guild = %Nostrum.Struct.Guild{discovery_splash: "656477617264736e6f7764656e",
+...> id: 112233445566778899}
+iex> Nostrum.Struct.Guild.discovery_splash_url(guild)
"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.webp"
-iex> Nostrum.Struct.Guild.discovery_splash_url(guild, "png")
+iex> Nostrum.Struct.Guild.discovery_splash_url(guild, "png")
"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.png"
@@ -2482,15 +2482,15 @@ icon_url(guild, image_format \\ "webp&
Examples
-iex> guild = %Nostrum.Struct.Guild{icon: "86e39f7ae3307e811784e2ffd11a7310",
-...> id: 41771983423143937}
-iex> Nostrum.Struct.Guild.icon_url(guild)
+iex> guild = %Nostrum.Struct.Guild{icon: "86e39f7ae3307e811784e2ffd11a7310",
+...> id: 41771983423143937}
+iex> Nostrum.Struct.Guild.icon_url(guild)
"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp"
-iex> Nostrum.Struct.Guild.icon_url(guild, "png")
+iex> Nostrum.Struct.Guild.icon_url(guild, "png")
"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png"
-iex> guild = %Nostrum.Struct.Guild{icon: nil}
-iex> Nostrum.Struct.Guild.icon_url(guild)
+iex> guild = %Nostrum.Struct.Guild{icon: nil}
+iex> Nostrum.Struct.Guild.icon_url(guild)
nil
@@ -2527,15 +2527,15 @@ splash_url(guild, image_format \\ "web
Examples
-iex> guild = %Nostrum.Struct.Guild{splash: "86e39f7ae3307e811784e2ffd11a7310",
-...> id: 41771983423143937}
-iex> Nostrum.Struct.Guild.splash_url(guild)
+iex> guild = %Nostrum.Struct.Guild{splash: "86e39f7ae3307e811784e2ffd11a7310",
+...> id: 41771983423143937}
+iex> Nostrum.Struct.Guild.splash_url(guild)
"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp"
-iex> Nostrum.Struct.Guild.splash_url(guild, "png")
+iex> Nostrum.Struct.Guild.splash_url(guild, "png")
"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png"
-iex> guild = %Nostrum.Struct.Guild{splash: nil}
-iex> Nostrum.Struct.Guild.splash_url(guild)
+iex> guild = %Nostrum.Struct.Guild{splash: nil}
+iex> Nostrum.Struct.Guild.splash_url(guild)
nil
diff --git a/Nostrum.Struct.Interaction.html b/Nostrum.Struct.Interaction.html
index 5ce5044f7..9e6eea97f 100644
--- a/Nostrum.Struct.Interaction.html
+++ b/Nostrum.Struct.Interaction.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Invite.html b/Nostrum.Struct.Invite.html
index 1b98ad45a..12bdce21b 100644
--- a/Nostrum.Struct.Invite.html
+++ b/Nostrum.Struct.Invite.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Activity.html b/Nostrum.Struct.Message.Activity.html
index 7540e462b..d7c8101bf 100644
--- a/Nostrum.Struct.Message.Activity.html
+++ b/Nostrum.Struct.Message.Activity.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Application.html b/Nostrum.Struct.Message.Application.html
index 399ee3a7f..e786e82a6 100644
--- a/Nostrum.Struct.Message.Application.html
+++ b/Nostrum.Struct.Message.Application.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Attachment.html b/Nostrum.Struct.Message.Attachment.html
index 198194f40..4c000e48c 100644
--- a/Nostrum.Struct.Message.Attachment.html
+++ b/Nostrum.Struct.Message.Attachment.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Component.html b/Nostrum.Struct.Message.Component.html
index 88492f0c8..148bac6f8 100644
--- a/Nostrum.Struct.Message.Component.html
+++ b/Nostrum.Struct.Message.Component.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Poll.Answer.html b/Nostrum.Struct.Message.Poll.Answer.html
index 545120241..81a9ed370 100644
--- a/Nostrum.Struct.Message.Poll.Answer.html
+++ b/Nostrum.Struct.Message.Poll.Answer.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Poll.MediaObject.html b/Nostrum.Struct.Message.Poll.MediaObject.html
index 25e15216f..afb8adfb3 100644
--- a/Nostrum.Struct.Message.Poll.MediaObject.html
+++ b/Nostrum.Struct.Message.Poll.MediaObject.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Poll.Results.html b/Nostrum.Struct.Message.Poll.Results.html
index a521cab6e..850178c43 100644
--- a/Nostrum.Struct.Message.Poll.Results.html
+++ b/Nostrum.Struct.Message.Poll.Results.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Poll.html b/Nostrum.Struct.Message.Poll.html
index 498848c53..b1bb877a5 100644
--- a/Nostrum.Struct.Message.Poll.html
+++ b/Nostrum.Struct.Message.Poll.html
@@ -14,7 +14,7 @@
-
+
@@ -584,11 +584,11 @@ create_poll(question_text, list)
Examples
-poll = Poll.create_poll("Do you enjoy pineapple on pizza?", duration: 2, allow_multiselect: false)
- |> Poll.put_answer("Yes!", default_emoji: "\u2705") # check mark emoji
- |> Poll.put_answer("No!", default_emoji: "\u274C") # cross emoji
+poll = Poll.create_poll("Do you enjoy pineapple on pizza?", duration: 2, allow_multiselect: false)
+ |> Poll.put_answer("Yes!", default_emoji: "\u2705") # check mark emoji
+ |> Poll.put_answer("No!", default_emoji: "\u274C") # cross emoji
-Api.create_message(channel_id, poll: poll)
+Api.create_message(channel_id, poll: poll)
diff --git a/Nostrum.Struct.Message.Reaction.html b/Nostrum.Struct.Message.Reaction.html
index 2d835d12d..1fcd3a3de 100644
--- a/Nostrum.Struct.Message.Reaction.html
+++ b/Nostrum.Struct.Message.Reaction.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.Reference.html b/Nostrum.Struct.Message.Reference.html
index 09f064842..f20a6b956 100644
--- a/Nostrum.Struct.Message.Reference.html
+++ b/Nostrum.Struct.Message.Reference.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Message.html b/Nostrum.Struct.Message.html
index b02cee050..592f4ab40 100644
--- a/Nostrum.Struct.Message.html
+++ b/Nostrum.Struct.Message.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Overwrite.html b/Nostrum.Struct.Overwrite.html
index ba74085ce..7318a5b35 100644
--- a/Nostrum.Struct.Overwrite.html
+++ b/Nostrum.Struct.Overwrite.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Sticker.Pack.html b/Nostrum.Struct.Sticker.Pack.html
index cfb3fa410..8c44713f5 100644
--- a/Nostrum.Struct.Sticker.Pack.html
+++ b/Nostrum.Struct.Sticker.Pack.html
@@ -14,7 +14,7 @@
-
+
@@ -556,7 +556,7 @@ banner_url(map)
Examples
-iex> pack = %Nostrum.Struct.Sticker.Pack{banner_asset_id: 112233445566778899}
+iex> pack = %Nostrum.Struct.Sticker.Pack{banner_asset_id: 112233445566778899}
iex> Nostrum.Struct.Sticker.Pack.banner_url pack
"https://cdn.discordapp.com/app-assets/710982414301790216/store/112233445566778899.png"
diff --git a/Nostrum.Struct.Sticker.html b/Nostrum.Struct.Sticker.html
index 2e5c3a8a5..d81ea05e4 100644
--- a/Nostrum.Struct.Sticker.html
+++ b/Nostrum.Struct.Sticker.html
@@ -14,7 +14,7 @@
-
+
@@ -724,9 +724,9 @@ cdn_url(map)
Examples
-iex> sticker = %Nostrum.Struct.Sticker{format_type: :gif, id: 112233445566778899}
+iex> sticker = %Nostrum.Struct.Sticker{format_type: :gif, id: 112233445566778899}
iex> Nostrum.Struct.Sticker.cdn_url sticker
-"https://media.discordapp.net/stickers/112233445566778899.gif"
iex> sticker = %Nostrum.Struct.Sticker{format_type: :apng, id: 998877665544332211}
+"https://media.discordapp.net/stickers/112233445566778899.gif"
iex> sticker = %Nostrum.Struct.Sticker{format_type: :apng, id: 998877665544332211}
iex> Nostrum.Struct.Sticker.cdn_url sticker
"https://cdn.discordapp.com/stickers/998877665544332211.png"
diff --git a/Nostrum.Struct.ThreadMember.html b/Nostrum.Struct.ThreadMember.html
index 4e65f4113..8a6e65f75 100644
--- a/Nostrum.Struct.ThreadMember.html
+++ b/Nostrum.Struct.ThreadMember.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.User.Connection.html b/Nostrum.Struct.User.Connection.html
index 7ba231ca5..243acd33b 100644
--- a/Nostrum.Struct.User.Connection.html
+++ b/Nostrum.Struct.User.Connection.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.User.Flags.html b/Nostrum.Struct.User.Flags.html
index 1f2740bd6..d82139029 100644
--- a/Nostrum.Struct.User.Flags.html
+++ b/Nostrum.Struct.User.Flags.html
@@ -14,7 +14,7 @@
-
+
@@ -856,8 +856,8 @@ from_integer(flag_value)
Examples
-iex> Nostrum.Struct.User.Flags.from_integer(131842)
-%Nostrum.Struct.User.Flags{
+iex> Nostrum.Struct.User.Flags.from_integer(131842)
+%Nostrum.Struct.User.Flags{
bug_hunter_level_1: false,
bug_hunter_level_2: false,
early_supporter: true,
@@ -871,7 +871,7 @@ from_integer(flag_value)
team_user: false,
verified_bot: false,
verified_developer: true
-}
+}
@@ -905,7 +905,7 @@ to_integer(flag_struct)
Examples
-iex> my_flags = %Nostrum.Struct.User.Flags{
+iex> my_flags = %Nostrum.Struct.User.Flags{
...> bug_hunter_level_1: false,
...> bug_hunter_level_2: false,
...> early_supporter: true,
@@ -919,8 +919,8 @@ to_integer(flag_struct)
...> team_user: false,
...> verified_bot: false,
...> verified_developer: true
-...> }
-iex> Nostrum.Struct.User.Flags.to_integer(my_flags)
+...> }
+iex> Nostrum.Struct.User.Flags.to_integer(my_flags)
131842
diff --git a/Nostrum.Struct.User.html b/Nostrum.Struct.User.html
index 56b7567a6..596b0a733 100644
--- a/Nostrum.Struct.User.html
+++ b/Nostrum.Struct.User.html
@@ -14,7 +14,7 @@
-
+
@@ -146,13 +146,13 @@
Mentioning Users in Messages
A Nostrum.Struct.User
can be mentioned in message content using the String.Chars
-protocol or mention/1
.
user = %Nostrum.Struct.User{id: 120571255635181568}
-Nostrum.Api.create_message!(184046599834435585, "#{user}")
-%Nostrum.Struct.Message{content: "<@120571255635181568>"}
+protocol or mention/1
.user = %Nostrum.Struct.User{id: 120571255635181568}
+Nostrum.Api.create_message!(184046599834435585, "#{user}")
+%Nostrum.Struct.Message{content: "<@120571255635181568>"}
-user = %Nostrum.Struct.User{id: 89918932789497856}
-Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.User.mention(user)}")
-%Nostrum.Struct.Message{content: "<@89918932789497856>"}
+
user = %Nostrum.Struct.User{id: 89918932789497856}
+Nostrum.Api.create_message!(280085880452939778, "#{Nostrum.Struct.User.mention(user)}")
+%Nostrum.Struct.Message{content: "<@89918932789497856>"}
@@ -583,22 +583,22 @@ avatar_url(user, image_format \\ "webp
Examples
-iex> user = %Nostrum.Struct.User{avatar: "8342729096ea3675442027381ff50dfe",
-...> id: 80351110224678912}
-iex> Nostrum.Struct.User.avatar_url(user)
+iex> user = %Nostrum.Struct.User{avatar: "8342729096ea3675442027381ff50dfe",
+...> id: 80351110224678912}
+iex> Nostrum.Struct.User.avatar_url(user)
"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.webp"
-iex> Nostrum.Struct.User.avatar_url(user, "png")
+iex> Nostrum.Struct.User.avatar_url(user, "png")
"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.png"
-iex> user = %Nostrum.Struct.User{avatar: nil,
+iex> user = %Nostrum.Struct.User{avatar: nil,
...> id: 80351110224678912,
-...> discriminator: "0"}
-iex> Nostrum.Struct.User.avatar_url(user)
+...> discriminator: "0"}
+iex> Nostrum.Struct.User.avatar_url(user)
"https://cdn.discordapp.com/embed/avatars/5.png"
-iex> user = %Nostrum.Struct.User{avatar: nil,
-...> discriminator: "1337"}
-iex> Nostrum.Struct.User.avatar_url(user)
+iex> user = %Nostrum.Struct.User{avatar: nil,
+...> discriminator: "1337"}
+iex> Nostrum.Struct.User.avatar_url(user)
"https://cdn.discordapp.com/embed/avatars/2.png"
@@ -634,13 +634,13 @@ full_name(user)
Examples
-iex> user = %Nostrum.Struct.User{global_name: "TheRealJason",
+iex> user = %Nostrum.Struct.User{global_name: "TheRealJason",
...> username: "therealjason",
-...> discriminator: "0"}
-iex> Nostrum.Struct.User.full_name(user)
-"TheRealJason"
iex> user = %Nostrum.Struct.User{username: "b1nzy",
-...> discriminator: "0852"}
-iex> Nostrum.Struct.User.full_name(user)
+...> discriminator: "0"}
+iex> Nostrum.Struct.User.full_name(user)
+"TheRealJason"
iex> user = %Nostrum.Struct.User{username: "b1nzy",
+...> discriminator: "0852"}
+iex> Nostrum.Struct.User.full_name(user)
"b1nzy#0852"
@@ -675,8 +675,8 @@ mention(user)
Examples
-iex> user = %Nostrum.Struct.User{id: 177888205536886784}
-...> Nostrum.Struct.User.mention(user)
+iex> user = %Nostrum.Struct.User{id: 177888205536886784}
+...> Nostrum.Struct.User.mention(user)
"<@177888205536886784>"
diff --git a/Nostrum.Struct.VoiceRegion.html b/Nostrum.Struct.VoiceRegion.html
index 27449ff43..a494bce42 100644
--- a/Nostrum.Struct.VoiceRegion.html
+++ b/Nostrum.Struct.VoiceRegion.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.VoiceWSState.html b/Nostrum.Struct.VoiceWSState.html
index 5be59dbd2..c6cba6eac 100644
--- a/Nostrum.Struct.VoiceWSState.html
+++ b/Nostrum.Struct.VoiceWSState.html
@@ -14,7 +14,7 @@
-
+
@@ -186,6 +186,16 @@
+
+
+ encryption_mode()
+
+
+
+ Encryption mode selected for voice channel
+
+
+
gateway()
@@ -278,6 +288,16 @@
+
+
+ seq()
+
+
+
+ Sequence number for buffering server-sent events
+
+
+
session()
@@ -348,7 +368,7 @@
channel_id()
-
+
View Source
@@ -378,7 +398,7 @@ channel_id()
conn()
-
+
View Source
@@ -406,7 +426,7 @@ conn()
conn_pid()
-
+
View Source
@@ -425,6 +445,34 @@ conn_pid()
PID of the connection process
+
+
+
+
+
+
+
+
+ @type encryption_mode() :: Nostrum.Voice.Crypto.cipher()
+
+
+
+Encryption mode selected for voice channel
+
+
@@ -434,7 +482,7 @@ conn_pid()
gateway()
-
+
View Source
@@ -462,7 +510,7 @@ gateway()
guild_id()
-
+
View Source
@@ -490,7 +538,7 @@ guild_id()
heartbeat_ack()
-
+
View Source
@@ -518,7 +566,7 @@ heartbeat_ack()
heartbeat_interval()
-
+
View Source
@@ -546,7 +594,7 @@ heartbeat_interval()
heartbeat_ref()
-
+
View Source
@@ -574,7 +622,7 @@ heartbeat_ref()
identified()
-
+
View Source
@@ -602,7 +650,7 @@ identified()
last_heartbeat_ack()
-
+
View Source
@@ -631,7 +679,7 @@ last_heartbeat_ack()
last_heartbeat_send()
-
+
View Source
@@ -660,7 +708,7 @@ last_heartbeat_send()
secret_key()
-
+
View Source
@@ -681,6 +729,34 @@ secret_key()
The secret key for audio encryption
+
+
+
+
+
+
+
+
+ @type seq() :: integer()
+
+
+
+Sequence number for buffering server-sent events
+
+
@@ -690,7 +766,7 @@ secret_key()
session()
-
+
View Source
@@ -718,7 +794,7 @@ session()
ssrc_map()
-
+
View Source
@@ -749,7 +825,7 @@ ssrc_map()
stream()
-
+
View Source
@@ -777,7 +853,7 @@ stream()
t()
-
+
View Source
@@ -793,6 +869,7 @@ t()
channel_id: channel_id(),
conn: conn(),
conn_pid: conn_pid(),
+ encryption_mode: encryption_mode(),
gateway: gateway(),
guild_id: guild_id(),
heartbeat_ack: heartbeat_ack(),
@@ -802,6 +879,7 @@ t()
last_heartbeat_ack: last_heartbeat_ack(),
last_heartbeat_send: last_heartbeat_send(),
secret_key: secret_key(),
+ seq: seq(),
session: session(),
ssrc_map: ssrc_map(),
stream: stream(),
@@ -822,7 +900,7 @@ t()
token()
-
+
View Source
diff --git a/Nostrum.Struct.WSState.html b/Nostrum.Struct.WSState.html
index 2bce6cf6c..8e9cc2b80 100644
--- a/Nostrum.Struct.WSState.html
+++ b/Nostrum.Struct.WSState.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Struct.Webhook.html b/Nostrum.Struct.Webhook.html
index f0f05ff8e..87ddb50db 100644
--- a/Nostrum.Struct.Webhook.html
+++ b/Nostrum.Struct.Webhook.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Token.html b/Nostrum.Token.html
index 0c55ec9a8..a5074a8de 100644
--- a/Nostrum.Token.html
+++ b/Nostrum.Token.html
@@ -14,7 +14,7 @@
-
+
@@ -217,11 +217,11 @@ check_token!()
Examples
iex> token = "OTY4NTU2MzQ4MzkwMzkxODU5.G49NjP.pD8PLpKp-Xx8sr-8m1DCxSPTJZdcpcJZOExc1c"
-iex> Nostrum.Token.check_token!(token)
+iex> Nostrum.Token.check_token!(token)
:ok
iex> token = "ODY4MDcxODUzMDMyMzU3OTc4.YPqU6Q.jNJcq1daGG3otexX3c1LcxCpgpQ"
-iex> Nostrum.Token.check_token!(token)
+iex> Nostrum.Token.check_token!(token)
:ok
diff --git a/Nostrum.Util.html b/Nostrum.Util.html
index fc6dda064..0de3a65d9 100644
--- a/Nostrum.Util.html
+++ b/Nostrum.Util.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Voice.Crypto.Aes.html b/Nostrum.Voice.Crypto.Aes.html
index c493f4add..da7cab3c6 100644
--- a/Nostrum.Voice.Crypto.Aes.html
+++ b/Nostrum.Voice.Crypto.Aes.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Voice.Crypto.Chacha.html b/Nostrum.Voice.Crypto.Chacha.html
index b593f63da..75b0507ba 100644
--- a/Nostrum.Voice.Crypto.Chacha.html
+++ b/Nostrum.Voice.Crypto.Chacha.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Voice.Crypto.Salsa.html b/Nostrum.Voice.Crypto.Salsa.html
index 77b4abac2..28780054c 100644
--- a/Nostrum.Voice.Crypto.Salsa.html
+++ b/Nostrum.Voice.Crypto.Salsa.html
@@ -14,7 +14,7 @@
-
+
diff --git a/Nostrum.Voice.html b/Nostrum.Voice.html
index 6d70329f3..339b9d927 100644
--- a/Nostrum.Voice.html
+++ b/Nostrum.Voice.html
@@ -14,7 +14,7 @@
-
+
@@ -782,10 +782,10 @@ create_ogg_bitstream(opus_packets)
and consecutive opus packets from a single source that you want written
to a file, you can run the following:bitstream =
opus_packets
- |> create_ogg_bitstream()
- |> :binary.list_to_bin()
+ |> create_ogg_bitstream()
+ |> :binary.list_to_bin()
-File.write!("my_recording.ogg", bitstream)
When creating a logical bitstream, ensure that the packets are all from a single SSRC.
+File.write!("my_recording.ogg", bitstream)
When creating a logical bitstream, ensure that the packets are all from a single SSRC.
When listening in a channel with multiple speakers, you should be storing the received
packets in unique buckets for each SSRC so that the multiple audio sources don't become
jumbled. A single logical bitstream should represent audio data from a single speaker.
@@ -793,9 +793,9 @@
create_ogg_bitstream(opus_packets)
logical bitstreams as each logical bitstream and its constituent pages contain a unique
and randomly generated bitstream serial number, but this is a story for another time.Assuming you have a list of rtp_opus/0
packets that are not separated by ssrc, you
may do the following:
jumbled_packets
-|> Stream.filter(fn {{_seq, _time, ssrc}, _opus} -> ssrc == particular_ssrc end)
-|> Enum.map(fn {{_seq, _time, _ssrc}, opus} -> opus end)
-|> create_ogg_bitstream()
+|> Stream.filter(fn {{_seq, _time, ssrc}, _opus} -> ssrc == particular_ssrc end)
+|> Enum.map(fn {{_seq, _time, _ssrc}, opus} -> opus end)
+|> create_ogg_bitstream()
@@ -866,14 +866,14 @@ get_channel_id(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.get_channel(123456789)
+iex> Nostrum.Voice.get_channel(123456789)
420691337
-iex> Nostrum.Voice.leave_channel(123456789)
+iex> Nostrum.Voice.leave_channel(123456789)
-iex> Nostrum.Voice.get_channel(123456789)
+iex> Nostrum.Voice.get_channel(123456789)
nil
@@ -1148,11 +1148,11 @@ pause(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "~/files/twelve_hour_loop_of_waterfall_sounds.mp3")
+iex> Nostrum.Voice.play(123456789, "~/files/twelve_hour_loop_of_waterfall_sounds.mp3")
-iex> Nostrum.Voice.pause(123456789)
+iex> Nostrum.Voice.pause(123456789)
@@ -1211,27 +1211,27 @@ play(guild_id, input, type \\ :url, options
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "~/music/FavoriteSong.mp3", :url)
+iex> Nostrum.Voice.play(123456789, "~/music/FavoriteSong.mp3", :url)
-iex> Nostrum.Voice.play(123456789, "~/music/NotFavoriteButStillGoodSong.mp3", :url, volume: 0.5)
+iex> Nostrum.Voice.play(123456789, "~/music/NotFavoriteButStillGoodSong.mp3", :url, volume: 0.5)
-iex> Nostrum.Voice.play(123456789, "~/music/ThisWillBeHeavilyDistorted.mp3", :url, volume: 1000)
iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.play(123456789, "~/music/ThisWillBeHeavilyDistorted.mp3", :url, volume: 1000)
iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> raw_data = File.read!("~/music/sound_effect.wav")
+iex> raw_data = File.read!("~/music/sound_effect.wav")
-iex> Nostrum.Voice.play(123456789, raw_data, :pipe)
iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.play(123456789, raw_data, :pipe)
iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "https://www.youtube.com/watch?v=b4RJ-QGOtw4", :ytdl,
-...> realtime: true, start_pos: "0:17", duration: "30")
+iex> Nostrum.Voice.play(123456789, "https://www.youtube.com/watch?v=b4RJ-QGOtw4", :ytdl,
+...> realtime: true, start_pos: "0:17", duration: "30")
-iex> Nostrum.Voice.play(123456789, "https://www.youtube.com/watch?v=0ngcL_5ekXo", :ytdl,
-...> filter: "lowpass=f=1200", filter: "highpass=f=300", filter: "asetrate=44100*0.5")
iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.play(123456789, "https://www.youtube.com/watch?v=0ngcL_5ekXo", :ytdl,
+...> filter: "lowpass=f=1200", filter: "highpass=f=300", filter: "asetrate=44100*0.5")
iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "https://www.twitch.tv/pestily", :stream)
+iex> Nostrum.Voice.play(123456789, "https://www.twitch.tv/pestily", :stream)
-iex> Nostrum.Voice.play(123456789, "https://youtu.be/LN4r-K8ZP5Q", :stream)
+iex> Nostrum.Voice.play(123456789, "https://youtu.be/LN4r-K8ZP5Q", :stream)
@@ -1271,16 +1271,16 @@ playing?(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "https://a-real-site.biz/RickRoll.m4a")
+iex> Nostrum.Voice.play(123456789, "https://a-real-site.biz/RickRoll.m4a")
-iex> Nostrum.Voice.playing?(123456789)
+iex> Nostrum.Voice.playing?(123456789)
true
-iex> Nostrum.Voice.pause(123456789)
+iex> Nostrum.Voice.pause(123456789)
-iex> Nostrum.Voice.playing?(123456789)
+iex> Nostrum.Voice.playing?(123456789)
false
@@ -1321,14 +1321,14 @@ ready?(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.ready?(123456789)
+iex> Nostrum.Voice.ready?(123456789)
true
-iex> Nostrum.Voice.leave_channel(123456789)
+iex> Nostrum.Voice.leave_channel(123456789)
-iex> Nostrum.Voice.ready?(123456789)
+iex> Nostrum.Voice.ready?(123456789)
false
@@ -1369,13 +1369,13 @@ resume(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "~/stuff/Toto - Africa (Bass Boosted)")
+iex> Nostrum.Voice.play(123456789, "~/stuff/Toto - Africa (Bass Boosted)")
-iex> Nostrum.Voice.pause(123456789)
+iex> Nostrum.Voice.pause(123456789)
-iex> Nostrum.Voice.resume(123456789)
+iex> Nostrum.Voice.resume(123456789)
@@ -1513,11 +1513,11 @@ stop(guild_id)
Examples
-iex> Nostrum.Voice.join_channel(123456789, 420691337)
+iex> Nostrum.Voice.join_channel(123456789, 420691337)
-iex> Nostrum.Voice.play(123456789, "http://brandthill.com/files/weird_dubstep_noises.mp3")
+iex> Nostrum.Voice.play(123456789, "http://brandthill.com/files/weird_dubstep_noises.mp3")
-iex> Nostrum.Voice.stop(123456789)
+iex> Nostrum.Voice.stop(123456789)
diff --git a/Nostrum.epub b/Nostrum.epub
index db285bb85a1d0f1741b788c6333eb546aa5904a8..e50944cef99ac5c3dbc06f1715b348f58278517d 100644
GIT binary patch
delta 192672
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%0Aa
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