From d598c18e44207510df03215b9e994b0f185bf987 Mon Sep 17 00:00:00 2001 From: jchristgit Date: Sat, 21 Sep 2024 11:30:20 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=2016288?= =?UTF-8?q?80a3e6e45cacc53d2383eb110ff023050e1=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .build | 4 +- 404.html | 2 +- Mix.Tasks.Gh.Docs.html | 2 +- Nostrum.Api.Ratelimiter.html | 6 +- Nostrum.Api.RatelimiterGroup.html | 2 +- Nostrum.Api.html | 244 +++++++++--------- Nostrum.Cache.CacheSupervisor.html | 2 +- Nostrum.Cache.ChannelGuildMapping.ETS.html | 2 +- Nostrum.Cache.ChannelGuildMapping.Mnesia.html | 2 +- Nostrum.Cache.ChannelGuildMapping.NoOp.html | 2 +- Nostrum.Cache.ChannelGuildMapping.html | 6 +- Nostrum.Cache.GuildCache.ETS.html | 2 +- Nostrum.Cache.GuildCache.Mnesia.html | 2 +- Nostrum.Cache.GuildCache.NoOp.html | 2 +- Nostrum.Cache.GuildCache.html | 2 +- Nostrum.Cache.Me.html | 2 +- Nostrum.Cache.MemberCache.ETS.html | 2 +- Nostrum.Cache.MemberCache.Mnesia.html | 2 +- Nostrum.Cache.MemberCache.NoOp.html | 2 +- Nostrum.Cache.MemberCache.html | 2 +- Nostrum.Cache.MessageCache.Mnesia.html | 10 +- Nostrum.Cache.MessageCache.Noop.html | 2 +- Nostrum.Cache.MessageCache.html | 2 +- Nostrum.Cache.PresenceCache.ETS.html | 2 +- Nostrum.Cache.PresenceCache.Mnesia.html | 2 +- Nostrum.Cache.PresenceCache.NoOp.html | 2 +- Nostrum.Cache.PresenceCache.html | 12 +- Nostrum.Cache.UserCache.ETS.html | 2 +- Nostrum.Cache.UserCache.Mnesia.html | 2 +- Nostrum.Cache.UserCache.NoOp.html | 2 +- Nostrum.Cache.UserCache.html | 10 +- ...onstants.ApplicationCommandOptionType.html | 2 +- ...ants.ApplicationCommandPermissionType.html | 2 +- Nostrum.Constants.ApplicationCommandType.html | 2 +- Nostrum.Constants.ButtonStyle.html | 2 +- Nostrum.Constants.ChannelType.html | 2 +- Nostrum.Constants.ComponentType.html | 2 +- ...rum.Constants.InteractionCallbackType.html | 2 +- Nostrum.Constants.InteractionType.html | 2 +- Nostrum.Constants.TextInputStyle.html | 2 +- Nostrum.Constants.WebhookType.html | 2 +- Nostrum.Consumer.html | 62 ++--- Nostrum.ConsumerGroup.html | 22 +- Nostrum.Error.ApiError.html | 2 +- Nostrum.Error.CacheError.html | 2 +- Nostrum.Error.VoiceError.html | 2 +- Nostrum.Permission.html | 40 +-- Nostrum.Shard.Session.Compression.Zlib.html | 2 +- Nostrum.Shard.Session.Compression.Zstd.html | 2 +- Nostrum.Shard.Session.Compression.html | 2 +- Nostrum.Shard.Session.html | 2 +- Nostrum.Shard.Supervisor.html | 12 +- Nostrum.Snowflake.html | 40 +-- Nostrum.StateMachineTranslator.html | 2 +- Nostrum.Store.GuildShardMapping.ETS.html | 2 +- Nostrum.Store.GuildShardMapping.Mnesia.html | 2 +- Nostrum.Store.GuildShardMapping.html | 6 +- Nostrum.Store.Supervisor.html | 2 +- Nostrum.Store.UnavailableGuild.ETS.html | 2 +- Nostrum.Store.UnavailableGuild.Mnesia.html | 2 +- Nostrum.Store.UnavailableGuild.html | 6 +- Nostrum.Struct.ApplicationCommand.html | 2 +- ...uct.ApplicationCommandInteractionData.html | 2 +- ...plicationCommandInteractionDataOption.html | 2 +- ...icationCommandInteractionDataResolved.html | 2 +- Nostrum.Struct.AutoModerationRule.Action.html | 2 +- ...uct.AutoModerationRule.ActionMetadata.html | 2 +- ...ct.AutoModerationRule.TriggerMetadata.html | 2 +- Nostrum.Struct.AutoModerationRule.html | 2 +- Nostrum.Struct.Channel.html | 22 +- Nostrum.Struct.Component.ActionRow.html | 2 +- Nostrum.Struct.Component.Button.html | 2 +- Nostrum.Struct.Component.ChannelSelect.html | 2 +- Nostrum.Struct.Component.DefaultValue.html | 2 +- ...um.Struct.Component.MentionableSelect.html | 2 +- Nostrum.Struct.Component.Option.html | 2 +- Nostrum.Struct.Component.RoleSelect.html | 2 +- Nostrum.Struct.Component.SelectMenu.html | 2 +- Nostrum.Struct.Component.TextInput.html | 2 +- Nostrum.Struct.Component.UserSelect.html | 2 +- Nostrum.Struct.Component.html | 2 +- Nostrum.Struct.Embed.Author.html | 2 +- Nostrum.Struct.Embed.Field.html | 2 +- Nostrum.Struct.Embed.Footer.html | 2 +- Nostrum.Struct.Embed.Image.html | 2 +- Nostrum.Struct.Embed.Provider.html | 2 +- Nostrum.Struct.Embed.Thumbnail.html | 2 +- Nostrum.Struct.Embed.Video.html | 2 +- Nostrum.Struct.Embed.html | 202 +++++++-------- Nostrum.Struct.Emoji.html | 58 ++--- ...truct.Event.AutoModerationRuleExecute.html | 2 +- Nostrum.Struct.Event.ChannelPinsUpdate.html | 2 +- Nostrum.Struct.Event.GuildBanAdd.html | 2 +- Nostrum.Struct.Event.GuildBanRemove.html | 2 +- ...m.Struct.Event.GuildIntegrationDelete.html | 2 +- ....Struct.Event.GuildIntegrationsUpdate.html | 2 +- ...ruct.Event.GuildScheduledEventUserAdd.html | 2 +- ...t.Event.GuildScheduledEventUserRemove.html | 2 +- Nostrum.Struct.Event.InviteCreate.html | 2 +- Nostrum.Struct.Event.InviteDelete.html | 2 +- Nostrum.Struct.Event.MessageDelete.html | 2 +- Nostrum.Struct.Event.MessageDeleteBulk.html | 2 +- Nostrum.Struct.Event.MessageReactionAdd.html | 2 +- ...um.Struct.Event.MessageReactionRemove.html | 2 +- ...Struct.Event.MessageReactionRemoveAll.html | 2 +- ...ruct.Event.MessageReactionRemoveEmoji.html | 2 +- Nostrum.Struct.Event.PartialApplication.html | 2 +- Nostrum.Struct.Event.PollVoteChange.html | 2 +- Nostrum.Struct.Event.Ready.html | 2 +- Nostrum.Struct.Event.SpeakingUpdate.html | 2 +- Nostrum.Struct.Event.ThreadListSync.html | 2 +- Nostrum.Struct.Event.ThreadMembersUpdate.html | 2 +- Nostrum.Struct.Event.TypingStart.html | 2 +- Nostrum.Struct.Event.VoiceReady.html | 2 +- Nostrum.Struct.Event.VoiceServerUpdate.html | 2 +- Nostrum.Struct.Event.VoiceState.html | 2 +- Nostrum.Struct.Guild.AuditLog.html | 2 +- Nostrum.Struct.Guild.AuditLogEntry.html | 2 +- Nostrum.Struct.Guild.Ban.html | 2 +- Nostrum.Struct.Guild.Integration.Account.html | 2 +- ....Struct.Guild.Integration.Application.html | 2 +- Nostrum.Struct.Guild.Integration.html | 2 +- Nostrum.Struct.Guild.Member.Flags.html | 14 +- Nostrum.Struct.Guild.Member.html | 36 +-- Nostrum.Struct.Guild.Role.html | 18 +- ...t.Guild.ScheduledEvent.EntityMetadata.html | 2 +- Nostrum.Struct.Guild.ScheduledEvent.User.html | 2 +- Nostrum.Struct.Guild.ScheduledEvent.html | 2 +- Nostrum.Struct.Guild.SystemChannelFlags.html | 14 +- Nostrum.Struct.Guild.UnavailableGuild.html | 2 +- Nostrum.Struct.Guild.html | 42 +-- Nostrum.Struct.Interaction.html | 2 +- Nostrum.Struct.Invite.html | 2 +- Nostrum.Struct.Message.Activity.html | 2 +- Nostrum.Struct.Message.Application.html | 2 +- Nostrum.Struct.Message.Attachment.html | 2 +- Nostrum.Struct.Message.Component.html | 2 +- Nostrum.Struct.Message.Poll.Answer.html | 2 +- Nostrum.Struct.Message.Poll.MediaObject.html | 2 +- Nostrum.Struct.Message.Poll.Results.html | 2 +- Nostrum.Struct.Message.Poll.html | 10 +- Nostrum.Struct.Message.Reaction.html | 2 +- Nostrum.Struct.Message.Reference.html | 2 +- Nostrum.Struct.Message.html | 2 +- Nostrum.Struct.Overwrite.html | 2 +- Nostrum.Struct.Sticker.Pack.html | 4 +- Nostrum.Struct.Sticker.html | 6 +- Nostrum.Struct.ThreadMember.html | 2 +- Nostrum.Struct.User.Connection.html | 2 +- Nostrum.Struct.User.Flags.html | 14 +- Nostrum.Struct.User.html | 50 ++-- Nostrum.Struct.VoiceRegion.html | 2 +- Nostrum.Struct.VoiceWSState.html | 114 ++++++-- Nostrum.Struct.WSState.html | 2 +- Nostrum.Struct.Webhook.html | 2 +- Nostrum.Token.html | 6 +- Nostrum.Util.html | 2 +- Nostrum.Voice.Crypto.Aes.html | 2 +- Nostrum.Voice.Crypto.Chacha.html | 2 +- Nostrum.Voice.Crypto.Salsa.html | 2 +- Nostrum.Voice.html | 84 +++--- Nostrum.epub | Bin 768974 -> 779290 bytes api-1.html | 74 +++--- api-4.html | 10 +- api-reference.html | 2 +- application_commands.html | 78 +++--- ...ta-6EB43D3D.js => search_data-560762BB.js} | 2 +- ...-E9C8C345.js => sidebar_items-D16B999F.js} | 2 +- event_handling.html | 2 +- gateway_compression.html | 14 +- gateway_intents.html | 6 +- hot_code_upgrade.html | 2 +- intro.html | 10 +- manual_sharding.html | 10 +- multi_node.html | 58 ++--- pluggable_caching.html | 6 +- search.html | 4 +- state.html | 2 +- voice-2.html | 70 ++--- voice-3.html | 24 +- 180 files changed, 945 insertions(+), 867 deletions(-) rename dist/{search_data-6EB43D3D.js => search_data-560762BB.js} (65%) rename dist/{sidebar_items-E9C8C345.js => sidebar_items-D16B999F.js} (66%) diff --git a/.build b/.build index 7046f5c36..f68e743ed 100644 --- a/.build +++ b/.build @@ -188,8 +188,8 @@ dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 dist/lato-latin-ext-400-normal-N27NCBWW.woff2 dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 dist/remixicon-NKANDIL5.woff2 -dist/search_data-6EB43D3D.js -dist/sidebar_items-E9C8C345.js +dist/search_data-560762BB.js +dist/sidebar_items-D16B999F.js event_handling.html gateway_compression.html gateway_intents.html diff --git a/404.html b/404.html index 9b1a50332..c152c5870 100644 --- a/404.html +++ b/404.html @@ -16,7 +16,7 @@ - + diff --git a/Mix.Tasks.Gh.Docs.html b/Mix.Tasks.Gh.Docs.html index 3cddb4581..5c7e85b79 100644 --- a/Mix.Tasks.Gh.Docs.html +++ b/Mix.Tasks.Gh.Docs.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Api.Ratelimiter.html b/Nostrum.Api.Ratelimiter.html index dd04f976e..f1c4bf534 100644 --- a/Nostrum.Api.Ratelimiter.html +++ b/Nostrum.Api.Ratelimiter.html @@ -14,7 +14,7 @@ - + @@ -164,9 +164,9 @@

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 Nostrum.Api.

If you want to make one or multiple asynchronous requests manually, you can -use the following pattern:

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.

diff --git a/Nostrum.Api.RatelimiterGroup.html b/Nostrum.Api.RatelimiterGroup.html index fcecaa98c..5c386be94 100644 --- a/Nostrum.Api.RatelimiterGroup.html +++ b/Nostrum.Api.RatelimiterGroup.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Api.html b/Nostrum.Api.html index 8db841839..5848f70b0 100644 --- a/Nostrum.Api.html +++ b/Nostrum.Api.html @@ -14,7 +14,7 @@ - + @@ -142,25 +142,25 @@

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

A note about Strings and Ints

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

A note about Strings and Ints

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 @@

add_guild_member(guild_id, user_id, options Examples

-
Nostrum.Api.add_guild_member(
+
Nostrum.Api.add_guild_member(
   41771983423143937,
   18374719829378473,
   access_token: "6qrZcUqja7812RVdnEKjpzOL4CvHBFG",
   nick: "nostrum",
-  roles: [431849301, 913809431]
-)
+
roles: [431849301, 913809431] +)
@@ -3019,7 +3019,7 @@

add_pinned_channel_message(channel_id, mess Examples

-
Nostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)
+
Nostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)
@@ -3173,8 +3173,8 @@

begin_guild_prune(guild_id, days, reason \\ Examples

-
Nostrum.Api.begin_guild_prune(81384788765712384, 1)
-{:ok, %{pruned: 0}}
+
Nostrum.Api.begin_guild_prune(81384788765712384, 1)
+{:ok, %{pruned: 0}}
@@ -3430,11 +3430,11 @@

create_channel_invite(channel_id, options \ Examples

-
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{}}
@@ -3505,8 +3505,8 @@

create_dm(user_id)

Examples -
Nostrum.Api.create_dm(150061853001777154)
-{:ok, %Nostrum.Struct.Channel{type: 1}}
+
Nostrum.Api.create_dm(150061853001777154)
+{:ok, %Nostrum.Struct.Channel{type: 1}}
@@ -3663,9 +3663,9 @@

create_global_application_command(applicati Example

-
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: []}
+)
@@ -3703,8 +3703,8 @@

create_group_dm(access_tokens, nicks)

Examples -
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}}
@@ -3900,8 +3900,8 @@

create_guild_channel(guild_id, options)

Examples -
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}}
@@ -3980,7 +3980,7 @@

create_guild_emoji(guild_id, options, reaso

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: [])
@@ -4090,7 +4090,7 @@

create_guild_role(guild_id, options, reason Examples

-
Nostrum.Api.create_guild_role(41771983423143937, name: "nostrum-club", hoist: true)
+
Nostrum.Api.create_guild_role(41771983423143937, name: "nostrum-club", hoist: true)
@@ -4302,13 +4302,13 @@

create_interaction_response(id, token, resp Example

-
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.

@@ -4417,35 +4417,35 @@

create_message(channel_id, options)

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

Examples

-
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)
@@ -4520,11 +4520,11 @@

create_reaction(channel_id, message_id, emo Examples

# 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.

@@ -4701,8 +4701,8 @@

delete_channel(channel_id, reason \\ nil) Examples

-
Nostrum.Api.delete_channel(421533712753360896)
-{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}
+
Nostrum.Api.delete_channel(421533712753360896)
+{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}
@@ -4848,8 +4848,8 @@

delete_guild(guild_id)

Examples -
Nostrum.Api.delete_guild(81384788765712384)
-{:ok}
+
Nostrum.Api.delete_guild(81384788765712384)
+{:ok}
@@ -5089,7 +5089,7 @@

delete_guild_role(guild_id, role_id, reason Examples

-
Nostrum.Api.delete_guild_role(41771983423143937, 392817238471936)
+
Nostrum.Api.delete_guild_role(41771983423143937, 392817238471936)
@@ -5431,7 +5431,7 @@

delete_invite(invite_code)

Examples -
Nostrum.Api.delete_invite("zsjUsC")
+
Nostrum.Api.delete_invite("zsjUsC")
@@ -5525,7 +5525,7 @@

delete_message(channel_id, message_id)

Examples -
Nostrum.Api.delete_message(43189401384091, 43189401384091)
+
Nostrum.Api.delete_message(43189401384091, 43189401384091)
@@ -6329,18 +6329,18 @@

edit_message(channel_id, message_id, option Examples

-
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])
@@ -6704,21 +6704,21 @@

get_application_information()

Example
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"
-  },
-}}
+ }, +}}
@@ -6753,8 +6753,8 @@

get_channel(channel_id)

Examples -
Nostrum.Api.get_channel(381889573426429952)
-{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}
+
Nostrum.Api.get_channel(381889573426429952)
+{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}
@@ -6819,8 +6819,8 @@

get_channel_invites(channel_id)

Examples -
Nostrum.Api.get_channel_invites(43189401384091)
-{:ok, [%Nostrum.Struct.Invite{} | _]}
+
Nostrum.Api.get_channel_invites(43189401384091)
+{:ok, [%Nostrum.Struct.Invite{} | _]}
@@ -6884,7 +6884,7 @@

get_channel_message(channel_id, message_id) Examples

-
Nostrum.Api.get_channel_message(43189401384091, 198238475613443)
+
Nostrum.Api.get_channel_message(43189401384091, 198238475613443)
@@ -6952,7 +6952,7 @@

get_channel_messages(channel_id, limit, loc Examples

-
Nostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})
+
Nostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})
@@ -7122,8 +7122,8 @@

get_current_user_guilds(options \\ [])

Examples -
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{}]}
@@ -7206,15 +7206,15 @@

get_global_application_commands(application Example

iex> Nostrum.Api.get_global_application_commands
-{:ok,
- [
-   %{
+{:ok,
+ [
+   %{
      application_id: "455589479713865749",
      description: "ed, man! man, ed",
      id: "789841753196331029",
      name: "edit"
-   }
- ]}
+ } + ]}
@@ -7249,8 +7249,8 @@

get_guild(guild_id)

Examples -
Nostrum.Api.get_guild(81384788765712384)
-{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}
+
Nostrum.Api.get_guild(81384788765712384)
+{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}
@@ -7573,8 +7573,8 @@

get_guild_channels(guild_id)

Examples -
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} | _]}
@@ -7725,8 +7725,8 @@

get_guild_invites(guild_id)

Examples -
Nostrum.Api.get_guild_invites(81384788765712384)
-{:ok, [%Nostrum.Struct.Invite{} | _]}
+
Nostrum.Api.get_guild_invites(81384788765712384)
+{:ok, [%Nostrum.Struct.Invite{} | _]}
@@ -7790,7 +7790,7 @@

get_guild_member(guild_id, user_id)

Examples -
Nostrum.Api.get_guild_member(4019283754613, 184937267485)
+
Nostrum.Api.get_guild_member(4019283754613, 184937267485)
@@ -7854,8 +7854,8 @@

get_guild_prune_count(guild_id, days)

Examples -
Nostrum.Api.get_guild_prune_count(81384788765712384, 1)
-{:ok, %{pruned: 0}}
+
Nostrum.Api.get_guild_prune_count(81384788765712384, 1)
+{:ok, %{pruned: 0}}
@@ -7919,7 +7919,7 @@

get_guild_roles(guild_id)

Examples -
Nostrum.Api.get_guild_roles(147362948571673)
+
Nostrum.Api.get_guild_roles(147362948571673)
@@ -8193,9 +8193,9 @@

get_invite(invite_code, options \\ [])

Examples -
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)
@@ -8292,7 +8292,7 @@

get_pinned_messages(channel_id)

Examples -
Nostrum.Api.get_pinned_messages(43189401384091)
+
Nostrum.Api.get_pinned_messages(43189401384091)
@@ -8686,8 +8686,8 @@

get_user_dms()

Examples -
Nostrum.Api.get_user_dms()
-{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}
+
Nostrum.Api.get_user_dms()
+{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}
@@ -9037,7 +9037,7 @@

list_guild_members(guild_id, options \\ %{} Examples

-
Nostrum.Api.list_guild_members(41771983423143937, limit: 1)
+
Nostrum.Api.list_guild_members(41771983423143937, limit: 1)
@@ -9348,11 +9348,11 @@

modify_channel(channel_id, options, reason Examples

-
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}}
@@ -9426,7 +9426,7 @@

modify_current_user(options)

Examples -
Nostrum.Api.modify_current_user(avatar: "data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=")
+
Nostrum.Api.modify_current_user(avatar: "data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=")
@@ -9497,8 +9497,8 @@

modify_current_user_nick(guild_id, options Examples

-
Nostrum.Api.modify_current_user_nick(41771983423143937, nick: "Nostrum")
-{:ok, %{nick: "Nostrum"}}
+
Nostrum.Api.modify_current_user_nick(41771983423143937, nick: "Nostrum")
+{:ok, %{nick: "Nostrum"}}
@@ -9585,8 +9585,8 @@

modify_guild(guild_id, options \\ [], reaso Examples

-
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", ...}}
@@ -9689,8 +9689,8 @@

modify_guild_channel_positions(guild_id, po Examples

-
Nostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])
-{:ok}
+
Nostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])
+{:ok}
@@ -9771,7 +9771,7 @@

modify_guild_emoji(guild_id, emoji_id, opti Examples

-
Nostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: "elixir", roles: [])
+
Nostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: "elixir", roles: [])
@@ -9889,8 +9889,8 @@

modify_guild_member(guild_id, user_id, opti Examples

-
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{}}
@@ -9975,7 +9975,7 @@

modify_guild_role(guild_id, role_id, option Examples

-
Nostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: "foo-bar")
+
Nostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: "foo-bar")
@@ -10051,7 +10051,7 @@

modify_guild_role_positions(guild_id, posit Examples

-
Nostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])
+
Nostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])
@@ -10344,8 +10344,8 @@

remove_guild_member(guild_id, user_id, reas Examples

-
Nostrum.Api.remove_guild_member(1453827904102291, 18739485766253)
-{:ok}
+
Nostrum.Api.remove_guild_member(1453827904102291, 18739485766253)
+{:ok}
diff --git a/Nostrum.Cache.CacheSupervisor.html b/Nostrum.Cache.CacheSupervisor.html index c9e8d737f..cd01e03f3 100644 --- a/Nostrum.Cache.CacheSupervisor.html +++ b/Nostrum.Cache.CacheSupervisor.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.ChannelGuildMapping.ETS.html b/Nostrum.Cache.ChannelGuildMapping.ETS.html index b84939c40..82b06ba21 100644 --- a/Nostrum.Cache.ChannelGuildMapping.ETS.html +++ b/Nostrum.Cache.ChannelGuildMapping.ETS.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.ChannelGuildMapping.Mnesia.html b/Nostrum.Cache.ChannelGuildMapping.Mnesia.html index 00f9833d4..a5fec57bb 100644 --- a/Nostrum.Cache.ChannelGuildMapping.Mnesia.html +++ b/Nostrum.Cache.ChannelGuildMapping.Mnesia.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.ChannelGuildMapping.NoOp.html b/Nostrum.Cache.ChannelGuildMapping.NoOp.html index c0568ea33..30993d044 100644 --- a/Nostrum.Cache.ChannelGuildMapping.NoOp.html +++ b/Nostrum.Cache.ChannelGuildMapping.NoOp.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.ChannelGuildMapping.html b/Nostrum.Cache.ChannelGuildMapping.html index 4892ff647..71cf097c4 100644 --- a/Nostrum.Cache.ChannelGuildMapping.html +++ b/Nostrum.Cache.ChannelGuildMapping.html @@ -14,7 +14,7 @@ - + @@ -157,9 +157,9 @@

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.

diff --git a/Nostrum.Cache.GuildCache.ETS.html b/Nostrum.Cache.GuildCache.ETS.html index d23dc38e1..6fa1ee238 100644 --- a/Nostrum.Cache.GuildCache.ETS.html +++ b/Nostrum.Cache.GuildCache.ETS.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.GuildCache.Mnesia.html b/Nostrum.Cache.GuildCache.Mnesia.html index 61d7f7cf4..c84765525 100644 --- a/Nostrum.Cache.GuildCache.Mnesia.html +++ b/Nostrum.Cache.GuildCache.Mnesia.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.GuildCache.NoOp.html b/Nostrum.Cache.GuildCache.NoOp.html index 8c99e7605..8a09d43be 100644 --- a/Nostrum.Cache.GuildCache.NoOp.html +++ b/Nostrum.Cache.GuildCache.NoOp.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.GuildCache.html b/Nostrum.Cache.GuildCache.html index 37c7ecd23..d7c094dca 100644 --- a/Nostrum.Cache.GuildCache.html +++ b/Nostrum.Cache.GuildCache.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.Me.html b/Nostrum.Cache.Me.html index 13baa5402..b8489d6db 100644 --- a/Nostrum.Cache.Me.html +++ b/Nostrum.Cache.Me.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MemberCache.ETS.html b/Nostrum.Cache.MemberCache.ETS.html index 9dbb9179c..da203e9a4 100644 --- a/Nostrum.Cache.MemberCache.ETS.html +++ b/Nostrum.Cache.MemberCache.ETS.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MemberCache.Mnesia.html b/Nostrum.Cache.MemberCache.Mnesia.html index 20f354494..fe8055fea 100644 --- a/Nostrum.Cache.MemberCache.Mnesia.html +++ b/Nostrum.Cache.MemberCache.Mnesia.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MemberCache.NoOp.html b/Nostrum.Cache.MemberCache.NoOp.html index 2e5528389..c74ad1d24 100644 --- a/Nostrum.Cache.MemberCache.NoOp.html +++ b/Nostrum.Cache.MemberCache.NoOp.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MemberCache.html b/Nostrum.Cache.MemberCache.html index 710912698..4b18cedc8 100644 --- a/Nostrum.Cache.MemberCache.html +++ b/Nostrum.Cache.MemberCache.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MessageCache.Mnesia.html b/Nostrum.Cache.MessageCache.Mnesia.html index f7e3bcd12..7223e038e 100644 --- a/Nostrum.Cache.MessageCache.Mnesia.html +++ b/Nostrum.Cache.MessageCache.Mnesia.html @@ -14,7 +14,7 @@ - + @@ -154,12 +154,12 @@

that the table cannot be changed to only store its contents on disk later. default: :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.

diff --git a/Nostrum.Cache.MessageCache.Noop.html b/Nostrum.Cache.MessageCache.Noop.html index 1ed3fc012..6adc5885a 100644 --- a/Nostrum.Cache.MessageCache.Noop.html +++ b/Nostrum.Cache.MessageCache.Noop.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.MessageCache.html b/Nostrum.Cache.MessageCache.html index 96c01ddee..750666df3 100644 --- a/Nostrum.Cache.MessageCache.html +++ b/Nostrum.Cache.MessageCache.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.PresenceCache.ETS.html b/Nostrum.Cache.PresenceCache.ETS.html index 9d6876397..e13d4f2fa 100644 --- a/Nostrum.Cache.PresenceCache.ETS.html +++ b/Nostrum.Cache.PresenceCache.ETS.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.PresenceCache.Mnesia.html b/Nostrum.Cache.PresenceCache.Mnesia.html index 6d10815e0..7efeead64 100644 --- a/Nostrum.Cache.PresenceCache.Mnesia.html +++ b/Nostrum.Cache.PresenceCache.Mnesia.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.PresenceCache.NoOp.html b/Nostrum.Cache.PresenceCache.NoOp.html index b5bbf4db9..4373ebc60 100644 --- a/Nostrum.Cache.PresenceCache.NoOp.html +++ b/Nostrum.Cache.PresenceCache.NoOp.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.PresenceCache.html b/Nostrum.Cache.PresenceCache.html index 5fd1bb292..896f0fd51 100644 --- a/Nostrum.Cache.PresenceCache.html +++ b/Nostrum.Cache.PresenceCache.html @@ -14,7 +14,7 @@ - + @@ -582,12 +582,12 @@

get(guild_id, user_id)

Example -
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
diff --git a/Nostrum.Cache.UserCache.ETS.html b/Nostrum.Cache.UserCache.ETS.html index 3e137c3b2..9f2a0f058 100644 --- a/Nostrum.Cache.UserCache.ETS.html +++ b/Nostrum.Cache.UserCache.ETS.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.UserCache.Mnesia.html b/Nostrum.Cache.UserCache.Mnesia.html index f8cfcaaa5..f761efa88 100644 --- a/Nostrum.Cache.UserCache.Mnesia.html +++ b/Nostrum.Cache.UserCache.Mnesia.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.UserCache.NoOp.html b/Nostrum.Cache.UserCache.NoOp.html index 6a4333170..1e7db353b 100644 --- a/Nostrum.Cache.UserCache.NoOp.html +++ b/Nostrum.Cache.UserCache.NoOp.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Cache.UserCache.html b/Nostrum.Cache.UserCache.html index 803f33837..663b2b647 100644 --- a/Nostrum.Cache.UserCache.html +++ b/Nostrum.Cache.UserCache.html @@ -14,7 +14,7 @@ - + @@ -530,12 +530,12 @@

get(id)

Example -
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
diff --git a/Nostrum.Constants.ApplicationCommandOptionType.html b/Nostrum.Constants.ApplicationCommandOptionType.html index 33626f844..a8d21841e 100644 --- a/Nostrum.Constants.ApplicationCommandOptionType.html +++ b/Nostrum.Constants.ApplicationCommandOptionType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.ApplicationCommandPermissionType.html b/Nostrum.Constants.ApplicationCommandPermissionType.html index 5636dc413..3cd011b9d 100644 --- a/Nostrum.Constants.ApplicationCommandPermissionType.html +++ b/Nostrum.Constants.ApplicationCommandPermissionType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.ApplicationCommandType.html b/Nostrum.Constants.ApplicationCommandType.html index 525d8149b..415825852 100644 --- a/Nostrum.Constants.ApplicationCommandType.html +++ b/Nostrum.Constants.ApplicationCommandType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.ButtonStyle.html b/Nostrum.Constants.ButtonStyle.html index b9ed86855..bcd289b31 100644 --- a/Nostrum.Constants.ButtonStyle.html +++ b/Nostrum.Constants.ButtonStyle.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.ChannelType.html b/Nostrum.Constants.ChannelType.html index 1794bdf92..7bc279be9 100644 --- a/Nostrum.Constants.ChannelType.html +++ b/Nostrum.Constants.ChannelType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.ComponentType.html b/Nostrum.Constants.ComponentType.html index a5ed5a908..aaf1f6c95 100644 --- a/Nostrum.Constants.ComponentType.html +++ b/Nostrum.Constants.ComponentType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.InteractionCallbackType.html b/Nostrum.Constants.InteractionCallbackType.html index cf72cd3f7..18a0bd5ee 100644 --- a/Nostrum.Constants.InteractionCallbackType.html +++ b/Nostrum.Constants.InteractionCallbackType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.InteractionType.html b/Nostrum.Constants.InteractionType.html index 1c47a51da..b952c61dc 100644 --- a/Nostrum.Constants.InteractionType.html +++ b/Nostrum.Constants.InteractionType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.TextInputStyle.html b/Nostrum.Constants.TextInputStyle.html index 262a2faf8..5ee9f60f2 100644 --- a/Nostrum.Constants.TextInputStyle.html +++ b/Nostrum.Constants.TextInputStyle.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Constants.WebhookType.html b/Nostrum.Constants.WebhookType.html index dc5817c68..2d966d2fb 100644 --- a/Nostrum.Constants.WebhookType.html +++ b/Nostrum.Constants.WebhookType.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Consumer.html b/Nostrum.Consumer.html index 8f1ac59d8..0a12e29fa 100644 --- a/Nostrum.Consumer.html +++ b/Nostrum.Consumer.html @@ -14,7 +14,7 @@ - + @@ -150,18 +150,18 @@

parallelism and isolation. You therefore do not need to start more than one consumer in your supervision tree. If you want to override this behaviour, implement the 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

@@ -176,35 +176,35 @@

Example consumer

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 Nostrum.Consumer.event/0.

+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 Nostrum.Consumer.event/0.

diff --git a/Nostrum.ConsumerGroup.html b/Nostrum.ConsumerGroup.html index 2229165d0..aae7be180 100644 --- a/Nostrum.ConsumerGroup.html +++ b/Nostrum.ConsumerGroup.html @@ -14,7 +14,7 @@ - + @@ -397,17 +397,17 @@

join(pid)

alias Nostrum.Struct.Message alias Nostrum.Struct.User - def command(%Message{author: %User{id: author_id}}) do - Api.create_message!(msg, "Reply 'y' in 5 seconds to confirm ordering a large burger menu.") - ConsumerGroup.join() - receive do - {:event, {:MESSAGE_CREATE, %Message{author: %User{id: author_id}, content: "y"}, _}} -> - Api.create_message!(msg, "The large burger menu is coming.") - after + def command(%Message{author: %User{id: author_id}}) do + Api.create_message!(msg, "Reply 'y' in 5 seconds to confirm ordering a large burger menu.") + ConsumerGroup.join() + receive do + {:event, {:MESSAGE_CREATE, %Message{author: %User{id: author_id}, content: "y"}, _}} -> + Api.create_message!(msg, "The large burger menu is coming.") + after 5_000 -> - Api.create_message!(msg, "Too slow!") - end - end + Api.create_message!(msg, "Too slow!") + end + end end diff --git a/Nostrum.Error.ApiError.html b/Nostrum.Error.ApiError.html index dd79c4173..89792679f 100644 --- a/Nostrum.Error.ApiError.html +++ b/Nostrum.Error.ApiError.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Error.CacheError.html b/Nostrum.Error.CacheError.html index 85d169259..a402ff58c 100644 --- a/Nostrum.Error.CacheError.html +++ b/Nostrum.Error.CacheError.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Error.VoiceError.html b/Nostrum.Error.VoiceError.html index d11299d23..a8b9f1bf5 100644 --- a/Nostrum.Error.VoiceError.html +++ b/Nostrum.Error.VoiceError.html @@ -14,7 +14,7 @@ - + diff --git a/Nostrum.Permission.html b/Nostrum.Permission.html index e1806fff3..94f842a47 100644 --- a/Nostrum.Permission.html +++ b/Nostrum.Permission.html @@ -14,7 +14,7 @@ - + @@ -143,13 +143,13 @@

to work with permissions:

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 @@

from_bit(bit)

Examples -
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.Embeds 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.Embeds 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"}
+  ]
+}
@@ -1523,23 +1523,23 @@

put_footer(embed, text, icon_url \\ nil) Examples

-
iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_footer(embed, "Discord API", nil)
-%Nostrum.Struct.Embed{
-  footer: %Nostrum.Struct.Embed.Footer{
+
iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_footer(embed, "Discord API", nil)
+%Nostrum.Struct.Embed{
+  footer: %Nostrum.Struct.Embed.Footer{
     text: "Discord API",
     icon_url: nil
-  }
-}
+  }
+}
 
-iex> embed = %Nostrum.Struct.Embed{}
-...> Nostrum.Struct.Embed.put_footer(embed, "nostrum footer", "https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg")
-%Nostrum.Struct.Embed{
-  footer: %Nostrum.Struct.Embed.Footer{
+iex> embed = %Nostrum.Struct.Embed{}
+...> Nostrum.Struct.Embed.put_footer(embed, "nostrum footer", "https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg")
+%Nostrum.Struct.Embed{
+  footer: %Nostrum.Struct.Embed.Footer{
     text: "nostrum footer",
     icon_url: "https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg"
-  }
-}
+
} +}
@@ -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 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

+
+ +
+ + + Link to this type + +

encryption_mode()

+ + + + View Source + + + +
+ +
+ +
+ +
@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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

L2NdWZ5O>*MkDu1 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¬Ti1xEPRa~dFiJrV#?llmD4beuVn%!y#UJCeaJ^0 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 iT19}Hn6!u$LknCXAg1E!cQ*~%-mUw&V z7yz{4gt&ekeB%-0~_~eqtP1!wl0R9H~^2Ruhuu1rS&R zvAS!-6)-Bw;30ysUV>mrAu3UmbUdZ+PE+-eF-Qtl=DLo5ll>VolxU2B+=t5ByWJfa zi0UyFW+fW5yL*s`w>btf;s5p>wje`O9BjaoUWUvr?Z4kyR_q9la}@Sq|yCqMk$9e z2{Bn`46#nHa(UO ztBJ~1P!{vui|pP+;5kGOGi{fX>-b;&B+)EhT&XOs1!^|*c%opeO-vx{{6vJQ$bZHf z?L%iP@OIU%vEVSqMT;@_oRWK*=NO7+5Z#w(5Qu9gA96H=asUN+JZ_Q+_xxicW4S`{ zGLRKyS*;-q=S{Gg^52mK^lFSIr~{l_<4bx-1ezr&k%$_O(?Foe&50mI;mW)l#kG;Q z!e*(7{OpF@NXh9lp6-13px@J@3y-NkZDawWQ#nas#keHMnQ2079TAJZqr#@JK6+@M zEK@ZQInl6fR2LC4NqyD9nr-y#(jGUs5HSpQkm!)X6biE>#&Qq;u2Nw{oOk)Q~N?GU_c2gEg8NIn7zP zE(*Xk7?Mj{l)R?0KJ?t%E`a@D^Y}-l$HtuS%mCeD&l!C^?%Rh+O#V<$?R;-(6;mx@mNAMjNSe0t{?~Gn~ljGntq8q?0s-&$koj%}O_XO=hmvnCW*46U=PR zZahvj+m^2HL^G+bLx0!4F*5!s^p(-6sh}4OfL4!_umU5>sAE{wQvL(?28fylA22AW z+R26E_ig)lj}K}dcM@uDs2P4`Om-2B-k`WZmGf0JsYdYF<)6>^sR|Yu(ZkE*p1iji z?yQ}-(w^4%c^8IVXBPl@16^dJX6Gu=Yh09H7K5ocv z`msrvafT6-z48)hF6canl5WB?D`P)mhxpEJNLp*0G9!y4L|SM&*pKj1Uug0>hW}1u zs6c648bC*?+jmeKvr}ezh`FBSa5%S5c&@r>JzYLcvTOTuE-t}xn+!gf5tI)IbA)p+ zIn`_L?PsGzyY&DZit_fTUdJRz^k1%qH_0u94G+2-$gg<8%Sx@&K2<5AWvqujt zN|((Obfw8wy8K`Uboe}YFZpV9CV=~NGq__V0AY&11}%<`qyEO}Y5<~8R$L$p$BIgOO7wM?>hDT1Bbz7MtX6Py zBf~)_EpjGEzc)Q|JqOra=xh!R1XB8_iFlM zVKJKhEWY7>mV{%e^oJWu1OAVB{NA7!)&9+%40U2?nHV7xd@M?boJJORBc@4W03`+p zLkPmq1YqYL-0*w0SEtC;_mw5BhfknWjWz-Mq9Xgl8Y=A{vN6#CVYk)b;J5&E0Ex70 zbWPzDt|=ugUBO*!NtS447An^~m-LRP%IsHhYdZ`)yj?YUWU9rvR3sp`WSmc44 zFEA1v6?sypXcrYUuuis#L*`*n#o9VgNO4f*yzL#_(l{8Nn6&SD7BV(`K5`%qr^yxQ zI6KxOdlmtm&OAx_kajv~lil+oct zlfTGH=)s4<$BXk68koP~^wC9D62$qnCuqmObNK}KJ9NvSR^|kFu%hlGj+Iweq zZb{$9D?j(&lfV%;J1^YrfvE#+o7)zSFuP{#zdIDRC$k&V`w|~Uum{j-VnSKewI`b( zK2}P;*8gZ>s|{`j@-GFS*BZssy7(v61UIP0ZEb+Qvh3`L50hEg0r0)_f|-~!rc&5- z6gK3mHFV!T#{9bbdce}!eY^*jE1X!4u0Ve_QP_33dY_7?v#4?7<*Ut3Wpd! zmv0~-qC$g?qmBM2GEWl&`zjLw>QS`Cy;#Ncdj)jS?p@6e3Sj5(Y=)z@{oXuA1Poa% z<|wSOPjRl{`E;zXGmE=&deIsrn;K^YQ;%t0R)+LZ;p^oEPxAc(YX5Pv{Qm#}6l;4w ziHO9WPU1Oc~86HPB98K0Gi zid>_Xl%%@xM4WvKC@1fWq<%!Tk*S2BxomgNHnvRob7(Leot@7~_YGa2%sMQG9UZwksx#(&KDv#*P}j*O4WKk%5`MvF!{r{g~F@1@&?xkR#H z8kBTtn}jgX7&N~VSvG)~y)2ywq3}D5 zHm!bFQGsi-S0D(3aKdz&=nt)TIgU`XyK46|X;q5;7;S~(UeoO9o10j-W4QBTc+|+n zk>t-x`R;BJeEL}C?ac_Tm|U+wxtpIBV})*F({T%u$$|1$etf#S;@J*#Hvih22l@-P zafW80Nd!|Vii&`kh+zS=F+N})h(v`d6d?HS zfXYVd#StW0I&CSF%3LL1^r0Ay9U0SIO{R-#ef|y zzZq+!pKQfGu9R*CYQR%BVX0Q&)k0&!;WRhWi|uo6T!Uz-rk;PdqT$0yXw7W9DXw3O z+v$&nLu=AT*RBeG&ShiTm!6GK=ue*yQL=W2@Foz06#P)%yN{LNC0)u}tSwiLjaDDj9bd!FD)!8W8xh(74k;=AJ@g>`;+Dj`ryZ@+$(^f)`s7^qOs`j@L zcS+T|8Po&T=?c`&a&R3@1c_^SCjcCIx&xUtM~H@GaR{fTkPUf-5m1V+|N8fO>P<+D z{^--MtpwakM{9wU9)6tE@ymN3Tb|uh+URiTdvI;Ofme7uxi7lgF@V$-Pp7Pv^wYYX*Dt$}Yg}0q$@; z@W4@&-AYFhz0MHgg6k(9}wx~73xsh(4+O5t!yhvSKqV>eGLPG=DMe5$ua4~1d zE=|YAcpYCL6f!>xITJ_;yo*ij?8=F~6p0hNuYHQu#VQ%z&ET`0v1Q2HqxSVxd1h5V`%J>hKupz{2L^OH*ed@@$ za^C_8{sP?y-0mvCQEsZNaG~;P>-aPrp(<`)G7z?3hLPrOT&Y-iX7i)UjL<)-z$_J~ z0~&WI4>LkzvPP5v+YJ?kIOx+t7MBSY5+e;3w+GWX45Qp(X|XF2nQv&g(>`;$c(`(- z=`ef)2c!&Mc@|40Fovr9+gbk!Rf?gn&|I9>Z>_MS9{l`2aP0p_3`42<0mVev-4@5x z0bfPvU#V4X=&cj|r_ryZu^>t2IKA6(lhCEvP{QGUnsxDtM-4yeABf#~Epx{UN)0)L z#F!p6okk=i&OFCQT!?G?g$fJ+@72MYuH?)f`W0pUIL?W+<_lfR2yS*LhIbff_P|WS z=q%QA3_Tcr#tXUiIjFZ z>514_L3p}T!NQtFIeKA%5N%;Ed%&SjmrMgyyJgN+m``3&WedwX_ILuQ7v!NT=R8tG z%AD+E(F*Jnt=+nOelz`n_Nrh)8gLApIyLi`Dx&u^Ai)sO-+Wf)>L+3O*irm`EM3L-dN;t~KJc~d)A@E^FR^jf!YbecA%?w1M2apy5F+oxrgPhNvQ?R!?X z-Yn2#D3$6^ANOMm45qe$$50R}%PZTat{rdiB*uXQDS9$6kkQ=PI(U`ncw8HKW*_`L zdmF)U6!)Fdbg;-x7EmMof^*~F(_!MCcXshb#6;d?;v|vIbsPa4aflN(oC~hUlLSf3 zmT!~VH}dO6n^~ajg$!-XS>p^Ity1ygjo3Y!8jThbCjAE0%BYRpOX@{+%+?;Vx`oAD zFG|CP<{QdnpT^b(()EDDBw5T=gZ0`=Mpry9v0zYJaBCf&QpQGo-@6hIhixjU(M<{# z3oVjG^AQb4yzueb2{dUvi^v?Ai`>lgsJ*+2SO*U92_ir}}9< z8fIIIv9SIh^7jdS#ZcF@SDJ{k-*<;jT_~>1mtP^Xl@M`1Yys&?UosVIEIl z2!~&A7zePyb^L;l$TW5QEp!|%bo^p3MfS%K{}^Cts>ai}AZIesiSb}fbLA6dTQnx5 z%s;ZA>6|SUAoPYK^RQ@{^Xx7}qOzDJP{Ar`AtD*c0R!aGvu8O`3T(P%oSk&MQ?n@y1<}B;z^}(3e4HsvHYru z+4cvu+)hL^y+qypj{Vn%!SV{R)tgp~Lypf=_$! zB2JwZcON`~E`B+8B{AhvybO_?Il|%1JUGA&f?7%Im*|9a>B*AQnJE;r(Re-K9^S^= zVMpfuK(@^eYM+{1tK@DJu-ev}8vo5j3OfnClxVkSy9QVUcGy4?r4n!~385>(#i^x` zJ#r#tr+-~M(=F}55H?8qDeKc{ka**{9flp@wb5H*+5>DK?ZE1#Jy4LavLB#hknGX-FZCmQ?6qDAb z_c0>T`~y5ij3o?cRy%Dwk4@nlQ^p7?Ag~DjqHETuKf0|nGasBCLF80zH6qO#jc9-V zi|kVAw<+9IVnnEE`K)P1YWa!2EfysWOE{JP?q8WkBKmDz#AK;kRO|13JFg)(g7jzn zMb|%pc^56NT&~}+tx~&CJz#(c+}bA?Q4I!A(M~71~8_xaK7|%VCN{K>7zI{c03+bIyOA?P^LOC+=Ogge9t!GDjxhXg~2P?Wf>dM z5B)$|NS$?dMmVqH*7id6T34K?I?dA<(XG&N1|@;9BoYGSRmk*r|0Hb|OjPX>ij*{g zy*BM1FTys4we^FAiU2OjlKcZ>!Chok&{=4Q=RuW&`<{tB3qkgw3t(%EMKmGsl-OL3 zZ-LjfMCF7S`R7MC$tyiHn4qN*IOs^yzAE?WWre86JmXT*CX-mRc^)N%%#ytB=*ZUt zl+|IkQS~FG6}*K=R106nyMkiv(U`+2d2Z1oCdP*nf#;l;ca~R=FT%t2K;(qG<^9B~&IWJlO>cAcTnqizL<+^Z~QKfuz)cnDkVUuBmZ^a!q7j zXi<%)W3Ln&BC4}^)sO5br02#(jm$T-BX#J~_gLh21r=8k%lTk+OHSDcSA;PgT!q^N z>yYSLgv*djQ!LdI(wze$l~k8RfQWft)FgGF%}tB1ns$6T(y)avv%xqpeQUVFdkxZ^Gh z05-G7M&YcEg*HShGF^Vn&l~2!+b=D!pBS4R>j2W*KW^pA>&Z~atefo2&&?SaA6opQ zhb!w7r*3b@E)Q0g4_3T8m(QP>G-2^{CQD2c4b;peO9T6Q!-LJr`=oM^{e}ycX82py zMbM4f*n$}dO@0K>P*j!li&dq^s80D^n+!yBjWp&$DB~c|1;4i-2@sr}k>4358+*!E zHUPN9)W7I4@tb2=*;?YiKL1jzVP|z094af$A67F4S@U21OSl%I^wdcrTyvTG;u~rK zyuygSvhS3rW~9$Af3Nn9N0vN<)H&7;(@@D6V7Yv0HPSyYm5^9BqxM~EwAzSaf5xt+RH;fUN?Kf00nbq)m$ zpe!yvx(4D?Anmli@!TIoW(ki+H=LG-;lFLu zXUV~`)U@!ouAfxizkN;6lEV}X*h>r5h(jipgIS5sMB~!%>vJFr+xwz=#JxhwKw``= zWqA;1K{Fn&dkDPY#sG_wk&CK@bWackR8zk^id^VKw3zyb^~>+4y)EbOEk`K)8EyyI z`^ChX1O@ZX5=D{9P*s4_hWHlr#3o*ly?s4QqdSpH(+?_+q{-WLLUV|OY;580EQ~a?!sVuYTBt{&4x_@mjD802oV=ZU-5I1KtkEZ^>?(bP_7pF6J_(v#2^M@^_U7fd(K_Ww=WTeUh+iA!b!NFEWIq;0sO>qjvd@$f>$6|d1bIqa+Qcx%IeQw743 z@U@qdA_%Zs|B^KDG0T)DY1G%SS>ccwQTOX0mos!I;@C>gdxlvJT4W+EWN%czP`+v@^bn~R(F-PjCM*66=c{qBw_zCen z{n!{fvg1V0PpS)Zq|;<>^<)&}x##JBC4tV=N0Y;-)2$YT)x6&K>9ad^v-jUpk~=OiK+9!nsrG_%rT8V~tWT`Xk8zBoi3a6P4XN4>q zb!T;>!37d98?>3dstuii`kwdJ(!_w-6M4%vpv1>bQ+SEE!+}!=n_trEL!=luD1xeJ zx!fFJT~{T7P~F$}9w(7%T8_)$;JR`Txc2xMXWCO@?~@kS30{0zZX_+D5T0VOaSM$0|Mf*Dn4fYvQ{om~y!)f=O;&%Cd&%`i{@?s+2JaxNl)iu;$}CY~N(32rH$f z43`Z(EhT;_==UCG@6uuT&T4fuUjB2-5|%07sP(;rYYLsR?wz7*yQdq|fE9Dn{MHq- z#eew#2mVP;uK8Z)vxw;m&fB?jZEK{EB(@>^UdDa;0RB|h8r}-djUmJ08lAe+5$)!1 z#isYX-OSGi;Icd0-r9F=XpD4=G@6#XK8+5^@KEnDETIJ5nU_dxpdllsA2Yl~3ejb` zPtj~avIw^D@g8w|K`rxI^dX!2`ro-;W5afX1HtE6oq;Ms7D&3Gn#2`Gd=)yNK%x_x zCDO+NIxuAzO)-2vL51%0_`kvalEX2J<5n*r_4@`26|h4zWHu;)piCJ{+jmI-+n3TZ z7&97!2_C7?SB6{90P1T^8DDrdYU1RSuBb;SVNlA`-S7b>PplqGF%qkD-l|2r1+ms{ zr-cMOG>=6r15yrpz&ydjrpD3Y8ZSt25<7Vy1N0-}htckSaCdiich}(V?j77+8i(NS?(Xiv2_D=X zZh!ax2Y21ogX*a0eZ=%t4SK5L4_2DXr2YoSmBrF1*+|cq_ z#s2osG2B+Tnc8H9k!!38V19t+(Cq{4W`U?fkAnw2uw{(OC{^&-JLvtxa8{7-*u!Vl zUgB|G{v9h-Q3KM06VAmU1hgE~=dDE|FM;|DEqg?5?o|Sux!JBp$fH`uU`8O!IGLvC z(|1UmTLYFFLx~Qy=a0{G0Mt1_NMcIKL(A6Ft4=;c0j-`2m>Qw1LTWHTPAkhSa+d*2 zF=h;t1pi(^u_CFJ(Z35>nN&8!*FqfHRrt7@bmifR;k77kHZ~l4=qI@Lb27JT9#IUK z%@G16wZHN&-fZ;*JS^nIp9kUQ2l+9Qr?6W)iGY+Is3mBezf}SpO*p{i=>iZ8+rG!= z9*5dykn>#hH=!f4(F8=(|Db#RHTWDiWLE(iUn}UvR5|uicK)8U<ABuP3JJQXfoP zLIscC-x!AYYBPHa_cy{Zp!bo)*X|U{+(xAGz4S8Rn$s^+6=hNYavCQQN};PHOQa;U zHh>a>{E1xRkupQ)_S0z?y)MNvtRoquEu*oU-H+qoO~8n8Q%*D{p|{byZ_AM)w*I+6 z)t!B48Pv;Z#sm$y`CmaPYs6iUaEr@6zE^e- zZ;kind$-3b?;7Eb{AKN>U0_#B2;f)xF>ty7sXiOzn0Wq1D*0ze{TS?ldk97aMy>e+ zMz$o{yD=MW(EYeCxUIZ!z-uvcunAY#U!4YOoUKsr>B?5N^^g|g!%z2!n_1pBLev9# z)f{Vr^^|B>A)e`gg+CQ^pFW-KojXxkPsb}%Hht4Hmy~PIezhPv8qKP(EqRVe85?$8 zMx0W&OOvbSK+bTUXK}X#E1GiJNlY!rELr6F`*MD@v*g#b;}#JB@6$D%PS{OgYh#+r zmx5+#2^e{@=bI4Uk9KkYbC1}T#XEQn7~lb@QW|XHoyE1Q?S_zFF|q_NfYT_N5o%I2 zjO*a`kwP-v<^wjT>?-+3a^=Ae(#y7vBZcUlabjV)6dqS}=nS|Eu*Y>+5g!;84@sU7 zJofu`2mLPm+NHSfv>j||U|o{R3UW0W7Sy3%G&x8#edx;M3YL-B3=bi`5|x|)BK!dE zFn7dAo-?MX7|>X^F2;V+Y+LQ5lLKvb#P#3OhdzkRKZuZtlW(H;1T5=;eXeZqV#Dm^ zIB>aa!yKVv=&O^ z4(ROApKRfK4;WX#JgLClu9DvYNlmE(z-!$JGCj2>^OEDSW57C9qe|pW@AXgk5LhW4 zNovuFRxZXsnyU84jcW^`MYzK6aAn08W$4=faA!NZ3>n_LPr2-|{SboF+3ck?A%~ziD#0_WXeDY3o;4vB9RFSyHPS`>>M(W>m6JcgEf> zFda1UU&(Q-(@GkD0=9k81=!~c2i6xMwt zns}+A_H7snjIHv_Pmise&DkRiP5RFVV!DyjUh82ak;bhutkfPjq8aAD7(@JWzf$|gNWJo@^$zX^+=y-0mkm4{}PUEY0^ZR~8er$K~z zi6#Aq`b*qV%0Y|?^8+e)21vGleaA1a4PYST15?bV49y@>nWh3rQH?hs|GGwA>3+r9 z7XuqRsH<;#GYUG!#Xr^d*X(a_qBVc%{V9XDi>;C;LSm&-EE)p7p+kD7dBmgE$TXLs zL$T}DPo#ZLMC)^7E?GKeS@FHhNc3=_mJQqECMC`*Tv_Dlj<|QZ;hd29=e>R1*GrhsCj=TV~j+ z_Pc!2izWlBvl~E$=gf^+!XY^yI^A2Dk;B0oe)u(NQMEyr_!mkxND+0vTTV6=&IUE{ z;!cToioRMDIye~XKSjTjMKZRM1hsNCR%;iOSFm9GqJDCHn`H>1Ju>G0V;?cx~D}eVyBZo51evmSAs;%y? zD#fcW3o-!3F*8I&pcaF&m09I#&%S zV(32&yF-B7o_HXkQC3<{*6I>}%oU zp24fpW1i2fffr&b)5!Lz+joNVCf=@~u7`qYo?=d)w)&mZ2Z^8K-Fx zFwd+Oj%IxYn>-L*Ht5@m?N>F^D55GsNeemn8OL+vu0JSizM?|cpGdeXxpazkH$4mJ z>xxy_*+l*!Y770wS;QlX2r?EpqqN52OnxKqS3YLG;v#9Ybjwrpw|*)%?B;L_AxprP z(@*#$m@nM!sh|KD0NR%nsu&Om20#e(5!DQ=No%94{x5Go^S^m}M|*kU7&WS2UkkAR zGJiWE(AnA|ARhR&xyXNpJSDU<1N|AAoVUHdvE~qc-OFzLRw0hAijt)ZdI~8GE{&IF z8EgHckAnH7p{>Sn`2Pvuw-t$fP33geJ|R)nDW?1{fIkhq!37EH&o)c-6%C1dYI!$M zm(Za7>cB{z2&dU#R;0Uh$~gZ^3-}&t?`dgTA&o|pG7d&gr^7eY{fC^+%(ETuJ%|`& zGxqpFZo*j%-g}U8FkCJqb2F{?@bU0nfQ(rLcR8jGNT5jcAoCj+?-jqc?DLETBNb)1 zaley6=mOW$QV^P&uafI!3#%&CFxWI*YfjWW^O>A=SuVbu@Cb5;!MZ5w+cIeA`rp@T zp%KCu`C8NOSE&`t^?{;tCuhojg;{8>!>eOEW}UphRlZ00#fN@jP`r73)5@~>uMNRQ ziaTsHJ%lFqVd)o){mM-$cAe0~yZ{$b5ah+}B~bXLNmPIl@IH68Gj5v~U4z@df}q|# z2=ck9noqZe5Fr!c&5YWxJkA#ZumeuQ${rzWuiD6x#pGxb<)j#3srQMJ#CGV3bl5qJ zkkP+>54~gRmE5%I4PrCWL+QlKLz>aFl=c%ufg~ujA6rLeQXsG`jjFG7v@f6cc|3VP z0Itt14J|QZ5mtv)b6iW&tRhAkM$Rz_?8`!w?0vhTPm|GcbZ~<C~S(ZYyA( zY5qCk8sF&2E`|-SZ9c1GogTTsgDvdOD=?xj=~oX+VVXqDq%UD%mZ@^dmYHR8QiIc! z9&PrJU!9!f7o}c)^Oyt8RV&fs)~acL7Q5)PAobr0$^u^(vOS#?t2nCxNq0r1*1 znbUdf#De%vMd;@OHaNvgs?3^%`4t1*?OUW=?JsgRq7RXQ5wE2BH)D*yOZqglyE{_8 zG{Q(NXu)4Ob|0|uj2^Ex4e9tiZoLEA7wdYtyAtl{r8L&_x8sqg@GXL&zu(S}R< z`=9b&_Fzifg48OSS!HZ>UL>Wr3=&AfEBW%&b4N8izv`Zer6MuQD+)JimtV&IaBv+v zOpPO;7%=#vYMVC46%+4zaB|dSoRL1DqqphPhVPJ}owa!obC zw5+N~@Z4iYAy(06#1D^h;ekQ{R$iec^*OHIpq60SBq?cdd4$I<_Q)-@QgPV;+|rl3 z;?7gwNr)Ra0PL?whtI6+QIlcgXQETKtBtj0Zs;74cX#iZrqNp6UaliF!7Y&g{yagE zqFu}qmL`1POsZznfm43}H>`A7p``TV`V_tC9ev6A@{E7VMM3WqqQwIYxrPRk47vZ< zDlo)Q|E3QZfnD=IQMWWv{7diOvB|#gdeGysY=Z~;L#20?H`X^i>%Q}BlJC}YdDnfk z*gfmpSi@*Bb%Wvcg{RBFAC7P=72*fPL-IOl{;|YWq96T!q`#Qh!%bO&{q~T)YVOmG zwZew36Th$;6>(S;gPsiGRd+;yhM{y{gOsLAahSHlJhz2bN_p!3#I#FU>FFSEfJM88 z-DN&`TXN-5McaSwJlS8DxDqVeD7DTYaddQ37Z}-jWo9fuFET;|Kg*6N2`GYxTn4Jn z@@<<6(D|HPXnV4qi4qsE3zGBrOvLW1lp?;Cq_52=%Ji(l!UY)gw;^x=m3laTLo=Gc z4#VmrpCa_|TfP67 zf^LgyPiMAcd~(QFqmOPBAPe!#5f0$pB|Nbwy%sWc6C*DT&mNow2D`weSWpBB1qa4rq z=<}ts*x68Pn3N?lqZw}Iw_q79P6dfQ)MV9j2Sq{_8?iKz(vV#NCCnWqbf-B-5q?Tm zY?rN+`wOawJbH9smOXlhRh~POL5Y9+a&ts86J~9aV)183OIFJ6s^&Ch&Z{jVzJV?(Pq z>e;-;$ca=~mGd{UxW5Ld`l!BFo-+4rF9k&6{RDzSm|riliL5$U_sOuU$ix~-WtU`O z=v-nKEcGOvJmjFq$Q`F#VXF9qqsQQRbo%RqL)bPJP{rC?;`Jq-vO_M&Os7t8!sv|a z`5^DE?jT%t{EQRB8Kknxu+>7MEYaov(ZuJN@C@wMDuUF|03v9$-v%|xI*{;d^OSM> zlXjd&hHpV-XaF8yT~kL#OAEiN1RjL~X%|INIL<|JL&M(LxxH;HN7htKS4_6~=|!H^ z`?#a@LOZhcw$}<9E}r0E+FH?VTH0%o3fx0h*?Rhyj!!$}vt}+h_nsu>+Si`Rzzzoo zeBDeKT|PxYdu-nb)yIXy;gReL#0f_Y|ZD7ZIv1+I~LwHznuN;L|f=iqeqg<(40iFUW3#uu6@&4`{Q(Du2 zLP35nEkYde@tNait9 z-CpIsLd!fC&Ps@v8czh5C6tH&p^^g8>H!`IxA0-1lu7BC0-66ZUl$=wkERzV+mgB> z7BnUO@m4@#vib<2)AvRNWn8q5_kTfMryp0c=q63!LUIm)RU$D@H_?X5Rm#=%Yg!%$W{}C`3u~YWiEZT6m>##Kv^>Z$ zrDEIsgt6Vz@{@4x3Hw?uGj#-+iH;cca+_2lX=Vi*sNh4n{o3#EXG9$tqhpx*?=b|W z%sOj0mV`0H(w63})gC$7*4$Fw=OkXY{+XpjdZTmHq`dm+E|J>lX8;r2A;e!5mj1)u zVf)R?--WHXKdDVJw_b7{bw&bFHy>^J{1c^6i-^$V7QXxjm`?yGElXXRWPCNqY_z<~ zazm&Bf#}$1Y(<>Gzu~Zy-mj#Sf@&#X$$fP){MiGN2>)3b6<9m&G@(u6lFE)_Rvy9% zJK&-@u9{Mi&nmbMSR-RvWU;`ozcZIWY0c+wA^G_^`CZ>Q-~C;QIz64JNQ{UMPnIbg zLGmt|EvyZ|qy6aqRXC|iLZdh_ood0nxU8W`3w$^0Y6n60|ArVD3^8QgGqf2WdM7RW zSy#{gHC`|(fC-`4E8j9TerfReGCa8nA=L{Vg__bUe*{U6fnrnJ7=C^2!_^eCQ)VdsX@?!E zI}l$Bn>2ERn$cIa*`9UTu-aqCAt!hsxZMheDJv0dRGV_-6%qLNbgm%_E8IIuk&gh& z@^@`bCkh9&Xv?%rvrm?e`g`i%vXa2cX~BnHMsej+T71OKu7=)O8id7!Q=|o(&h^e! zUl3&YdW$KR+v%SgPQYW<(a4e;d{=x~2bq*1`YYm%N%bXEQm7O5qpy@qTS}3v@`~EfSG8H&-CGAn zVvPIXor8wQDsg?O|vNkPv8sx z_HvB9bC{}D;6u(P?MtqM=g+l*RA6z7Kc#ja*ASsp4sqfvFOA05M;K~laz34omTxZ$ zpB~t%SbQp=`$5u24qbCu`)mZH@yvPVfyiFAdi1(1+zcB#3JGHd0p9lDU)E@V9)IbI_cmJKO&4W9N!vMO>Br@G(G2R3|YfVJ*$o+6Ey z6p>}oH~A;FBAwixk~YX}?i|YjMgI7(wP%7b*?2RT-n&TCKjNA#+d5VSj%x0Idc2NM z_C993e6@z3-&qi7+EbekIj$UJT)Xv&yL`^964Y1adG41l>(NyGC#bFZ4=68h#X7xN zaadTac9Av&>WKSv`e*oBgQW_qcz3(l_qp>}7R31aMZKrz8MYh<3ECk9paY%y$xVZn z?4pqA&&x&ho0eqe26F~g&u~1<5q>9sZndqptq}**>SNp(azC{F6v$;QgMr3m=4lcz zb_G;h4nvtfvm5&JBLreQ`&%>H!m^2Rw6ysm|6!&Wg^D+_l;lD{;ckMSAhVenQgzP} zQIXo2EGFx2c*BwB*HqrW;|F5BH0j8120sn2c>I8YT8M~_|Ek9%Cz0x3)kbzMCLReT z;8*ms1Oc*-D8U?XLh*ZkP`e>79tt)+z8F~WaPvEz(@tI)*7mYmA{4(cc+G*fhbFjVep;zeM ztXFP`mfrjv4$7ImF|=sBs*14`P7*N(yp2!ZdUknqu$0$|8!4N{oX7m2I5UCCVPpsT zNjR_0fzUVx2Sqb@m=gSegNidT6bM|7%>}y`j0*4d(pRhy_hA-f-)Yl`AfDwckI+t< zO+VDhv7Sf7K=nOR%Rm>5l$u5MfJ&rZqQh`TUZ-Jfv*}m#OuTckkXYwb9C?U|_TV3o zJkX-yd(p&_?f*`TM}7KgrnVS3zM&>gL2>al!N;)-Bcr@WlOB2(^O|Q4*RG-j5*vg2 z6D1uCMxko%F1(@0KsQLp=;7a7m?p!U9iXUP!tf7?K!$-LR_`%y*F-xN1BuVRzZ<=gH+vpE5i*;)EW$th+oh>E{(2I!6E4S6zo zeOEopyPh_ySP;k=M1@UWofQKxq01stDQsUoqxj~?ukv{E#Mvhzml3F$j*1lIcDiYg6 z9kvz0X;WZB-Pt`Foi|x?Vn)1NkcMhlO7ppcrOXl`iA`c=;$LDsNcL2_+M2kg9O-aA zq1Pt4s5cs2wsd1pMMhXA&P?Ajdb2>>1v*e7M8s>>b2CkKc{ULmgu1Q@WR)?}m zW1V;P(H3M!3czLOHIu@kbPV1QRAuw#j8E#D6TW@i{yPwLOUTszvfRN%=u?Yffwld~ z0>4H$H1teJ@YdmC4eBHX;6aLlR!IT!K$mSF-Hqn342qZv#WoFsYMjKexiuYF8~9+X z=^c&gz>df9@g~PtnXvivq4hWAIuwnXV8ODh9bZZ{+$n|DPB^7~fXDnhH^e!CQ0x!>A7zy>H&#a>f6@ zjqfxjR)m@~jnnLX&n1-#xaP$@k--LwP6(lEgZDCrS4BBY{7ddv-F045A!#}z-@p7z zehF3-tv4QBz4|)kcJr4lqtR^3JgR=%aYnciN^bRwVZrk0clYvNX}**rCaqMr+{42opfR8Bil_Bih~ zK%3&Hu%!m0^!cq9gSo zdy7dPiWFn52qso>qgeo4fy;j-&rpBRE@LJteCE-f0g;yvF*IB>cvu#MAb$0bwn zg9?RIut+B84vhn$JZB-=&G6+e-^bGtWIzc3LfV41C;>E(Z7pzAfUl6y6Zu;lAT(+~ zJ){6=m>R%~QPej7)h()I9dAP^J-xV_N=rk`<`jfU0~iI)JRpHT58vbB*7O-yt&L^U zvCarx<9uE_x(X~L!#X5=x-N_wo(xM)o|~}Zi;u>C5MZFm7gT;^n|k#<61w~b4jw~# z#a=hGJi-k;zz%kINV7A#0Wm*F&ta{uD&uP0XXa_g#mIzJk zx26;-Uw{fFC`cUiQ%A3+E<K1WG zUaOv+ub)PHAVLlSE9|oipT(!9o=?72xZTYjn5k|sbo65{oM44Bmw2iPyPbM7Ydh^- z>Y4c1AEI4mfA8y(M2(G*js0o(tD{y&kB9FYA#iYwTw{YWf1iHH^P6dl%i^ESYR*Ro z#EeX|oj!r@^h!DTH=vXY&eC@6o9+MY%h>*}WXXR9+*p2`3Xx#;XBx>Twl?ouyR8*G z+Wxw^)@V2aNI{ zAwjjFc?ye8z>Enc`0noh*o=&8j4sQ<<8E*gAT@<~(3G9$+4$P*K4fp!9eVXvbyXegogyN7f{IiDF|gJr)PP317UpWI=Qq}zt|wkGWNBf6 zPcV1CVXr(5Kq?T94HeahZJH`d2bf0+5g~Yus4O)CO`V0T_7qc_0f{0L$lf-7P#yiZ zqU@op2Z*N#Q!&)LX+r?8@2jW!ixAL&dVh9|Qh^)4>3pc0JFPO;9Gzpa5k?%i< zcifNXWWQ%HKk?>2@RJdi$ zW48IYT@W_CVhpjNZw#f1k->cd1Q%hf1C?2XK_p4UWn9%sw%_wA^sdy0?EM`zueyF+ z;m9_y>E_(ts&A+j?96Fn5PM2JucqIyyI`x!h_JsW14GfTxWw4Cw17eVr*dEJe#ZDh z!c~Ru2NtlAi4 z*I;wK6{pP8OJYta+Cn`uzZbCeY*Whe=c7_dxUu}E zx-B_avJ3**(YnV}4HFpA%AC~A+s5VP<9&bFk`xuSa63U_lb<{qOao)uIGY}tWtB{Z zv%qF%YQvD~K-8}-Vu~@s@}Z5}N6q5Tp_7{gq~lB)LNRr$rj?wLkTNrpO2##_MdAzD zhk_}di>9w5S4Rq&$Mi;O9EDRirHRWdXheUH7$a~$LfAsJEC5=%G0OCpF;A7wOGPUM zs-m$}qVyTr8tj@t5{`e*5DE=SQHf|m_sCI8&~pw$`<7pRqnE&PlW591#DigF@RKfY zacx{JIpCf~QCYxRS~7|E9J(Z=j0GTqf86`iMc0~+a@NRCbAWK)h$rHsY3eOKiDkWv)H0hl@;j8%ZKksYp`H<$tiE2LXwh5cAm?s!(+!L z>1XYN9ib~vSho3npTWY*Al&SlW1i1*YqQb{oB_}-QH6q80w9F63~6_KeDV5v?(Wgk z0^A3OsJaw<&|I;j&7L?yT!phzRiCc14E_A41J?C-W`N6USPAfOPuwpwxZ{l( zSi@7C|JE}v7F&7-H2hwBE|%U2yIwd?mRf*pr-+hnO&V8v9m$}`w$^(61GJ7;Syrkt zL@5nLEZocqb>pVFZ&}}=ITcaZ1%r6l<*Tfs&O`|wF}fV}O`H8n9BJxEihJ;d1%lt| zf7bz|2Z7s*rzx5P2ESlB5X^>}^t#$~*WV`RmGWP6HG?*$(xKvejua1$FBd3BzaSj~ zb+m-lc2iUz5GO<*4L>ElR)xH36SAkm85!VZle2McCQ|;;pMGBl;WS+-)QA6bVHP;h z+0sNlbJ9On)gQIb$-WSDI&64?{l!Bp&kF1)_yN4F$=J=5o=w|AwXZn_97&X1ZhiVU z`&tL*GBIRuTUno{D;HdC?3B9R1#6mon$L`5>wrXB=~tkOR5s?r#hw-ML(y&j#-?El z0tr$`4S1s0&Zx?*gw)h1TUu#m(&6Y;uFr>sE+>5SGoj4ruvymRW`2n}sE4|a6wm4J zlK^u*IoQWZGhUhRq9a4B3r9;7Lvoz;IDu|$Y0=o-UU#~i^P}=+uJrC-&Fz=fE~MoK zR+le-Fk~nVPd*1DWnlA>)iZd8#+so3$FLoL$6mVKX=Y`YAaJ#x4=8k8KKcPqT5DGB z<6gR&xB36|UC2*1!&i0LuU`_T_hjOx{Q-8|-x%SPzMRNX+%a-^K6t4TMP^5mfxMNJWJ^CgJ!m1pH z8_u8~uMlRQ8mMk*;D{G90%NN4PsaM*Tl-gSVJm2!jQEXgww`EMTc>Qbw=*@7zwZxA zxXx5Eu}%~6E7nQgd@&%_jTp|8mRS?Q<|-|U$U4GhrR(>YKt0kKZ2}&zHKBAMhT6%D zAW8{>OxAZ_eCt25P18$U2v}+*LzRS4bZ^qe?RjMTBFw^h+FT~anC9U1UR1(j$t7z+ zpw0ivnaSH*t0;3g@Ud2wimSI5%E&9_d7G+Dq(&U{!3rP)URa=r1}8HHs&`v&mO7(W zEJ;3?a51(_EI9&fAhIxU^**PMeLzaO@*dU)+#YQgJ)u2y7oV28M@!85U@;Wn~x zv_Og(Ipxm=CfcZu`{#rN&)Lw3c1=dm|J=^Vf~>w!-fEZ$3Xduyb9~^VdpY8FDd8+u z;3X4OnlQh~_Q;Z~agspR&@D;Fk3Q5=vxr`InPWljS7z^XYK+U5_y;%&^KN8M zE#wbj4D4fJ1Gmz%dJ?oTd_4AD>N34k?IEKP*pPID6WOavHyXM-(v+V4KR zVI6f(SbD4EoNXLMI~Lh{UY@FkvQn=GI(Y9VI&N-z{Z7bluk{VZ(d~cs*R9O5ZE$n< z_J7$k_5S$#NAak{B58%d4Onr_H}+4*!Pup-!nTn zTXJYgKtcACNMYeO*vvfa-Exvk&cK?C*11Itv<`FiJG${v-SVHM9oW*WEvab)I{9EZ zRQ)YW?^meTsGpxwz0ihiaNiye+OKhRhQx>L!WuXZ^cf5kIXK6kSHsRE4NueJx^r!P zPMy6a{rwk4(3n1{V{A=&-v+y^m2CdHjdBKQ&qlF5rmu3W>3hEB0fdVfq#Ac{&-z7@ ziNanKi(N-7!^4h-dxW+y!u>!9aD$~mL?SV>#jQ|ZN)*-RG9sNn^Gw4cb%ZM)=ctw!VKIr`EiNKew%a?=@ zWIouQhZ=Zv328Pc)ndYYCY@EgR$l))<|2cZq~!3&P6M>%zSSrS>hJArdDGRR%3w>*`E&t$@?5RuIor9&sOE$4);*=DMT&RYZ0k?6Y z5w^Ih4^;f)a#23Yw>5T_{8^t-iTY21 zt;H&0vugYpGPBuu@mReG;EG1XFk>*E{gu>uTzKBRgU_^XOXA}z&dtf(UP)L`P~TO; zGmdkMJavJvD-##rk01Q__z03gL34A*wfOvN4nF=EVwPxENprh9V~%%EV|{yleugx+ zw1GuI8kN_uMlf?L4uIc1_ij!O7l|ufh~^#wV4lXaN9NzqiYdQB4#$djWn_Na^S)Nm z)8(P}GkboXHDrI#ynMy{{|XCQ|D!8_8Ng*=T_FKOS0Tw0^qU*N2ZZf-^?5e}*6ty7 z9-IH5%D|Z83KxfZs)t>8xeUy+LDe?=--28$TS#Xcru9Ml+6uSD=Bk_ns+ zqj7}x%@NS$wVh8HtljM2=l#{=H854H0POIAI15(XCqqCIz(+jTUk%-+gzbPS*O~_X zA8x7lPvNryU^%FQlJY$$Xp`cU4zo>B-(U_BT(g2D5BXv4C_ODkZDKhukn6F~)_ue5 zo037&TaHRsDmd`u)`H-kzZ?)3aTYG#0G)Z&JzoYmp#VtGtK zYmcZOIy`KeI*gOp3#ujbFS%x)ZKXdpacWKC6Hg)xvOMT!5ZLyYvc9{Sv<&O?6zgPi z1DZ?iB(LhMFIkUa0N)nkzwApBYsJbTUCL4@tCa}xM7#~nO@PgdM)m(WP8xdo&FtDUaUul5z$XW&a@~Azdecw=I#kvr$SXb2s*3_ntSDd1yti3$1)xwf=K%wg(pvx2 z^d}2Pc?dO4sjc5SRCb2087>TV4VbgQ_7qTdm53Qin}P8|pd{>4*td;BpjvM8#8`CQ zC4KUkmkI!trO)i;K*+(-Lf&LaFf%9QmokqjoMN!@*l8lWLLP=!%KOO4%iGZr)Mdo= z?Y$ez&Yjw9GAi`FtLvlBpKDNljfwBuWBXjedG#g8KnxQSOjUaS*dp2>1d{kax#HKt zbE+>{pFrdBLri*i4jD{Z8ho>dEzuR?HoQ& zjhg8RMO0jwP(;$=8s{i1F$p@>9P!I;l|Kr{cvkeHof}|qGBDY zE-aRq?k17OnKD`#tfq?;qB~dJzv7%@P}&TqYH&oFivX1oAvMe<%as392?nW#(xq{h z!*`gN35^z3V=aRj$`p1?B6b$ZzO1g@s-Vn0d22)&7mX6Sk6|bf2aVHKDU-4JYzFUy z-?U-b=4HIbLCX%pBM@u8=8pp?6+jg6jSqy} zL9*B~5I`mvEbu%ArjD{nn-T=73~#ofdo8njt@*Qhe))9&dFlFUQ2U20S%q=+2vC&K(`$jOC>d+kGGwk`1bY)bW@QEi z(Zo2t^N7XuD*4-%0J-LNj*7i*k z0~WllWLKD3jaBcQtpRYClDl=7S6+6APc-LUrDhm{*BOP1cUST zg5fky^e){aB~Kq4v7CB=ob| zKn^yDGl*u34cfSmA>R<<3u3StIKZRo42)0^XAo6^@n!y7%+*m2h^;8J(RPu)(iH0{ zE+cTka@DmKSj?bpKhVJ<_B>9ji`J}SP?r#KYcXrt)o)kiV{fSa+S{NPbkc+O+)uWc zvB*OYs&s<~if;NiK$nk2Nq|p(e8w+K-#J=%ARZ155Mv~4m=t@%!ywjOFuc{>!N0#K zC7u>-&LH(Aw!qIX8wGDDXUQcL1F^#$B|ON6g>rs(%m1_zvEQFSnIGd8Zsn%Eeq-rF z<`gSr!>GjB1Q3(6554n`;h>06Z*s%&#Bi?Xc!CtFW__<3|F|VT0wk`Z#wM3r!bSeA z0yfqy2qVe9LeB2+oQTQ}+D;S&=q9L(#!8y$G{LWhwGzD?MRH#Qg>FDy8IA)ou{@il zIwyO3=PT|H7UL$JoAh75@>srFy?Nesxmxuj^>-rBb#5Itd1&y{$*cR0noi$KIBHSj z@$((&`7DPDE7YC?>}asACJObLwa~Vm1<|7hE2|S#bLVME zX*CV0Zngj5<=n*}eYlau;IoX~dd3r(Wz(K>(M&MvnC*94QkPK*TX6jK(p(8adUjz-E+M;2?#x}6kQkONs|L@ z-pTLR?+BTqN7AQ~G@YP2$%(>q2Yyd4iFdc9-14qOGBIUj`t3tPz$J8lKRFo`Du8#d z`0>HU&Apb3`A@Qn8-O;+ZNv&X6a%mW^H3tzmX-|&38vWOr6ZQ3P0&>M`3GuCtUSNp z{nXRobJM9%^1r8^;?~KWj>LF<8-T6%DXTiBP*Fl=(1jx& zq`0i5f>?(8>hLds7o*|!W)*v$>|+Zds4$%5%OB&{A1s0XMtiz$L?{(>ey=Peb^96#`b^#k6VecuToT1+GWY%sw8 z#w@+tx71u1*r>hrZ;bL8V1FO|F}S#A*49Tm>=$^K>*gHK7m?4f0!V|7&qq;X5J;b|5g|}ltZS+SNrt4QZS$u;H#g}|=DR2pH>=%aFXc2mU z8pYJN@C+wMFZf8;^(_}PBw7NiOzp2^MH!*2)a5K}M{|TR-$TQ~y0)0kV6W{nmHGl( z1=k1(zJE8klX%}UyvpCM<^x_dcJ;s;*K1tv_FWAfJAUpw-}Zf65zB7rnm8W?r64lV zt_3H<8&9T&9s68{_;RFut4jde3iJ>E*7@J8sm>-J^tE?B)8PK)&^KI1*5`FF6j>85 zXU?ggFhk>*5_+L)qn(MK)9vTz3peK(Y4r~g4966+kV~){IuErTA_Qjr;?%vBBo^(v z^+ImRxb|r@X7IQsK4mQY6Rlc^S7~azF5$7snCdQ7B(w$_rhoH5ze_hVI`MK3$<~=_ zrC(k^l|kHDAEnnK7z1F$AL7|G1HJdlFqT@W;)9PJF@n16qVMG@N5EXW&?tf_ zTCn_AICVP7Ydny=xx35x=&cPDqhIz=In3e{$9$*GR}X4?wl320*JqtfY=NY91gK3sB3^3(b>^e}XK2A$s>&*$Z=F??xO|9QY_(x zc`y70y!>u%?%q}ix3Y44froXPfplpq*bw+CqKv{OxVd!`_PDuQIx^IM$a5Y!Ono&2 z=9NDOjE-S)Nj}fE+)pp#M%(7{9$}m>SRp~Yg+Tg_(ZK(LTD3#I9voImGiUZ4>;sL$ zO7AkfO-PhW8qXWv0q&v`z>wxC&!?C*JYc&Vm5@chK_W95uPMoVTN@GZy&Cle@9_^Y zc}kOcc!uf(w{g%Rylmu|n>mh|~yLVm9}o~!5D*|c zBLHVf*n%V&cKzbmGoet$^W(!2y?Pm#sL9 z9pbA8YX1O!uFWwc%2u{)5=nMZiL6joNiwb^mBx*hgobe>qj5#q6s1r} zQyD2Cqh!%eQO;KH%rPJ3JGF>mryfiT2qL<09k7EN_ zzehIo2236c_SyI$RlhFv-P?zn!(DqPzUK^P?cbDg#NvxQeDYfQVw*W;ke_?~Q1W>e z$4h60dw45c@2^a$U14m(=DsM?^?sC%;3^TjE$_*jDdBC;&$n2$>)su{W_x*dNXFGK z0_&1*MeW`9`~9ieHw)FbrCqlz-q9@Do;3I|2Q9y}QGNfJ;DL~=(Eyv3Fy`>aCD#avt&As?{&umk&?X^k< z*j{TaIgman&_M}%E__OW`ek*L@ZbSgQ@J8LV^N2z~Pbk4b03B>|-Ll5yzK~c*`@YYRNf2K59qFOXg$y%?S zyGYV4%`9B!ij}>#l7!I8>$%%Yes#T;ua7iZn0L@XyzWE5`0ip6xx3OE-&z&A9G*KiaXfSlI1VS1wD! z`Oqg|8AQP1oJ*IC~Fz6z^MHv$j;CvxLtzVO`y_BA0RU z3I8oh50l|1`r9NY*q6|av5lbWcxNl!lS4&?QsnW@y zexVG{H}}$6`law!V2oh>clk!y9!h5PXddflg~?1Y*`2pbgNoV&gmz^I1 zQY-Gj<#dMp%_dSaDd$M~S8uAxZNpqgQ?XHz*Bpz#88+l(MO0rpC=^7#D7mi5(cZA< zL72K4yM8NbyE&=rjkYaz(J@saU$Dl--7c43uRUg~T53s=TGP<%FGKu!lkVA zBQEL09KD@fI!gCu9UQs*0@ds7x370OCiT30mG89>^JbCR9EEHrm&Lza`{U{1AXC1o z&}5Bo6UVa3a^#KpmzHibF`Z1WMdy@eQeI1SPwZAWu`jYO=4~cfqAK9+yNCH9<=kuX zI%=0(eZu`-v-F|z@#d1>vv2Qpm*zPAQOl~@ueIgW+lrsx?xxgvy_T|6U1@hAVu^UD zKUdwSyz?as6i2^qRWx4ybC30pUEU9kA1|KYU#BC&Z7y=P07=>>s_;AEvu}Nj=tStQ z32us+Q@ObAiL9N<+vH8QEpK?|`E2Zao-?`fR?7cQ=^9w(dkB@?lU;N;KieS0_r`g_ z^H<=nhrhH}(A8l`tJA-8pZD%JLAz6bObkx8cIftIO4SB`h+Zc)YqfH(v^%*f>|9H; zwXX8++((CNfBEk-*2s@EjDB)xTWxBRjMTN^uO%atcsnJQNV&)ryA)RNo(*c69Z32X z9(icxO2d_vu^hwuLjC1}E#}M@*VtR~x#RwV5x0*|drYqD*NLW!dQ{$8C#~34nAxz! zQ05JH0V|J6bpOI5)yf)ICU1YW+U!Az?oYj%$hp2*&FFt-LY2XN%bjI}Z5FY5-d6Of zvpC;13$rbw7zvtrf0Qqp93S{FSrEQ=Z5kCjyu?Yoxx>I)xjR;>lZ2e+;BwjE>F7>* zl)d2mBe}euy=)WvcXIJr%zgU6nLUlKrY*qfRJBz!OaD^$p`O4U9v^cv$yXfx@L)xqu}GW^~mJ@8GR zV72L;Jy&H!6yAI{N}o5O;%ax|aneh+`{$1w5=!UoxIyAUvxn~P5%WBG_>6v4`M0Em zjszJA)(9b4(>}^;&gz156(t##4-QP+S-rK>mRE9qRhX^h*5Ns%ulzO~>mnYBWjrLk z7U8+IKTYg@Vx$Pi{n5N#k620A$;pXNJfasiOBn0*ii*#{IDVy6vw&jb` z?P71X9zE_})M|cZAB${vSbm^|h3I3u@TDsp*bcn9WSV^K;xOfCY57Cfj7O_WFAS#c zJNCSfm!z`uKv=QyTJ5L(^OwO-0t@6q5Ghz0f4@PcEBfM42Ub{TIr zALbAE5{0i-R!(N>Hg?vU8^|HyJ^>+qVH!JwgRp%k&}&mKr;Ayv-2s2@JbbCc%T>Qc zHL%2!=x&M#s|frag3w--?31^E_AA;K$fZA2677G31A_g+cZK@duOP8ZQ(RNjd7cLs z1VG2U4G1DkXAp!+GJ;>NwlcSO)QlhpZ17Xpo!)u>eE~U|+!NlT8T0uNg&@!L89gGjen!85knk`va}6(yri|Ml~hc|ij(2E!zl3i z$2l<>aAdj$4#%tL8$Kh@A0n{BXO|ZU_6rH$#$5EHk;MAX>45WgSqLOCFQR}804a&(4DDm#QE z8Xl1+gyM*T)+RlW@fZpUZ|C>P$l5j?Zi=h5C#K?M1k$QTO$)ER?lWezUUAct;Z zG|I6z_lW@{it#!|f5cvz!F{%E^9$dmxo!J~4SrZ~D#}Mt+s$<-@X0v@VasL==&#RM zbt)=NAa37NR-bK&Aah(1M2_wlnlssxG1=4Te1bED;<~qtS|LcA3!|oPZ6xey2T7LT z8vzA$Lk(n%m?nbE#tDg)VfoW*{umcT_9ttEhWIo3r!clp$Q=@811Jeyi~dkadsZ^M zgdgUbh6)fYtqnvXt}I0m-!%v#P3LKr3I$=8(@s$iTn7Kfp54unjj9$DaLb%y5H9j_Rf^xA1x`urm2;u^^%)==cCxAJeL&dP&!feFC z7Qf|eQwq+rfh56WWuntqwKx+j_L1+{Z^*4;sBXOTvgc1@^-65B2ucpM%6RR7?stis zF;oNE(-?LZ6(V4xJ?Pdq`cV#3E0-_n9X=;-$Q8_F>x#HJ{H8oI6euvgiqY+$Z7pz zqu7XzEiy47+5^V7eFdX_@suenrHYM<^hp+D0fDoHt=j$&R^Chb() ze|5SapvlnC)#xCto#vkXi#F!4@e|@u>)y}73jyz3&FC4I>=~2~%gSeCC!mKLl*|V} zstQyb3={f8CFNY5L5W4TbXDllRG=P1a_Z6W_{zavFnB@9K6~51s zVMS1cAGE3cYZ$i)-GM0-vmasOB}8>0#rMkuv?)0U#(vW}HjN4XViO{?-)zH89Q}F- z^3H|CFgZoo*fAepc1euP%g#>Vs+~jUd4hpQAa%8IZZ$Ie!>%Fea_iiYZP_hiT?ajMmwAf}VF^0|hhb50zBn zHpS@^R8-VK7tRHw54>qY2WXkz<2fxVB_9I7U==V?XRM?L zDeRbbF}pHzKibW13wZ*4Uk9ekBAipwvZgo{Y-u4XNRa2NI`DN2#^83?lJNeox;VuV z{eMAJwQB+p0YKz&qS*4L9f=iRVJ9vh=NdEOEWtDj=)(ANU0U>qxIM?F2&Z@>=7X3JRP4mZIxMGi^Ky98y&_7tNi0cJ~= zUcMcK8jFEXaYCIR{0o09MrRRV+x4~@WdO%ROT>2<@h5*_;_xmHy={a*5YNN##*Zq| zX6$S!DvbrcVkcq=*7?CN0TYL<6CXqGmo#iXW>bm^6FQQ!LDPkGu-Rd-b>intY&Q+l zCfH@a{qQq)5VQyM!xOsi|JcsIsFdI zhA#l&l%Qc+C=?|5Z!TI+U^v!~TnDhA_4c-Re zU_sb_7t(23YfI&&^CASrZLMm#9KcV_;3vGn^M&ac7nUi_!A)SZv<70wL1iA;uJDOo zCr)EkF?U4{9s(A}*&|Pzy=$Q<;)|J2mWF8&h>U|;Y3qUDfISSF8~ve@Pz4$xg&o)D z;K2GTP~z~EekXHW4HD?LF(X^1LT8CPzG_fk_Z|>w2I0U@3KiWcEX9U{9eZ+($(;df z{oK3=KotPR=K^UF4xNQ9uw>%a3${*c9zc_9fr*3f$Bo7_ycEGlpHFs$&=$^Y=sE^; z57FX3WI96$Vjh)DT%_T<<^eCDEU?kwYbDoe3dIE1a1c``&-ua4MwW{Ym1Vgw`e>#s@9g}%&dfgrSd*qMh)@^+lYB)vIg z2pD&cb4Wal0Fh|MJA@`r>|8ZESN}iDQss&s$qEip`>Yt3sPu3eD#d(y-<&@?bphC? z4pQ-LOD1ay!_@ORh^P4sPKUQ-z=YxI0)KKleqkExu3~c7a1arkd<7Yk4yOkEn6u8E z##UFO#DfO+u~WtYAnhs~sPIY#+Yl0-|U1*z7cylRZ& zRK(Npp*3Ku3Enu2X;;H+lC5RpjKfu^l_O9*;0(Ml!OAINi_Er%Zzli8xx#JBQ7<3p z#)D@VSB>0iTB?X)4cweO%%fL0e((AbkbDaqgD;2`ul}-F*DaJdQGc|N?6jbvw!t=q z?`|@$|6$dKIfzHq<%vEr+OXz`gSmLQXZrtP@84!37xC}EeVD1vb4UJRy?%2Lb=GU_ zEmMT)r69|=bPU1)W5!pQ9UCXHzs`yEcutc$0lvb|9gj&mD@VvA$3fAxg^;oZ0*r?Y zeFP)bqHx?P5 z@D2mJ(Klr@ zQ1uL*RV1i;ciS!-2^eMRYZ#+2o=wMubeL~n6tz9^wy<*&)N++un^X2e2z{$ptHmqpT+GL;_M-q zaxn4baUyRuOku{3+e7`rA_BJkS9`ThFK*}sgHJ%8!k<&tw9sBb8OwT%5-+H(pEyZc z4skUH24BBXUDKFgJ(E)O74B7j4=x&nF@b&WEt3Jyf6KbO~i-fHWp;fwWq_f$?1-WnJu511d`( zy8J!ahe!yr0>%M88J}8Vrj01ERAuz!1`)X2-c2BWEu#^l*sVq;Bl20iOxiOjmdlVu za7v;-RFbLfG$y`|i`a|iY_Z9yfi!Y~ZV6>Zf2br!2h8UMDuSJ8VzQJeMoZ6H2>bu? z91_F3#}4c17~6mJlR*;$;S{j062=0IANoTj-A<*!;+R)6le@{>_hHm9z#>6i{7Rmg zK8-zXMv0qz)WRnPlYmXaeuhsg_p{TO=`$vi#3!Kjj0eDC}x)TiS z6=B2#%cn8^=S(oGAH~JlfPIH3;Afs*B@J7E9e<7z54ij{pFX|-m@w=%__L#0^)zPR z#6^t4hqGA=e}QfJU>p8$qk4yi851gJ^p~^OW)R{7?Falwf2gGW53tuSPz3^UtED{p zIjF`0XG;)6f2bstmo!2a+tSL!qEGgHd?nEBC7=ZG-PH2cG*&;%McfVRU$)nYK)3$@ zDXc`7MN5z+y;GRJm6Id$ff{A)w}utkh@t}{nleN~MX_IPC_nRoYWpKV{x=xe3!NEX z1ziZH-SvmXYDBn+vD3B9prnAMHE{CA4^$<%|Dm&~ZA_+AspX#S+riv87;f+{{h^Y$ z1?VjCP`h8_?lDccZyNJuJcivDo5slPOe(0VWn*{2FHa>Ne2 z?Evro+`?G!ftvrYZXHallzf+av=Wwmvna;P@RR1#toL?qUgnV@p-V5m1fBUoXM7$d ztozGiT3eauoE0UFt^PY1(_mKGlpxHbh?`iNCQ0F57zo)M#MlUm@-U%pRFxp;0Pic) zS5O&ouz=x*MBL43N9^xGMVOmaSTB-$6U-Wbod>`6mEHTxVv;>fde5?Llus5=RWgv| z_$FNQh|UtXiu>svYj?oPn54kCRXaVSVSC8v?@cv73L8$~9An z^na`r4BveD54br3`}GDTUYjv~KjsWVCH-#~=JS@xH8{g}WX=H4@arS7s<)`7sQn6d TnED7(4gaW`B1pn+6n^!8uwk%| diff --git a/api-1.html b/api-1.html index ba49da259..3cdcc06bb 100644 --- a/api-1.html +++ b/api-1.html @@ -16,7 +16,7 @@ - + @@ -156,14 +156,14 @@

Sending a message

utc_now = DateTime.utc_now
-atom_count = :erlang.system_info(:atom_count)
+atom_count = :erlang.system_info(:atom_count)
 
 content = """
-UTC time is: #{DateTime.to_iso8601(utc_now)}
-Atom table size is: #{atom_count}
+UTC time is: #{DateTime.to_iso8601(utc_now)}
+Atom table size is: #{atom_count}
 """
 
-Nostrum.Api.create_message(msg.channel_id, content)

4JZ$Vq?MVhgM_Wzstk26Ux|@!+5IVE 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

+Nostrum.Api.create_message(msg.channel_id, content)

@@ -172,75 +172,75 @@

import Nostrum.Struct.Embed
 
 embed =
-  %Nostrum.Struct.Embed{}
-  |> put_title("Craig's Cats")
-  |> 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")
+  %Nostrum.Struct.Embed{}
+  |> put_title("Craig's Cats")
+  |> 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")
   # set inline attribute to true
-  |> put_field("Field 2", "More test", true)
+  |> put_field("Field 2", "More test", true)
 
-Nostrum.Api.create_message(msg.channel_id, embeds: [embed])

You can look at the documentation in Nostrum.Struct.Embed for more advanced usage.

+Nostrum.Api.create_message(msg.channel_id, embeds: [embed])

You can look at the documentation in Nostrum.Struct.Embed for more advanced usage.

Upload an attachment

-
Nostrum.Api.create_message(
+
Nostrum.Api.create_message(
   msg.channel_id,
-  files: [
+  files: [
     # file from filesystem
     "/path/to/file.txt",
     # file from memory
-    %{body: "test file", name: "example.txt"}
-  ]
-)

+ %{body: "test file", name: "example.txt"} + ] +)

Reply to a message

-

With a mention:

Nostrum.Api.create_message(
+

With a mention:

Nostrum.Api.create_message(
     msg.channel_id,
     content: "Hello!",
-    message_reference: %{message_id: msg.id}
-)

Without a mention:

Nostrum.Api.create_message(
+    message_reference: %{message_id: msg.id}
+)

Without a mention:

Nostrum.Api.create_message(
     msg.channel_id,
     content: "Hello!",
-    message_reference: %{message_id: msg.id},
+    message_reference: %{message_id: msg.id},
     allowed_mentions: :none
-)

+)

Send a poll

-
poll = Poll.create_poll(
+
poll = Poll.create_poll(
      "Do you enjoy pineapple on pizza?",
      duration: 2,
      allow_multiselect: false
-)
-|> Poll.put_answer("Yes!", default_emoji: "\u2705")
-|> Poll.put_answer("No!", default_emoji: "\u274C")
+)
+|> Poll.put_answer("Yes!", default_emoji: "\u2705")
+|> Poll.put_answer("No!", default_emoji: "\u274C")
 
-Api.create_message(channel_id, poll: poll)

+Api.create_message(channel_id, poll: poll)

React to a message

-

Using a default emoji (unicode representation):

Nostrum.Api.create_reaction(
+

Using a default emoji (unicode representation):

Nostrum.Api.create_reaction(
     msg.channel_id,
     msg.id,
     "👾"
-)

Using a custom Discord emoji:

emoji = %Nostrum.Struct.Emoji{
+)

Using a custom Discord emoji:

emoji = %Nostrum.Struct.Emoji{
       name: "emojiname",
       id: 1228698654022434866
-}
+}
 
-Nostrum.Api.create_reaction(msg.channel_id, msg.id, emoji)

+Nostrum.Api.create_reaction(msg.channel_id, msg.id, emoji)

@@ -252,11 +252,11 @@

Update the bot status

-
Nostrum.Api.update_status(
+
Nostrum.Api.update_status(
     :dnd,
     "craigs cats",
     3 # Watching status
-)

You can also update a single shard with Nostrum.Api.update_shard_status/5.

+)

You can also update a single shard with Nostrum.Api.update_shard_status/5.

@@ -264,11 +264,11 @@

image = "data:image/png;base64,..."
 
-Nostrum.Api.create_guild_emoji(
+Nostrum.Api.create_guild_emoji(
     msg.guild_id,
     name: "nostrum",
     image: image
-)

+
)
diff --git a/api-4.html b/api-4.html index 8ad919640..5a10c7279 100644 --- a/api-4.html +++ b/api-4.html @@ -14,7 +14,7 @@ - + @@ -147,15 +147,15 @@

A lot of methods have a banged version of themselves. This is a common Elixir idiom hailing from Elixir's style of failing fast.

By default, the API method will return a tuple like one of the following:

# Success
-{:ok, msg} = Nostrum.Api.create_message(179679229036724225, "456")
+{:ok, msg} = Nostrum.Api.create_message(179679229036724225, "456")
 
 # Failure
-{:error, reason} = Nostrum.Api.create_message(123, "eat my shorts api")

A banged method, instead of returning an error tuple, will throw an error. If +{:error, reason} = Nostrum.Api.create_message(123, "eat my shorts api")

A banged method, instead of returning an error tuple, will throw an error. If successful, it will directly return the response with no :ok tuple.

# Success
-msg = Nostrum.Api.create_message!(179679229036724225, "456")
+msg = Nostrum.Api.create_message!(179679229036724225, "456")
 
 # Failure - Throws an error
-Nostrum.Api.create_message!(123, "eat my shorts api")

+Nostrum.Api.create_message!(123, "eat my shorts api")

diff --git a/api-reference.html b/api-reference.html index ce0f8d97f..dc9805103 100644 --- a/api-reference.html +++ b/api-reference.html @@ -14,7 +14,7 @@ - + diff --git a/application_commands.html b/application_commands.html index d5611d70c..8cf6a53ca 100644 --- a/application_commands.html +++ b/application_commands.html @@ -14,7 +14,7 @@ - + @@ -158,37 +158,37 @@

is in within an hour. Guild-specific commands slash commands will be available instantly, which is why we will use guild-specific commands for testing.

We will create a command that will allow the user to assign or remove a role of choice. The guild_id parameter is the ID of the guild on which the command -will be created.

Our command definition looks as follows:

command = %{
+will be created.

Our command definition looks as follows:

command = %{
   name: "role",
   description: "assign or remove a role",
-  options: [
-    %{
+  options: [
+    %{
       # ApplicationCommandType::ROLE
       type: 8,
       name: "name",
       description: "role to assign or remove",
       required: true
-    },
-    %{
+    },
+    %{
       # ApplicationCommandType::STRING
       type: 3,
       name: "action",
       description: "whether to assign or remove the role",
       required: true,
-      choices: [
-        %{
+      choices: [
+        %{
           name: "assign",
           value: "assign"
-        },
-        %{
+        },
+        %{
           name: "remove",
           value: "remove"
-        }
-      ]
-    }
-  ]
-}

To register this command on the guild, we simply pass it to -Nostrum.Api.create_guild_application_command/2:

Nostrum.Api.create_guild_application_command(guild_id, command)

You can register the command in the :READY gateway event handler.

+ } + ] + } + ] +}

To register this command on the guild, we simply pass it to +Nostrum.Api.create_guild_application_command/2:

Nostrum.Api.create_guild_application_command(guild_id, command)

You can register the command in the :READY gateway event handler.

@@ -197,46 +197,46 @@

Set up a gateway event handler for :INTERACTION_CREATE. On command invocation the interaction payload will look something like the following:

%Nostrum.Struct.Interaction{
   channel_id: 474025345243414539,
-  data: %{
+  data: %{
     id: 793152718839087135,
     name: "role",
-    options: [
-      %{name: "name", value: "458692275199803406"},
-      %{name: "action", value: "assign"}
-    ]
-  },
+    options: [
+      %{name: "name", value: "458692275199803406"},
+      %{name: "action", value: "assign"}
+    ]
+  },
   # ...

Note that Discord already converted the user-supplied role to a snowflake. Convenient!

Let's match on the retrieved event and create two function heads for the separate operation modes:

alias Nostrum.Api
 alias Nostrum.Struct.Interaction
 
-defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "assign"}]}} = interaction) do
-  Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
-end
+defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "assign"}]}} = interaction) do
+  Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
+end
 
-defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "remove"}]}} = interaction) do
-  Api.remove_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
-end
+defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "remove"}]}} = interaction) do
+  Api.remove_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
+end
 
-def handle_event({:INTERACTION_CREATE, %Interaction{data: %{name: "role"}} = interaction, _ws_state}) do
-  manage_role(interaction)
-end

Okay, we now have our handling code done. This is pretty much the same code +def handle_event({:INTERACTION_CREATE, %Interaction{data: %{name: "role"}} = interaction, _ws_state}) do + manage_role(interaction) +end

Okay, we now have our handling code done. This is pretty much the same code that you would use for regular commands.

Responding to interactions

-

To respond to interactions, use Nostrum.Api.create_interaction_response/2:

defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "assign"}]}} = interaction) do
-  Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
-  response = %{
+

To respond to interactions, use Nostrum.Api.create_interaction_response/2:

defp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: "assign"}]}} = interaction) do
+  Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)
+  response = %{
     type: 4,  # ChannelMessageWithSource
-    data: %{
+    data: %{
       content: "role assigned"
-    }
-  }
-  Api.create_interaction_response(interaction, response)
-end

We have now built a simple command using slash commands, with argument + } + } + Api.create_interaction_response(interaction, response) +end

We have now built a simple command using slash commands, with argument conversion delegated to Discords side of things. Further actions on the command, such as checking permissions, author roles, and more - are left as an exercise to the reader.

diff --git a/dist/search_data-6EB43D3D.js b/dist/search_data-560762BB.js similarity index 65% rename from dist/search_data-6EB43D3D.js rename to dist/search_data-560762BB.js index 341e34492..3a5973198 100644 --- a/dist/search_data-6EB43D3D.js +++ b/dist/search_data-560762BB.js @@ -1 +1 @@ -searchData={"items":[{"type":"task","title":"mix gh.docs","doc":"Task that pushes docs to gh-pages branch on Discord.","ref":"Mix.Tasks.Gh.Docs.html"},{"type":"function","title":"Mix.Tasks.Gh.Docs.run/1","doc":"","ref":"Mix.Tasks.Gh.Docs.html#run/1"},{"type":"module","title":"Nostrum.Api","doc":"Interface for Discord's rest API.\n\nBy default all methods in this module are ran synchronously. If you wish to\nhave async rest operations I recommend you execute these functions inside of a\ntask.\n\n**Examples**\n```elixir\n# Async Task\nt = Task.async fn ->\n Nostrum.Api.get_channel_messages(12345678912345, :infinity, {})\nend\nmessages = Task.await t\n\n# A lot of times we don't care about the return value of the function\nTask.start fn ->\n messages = [\"in\", \"the\", \"end\", \"it\", \"doesn't\", \"even\", \"matter\"]\n Enum.each messages, &Nostrum.Api.create_message!(12345678912345, &1)\nend\n```\n\n#### A note about Strings and Ints\nCurrently, responses from the REST api will have `id` fields as `string`.\nEverything received from the WS connection will have `id` fields as `int`.\n\nIf you're processing a response from the API and trying to access something in the cache\nbased off of an `id` in the response, you will need to convert it to an `int` using\n`String.to_integer/1`. I'm open to suggestions for how this should be handled going forward.\n\n**Example**\n```elixir\nmessages = Nostrum.Api.get_pinned_messages!(12345678912345)\n\nauthors =\n Enum.map messages, fn msg ->\n author_id = String.to_integer(msg.author.id)\n Nostrum.Cache.User.get!(id: author_id)\n end\n```","ref":"Nostrum.Api.html"},{"type":"function","title":"Nostrum.Api.add_guild_member/3","doc":"Puts a user in a guild.\n\nThis endpoint fires the `t:Nostrum.Consumer.guild_member_add/0` event.\nIt requires the `CREATE_INSTANT_INVITE` permission. Additionally, it\nsituationally requires the `MANAGE_NICKNAMES`, `MANAGE_ROLES`,\n`MUTE_MEMBERS`, and `DEAFEN_MEMBERS` permissions.\n\nIf successful, returns `{:ok, member}` or `{:ok}` if the user was already a member of the\nguild. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#add_guild_member/3"},{"type":"function","title":"Options - Nostrum.Api.add_guild_member/3","doc":"* `:access_token` (string) - the user's oauth2 access token\n * `:nick` (string) - value to set users nickname to\n * `:roles` (list of `t:Nostrum.Struct.Guild.Role.id/0`) - array of role ids the member is assigned\n * `:mute` (boolean) - if the user is muted\n * `:deaf` (boolean) - if the user is deafened\n\n`:access_token` is always required.","ref":"Nostrum.Api.html#add_guild_member/3-options"},{"type":"function","title":"Examples - Nostrum.Api.add_guild_member/3","doc":"```elixir\nNostrum.Api.add_guild_member(\n 41771983423143937,\n 18374719829378473,\n access_token: \"6qrZcUqja7812RVdnEKjpzOL4CvHBFG\",\n nick: \"nostrum\",\n roles: [431849301, 913809431]\n)\n```","ref":"Nostrum.Api.html#add_guild_member/3-examples"},{"type":"function","title":"Nostrum.Api.add_guild_member!/3","doc":"Same as `add_guild_member/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#add_guild_member!/3"},{"type":"function","title":"Nostrum.Api.add_guild_member_role/4","doc":"Adds a role to a member.\n\nRole to add is specified by `role_id`.\nUser to add role to is specified by `guild_id` and `user_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#add_guild_member_role/4"},{"type":"function","title":"Nostrum.Api.add_pinned_channel_message/2","doc":"Pins a message in a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', and\n'MANAGE_MESSAGES' permissions. It fires the\n`t:Nostrum.Consumer.message_update/0` and\n`t:Nostrum.Consumer.channel_pins_update/0` events.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#add_pinned_channel_message/2"},{"type":"function","title":"Examples - Nostrum.Api.add_pinned_channel_message/2","doc":"```elixir\nNostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)\n```","ref":"Nostrum.Api.html#add_pinned_channel_message/2-examples"},{"type":"function","title":"Nostrum.Api.add_pinned_channel_message!/2","doc":"Same as `add_pinned_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#add_pinned_channel_message!/2"},{"type":"function","title":"Nostrum.Api.add_thread_member/2","doc":"Add a user to a thread, requires the ability to send messages in the thread.","ref":"Nostrum.Api.html#add_thread_member/2"},{"type":"function","title":"Nostrum.Api.batch_edit_application_command_permissions/3","doc":"Edits command permissions for a specific command for your application in a guild. You can only add up to 10 permission overwrites for a command.","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3"},{"type":"function","title":"Parameters - Nostrum.Api.batch_edit_application_command_permissions/3","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.\n- `permissions`: List of partial [guild application command permissions](hhttps://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure) with `id` and `permissions`. You can add up to 10 overwrites per command.","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.batch_edit_application_command_permissions/3","doc":"This method returns a guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3-return-value"},{"type":"function","title":"Nostrum.Api.begin_guild_prune/3","doc":"Begins a guild prune to prune members within `days`.\n\nAn optional `reason` can be provided for the guild audit log.\n\nThis endpoint requires the `KICK_MEMBERS` permission. It fires multiple\n`t:Nostrum.Consumer.guild_member_remove/0` events.\n\nIf successful, returns `{:ok, %{pruned: pruned}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#begin_guild_prune/3"},{"type":"function","title":"Examples - Nostrum.Api.begin_guild_prune/3","doc":"```elixir\nNostrum.Api.begin_guild_prune(81384788765712384, 1)\n{:ok, %{pruned: 0}}\n```","ref":"Nostrum.Api.html#begin_guild_prune/3-examples"},{"type":"function","title":"Nostrum.Api.begin_guild_prune!/3","doc":"Same as `begin_guild_prune/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#begin_guild_prune!/3"},{"type":"function","title":"Nostrum.Api.bulk_delete_messages/3","doc":"Deletes multiple messages from a channel.\n\n`messages` is a list of `Nostrum.Struct.Message.id` that you wish to delete.\nWhen given more than 100 messages, this function will chunk the given message\nlist into blocks of 100 and send them off to the API. It will stop deleting\non the first error that occurs. Keep in mind that deleting thousands of\nmessages will take a pretty long time and it may be proper to just delete\nthe channel you want to bulk delete in and recreate it.\n\nThis method can only delete messages sent within the last two weeks.\n`Filter` is an optional parameter that specifies whether messages sent over\ntwo weeks ago should be filtered out; defaults to `true`.","ref":"Nostrum.Api.html#bulk_delete_messages/3"},{"type":"function","title":"Nostrum.Api.bulk_delete_messages!/3","doc":"Same as `bulk_delete_messages/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#bulk_delete_messages!/3"},{"type":"function","title":"Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"Overwrite the existing global application commands.\n\nThis action will:\n- Create any command that was provided and did not already exist\n- Update any command that was provided and already existed if its configuration changed\n- Delete any command that was not provided but existed on Discord's end\n\nUpdates will be available in all guilds after 1 hour.\nCommands that do not already exist will count toward daily application command create limits.","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2"},{"type":"function","title":"Parameters - Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"- `application_id`: Application ID for which to overwrite the commands.\n If not given, this will be fetched from `Me`.\n- `commands`: List of command configurations, see the linked API documentation for reference.","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"Updated list of global application commands. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-global-application-commands","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2-return-value"},{"type":"function","title":"Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"Overwrite the existing guild application commands on the specified guild.\n\nThis action will:\n- Create any command that was provided and did not already exist\n- Update any command that was provided and already existed if its configuration changed\n- Delete any command that was not provided but existed on Discord's end","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3"},{"type":"function","title":"Parameters - Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"- `application_id`: Application ID for which to overwrite the commands.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild on which to overwrite the commands.\n- `commands`: List of command configurations, see the linked API documentation for reference.","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"Updated list of guild application commands. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-guild-application-commands","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3-return-value"},{"type":"function","title":"Nostrum.Api.create_channel_invite/3","doc":"Creates an invite for a guild channel.\n\nAn optional `reason` can be provided for the audit log.\n\nThis endpoint requires the `CREATE_INSTANT_INVITE` permission.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_channel_invite/3"},{"type":"function","title":"Options - Nostrum.Api.create_channel_invite/3","doc":"* `:max_age` (integer) - duration of invite in seconds before expiry, or 0 for never.\n (default: `86400`)\n * `:max_uses` (integer) - max number of uses or 0 for unlimited.\n (default: `0`)\n * `:temporary` (boolean) - Whether the invite should grant temporary\n membership. (default: `false`)\n * `:unique` (boolean) - used when creating unique one time use invites.\n (default: `false`)","ref":"Nostrum.Api.html#create_channel_invite/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_channel_invite/3","doc":"```elixir\nNostrum.Api.create_channel_invite(41771983423143933)\n{:ok, Nostrum.Struct.Invite{}}\n\nNostrum.Api.create_channel_invite(41771983423143933, max_uses: 20)\n{:ok, %Nostrum.Struct.Invite{}}\n```","ref":"Nostrum.Api.html#create_channel_invite/3-examples"},{"type":"function","title":"Nostrum.Api.create_channel_invite!/3","doc":"Same as `create_channel_invite/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_channel_invite!/3"},{"type":"function","title":"Nostrum.Api.create_dm/1","doc":"Create a new DM channel with a user.\n\nIf successful, returns `{:ok, dm_channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_dm/1"},{"type":"function","title":"Examples - Nostrum.Api.create_dm/1","doc":"```elixir\nNostrum.Api.create_dm(150061853001777154)\n{:ok, %Nostrum.Struct.Channel{type: 1}}\n```","ref":"Nostrum.Api.html#create_dm/1-examples"},{"type":"function","title":"Nostrum.Api.create_dm!/1","doc":"Same as `create_dm/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_dm!/1"},{"type":"function","title":"Nostrum.Api.create_followup_message/3","doc":"Create a followup message for an interaction.\n\nDelegates to ``execute_webhook/3``, see the function for more details.","ref":"Nostrum.Api.html#create_followup_message/3"},{"type":"function","title":"Nostrum.Api.create_followup_message!/3","doc":"Same as `create_followup_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_followup_message!/3"},{"type":"function","title":"Nostrum.Api.create_global_application_command/2","doc":"Create a new global application command.\n\nThe new command will be available on all guilds in around an hour.\nIf you want to test commands, use `create_guild_application_command/2` instead,\nas commands will become available instantly there.\nIf an existing command with the same name exists, it will be overwritten.","ref":"Nostrum.Api.html#create_global_application_command/2"},{"type":"function","title":"Parameters - Nostrum.Api.create_global_application_command/2","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#create_global_application_command/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.create_global_application_command/2","doc":"The created command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#create-global-application-command","ref":"Nostrum.Api.html#create_global_application_command/2-return-value"},{"type":"function","title":"Example - Nostrum.Api.create_global_application_command/2","doc":"```elixir\nNostrum.Api.create_global_application_command(\n %{name: \"edit\", description: \"ed, man! man, ed\", options: []}\n)\n```","ref":"Nostrum.Api.html#create_global_application_command/2-example"},{"type":"function","title":"Nostrum.Api.create_group_dm/2","doc":"Creates a new group DM channel.\n\nIf successful, returns `{:ok, group_dm_channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`access_tokens` are user oauth2 tokens. `nicks` is a map that maps a user id\nto a nickname.","ref":"Nostrum.Api.html#create_group_dm/2"},{"type":"function","title":"Examples - Nostrum.Api.create_group_dm/2","doc":"```elixir\nNostrum.Api.create_group_dm([\"6qrZcUqja7812RVdnEKjpzOL4CvHBFG\"], %{41771983423143937 => \"My Nickname\"})\n{:ok, %Nostrum.Struct.Channel{type: 3}}\n```","ref":"Nostrum.Api.html#create_group_dm/2-examples"},{"type":"function","title":"Nostrum.Api.create_group_dm!/2","doc":"Same as `create_group_dm/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_group_dm!/2"},{"type":"function","title":"Nostrum.Api.create_guild_application_command/3","doc":"Create a guild application command on the specified guild.\n\nThe new command will be available immediately.","ref":"Nostrum.Api.html#create_guild_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_guild_application_command/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild on which to create the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#create_guild_application_command/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.create_guild_application_command/3","doc":"The created command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#create-guild-application-command","ref":"Nostrum.Api.html#create_guild_application_command/3-return-value"},{"type":"function","title":"Nostrum.Api.create_guild_auto_moderation_rule/2","doc":"Create a new auto-moderation rule for a guild.","ref":"Nostrum.Api.html#create_guild_auto_moderation_rule/2"},{"type":"function","title":"Options - Nostrum.Api.create_guild_auto_moderation_rule/2","doc":"* `:name` (`t:String.t/0`) - The name of the rule.\n * `:event_type` (`t:AutoModerationRule.event_type/0`) - The type of event that triggers the rule.\n * `:trigger_type` (`t:AutoModerationRule.trigger_type/0`) - The type of content that triggers the rule.\n * `:trigger_metadata` (`t:AutoModerationRule.trigger_metadata/0`) - The metadata associated with the rule trigger.\n - optional, based on the `:trigger_type`.\n * `:actions` (`t:AutoModerationRule.actions/0`) - The actions to take when the rule is triggered.\n * `:enabled` (`t:AutoModerationRule.enabled/0`) - Whether the rule is enabled or not.\n - optional, defaults to `false`.\n * `:exempt_roles` - (`t:AutoModerationRule.exempt_roles/0`) - A list of role id's that are exempt from the rule.\n - optional, defaults to `[]`, maximum of 20.\n * `:exempt_channels` - (`t:AutoModerationRule.exempt_channels/0`) - A list of channel id's that are exempt from the rule.\n - optional, defaults to `[]`, maximum of 50.","ref":"Nostrum.Api.html#create_guild_auto_moderation_rule/2-options"},{"type":"function","title":"Nostrum.Api.create_guild_ban/4","doc":"Bans a user from a guild.\n\nUser to delete is specified by `guild_id` and `user_id`.\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#create_guild_ban/4"},{"type":"function","title":"Nostrum.Api.create_guild_channel/2","doc":"Creates a channel for a guild.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission. It fires a\n`t:Nostrum.Consumer.channel_create/0` event.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_channel/2"},{"type":"function","title":"Options - Nostrum.Api.create_guild_channel/2","doc":"* `:name` (string) - channel name (2-100 characters)\n * `:type` (integer) - the type of channel (See `Nostrum.Struct.Channel`)\n * `:topic` (string) - channel topic (0-1024 characters)\n * `:bitrate` (integer) - the bitrate (in bits) of the voice channel (voice only)\n * `:user_limit` (integer) - the user limit of the voice channel (voice only)\n * `:permission_overwrites` (list of `t:Nostrum.Struct.Overwrite.t/0` or equivalent map) -\n the channel's permission overwrites\n * `:parent_id` (`t:Nostrum.Struct.Channel.id/0`) - id of the parent category for a channel\n * `:nsfw` (boolean) - if the channel is nsfw\n\n`:name` is always required.","ref":"Nostrum.Api.html#create_guild_channel/2-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_channel/2","doc":"```elixir\nNostrum.Api.create_guild_channel(81384788765712384, name: \"elixir-nostrum\", topic: \"craig's domain\")\n{:ok, %Nostrum.Struct.Channel{guild_id: 81384788765712384}}\n```","ref":"Nostrum.Api.html#create_guild_channel/2-examples"},{"type":"function","title":"Nostrum.Api.create_guild_channel!/2","doc":"Same as `create_guild_channel/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_channel!/2"},{"type":"function","title":"Nostrum.Api.create_guild_emoji/3","doc":"Creates a new emoji for the given guild.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_emoji/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_emoji/3","doc":"* `:name` (string) - name of the emoji\n * `:image` (base64 data URI) - the 128x128 emoji image. Maximum size of 256kb\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - roles for which this emoji will be whitelisted\n (default: [])\n\n`:name` and `:image` are always required.","ref":"Nostrum.Api.html#create_guild_emoji/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_emoji/3","doc":"```elixir\nimage = \"data:image/png;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=\"\n\nNostrum.Api.create_guild_emoji(43189401384091, name: \"nostrum\", image: image, roles: [])\n```","ref":"Nostrum.Api.html#create_guild_emoji/3-examples"},{"type":"function","title":"Nostrum.Api.create_guild_emoji!/3","doc":"Same as `create_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_emoji!/3"},{"type":"function","title":"Nostrum.Api.create_guild_integrations/2","doc":"Creates a new guild integeration.\n\nGuild to create integration with is specified by `guild_id`.\n\n`options` is a map with the following requires keys:\n * `type` - Integration type.\n * `id` - Integeration id.","ref":"Nostrum.Api.html#create_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.create_guild_role/3","doc":"Creates a guild role.\n\nAn optional reason for the audit log can be provided via `reason`.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_create/0` event.\n\nIf successful, returns `{:ok, role}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_role/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_role/3","doc":"* `:name` (string) - name of the role (default: \"new role\")\n * `:permissions` (integer) - bitwise of the enabled/disabled permissions (default: @everyone perms)\n * `:color` (integer) - RGB color value (default: 0)\n * `:hoist` (boolean) - whether the role should be displayed separately in the sidebar (default: false)\n * `:mentionable` (boolean) - whether the role should be mentionable (default: false)\n * `:icon` (string) - URL role icon (default: `nil`)\n * `:unicode_emoji` (string) - standard unicode character emoji role icon (default: `nil`)","ref":"Nostrum.Api.html#create_guild_role/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_role/3","doc":"```elixir\nNostrum.Api.create_guild_role(41771983423143937, name: \"nostrum-club\", hoist: true)\n```","ref":"Nostrum.Api.html#create_guild_role/3-examples"},{"type":"function","title":"Nostrum.Api.create_guild_role!/3","doc":"Same as `create_guild_role/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_role!/3"},{"type":"function","title":"Nostrum.Api.create_guild_scheduled_event/3","doc":"Creates a new scheduled event for the guild.","ref":"Nostrum.Api.html#create_guild_scheduled_event/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_scheduled_event/3","doc":"* `:channel_id` - (`t:Nostrum.Snowflake.t/0`) optional channel id for the event\n * `:entity_metadata` - (`t:Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.t/0`) metadata for the event\n * `:name` - (string) required name for the event\n * `:privacy_level` - (integer) at the time of writing, this must always be 2 for `GUILD_ONLY`\n * `:scheduled_start_time` - required time for the event to start as a `DateTime` or (ISO8601 timestamp)[`DateTime.to_iso8601/3`]\n * `:scheduled_end_time` - optional time for the event to end as a `DateTime` or (ISO8601 timestamp)[`DateTime.to_iso8601/3`]\n * `:description` - (string) optional description for the event\n * `:entity_type` - (integer) an integer representing the type of entity the event is for\n * `1` - `STAGE_INSTANCE`\n * `2` - `VOICE`\n * `3` - `EXTERNAL`\n\nSee the (official documentation)[https://discord.com/developers/docs/resources/guild-scheduled-event] for more information.\n\n\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#create_guild_scheduled_event/3-options"},{"type":"function","title":"Nostrum.Api.create_guild_sticker/6","doc":"Create a sticker in a guild.\n\nEvery guild has five free sticker slots by default, and each Boost level will\ngrant access to more slots.\n\nUploaded stickers are constrained to 5 seconds in length for animated stickers, and 320 x 320 pixels.\n\nStickers in the [Lottie file format](https://airbnb.design/lottie/) can only\nbe uploaded on guilds that have either the `VERIFIED` and/or the `PARTNERED`\nguild feature.","ref":"Nostrum.Api.html#create_guild_sticker/6"},{"type":"function","title":"Parameters - Nostrum.Api.create_guild_sticker/6","doc":"- `name`: Name of the sticker (2-30 characters)\n- `description`: Description of the sticker (2-100 characters)\n- `tags`: Autocomplete/suggestion tags for the sticker (max 200 characters)\n- `file`: A path to a file to upload or a map of `name` (file name) and `body` (file data).\n- `reason` (optional): audit log reason to attach to this event","ref":"Nostrum.Api.html#create_guild_sticker/6-parameters"},{"type":"function","title":"Returns - Nostrum.Api.create_guild_sticker/6","doc":"Returns a `t:Nostrum.Struct.Sticker.t/0` on success.","ref":"Nostrum.Api.html#create_guild_sticker/6-returns"},{"type":"function","title":"Nostrum.Api.create_interaction_response/2","doc":"Same as `create_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#create_interaction_response/2"},{"type":"function","title":"Nostrum.Api.create_interaction_response/3","doc":"Create a response to an interaction received from the gateway.","ref":"Nostrum.Api.html#create_interaction_response/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_interaction_response/3","doc":"- `id`: The interaction ID to which the response should be created.\n- `token`: The interaction token.\n- `response`: An [`InteractionResponse`](https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object)\n object. See the linked documentation.","ref":"Nostrum.Api.html#create_interaction_response/3-parameters"},{"type":"function","title":"Attachments - Nostrum.Api.create_interaction_response/3","doc":"To include attachments in the response, you can include a `:files` field in the response.\nThis field expects a list of attachments which can be in either of the following formats:\n- A path to the file to upload.\n- A map with the following fields:\n - `:body` The file contents.\n - `:name` The filename of the file.","ref":"Nostrum.Api.html#create_interaction_response/3-attachments"},{"type":"function","title":"Example - Nostrum.Api.create_interaction_response/3","doc":"```elixir\nresponse = %{\n type: 4,\n data: %{\n content: \"I copy and pasted this code.\"\n }\n}\nNostrum.Api.create_interaction_response(interaction, response)\n```\n\nAs an alternative to passing the interaction ID and token, the\noriginal `t:Nostrum.Struct.Interaction.t/0` can also be passed\ndirectly. See `create_interaction_response/2`.","ref":"Nostrum.Api.html#create_interaction_response/3-example"},{"type":"function","title":"Nostrum.Api.create_interaction_response!/2","doc":"Same as `create_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.create_interaction_response!/3","doc":"","ref":"Nostrum.Api.html#create_interaction_response!/3"},{"type":"function","title":"Nostrum.Api.create_message/2","doc":"Posts a message to a guild text or DM channel.\n\nThis endpoint requires the `VIEW_CHANNEL` and `SEND_MESSAGES` permissions. It\nmay situationally need the `SEND_MESSAGES_TTS` permission. It fires the\n`t:Nostrum.Consumer.message_create/0` event.\n\nIf `options` is a string, `options` will be used as the message's content.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_message/2"},{"type":"function","title":"Options - Nostrum.Api.create_message/2","doc":"* `:content` (string) - the message contents (up to 2000 characters)\n * `:nonce` (`t:Nostrum.Snowflake.t/0`) - a nonce that can be used for\n optimistic message sending\n * `:tts` (boolean) - true if this is a TTS message\n * `:file` (`t:Path.t/0` | map) - the path of the file being sent, or a map with the following keys\n if sending a binary from memory\n * `:name` (string) - the name of the file\n * `:body` (string) - binary you wish to send\n * `:files` - a list of files where each element is the same format as the `:file` option. If both\n `:file` and `:files` are specified, `:file` will be prepended to the `:files` list.\n * `:embeds` (`t:Nostrum.Struct.Embed.t/0`) - a list of embedded rich content\n * `:allowed_mentions` (`t:allowed_mentions/0`) - see the allowed mentions type documentation\n * `:message_reference` (`map`) - See \"Message references\" below\n * `:poll` (`t:Nostrum.Struct.Message.Poll.t/0`) - A poll object to send with the message\n\n At least one of the following is required: `:content`, `:file`, `:embeds`, `:poll`.","ref":"Nostrum.Api.html#create_message/2-options"},{"type":"function","title":"Message reference - Nostrum.Api.create_message/2","doc":"You can create a reply to another message on guilds using this option, given\nthat you have the ``VIEW_MESSAGE_HISTORY`` permission. To do so, include the\n``message_reference`` field in your call. The complete structure\ndocumentation can be found [on the Discord Developer\nPortal](https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure),\nbut simply passing ``message_id`` will suffice:\n\n```elixir\ndef my_command(msg) do\n # Reply to the author - ``msg`` is a ``Nostrum.Struct.Message``\n Nostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello\",\n message_reference: %{message_id: msg.id}\n )\nend\n```\n\nPassing a list will merge the settings provided","ref":"Nostrum.Api.html#create_message/2-message-reference"},{"type":"function","title":"Examples - Nostrum.Api.create_message/2","doc":"```elixir\nNostrum.Api.create_message(43189401384091, content: \"hello world!\")\n\nNostrum.Api.create_message(43189401384091, \"hello world!\")\n\nimport Nostrum.Struct.Embed\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"embed\")\n |> put_description(\"new desc\")\nNostrum.Api.create_message(43189401384091, embeds: [embed])\n\nNostrum.Api.create_message(43189401384091, file: \"/path/to/file.txt\")\n\nNostrum.Api.create_message(43189401384091, content: \"hello world!\", embeds: [embed], file: \"/path/to/file.txt\")\n\nNostrum.Api.create_message(43189401384091, content: \"Hello @everyone\", allowed_mentions: :none)\n```","ref":"Nostrum.Api.html#create_message/2-examples"},{"type":"function","title":"Nostrum.Api.create_message!/2","doc":"Same as `create_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_message!/2"},{"type":"function","title":"Nostrum.Api.create_reaction/3","doc":"Creates a reaction for a message.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`\npermissions. Additionally, if nobody else has reacted to the message with\nthe `emoji`, this endpoint requires the `ADD_REACTIONS` permission. It\nfires a `t:Nostrum.Consumer.message_reaction_add/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_reaction/3"},{"type":"function","title":"Examples - Nostrum.Api.create_reaction/3","doc":"```elixir\n# Using a Nostrum.Struct.Emoji.\nemoji = %Nostrum.Struct.Emoji{id: 43819043108, name: \"foxbot\"}\nNostrum.Api.create_reaction(123123123123, 321321321321, emoji)\n\n# Using a base 16 emoji string.\nNostrum.Api.create_reaction(123123123123, 321321321321, \"\\xF0\\x9F\\x98\\x81\")\n\n```\n\nFor other emoji string examples, see `t:Nostrum.Struct.Emoji.api_name/0`.","ref":"Nostrum.Api.html#create_reaction/3-examples"},{"type":"function","title":"Nostrum.Api.create_reaction!/3","doc":"Same as `create_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_reaction!/3"},{"type":"function","title":"Nostrum.Api.create_webhook/3","doc":"Creates a webhook.","ref":"Nostrum.Api.html#create_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_webhook/3","doc":"- `channel_id` - Id of the channel to send the message to.\n - `args` - Map with the following **required** keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#create_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_all_reactions/2","doc":"Deletes all reactions from a message.\n\nThis endpoint requires the `VIEW_CHANNEL`, `READ_MESSAGE_HISTORY`, and\n`MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove_all/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, return `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_all_reactions/2"},{"type":"function","title":"Nostrum.Api.delete_all_reactions!/2","doc":"Same as `delete_all_reactions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_all_reactions!/2"},{"type":"function","title":"Nostrum.Api.delete_channel/2","doc":"Deletes a channel.\n\nAn optional `reason` can be provided for the guild audit log.\n\nIf deleting a `t:Nostrum.Struct.Channel.guild_channel/0`, this endpoint requires\nthe `MANAGE_CHANNELS` permission. It fires a\n`t:Nostrum.Consumer.channel_delete/0`. If a `t:Nostrum.Struct.Channel.guild_category_channel/0`\nis deleted, then a `t:Nostrum.Consumer.channel_update/0` event will fire\nfor each channel under the category.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_channel/2"},{"type":"function","title":"Examples - Nostrum.Api.delete_channel/2","doc":"```elixir\nNostrum.Api.delete_channel(421533712753360896)\n{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}\n```","ref":"Nostrum.Api.html#delete_channel/2-examples"},{"type":"function","title":"Nostrum.Api.delete_channel!/2","doc":"Same as `delete_channel/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_channel!/2"},{"type":"function","title":"Nostrum.Api.delete_channel_permissions/3","doc":"Delete a channel permission for a user or role.\n\nRole or user overwrite to delete is specified by `channel_id` and `overwrite_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#delete_channel_permissions/3"},{"type":"function","title":"Nostrum.Api.delete_global_application_command/2","doc":"Delete an existing global application command.","ref":"Nostrum.Api.html#delete_global_application_command/2"},{"type":"function","title":"Parameters - Nostrum.Api.delete_global_application_command/2","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `command_id`: The current snowflake of the command.","ref":"Nostrum.Api.html#delete_global_application_command/2-parameters"},{"type":"function","title":"Nostrum.Api.delete_guild/1","doc":"Deletes a guild.\n\nThis endpoint requires that the current user is the owner of the guild.\nIt fires the `t:Nostrum.Consumer.guild_delete/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild/1"},{"type":"function","title":"Examples - Nostrum.Api.delete_guild/1","doc":"```elixir\nNostrum.Api.delete_guild(81384788765712384)\n{:ok}\n```","ref":"Nostrum.Api.html#delete_guild/1-examples"},{"type":"function","title":"Nostrum.Api.delete_guild!/1","doc":"Same as `delete_guild/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild!/1"},{"type":"function","title":"Nostrum.Api.delete_guild_application_command/3","doc":"Delete an existing guild application command.","ref":"Nostrum.Api.html#delete_guild_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.delete_guild_application_command/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: The guild on which the command exists.\n- `command_id`: The current snowflake of the command.","ref":"Nostrum.Api.html#delete_guild_application_command/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_guild_auto_moderation_rule/2","doc":"Delete an auto-moderation rule for a guild.","ref":"Nostrum.Api.html#delete_guild_auto_moderation_rule/2"},{"type":"function","title":"Nostrum.Api.delete_guild_emoji/3","doc":"Deletes the given emoji.\n\nAn optional `reason` can be provided for the audit log.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild_emoji/3"},{"type":"function","title":"Nostrum.Api.delete_guild_emoji!/3","doc":"Same as `delete_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild_emoji!/3"},{"type":"function","title":"Nostrum.Api.delete_guild_integrations/2","doc":"Deletes a guild integeration.\n\nIntegration to delete is specified by `guild_id` and `integeration_id`.","ref":"Nostrum.Api.html#delete_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.delete_guild_role/3","doc":"Deletes a role from a guild.\n\nAn optional `reason` can be specified for the audit log.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_delete/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild_role/3"},{"type":"function","title":"Examples - Nostrum.Api.delete_guild_role/3","doc":"```elixir\nNostrum.Api.delete_guild_role(41771983423143937, 392817238471936)\n```","ref":"Nostrum.Api.html#delete_guild_role/3-examples"},{"type":"function","title":"Nostrum.Api.delete_guild_role!/3","doc":"Same as `delete_guild_role/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild_role!/3"},{"type":"function","title":"Nostrum.Api.delete_guild_scheduled_event/2","doc":"Delete a scheduled event for a guild.","ref":"Nostrum.Api.html#delete_guild_scheduled_event/2"},{"type":"function","title":"Nostrum.Api.delete_guild_sticker/2","doc":"Delete a guild sticker with the specified ID.","ref":"Nostrum.Api.html#delete_guild_sticker/2"},{"type":"function","title":"Nostrum.Api.delete_interaction_followup_message/3","doc":"Delete a followup message for an interaction.","ref":"Nostrum.Api.html#delete_interaction_followup_message/3"},{"type":"function","title":"Parameters - Nostrum.Api.delete_interaction_followup_message/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `token`: Interaction token.\n- `message_id`: Followup message ID.","ref":"Nostrum.Api.html#delete_interaction_followup_message/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_interaction_followup_message!/3","doc":"Same as `delete_interaction_followup_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_interaction_followup_message!/3"},{"type":"function","title":"Nostrum.Api.delete_interaction_response/1","doc":"Same as `delete_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#delete_interaction_response/1"},{"type":"function","title":"Nostrum.Api.delete_interaction_response/2","doc":"Deletes the original interaction response.","ref":"Nostrum.Api.html#delete_interaction_response/2"},{"type":"function","title":"Nostrum.Api.delete_interaction_response!/1","doc":"","ref":"Nostrum.Api.html#delete_interaction_response!/1"},{"type":"function","title":"Nostrum.Api.delete_interaction_response!/2","doc":"Same as `delete_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.delete_invite/1","doc":"Deletes an invite by its `invite_code`.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_invite/1"},{"type":"function","title":"Examples - Nostrum.Api.delete_invite/1","doc":"```elixir\nNostrum.Api.delete_invite(\"zsjUsC\")\n```","ref":"Nostrum.Api.html#delete_invite/1-examples"},{"type":"function","title":"Nostrum.Api.delete_invite!/1","doc":"Same as `delete_invite/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_invite!/1"},{"type":"function","title":"Nostrum.Api.delete_message/1","doc":"Same as `delete_message/2`, but takes a `Nostrum.Struct.Message` instead of a\n`channel_id` and `message_id`.","ref":"Nostrum.Api.html#delete_message/1"},{"type":"function","title":"Nostrum.Api.delete_message/2","doc":"Deletes a message.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'MANAGE_MESSAGES' permission. It\nfires the `MESSAGE_DELETE` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_message/2"},{"type":"function","title":"Examples - Nostrum.Api.delete_message/2","doc":"```elixir\nNostrum.Api.delete_message(43189401384091, 43189401384091)\n```","ref":"Nostrum.Api.html#delete_message/2-examples"},{"type":"function","title":"Nostrum.Api.delete_message!/1","doc":"Same as `delete_message/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_message!/1"},{"type":"function","title":"Nostrum.Api.delete_message!/2","doc":"Same as `delete_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_message!/2"},{"type":"function","title":"Nostrum.Api.delete_own_reaction/3","doc":"Deletes a reaction the current user has made for the message.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`\npermissions. It fires a `t:Nostrum.Consumer.message_reaction_remove/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_own_reaction/3"},{"type":"function","title":"Nostrum.Api.delete_own_reaction!/3","doc":"Same as `delete_own_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_own_reaction!/3"},{"type":"function","title":"Nostrum.Api.delete_pinned_channel_message/2","doc":"Unpins a message in a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', and\n'MANAGE_MESSAGES' permissions. It fires the\n`t:Nostrum.Consumer.message_update/0` and\n`t:Nostrum.Consumer.channel_pins_update/0` events.\n\nReturns `{:ok}` if successful. `error` otherwise.","ref":"Nostrum.Api.html#delete_pinned_channel_message/2"},{"type":"function","title":"Nostrum.Api.delete_pinned_channel_message!/2","doc":"Same as `delete_pinned_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_pinned_channel_message!/2"},{"type":"function","title":"Nostrum.Api.delete_reaction/3","doc":"Deletes all reactions of a given emoji from a message.\n\nThis endpoint requires the `MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove_emoji/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_reaction/3"},{"type":"function","title":"Nostrum.Api.delete_reaction!/3","doc":"Same as `delete_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_reaction!/3"},{"type":"function","title":"Nostrum.Api.delete_user_reaction/4","doc":"Deletes another user's reaction from a message.\n\nThis endpoint requires the `VIEW_CHANNEL`, `READ_MESSAGE_HISTORY`, and\n`MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_user_reaction/4"},{"type":"function","title":"Nostrum.Api.delete_user_reaction!/4","doc":"Same as `delete_user_reaction/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_user_reaction!/4"},{"type":"function","title":"Nostrum.Api.delete_webhook/2","doc":"Deletes a webhook.","ref":"Nostrum.Api.html#delete_webhook/2"},{"type":"function","title":"Parameters - Nostrum.Api.delete_webhook/2","doc":"- `webhook_id` - Id of webhook to delete.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#delete_webhook/2-parameters"},{"type":"function","title":"Nostrum.Api.edit_application_command_permissions/4","doc":"Edits command permissions for a specific command for your application in a guild. You can only add up to 10 permission overwrites for a command.","ref":"Nostrum.Api.html#edit_application_command_permissions/4"},{"type":"function","title":"Parameters - Nostrum.Api.edit_application_command_permissions/4","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.\n- `permissions`: List of [application command permissions](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure)","ref":"Nostrum.Api.html#edit_application_command_permissions/4-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_application_command_permissions/4","doc":"This method returns a guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#edit_application_command_permissions/4-return-value"},{"type":"function","title":"Nostrum.Api.edit_channel_permissions/4","doc":"Edit the permission overwrites for a user or role.\n\nRole or user to overwrite is specified by `overwrite_id`.\n\n`permission_info` is a map with the following keys:\n * `type` - Required; `member` if editing a user, `role` if editing a role.\n * `allow` - Bitwise value of allowed permissions.\n * `deny` - Bitwise value of denied permissions.\n * `type` - `member` if editing a user, `role` if editing a role.\n\nAn optional `reason` can be provided for the audit log.\n\n `allow` and `deny` are defaulted to `0`, meaning that even if you don't\n specify them, they will override their respective former values in an\n existing overwrite.","ref":"Nostrum.Api.html#edit_channel_permissions/4"},{"type":"function","title":"Nostrum.Api.edit_channel_permissions!/4","doc":"Same as `edit_channel_permissions/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_channel_permissions!/4"},{"type":"function","title":"Nostrum.Api.edit_global_application_command/3","doc":"Update an existing global application command.\n\nThe updated command will be available on all guilds in around an hour.","ref":"Nostrum.Api.html#edit_global_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.edit_global_application_command/3","doc":"- `application_id`: Application ID for which to edit the command.\n If not given, this will be fetched from `Me`.\n- `command_id`: The current snowflake of the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#edit_global_application_command/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_global_application_command/3","doc":"The updated command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#edit-global-application-command","ref":"Nostrum.Api.html#edit_global_application_command/3-return-value"},{"type":"function","title":"Nostrum.Api.edit_guild_application_command/4","doc":"Update an existing guild application command.\n\nThe updated command will be available immediately.","ref":"Nostrum.Api.html#edit_guild_application_command/4"},{"type":"function","title":"Parameters - Nostrum.Api.edit_guild_application_command/4","doc":"- `application_id`: Application ID for which to edit the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild for which to update the command.\n- `command_id`: The current snowflake of the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#edit_guild_application_command/4-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_guild_application_command/4","doc":"The updated command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#edit-guild-application-command","ref":"Nostrum.Api.html#edit_guild_application_command/4-return-value"},{"type":"function","title":"Nostrum.Api.edit_interaction_response/2","doc":"Same as `edit_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#edit_interaction_response/2"},{"type":"function","title":"Nostrum.Api.edit_interaction_response/3","doc":"Edits the original interaction response.\n\nFunctions the same as `edit_webhook_message/3`","ref":"Nostrum.Api.html#edit_interaction_response/3"},{"type":"function","title":"Nostrum.Api.edit_interaction_response!/2","doc":"Same as `edit_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.edit_interaction_response!/3","doc":"Same as `edit_interaction_response/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_interaction_response!/3"},{"type":"function","title":"Nostrum.Api.edit_message/2","doc":"Same as `edit_message/3`, but takes a `Nostrum.Struct.Message` instead of a\n`channel_id` and `message_id`.","ref":"Nostrum.Api.html#edit_message/2"},{"type":"function","title":"Nostrum.Api.edit_message/3","doc":"Edits a previously sent message in a channel.\n\nThis endpoint requires the `VIEW_CHANNEL` permission. It fires the\n`t:Nostrum.Consumer.message_update/0` event.\n\nIf `options` is a string, `options` will be used as the message's content.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#edit_message/3"},{"type":"function","title":"Options - Nostrum.Api.edit_message/3","doc":"* `:content` (string) - the message contents (up to 2000 characters)\n* `:embeds` (`t:Nostrum.Struct.Embed.t/0`) - a list of embedded rich content\n* `:files` - a list of files where each element is the same format as the\n`:file` option. If both `:file` and `:files` are specified, `:file` will be\nprepended to the `:files` list. See `create_message/2` for more information.\n\nNote that if you edit a message with attachments, all attachments that should\nbe present after edit **must** be included in your request body. This\nincludes attachments that were sent in the original request.","ref":"Nostrum.Api.html#edit_message/3-options"},{"type":"function","title":"Examples - Nostrum.Api.edit_message/3","doc":"```elixir\nNostrum.Api.edit_message(43189401384091, 1894013840914098, content: \"hello world!\")\n\nNostrum.Api.edit_message(43189401384091, 1894013840914098, \"hello world!\")\n\nimport Nostrum.Struct.Embed\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"embed\")\n |> put_description(\"new desc\")\nNostrum.Api.edit_message(43189401384091, 1894013840914098, embeds: [embed])\n\nNostrum.Api.edit_message(43189401384091, 1894013840914098, content: \"hello world!\", embeds: [embed])\n```","ref":"Nostrum.Api.html#edit_message/3-examples"},{"type":"function","title":"Nostrum.Api.edit_message!/2","doc":"Same as `edit_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_message!/2"},{"type":"function","title":"Nostrum.Api.edit_message!/3","doc":"Same as `edit_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_message!/3"},{"type":"function","title":"Nostrum.Api.edit_webhook_message/4","doc":"Edits a message previously created by the same webhook,\nargs are the same as `execute_webhook/3`,\nhowever all fields are optional.","ref":"Nostrum.Api.html#edit_webhook_message/4"},{"type":"function","title":"Nostrum.Api.execute_git_webhook/3","doc":"Executes a git webhook.","ref":"Nostrum.Api.html#execute_git_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.execute_git_webhook/3","doc":"- `webhook_id` - Id of the webhook to execute.\n - `webhook_token` - Token of the webhook to execute.","ref":"Nostrum.Api.html#execute_git_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.execute_slack_webhook/3","doc":"Executes a slack webhook.","ref":"Nostrum.Api.html#execute_slack_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.execute_slack_webhook/3","doc":"- `webhook_id` - Id of the webhook to execute.\n - `webhook_token` - Token of the webhook to execute.","ref":"Nostrum.Api.html#execute_slack_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.execute_webhook/4","doc":"Executes a webhook.","ref":"Nostrum.Api.html#execute_webhook/4"},{"type":"function","title":"Parameters - Nostrum.Api.execute_webhook/4","doc":"- `webhook_id` - Id of the webhook to execute.\n- `webhook_token` - Token of the webhook to execute.\n- `args` - Map with the following allowed keys:\n - `content` - Message content.\n - `files` - List of Files to send.\n - `embeds` - List of embeds to send.\n - `username` - Overrides the default name of the webhook.\n - `avatar_url` - Overrides the default avatar of the webhook.\n - `tts` - Whether the message should be read over text to speech.\n - `flags` - Bitwise flags.\n - `thread_id` - Send a message to the specified thread within the webhook's channel.\n - `allowed_mentions` - Mentions to allow in the webhook message\n- `wait` - Whether to return an error or not. Defaults to `false`.\n\n**Note**: If `wait` is `true`, this method will return a `Message.t()` on success.\n\nAt least one of `content`, `files` or `embeds` should be supplied in the `args` parameter.","ref":"Nostrum.Api.html#execute_webhook/4-parameters"},{"type":"function","title":"Nostrum.Api.expire_poll/2","doc":"Expire (close voting on) a poll before the scheduled end time.\n\nReturns the original message containing the poll.","ref":"Nostrum.Api.html#expire_poll/2"},{"type":"function","title":"Nostrum.Api.expire_poll!/2","doc":"Same as `expire_poll/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#expire_poll!/2"},{"type":"function","title":"Nostrum.Api.get_application_command_permissions/3","doc":"Fetches command permissions for a specific command for your application in a guild.","ref":"Nostrum.Api.html#get_application_command_permissions/3"},{"type":"function","title":"Parameters - Nostrum.Api.get_application_command_permissions/3","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.","ref":"Nostrum.Api.html#get_application_command_permissions/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_application_command_permissions/3","doc":"This method returns a single guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#get_application_command_permissions/3-return-value"},{"type":"function","title":"Nostrum.Api.get_application_information/0","doc":"Gets the bot's OAuth2 application info.","ref":"Nostrum.Api.html#get_application_information/0"},{"type":"function","title":"Example - Nostrum.Api.get_application_information/0","doc":"```elixir\nNostrum.Api.get_application_information\n{:ok,\n%{\n bot_public: false,\n bot_require_code_grant: false,\n description: \"Test\",\n icon: nil,\n id: \"172150183260323840\",\n name: \"Baba O-Riley\",\n owner: %{\n avatar: nil,\n discriminator: \"0042\",\n id: \"172150183260323840\",\n username: \"i own a bot\"\n },\n}}\n```","ref":"Nostrum.Api.html#get_application_information/0-example"},{"type":"function","title":"Nostrum.Api.get_channel/1","doc":"Gets a channel.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel/1"},{"type":"function","title":"Examples - Nostrum.Api.get_channel/1","doc":"```elixir\nNostrum.Api.get_channel(381889573426429952)\n{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}\n```","ref":"Nostrum.Api.html#get_channel/1-examples"},{"type":"function","title":"Nostrum.Api.get_channel!/1","doc":"Same as `get_channel/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel!/1"},{"type":"function","title":"Nostrum.Api.get_channel_invites/1","doc":"Gets a list of invites for a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'MANAGE_CHANNELS' permissions.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_invites/1"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_invites/1","doc":"```elixir\nNostrum.Api.get_channel_invites(43189401384091)\n{:ok, [%Nostrum.Struct.Invite{} | _]}\n```","ref":"Nostrum.Api.html#get_channel_invites/1-examples"},{"type":"function","title":"Nostrum.Api.get_channel_invites!/1","doc":"Same as `get_channel_invites/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_invites!/1"},{"type":"function","title":"Nostrum.Api.get_channel_message/2","doc":"Retrieves a message from a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'READ_MESSAGE_HISTORY' permissions.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_message/2"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_message/2","doc":"```elixir\nNostrum.Api.get_channel_message(43189401384091, 198238475613443)\n```","ref":"Nostrum.Api.html#get_channel_message/2-examples"},{"type":"function","title":"Nostrum.Api.get_channel_message!/2","doc":"Same as `get_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_message!/2"},{"type":"function","title":"Nostrum.Api.get_channel_messages/3","doc":"Retrieves a channel's messages around a `locator` up to a `limit`.\n\nThis endpoint requires the 'VIEW_CHANNEL' permission. If the current user\nis missing the 'READ_MESSAGE_HISTORY' permission, then this function will\nreturn no messages.\n\nIf successful, returns `{:ok, messages}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_messages/3"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_messages/3","doc":"```elixir\nNostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})\n```","ref":"Nostrum.Api.html#get_channel_messages/3-examples"},{"type":"function","title":"Nostrum.Api.get_channel_messages!/3","doc":"Same as `get_channel_messages/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_messages!/3"},{"type":"function","title":"Nostrum.Api.get_channel_webhooks/1","doc":"Gets a list of webhooks for a channel.","ref":"Nostrum.Api.html#get_channel_webhooks/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_channel_webhooks/1","doc":"- `channel_id` - Channel to get webhooks for.","ref":"Nostrum.Api.html#get_channel_webhooks/1-parameters"},{"type":"function","title":"Nostrum.Api.get_current_user/0","doc":"Gets info on the current user.\n\nIf nostrum's caching is enabled, it is recommended to use `Me.get/0`\ninstead of this function. This is because sending out an API request is much slower\nthan pulling from our cache.\n\nIf the request is successful, this function returns `{:ok, user}`, where\n`user` is nostrum's `Nostrum.Struct.User`. Otherwise, returns `{:error, reason}`.","ref":"Nostrum.Api.html#get_current_user/0"},{"type":"function","title":"Nostrum.Api.get_current_user!/0","doc":"Same as `get_current_user/0`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_current_user!/0"},{"type":"function","title":"Nostrum.Api.get_current_user_guilds/1","doc":"Gets a list of guilds the user is currently in.\n\nThis endpoint requires the `guilds` OAuth2 scope.\n\nIf successful, returns `{:ok, guilds}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_current_user_guilds/1"},{"type":"function","title":"Options - Nostrum.Api.get_current_user_guilds/1","doc":"* `:before` (`t:Nostrum.Snowflake.t/0`) - get guilds before this\n guild ID\n * `:after` (`t:Nostrum.Snowflake.t/0`) - get guilds after this guild\n ID\n * `:limit` (integer) - max number of guilds to return (1-100)","ref":"Nostrum.Api.html#get_current_user_guilds/1-options"},{"type":"function","title":"Examples - Nostrum.Api.get_current_user_guilds/1","doc":"```elixir\niex> Nostrum.Api.get_current_user_guilds(limit: 1)\n{:ok, [%Nostrum.Struct.Guild{}]}\n```","ref":"Nostrum.Api.html#get_current_user_guilds/1-examples"},{"type":"function","title":"Nostrum.Api.get_current_user_guilds!/1","doc":"Same as `get_current_user_guilds/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_current_user_guilds!/1"},{"type":"function","title":"Nostrum.Api.get_global_application_commands/1","doc":"Fetch all global commands.","ref":"Nostrum.Api.html#get_global_application_commands/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_global_application_commands/1","doc":"- `application_id`: Application ID for which to search commands.\n If not given, this will be fetched from `Me`.","ref":"Nostrum.Api.html#get_global_application_commands/1-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_global_application_commands/1","doc":"A list of ``ApplicationCommand``s on success. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure","ref":"Nostrum.Api.html#get_global_application_commands/1-return-value"},{"type":"function","title":"Example - Nostrum.Api.get_global_application_commands/1","doc":"```elixir\niex> Nostrum.Api.get_global_application_commands\n{:ok,\n [\n %{\n application_id: \"455589479713865749\",\n description: \"ed, man! man, ed\",\n id: \"789841753196331029\",\n name: \"edit\"\n }\n ]}\n```","ref":"Nostrum.Api.html#get_global_application_commands/1-example"},{"type":"function","title":"Nostrum.Api.get_guild/1","doc":"Gets a guild.\n\nIf successful, returns `{:ok, guild}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild/1","doc":"```elixir\nNostrum.Api.get_guild(81384788765712384)\n{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}\n```","ref":"Nostrum.Api.html#get_guild/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild!/1","doc":"Same as `get_guild/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild!/1"},{"type":"function","title":"Nostrum.Api.get_guild_application_command_permissions/2","doc":"Fetches command permissions for all commands for your application in a guild.","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_application_command_permissions/2","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_guild_application_command_permissions/2","doc":"This method returns a list of guild application command permission objects, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2-return-value"},{"type":"function","title":"Nostrum.Api.get_guild_application_commands/2","doc":"Fetch all guild application commands for the given guild.","ref":"Nostrum.Api.html#get_guild_application_commands/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_application_commands/2","doc":"- `application_id`: Application ID for which to fetch commands.\n If not given, this will be fetched from `Me`.\n- `guild_id`: The guild ID for which guild application commands\n should be requested.","ref":"Nostrum.Api.html#get_guild_application_commands/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_guild_application_commands/2","doc":"A list of ``ApplicationCommand``s on success. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure","ref":"Nostrum.Api.html#get_guild_application_commands/2-return-value"},{"type":"function","title":"Nostrum.Api.get_guild_audit_log/2","doc":"Get the `t:Nostrum.Struct.Guild.AuditLog.t/0` for the given `guild_id`.","ref":"Nostrum.Api.html#get_guild_audit_log/2"},{"type":"function","title":"Options - Nostrum.Api.get_guild_audit_log/2","doc":"* `:user_id` (`t:Nostrum.Struct.User.id/0`) - filter the log for a user ID\n * `:action_type` (`t:integer/0`) - filter the log by audit log type, see [Audit Log Events](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events)\n * `:before` (`t:Nostrum.Struct.Snowflake.t/0`) - filter the log before a certain entry ID\n * `:limit` (`t:pos_integer/0`) - how many entries are returned (default 50, minimum 1, maximum 100)","ref":"Nostrum.Api.html#get_guild_audit_log/2-options"},{"type":"function","title":"Nostrum.Api.get_guild_auto_moderation_rule/2","doc":"Get a single auto-moderation rule for a guild.","ref":"Nostrum.Api.html#get_guild_auto_moderation_rule/2"},{"type":"function","title":"Nostrum.Api.get_guild_auto_moderation_rules/1","doc":"Get a list of all auto-moderation rules for a guild.","ref":"Nostrum.Api.html#get_guild_auto_moderation_rules/1"},{"type":"function","title":"Nostrum.Api.get_guild_ban/2","doc":"Gets a ban object for the given user from a guild.","ref":"Nostrum.Api.html#get_guild_ban/2"},{"type":"function","title":"Nostrum.Api.get_guild_bans/1","doc":"Gets a list of users banned from a guild.\n\nGuild to get bans for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_guild_bans/1"},{"type":"function","title":"Nostrum.Api.get_guild_channels/1","doc":"Gets a list of guild channels.\n\nIf successful, returns `{:ok, channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_channels/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_channels/1","doc":"```elixir\nNostrum.Api.get_guild_channels(81384788765712384)\n{:ok, [%Nostrum.Struct.Channel{guild_id: 81384788765712384} | _]}\n```","ref":"Nostrum.Api.html#get_guild_channels/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_channels!/1","doc":"Same as `get_guild_channels/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_channels!/1"},{"type":"function","title":"Nostrum.Api.get_guild_emoji/2","doc":"Gets an emoji for the given guild and emoji ids.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_emoji/2"},{"type":"function","title":"Nostrum.Api.get_guild_emoji!/2","doc":"Same as `get_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_emoji!/2"},{"type":"function","title":"Nostrum.Api.get_guild_integrations/1","doc":"Gets a list of guild integerations.\n\nGuild to get integrations for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_guild_integrations/1"},{"type":"function","title":"Nostrum.Api.get_guild_invites/1","doc":"Gets a list of invites for a guild.\n\nThis endpoint requires the `MANAGE_GUILD` permission.\n\nIf successful, returns `{:ok, invites}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_invites/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_invites/1","doc":"```elixir\nNostrum.Api.get_guild_invites(81384788765712384)\n{:ok, [%Nostrum.Struct.Invite{} | _]}\n```","ref":"Nostrum.Api.html#get_guild_invites/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_invites!/1","doc":"Same as `get_guild_invites/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_invites!/1"},{"type":"function","title":"Nostrum.Api.get_guild_member/2","doc":"Gets a guild member.\n\nIf successful, returns `{:ok, member}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_member/2"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_member/2","doc":"```elixir\nNostrum.Api.get_guild_member(4019283754613, 184937267485)\n```","ref":"Nostrum.Api.html#get_guild_member/2-examples"},{"type":"function","title":"Nostrum.Api.get_guild_member!/2","doc":"Same as `get_guild_member/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_member!/2"},{"type":"function","title":"Nostrum.Api.get_guild_prune_count/2","doc":"Gets the number of members that would be removed in a prune given `days`.\n\nThis endpoint requires the `KICK_MEMBERS` permission.\n\nIf successful, returns `{:ok, %{pruned: pruned}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_prune_count/2"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_prune_count/2","doc":"```elixir\nNostrum.Api.get_guild_prune_count(81384788765712384, 1)\n{:ok, %{pruned: 0}}\n```","ref":"Nostrum.Api.html#get_guild_prune_count/2-examples"},{"type":"function","title":"Nostrum.Api.get_guild_prune_count!/2","doc":"Same as `get_guild_prune_count/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_prune_count!/2"},{"type":"function","title":"Nostrum.Api.get_guild_roles/1","doc":"Gets a guild's roles.\n\nIf successful, returns `{:ok, roles}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_roles/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_roles/1","doc":"```elixir\nNostrum.Api.get_guild_roles(147362948571673)\n```","ref":"Nostrum.Api.html#get_guild_roles/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_roles!/1","doc":"Same as `get_guild_roles/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_roles!/1"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_event/2","doc":"Get a scheduled event for a guild.","ref":"Nostrum.Api.html#get_guild_scheduled_event/2"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_event_users/3","doc":"Get a list of users who have subscribed to an event.","ref":"Nostrum.Api.html#get_guild_scheduled_event_users/3"},{"type":"function","title":"Options - Nostrum.Api.get_guild_scheduled_event_users/3","doc":"All are optional, with their default values listed.\n* `:limit` (integer) maximum number of users to return, defaults to `100`\n* `:with_member` (boolean) whether to include the member object for each user, defaults to `false`\n* `:before` (`t:Nostrum.Snowflake.t/0`) return only users before this user id, defaults to `nil`\n* `:after` (`t:Nostrum.Snowflake.t/0`) return only users after this user id, defaults to `nil`","ref":"Nostrum.Api.html#get_guild_scheduled_event_users/3-options"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_events/1","doc":"Get a list of scheduled events for a guild.","ref":"Nostrum.Api.html#get_guild_scheduled_events/1"},{"type":"function","title":"Nostrum.Api.get_guild_sticker/2","doc":"Return the specified sticker from the specified guild.\n\nReturns a `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#get_guild_sticker/2"},{"type":"function","title":"Nostrum.Api.get_guild_webhooks/1","doc":"Gets a list of webhooks for a guild.","ref":"Nostrum.Api.html#get_guild_webhooks/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_webhooks/1","doc":"- `guild_id` - Guild to get webhooks for.","ref":"Nostrum.Api.html#get_guild_webhooks/1-parameters"},{"type":"function","title":"Nostrum.Api.get_guild_widget/1","doc":"Gets a guild embed.","ref":"Nostrum.Api.html#get_guild_widget/1"},{"type":"function","title":"Nostrum.Api.get_invite/2","doc":"Gets an invite by its `invite_code`.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_invite/2"},{"type":"function","title":"Options - Nostrum.Api.get_invite/2","doc":"* `:with_counts` (boolean) - whether to include member count fields","ref":"Nostrum.Api.html#get_invite/2-options"},{"type":"function","title":"Examples - Nostrum.Api.get_invite/2","doc":"```elixir\nNostrum.Api.get_invite(\"zsjUsC\")\n\nNostrum.Api.get_invite(\"zsjUsC\", with_counts: true)\n```","ref":"Nostrum.Api.html#get_invite/2-examples"},{"type":"function","title":"Nostrum.Api.get_invite!/2","doc":"Same as `get_invite/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_invite!/2"},{"type":"function","title":"Nostrum.Api.get_original_interaction_response/1","doc":"Retrieves the original message of an interaction.","ref":"Nostrum.Api.html#get_original_interaction_response/1"},{"type":"function","title":"Nostrum.Api.get_pinned_messages/1","doc":"Retrieves all pinned messages from a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'READ_MESSAGE_HISTORY' permissions.\n\nIf successful, returns `{:ok, messages}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_pinned_messages/1"},{"type":"function","title":"Examples - Nostrum.Api.get_pinned_messages/1","doc":"```elixir\nNostrum.Api.get_pinned_messages(43189401384091)\n```","ref":"Nostrum.Api.html#get_pinned_messages/1-examples"},{"type":"function","title":"Nostrum.Api.get_pinned_messages!/1","doc":"Same as `get_pinned_messages/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_pinned_messages!/1"},{"type":"function","title":"Nostrum.Api.get_poll_answer_voters/4","doc":"Get voters for the provided answer on the poll attached to the provided message.\n\nIf successful, returns `{:ok, users}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nThe optional `params` are `after`, the user ID to query after, absent by default,\nand `limit`, the max number of users to return, 1-100, 25 by default. Results are\nsorted by Discord user snowflake (ID) in ascending order.","ref":"Nostrum.Api.html#get_poll_answer_voters/4"},{"type":"function","title":"Nostrum.Api.get_poll_answer_voters!/4","doc":"Same as `get_poll_answer_voters/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_poll_answer_voters!/4"},{"type":"function","title":"Nostrum.Api.get_reactions/4","doc":"Gets all users who reacted with an emoji.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY` permissions.\n\nIf successful, returns `{:ok, users}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nThe optional `params` are `after`, the user ID to query after, absent by default,\nand `limit`, the max number of users to return, 1-100, 25 by default.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#get_reactions/4"},{"type":"function","title":"Nostrum.Api.get_reactions!/4","doc":"Same as `get_reactions/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_reactions!/4"},{"type":"function","title":"Nostrum.Api.get_sticker/1","doc":"Fetch a sticker with the provided ID.\n\nReturns a `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#get_sticker/1"},{"type":"function","title":"Nostrum.Api.get_sticker_packs/0","doc":"Get a list of available sticker packs.","ref":"Nostrum.Api.html#get_sticker_packs/0"},{"type":"function","title":"Nostrum.Api.get_thread_member/2","doc":"Returns a thread member object for the specified user if they are a member of the thread","ref":"Nostrum.Api.html#get_thread_member/2"},{"type":"function","title":"Nostrum.Api.get_thread_members/1","doc":"Returns a list of thread members for the specified thread.\n\nThis endpoint is restricted according to whether the `GUILD_MEMBERS` privileged intent is enabled.","ref":"Nostrum.Api.html#get_thread_members/1"},{"type":"function","title":"Nostrum.Api.get_user/1","doc":"Gets a user by its `t:Nostrum.Struct.User.id/0`.\n\nIf the request is successful, this function returns `{:ok, user}`, where\n`user` is a `Nostrum.Struct.User`. Otherwise, returns `{:error, reason}`.","ref":"Nostrum.Api.html#get_user/1"},{"type":"function","title":"Nostrum.Api.get_user!/1","doc":"Same as `get_user/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_user!/1"},{"type":"function","title":"Nostrum.Api.get_user_connections/0","doc":"Gets a list of user connections.","ref":"Nostrum.Api.html#get_user_connections/0"},{"type":"function","title":"Nostrum.Api.get_user_dms/0","doc":"Gets a list of our user's DM channels.\n\nIf successful, returns `{:ok, dm_channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_user_dms/0"},{"type":"function","title":"Examples - Nostrum.Api.get_user_dms/0","doc":"```elixir\nNostrum.Api.get_user_dms()\n{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}\n```","ref":"Nostrum.Api.html#get_user_dms/0-examples"},{"type":"function","title":"Nostrum.Api.get_user_dms!/0","doc":"Same as `get_user_dms/0`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_user_dms!/0"},{"type":"function","title":"Nostrum.Api.get_voice_region/1","doc":"Gets a list of voice regions for the guild.\n\nGuild to get voice regions for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_voice_region/1"},{"type":"function","title":"Nostrum.Api.get_webhook/1","doc":"Gets a webhook by id.","ref":"Nostrum.Api.html#get_webhook/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_webhook/1","doc":"- `webhook_id` - Id of the webhook to get.","ref":"Nostrum.Api.html#get_webhook/1-parameters"},{"type":"function","title":"Nostrum.Api.get_webhook_message/2","doc":"Retrieves the original message of a webhook.","ref":"Nostrum.Api.html#get_webhook_message/2"},{"type":"function","title":"Nostrum.Api.get_webhook_with_token/2","doc":"Gets a webhook by id and token.\n\nThis method is exactly like `get_webhook/1` but does not require\nauthentication.","ref":"Nostrum.Api.html#get_webhook_with_token/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_webhook_with_token/2","doc":"- `webhook_id` - Id of the webhook to get.\n - `webhook_token` - Token of the webhook to get.","ref":"Nostrum.Api.html#get_webhook_with_token/2-parameters"},{"type":"function","title":"Nostrum.Api.join_thread/1","doc":"Join an existing thread, requires that the thread is not archived.","ref":"Nostrum.Api.html#join_thread/1"},{"type":"function","title":"Nostrum.Api.leave_guild/1","doc":"Leaves a guild.\n\nGuild to leave is specified by `guild_id`.","ref":"Nostrum.Api.html#leave_guild/1"},{"type":"function","title":"Nostrum.Api.leave_thread/1","doc":"Leave a thread, requires that the thread is not archived.","ref":"Nostrum.Api.html#leave_thread/1"},{"type":"function","title":"Nostrum.Api.list_guild_emojis/1","doc":"Gets a list of emojis for a given guild.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission.\n\nIf successful, returns `{:ok, emojis}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#list_guild_emojis/1"},{"type":"function","title":"Nostrum.Api.list_guild_emojis!/1","doc":"Same as `list_guild_emojis/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#list_guild_emojis!/1"},{"type":"function","title":"Nostrum.Api.list_guild_members/2","doc":"Gets a list of a guild's members.\n\nIf successful, returns `{:ok, members}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#list_guild_members/2"},{"type":"function","title":"Options - Nostrum.Api.list_guild_members/2","doc":"* `:limit` (integer) - max number of members to return (1-1000) (default: 1)\n * `:after` (`t:Nostrum.Struct.User.id/0`) - the highest user id in the previous page (default: 0)","ref":"Nostrum.Api.html#list_guild_members/2-options"},{"type":"function","title":"Examples - Nostrum.Api.list_guild_members/2","doc":"```elixir\nNostrum.Api.list_guild_members(41771983423143937, limit: 1)\n```","ref":"Nostrum.Api.html#list_guild_members/2-examples"},{"type":"function","title":"Nostrum.Api.list_guild_members!/2","doc":"Same as `list_guild_members/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#list_guild_members!/2"},{"type":"function","title":"Nostrum.Api.list_guild_stickers/1","doc":"List all stickers in the provided guild.\n\nReturns a list of `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#list_guild_stickers/1"},{"type":"function","title":"Nostrum.Api.list_guild_threads/1","doc":"Return all active threads for the current guild.\n\nResponse body is a map with the following keys:\n- `threads`: A list of channel objects.\n- `members`: A list of `ThreadMember` objects, one for each returned thread the current user has joined.","ref":"Nostrum.Api.html#list_guild_threads/1"},{"type":"function","title":"Nostrum.Api.list_joined_private_archived_threads/2","doc":"Same as `list_public_archived_threads/2`, but only returns private threads that the current user has joined.","ref":"Nostrum.Api.html#list_joined_private_archived_threads/2"},{"type":"function","title":"Nostrum.Api.list_private_archived_threads/2","doc":"Same as `list_public_archived_threads/2`, but for private threads instead of public.","ref":"Nostrum.Api.html#list_private_archived_threads/2"},{"type":"function","title":"Nostrum.Api.list_public_archived_threads/2","doc":"Returns a list of archived threads for a given channel.\n\nThreads are sorted by the `archive_timestamp` field, in descending order.","ref":"Nostrum.Api.html#list_public_archived_threads/2"},{"type":"function","title":"Response body - Nostrum.Api.list_public_archived_threads/2","doc":"Response body is a map with the following keys:\n- `threads`: A list of channel objects.\n- `members`: A list of `ThreadMember` objects, one for each returned thread the current user has joined.\n- `has_more`: A boolean indicating whether there are more archived threads that can be fetched.","ref":"Nostrum.Api.html#list_public_archived_threads/2-response-body"},{"type":"function","title":"Options - Nostrum.Api.list_public_archived_threads/2","doc":"- `before`: Returns threads before this timestamp, can be either a `DateTime` or [ISO8601 timestamp](`DateTime.to_iso8601/3`).\n- `limit`: Optional maximum number of threads to return.","ref":"Nostrum.Api.html#list_public_archived_threads/2-options"},{"type":"function","title":"Nostrum.Api.list_voice_regions/0","doc":"Gets a list of voice regions.","ref":"Nostrum.Api.html#list_voice_regions/0"},{"type":"function","title":"Nostrum.Api.modify_channel/3","doc":"Modifies a channel's settings.\n\nAn optional `reason` can be given for the guild audit log.\n\nIf a `t:Nostrum.Struct.Channel.guild_channel/0` is being modified, this\nendpoint requires the `MANAGE_CHANNEL` permission. It fires a\n`t:Nostrum.Consumer.channel_update/0` event. If a\n`t:Nostrum.Struct.Channel.guild_category_channel/0` is being modified, then this\nendpoint fires multiple `t:Nostrum.Consumer.channel_update/0` events.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_channel/3"},{"type":"function","title":"Options - Nostrum.Api.modify_channel/3","doc":"* `:name` (string) - 2-100 character channel name\n * `:position` (integer) - the position of the channel in the left-hand listing\n * `:topic` (string) (`t:Nostrum.Struct.Channel.text_channel/0` only) -\n 0-1024 character channel topic\n * `:nsfw` (boolean) (`t:Nostrum.Struct.Channel.text_channel/0` only) -\n if the channel is nsfw\n * `:bitrate` (integer) (`t:Nostrum.Struct.Channel.voice_channel/0` only) -\n the bitrate (in bits) of the voice channel; 8000 to 96000 (128000 for VIP servers)\n * `:user_limit` (integer) (`t:Nostrum.Struct.Channel.voice_channel/0` only) -\n the user limit of the voice channel; 0 refers to no limit, 1 to 99 refers to a user limit\n * `:permission_overwrites` (list of `t:Nostrum.Struct.Overwrite.t/0` or equivalent map) -\n channel or category-specific permissions\n * `:parent_id` (`t:Nostrum.Struct.Channel.id/0`) (`t:Nostrum.Struct.Channel.guild_channel/0` only) -\n id of the new parent category for a channel","ref":"Nostrum.Api.html#modify_channel/3-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_channel/3","doc":"```elixir\nNostrum.Api.modify_channel(41771983423143933, name: \"elixir-nostrum\", topic: \"nostrum discussion\")\n{:ok, %Nostrum.Struct.Channel{id: 41771983423143933, name: \"elixir-nostrum\", topic: \"nostrum discussion\"}}\n\nNostrum.Api.modify_channel(41771983423143933)\n{:ok, %Nostrum.Struct.Channel{id: 41771983423143933}}\n```","ref":"Nostrum.Api.html#modify_channel/3-examples"},{"type":"function","title":"Nostrum.Api.modify_channel!/3","doc":"Same as `modify_channel/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_channel!/3"},{"type":"function","title":"Nostrum.Api.modify_current_user/1","doc":"Changes the username or avatar of the current user.","ref":"Nostrum.Api.html#modify_current_user/1"},{"type":"function","title":"Options - Nostrum.Api.modify_current_user/1","doc":"* `:username` (string) - new username\n * `:avatar` (string) - the user's avatar as [avatar data](https://discord.com/developers/docs/resources/user#avatar-data)","ref":"Nostrum.Api.html#modify_current_user/1-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_current_user/1","doc":"```elixir\nNostrum.Api.modify_current_user(avatar: \"data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=\")\n```","ref":"Nostrum.Api.html#modify_current_user/1-examples"},{"type":"function","title":"Nostrum.Api.modify_current_user!/1","doc":"Same as `modify_current_user/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_current_user!/1"},{"type":"function","title":"Nostrum.Api.modify_current_user_nick/2","doc":"Modifies the nickname of the current user in a guild.\n\nIf successful, returns `{:ok, %{nick: nick}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_current_user_nick/2"},{"type":"function","title":"Options - Nostrum.Api.modify_current_user_nick/2","doc":"* `:nick` (string) - value to set users nickname to","ref":"Nostrum.Api.html#modify_current_user_nick/2-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_current_user_nick/2","doc":"```elixir\nNostrum.Api.modify_current_user_nick(41771983423143937, nick: \"Nostrum\")\n{:ok, %{nick: \"Nostrum\"}}\n```","ref":"Nostrum.Api.html#modify_current_user_nick/2-examples"},{"type":"function","title":"Nostrum.Api.modify_current_user_nick!/2","doc":"Same as `modify_current_user_nick/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_current_user_nick!/2"},{"type":"function","title":"Nostrum.Api.modify_guild/3","doc":"Modifies a guild's settings.\n\nThis endpoint requires the `MANAGE_GUILD` permission. It fires the\n`t:Nostrum.Consumer.guild_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, guild}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild/3"},{"type":"function","title":"Options - Nostrum.Api.modify_guild/3","doc":"* `:name` (string) - guild name\n * `:region` (string) - guild voice region id\n * `:verification_level` (integer) - verification level\n * `:default_message_notifications` (integer) - default message\n notification level\n * `:explicit_content_filter` (integer) - explicit content filter level\n * `:afk_channel_id` (`t:Nostrum.Snowflake.t/0`) - id for afk channel\n * `:afk_timeout` (integer) - afk timeout in seconds\n * `:icon` (base64 data URI) - 128x128 jpeg image for the guild icon\n * `:owner_id` (`t:Nostrum.Snowflake.t/0`) - user id to transfer\n guild ownership to (must be owner)\n * `:splash` (base64 data URI) - 128x128 jpeg image for the guild splash\n (VIP only)\n * `:system_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the\n channel to which system messages are sent\n * `:rules_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the channel that\n is used for rules in public guilds\n * `:public_updates_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the channel\n where admins and moderators receive notices from Discord in public guilds","ref":"Nostrum.Api.html#modify_guild/3-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild/3","doc":"```elixir\nNostrum.Api.modify_guild(451824027976073216, name: \"Nose Drum\")\n{:ok, %Nostrum.Struct.Guild{id: 451824027976073216, name: \"Nose Drum\", ...}}\n```","ref":"Nostrum.Api.html#modify_guild/3-examples"},{"type":"function","title":"Nostrum.Api.modify_guild!/2","doc":"Same as `modify_guild/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild!/2"},{"type":"function","title":"Nostrum.Api.modify_guild_auto_moderation_rule/3","doc":"Modify an auto-moderation rule for a guild.\n\nTakes the same options as `create_guild_auto_moderation_rule/2`, however all fields are optional.","ref":"Nostrum.Api.html#modify_guild_auto_moderation_rule/3"},{"type":"function","title":"Nostrum.Api.modify_guild_channel_positions/2","doc":"Reorders a guild's channels.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission. It fires multiple\n`t:Nostrum.Consumer.channel_update/0` events.\n\nIf successful, returns `{:ok, channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`positions` is a list of maps that each map a channel id with a position.","ref":"Nostrum.Api.html#modify_guild_channel_positions/2"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_channel_positions/2","doc":"```elixir\nNostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])\n{:ok}\n```","ref":"Nostrum.Api.html#modify_guild_channel_positions/2-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_channel_positions!/2","doc":"Same as `modify_guild_channel_positions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_channel_positions!/2"},{"type":"function","title":"Nostrum.Api.modify_guild_emoji/4","doc":"Modify the given emoji.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild_emoji/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_emoji/4","doc":"* `:name` (string) - name of the emoji\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - roles to which this emoji will be whitelisted","ref":"Nostrum.Api.html#modify_guild_emoji/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_emoji/4","doc":"```elixir\nNostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: \"elixir\", roles: [])\n```","ref":"Nostrum.Api.html#modify_guild_emoji/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_emoji!/4","doc":"Same as `modify_guild_emoji/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_emoji!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_integrations/3","doc":"Changes the settings and behaviours for a guild integeration.\n\nIntegration to modify is specified by `guild_id` and `integeration_id`.\n\n`options` is a map with the following keys:\n * `expire_behavior` - Expiry behavior.\n * `expire_grace_period` - Period where the integration will ignore elapsed subs.\n * `enable_emoticons` - Whether emoticons should be synced.","ref":"Nostrum.Api.html#modify_guild_integrations/3"},{"type":"function","title":"Nostrum.Api.modify_guild_member/4","doc":"Modifies a guild member's attributes.\n\nThis endpoint fires the `t:Nostrum.Consumer.guild_member_update/0` event.\nIt situationally requires the `MANAGE_NICKNAMES`, `MANAGE_ROLES`,\n`MUTE_MEMBERS`, `DEAFEN_MEMBERS`, and `MOVE_MEMBERS` permissions.\n\nIf successful, returns `{:ok, member}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#modify_guild_member/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_member/4","doc":"* `:nick` (string) - value to set users nickname to\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - array of role ids the member is assigned\n * `:mute` (boolean) - if the user is muted\n * `:deaf` (boolean) - if the user is deafened\n * `:channel_id` (`t:Nostrum.Snowflake.t/0`) - id of channel to move user to (if they are connected to voice)\n * `:communication_disabled_until` (`t:DateTime.t/0` or `nil`) - datetime to disable user communication (timeout) until, or `nil` to remove timeout.","ref":"Nostrum.Api.html#modify_guild_member/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_member/4","doc":"```elixir\nNostrum.Api.modify_guild_member(41771983423143937, 637162356451, nick: \"Nostrum\")\n{:ok, %Nostrum.Struct.Member{}}\n```","ref":"Nostrum.Api.html#modify_guild_member/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_member!/4","doc":"Same as `modify_guild_member/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_member!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_role/4","doc":"Modifies a guild role.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_update/0` event.\n\nAn optional `reason` can be specified for the audit log.\n\nIf successful, returns `{:ok, role}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild_role/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_role/4","doc":"* `:name` (string) - name of the role\n * `:permissions` (integer) - bitwise of the enabled/disabled permissions\n * `:color` (integer) - RGB color value (default: 0)\n * `:hoist` (boolean) - whether the role should be displayed separately in the sidebar\n * `:mentionable` (boolean) - whether the role should be mentionable","ref":"Nostrum.Api.html#modify_guild_role/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_role/4","doc":"```elixir\nNostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: \"foo-bar\")\n```","ref":"Nostrum.Api.html#modify_guild_role/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_role!/4","doc":"Same as `modify_guild_role/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_role!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_role_positions/3","doc":"Reorders a guild's roles.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires multiple\n`t:Nostrum.Consumer.guild_role_update/0` events.\n\nIf successful, returns `{:ok, roles}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`positions` is a list of maps that each map a role id with a position.","ref":"Nostrum.Api.html#modify_guild_role_positions/3"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_role_positions/3","doc":"```elixir\nNostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])\n```","ref":"Nostrum.Api.html#modify_guild_role_positions/3-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_role_positions!/3","doc":"Same as `modify_guild_role_positions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_role_positions!/3"},{"type":"function","title":"Nostrum.Api.modify_guild_scheduled_event/4","doc":"Modify a scheduled event for a guild.\n\nOptions are the same as for `create_guild_scheduled_event/2` except all fields are optional,\nwith the additional optional integer field `:status` which can be one of:\n\n * `1` - `SCHEDULED`\n * `2` - `ACTIVE`\n * `3` - `COMPLETED`\n * `4` - `CANCELLED`\n\nCopied from the official documentation:\n* If updating entity_type to `EXTERNAL`:\n * `channel_id` is required and must be set to null\n * `entity_metadata` with a `location` field must be provided\n * `scheduled_end_time` must be provided","ref":"Nostrum.Api.html#modify_guild_scheduled_event/4"},{"type":"function","title":"Nostrum.Api.modify_guild_sticker/3","doc":"Modify a guild sticker with the specified ID.\n\nPass in a map of properties to update, with any of the following keys:\n\n- `name`: Name of the sticker (2-30 characters)\n- `description`: Description of the sticker (2-100 characters)\n- `tags`: Autocomplete/suggestion tags for the sticker (max 200 characters)\n\nReturns an updated sticker on update completion.","ref":"Nostrum.Api.html#modify_guild_sticker/3"},{"type":"function","title":"Nostrum.Api.modify_guild_widget/2","doc":"Modifies a guild embed.","ref":"Nostrum.Api.html#modify_guild_widget/2"},{"type":"function","title":"Nostrum.Api.modify_webhook/3","doc":"Modifies a webhook.","ref":"Nostrum.Api.html#modify_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.modify_webhook/3","doc":"- `webhook_id` - Id of the webhook to modify.\n - `args` - Map with the following *optional* keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#modify_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.modify_webhook_with_token/4","doc":"Modifies a webhook with a token.\n\nThis method is exactly like `modify_webhook/1` but does not require\nauthentication.","ref":"Nostrum.Api.html#modify_webhook_with_token/4"},{"type":"function","title":"Parameters - Nostrum.Api.modify_webhook_with_token/4","doc":"- `webhook_id` - Id of the webhook to modify.\n - `webhook_token` - Token of the webhook to get.\n - `args` - Map with the following *optional* keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#modify_webhook_with_token/4-parameters"},{"type":"function","title":"Nostrum.Api.remove_guild_ban/3","doc":"Removes a ban for a user.\n\nUser to unban is specified by `guild_id` and `user_id`.\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#remove_guild_ban/3"},{"type":"function","title":"Nostrum.Api.remove_guild_member/3","doc":"Removes a member from a guild.\n\nThis event requires the `KICK_MEMBERS` permission. It fires a\n`t:Nostrum.Consumer.guild_member_remove/0` event.\n\nAn optional reason can be provided for the audit log with `reason`.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#remove_guild_member/3"},{"type":"function","title":"Examples - Nostrum.Api.remove_guild_member/3","doc":"```elixir\nNostrum.Api.remove_guild_member(1453827904102291, 18739485766253)\n{:ok}\n```","ref":"Nostrum.Api.html#remove_guild_member/3-examples"},{"type":"function","title":"Nostrum.Api.remove_guild_member!/3","doc":"Same as `remove_guild_member/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#remove_guild_member!/3"},{"type":"function","title":"Nostrum.Api.remove_guild_member_role/4","doc":"Removes a role from a member.\n\nRole to remove is specified by `role_id`.\nUser to remove role from is specified by `guild_id` and `user_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#remove_guild_member_role/4"},{"type":"function","title":"Nostrum.Api.remove_thread_member/2","doc":"Removes another user from a thread, requires that the thread is not archived.\n\nAlso requires the `MANAGE_THREADS` permission, or the creator of the thread if the thread is private.","ref":"Nostrum.Api.html#remove_thread_member/2"},{"type":"function","title":"Nostrum.Api.request/1","doc":"","ref":"Nostrum.Api.html#request/1"},{"type":"function","title":"Nostrum.Api.request/4","doc":"","ref":"Nostrum.Api.html#request/4"},{"type":"function","title":"Nostrum.Api.request_multipart/4","doc":"","ref":"Nostrum.Api.html#request_multipart/4"},{"type":"function","title":"Nostrum.Api.start_thread/3","doc":"Create a thread on a channel without an associated message.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread/3"},{"type":"function","title":"Options - Nostrum.Api.start_thread/3","doc":"- `name`: Name of the thread, max 100 characters.\n- `type`: Type of thread, can be either 11 (`GUILD_PUBLIC_THREAD`) or 12 (`GUILD_PRIVATE_THREAD`).\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `invitable`: whether non-moderators can add other non-moderators to a thread; only available when creating a private thread defaults to `false`.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.","ref":"Nostrum.Api.html#start_thread/3-options"},{"type":"function","title":"Nostrum.Api.start_thread_in_forum_channel/3","doc":"Create a new thread in a forum channel.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3"},{"type":"function","title":"Options - Nostrum.Api.start_thread_in_forum_channel/3","doc":"- `name`: Name of the thread, max 100 characters.\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.\n- `applied_tags`: An array of tag ids to apply to the thread.\n- `message`: The first message in the created thread.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3-options"},{"type":"function","title":"Thread Message Options - Nostrum.Api.start_thread_in_forum_channel/3","doc":"- `content`: The content of the message.\n- `embeds`: A list of embeds.\n- `allowed_mentions`: Allowed mentions object.\n- `components`: A list of components.\n- `sticker_ids`: A list of sticker ids.\n- `:files` - a list of files where each element is the same format as the `:file` option. If both\n `:file` and `:files` are specified, `:file` will be prepended to the `:files` list.\n\nAt least one of `content`, `embeds`, `sticker_ids`, or `files` must be specified.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3-thread-message-options"},{"type":"function","title":"Nostrum.Api.start_thread_with_message/4","doc":"Create a thread on a channel message.\n\nThe `thread_id` will be the same as the id of the message, as such no message can have more than one thread.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread_with_message/4"},{"type":"function","title":"Options - Nostrum.Api.start_thread_with_message/4","doc":"- `name`: Name of the thread, max 100 characters.\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.","ref":"Nostrum.Api.html#start_thread_with_message/4-options"},{"type":"function","title":"Nostrum.Api.start_typing/1","doc":"Triggers the typing indicator.\n\nTriggers the typing indicator in the channel specified by `channel_id`.\nThe typing indicator lasts for about 8 seconds and then automatically stops.\n\nReturns `{:ok}` if successful. `error` otherwise.","ref":"Nostrum.Api.html#start_typing/1"},{"type":"function","title":"Nostrum.Api.start_typing!/1","doc":"Same as `start_typing/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#start_typing!/1"},{"type":"function","title":"Nostrum.Api.sync_guild_integrations/2","doc":"Syncs a guild integration.\n\nIntegration to sync is specified by `guild_id` and `integeration_id`.","ref":"Nostrum.Api.html#sync_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.update_shard_status/5","doc":"Updates the status of the bot for a certain shard.","ref":"Nostrum.Api.html#update_shard_status/5"},{"type":"function","title":"Parameters - Nostrum.Api.update_shard_status/5","doc":"- `pid` - Pid of the shard.\n - `status` - Status of the bot.\n - `game` - The 'playing' text of the bot. Empty will clear.\n - `type` - The type of status to show. 0 (Playing) | 1 (Streaming) | 2 (Listening) | 3 (Watching)\n - `stream` - URL of twitch.tv stream","ref":"Nostrum.Api.html#update_shard_status/5-parameters"},{"type":"function","title":"Nostrum.Api.update_status/4","doc":"Updates the status of the bot for all shards.\n\nSee `update_shard_status/5` for usage.","ref":"Nostrum.Api.html#update_status/4"},{"type":"function","title":"Nostrum.Api.update_voice_state/4","doc":"Joins, moves, or disconnects the bot from a voice channel.\n\nThe correct shard to send the update to will be inferred from the\n`guild_id`. If a corresponding `guild_id` is not found a cache error will be\nraised.\n\nTo disconnect from a channel, `channel_id` should be set to `nil`.","ref":"Nostrum.Api.html#update_voice_state/4"},{"type":"type","title":"Nostrum.Api.allowed_mention/0","doc":"Represents which mentions to allow in a message.\n\nThis can be sent on its own or in a list to allow multiple types of\nmentions in a message, see `t:allowed_mentions/0` for details.","ref":"Nostrum.Api.html#t:allowed_mention/0"},{"type":"type","title":"Nostrum.Api.allowed_mentions/0","doc":"Represents mentions to allow in a message.\n\nWith this option you can control when content from a message should trigger a ping.\nConsider using this option when you are going to display user generated content.","ref":"Nostrum.Api.html#t:allowed_mentions/0"},{"type":"type","title":"Allowed values - Nostrum.Api.allowed_mentions/0","doc":"* `:all` (default) - Ping everything as usual\n * `:none` - Nobody will be pinged\n * `:everyone` - Allows to ping @here and @everyone\n * `:users` - Allows to ping users\n * `:roles` - Allows to ping roles\n * `{:users, list}` - Allows to ping list of users. Can contain up to 100 ids of users.\n * `{:roles, list}` - Allows to ping list of roles. Can contain up to 100 ids of roles.\n * list - a list containing the values above.","ref":"Nostrum.Api.html#t:allowed_mentions/0-allowed-values"},{"type":"type","title":"Nostrum.Api.emoji/0","doc":"Represents an emoji for interacting with reaction endpoints.","ref":"Nostrum.Api.html#t:emoji/0"},{"type":"type","title":"Nostrum.Api.error/0","doc":"Represents a failed response from the API.\n\nThis occurs when `:gun` fails, or when the API doesn't respond with `200` or `204`.","ref":"Nostrum.Api.html#t:error/0"},{"type":"type","title":"Nostrum.Api.limit/0","doc":"Represents a limit used to retrieve messages.\n\nInteger number of messages, or :infinity to retrieve all messages.","ref":"Nostrum.Api.html#t:limit/0"},{"type":"type","title":"Nostrum.Api.locator/0","doc":"Represents a tuple used to locate messages.\n\nThe first element of the tuple is an atom.\nThe second element will be a message_id as an integer.\nThe tuple can also be empty to search from the most recent message in the channel","ref":"Nostrum.Api.html#t:locator/0"},{"type":"type","title":"Nostrum.Api.matrix/0","doc":"","ref":"Nostrum.Api.html#t:matrix/0"},{"type":"type","title":"Nostrum.Api.options/0","doc":"Represents optional parameters for Api functions.\n\nEach function has documentation regarding what parameters it\nsupports or needs.","ref":"Nostrum.Api.html#t:options/0"},{"type":"type","title":"Nostrum.Api.status/0","doc":"Represents different statuses the bot can have.\n\n - `:dnd` - Red circle.\n - `:idle` - Yellow circle.\n - `:online` - Green circle.\n - `:invisible` - The bot will appear offline.","ref":"Nostrum.Api.html#t:status/0"},{"type":"type","title":"Nostrum.Api.thread_with_message_params/0","doc":"","ref":"Nostrum.Api.html#t:thread_with_message_params/0"},{"type":"type","title":"Nostrum.Api.thread_without_message_params/0","doc":"","ref":"Nostrum.Api.html#t:thread_without_message_params/0"},{"type":"behaviour","title":"Nostrum.Consumer","doc":"Consumer process for gateway event handling.","ref":"Nostrum.Consumer.html"},{"type":"behaviour","title":"Consuming gateway events - Nostrum.Consumer","doc":"Events are first ingested by nostrum's cache. Afterwards, they are sent to\nany subscribed consumers via `Nostrum.ConsumerGroup`.\n\nBy default, nostrum will start a process for each event. This gives us free\nparallelism and isolation. You therefore do not need to start more than one\nconsumer in your supervision tree. If you want to override this behaviour,\nimplement the `handle_info/2` function in your consumer. For reference, this\nis the default implementation:\n\n```elixir\n def handle_info({:event, event}, state) do\n Task.start(fn ->\n try do\n __MODULE__.handle_event(event)\n rescue\n e ->\n Logger.error(\"Error in event handler: #{Exception.format_error(e, __STACKTRACE__)}\")\n end\n end)\n\n {:noreply, state}\n end\n```","ref":"Nostrum.Consumer.html#module-consuming-gateway-events"},{"type":"behaviour","title":"Running multiple consumers - Nostrum.Consumer","doc":"**Every process that is in a `Nostrum.ConsumerGroup` receives every event**:\nit is therefore not recommended to create multiple consumers if a single one\ncould accomplish the job.","ref":"Nostrum.Consumer.html#module-running-multiple-consumers"},{"type":"behaviour","title":"Example consumer - Nostrum.Consumer","doc":"An example consumer could look as follows:\n\n```elixir\n# Sourced from examples/event_consumer.ex\ndefmodule ExampleSupervisor do\n use Supervisor\n\n def start_link(args) do\n Supervisor.start_link(__MODULE__, args, name: __MODULE__)\n end\n\n @impl true\n def init(_init_arg) do\n children = [ExampleConsumer]\n\n Supervisor.init(children, strategy: :one_for_one)\n end\nend\n\ndefmodule ExampleConsumer do\n use Nostrum.Consumer\n\n alias Nostrum.Api\n\n def handle_event({:MESSAGE_CREATE, msg, _ws_state}) do\n case msg.content do\n \"!sleep\" ->\n Api.create_message(msg.channel_id, \"Going to sleep...\")\n # This won't stop other events from being handled.\n Process.sleep(3000)\n\n \"!ping\" ->\n Api.create_message(msg.channel_id, \"pyongyang!\")\n\n \"!raise\" ->\n # This won't crash the entire Consumer.\n raise \"No problems here!\"\n\n _ ->\n :ignore\n end\n end\nend\n\n```\n\n> ### `use Nostrum.Consumer` {: .info}\n>\n> Using `Nostrum.Consumer` will:\n>\n> - `use GenServer` (as the consumer is built on `GenServer`)\n> - set the behaviour to `Nostrum.Consumer`\n> - define `child_spec/1`, `start_link/1` and `init/1` for the `GenServer` to\n> automatically join the `Nostrum.ConsumerGroup` on boot\n> - define `handle_info/2` to automatically dispatch any events to your\n> `c:handle_event/1` via a `Task`\n> - inject a default `handle_event/1` clause to ignore any unhandled events.","ref":"Nostrum.Consumer.html#module-example-consumer"},{"type":"callback","title":"Nostrum.Consumer.handle_event/1","doc":"Callback used to handle events.","ref":"Nostrum.Consumer.html#c:handle_event/1"},{"type":"callback","title":"Event - Nostrum.Consumer.handle_event/1","doc":"`event` is a tuple describing the event. The tuple will include information in\nthe following format:\n```elixir\n{event_name, {event_payload(s)}, WSState.t}\n```\n\nFor example, a message create will look like this\n```elixir\n{:MESSAGE_CREATE, Nostrum.Struct.Message.t, WSState.t}\n```\n\nIn some cases there will be multiple payloads when something is updated, so as\nto include the new and the old versions. In the event of there being two payloads,\nthe old payload will always be first, followed by the new payload.\n```elixir\n{:USER_UPDATE, {old_user :: Nostrum.Struct.User.t, new_user :: Nostrum.Struct.User.t}, WSState.t()}\n```\n\nFor a full listing of events, please see `t:Nostrum.Consumer.event/0`.","ref":"Nostrum.Consumer.html#c:handle_event/1-event"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_create/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_create/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_delete/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_execute/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_execute/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_update/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_update/0"},{"type":"type","title":"Nostrum.Consumer.channel_create/0","doc":"Dispatched when a channel is created.\n\nStarting from [API and Gateway V8](https://discord.com/developers/docs/change-log#api-and-gateway-v8),\nthis will never be sent for a DM.","ref":"Nostrum.Consumer.html#t:channel_create/0"},{"type":"type","title":"Nostrum.Consumer.channel_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_delete/0"},{"type":"type","title":"Nostrum.Consumer.channel_pins_ack/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_pins_ack/0"},{"type":"type","title":"Nostrum.Consumer.channel_pins_update/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_pins_update/0"},{"type":"type","title":"Nostrum.Consumer.channel_update/0","doc":"Dispatched when a channel is updated.\n\n`old_channel` will be `nil` when the pre-update channel could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:channel_update/0"},{"type":"type","title":"Nostrum.Consumer.event/0","doc":"","ref":"Nostrum.Consumer.html#t:event/0"},{"type":"type","title":"Nostrum.Consumer.guild_audit_log_entry_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_audit_log_entry_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_available/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_available/0"},{"type":"type","title":"Nostrum.Consumer.guild_ban_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_ban_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_ban_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_ban_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_emojis_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_emojis_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_integrations_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_integrations_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_member_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_remove/0","doc":"Dispatched when somebody leaves a guild.\n\nIn case the guild member intent is enabled but not the guild intent,\nnostrum may not cache the actual guild, and thus be unable to provide\nfull information about members leaving guilds. In that case, this event\nreceives the guild ID and a partial member object with the leaving user as\nprovided by Discord, but no information about the user's state on the guild.","ref":"Nostrum.Consumer.html#t:guild_member_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_update/0","doc":"Dispatched when a guild member is updated.\n\n`old_member` will be `nil` when the pre-update member could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:guild_member_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_members_chunk/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_members_chunk/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_role_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_role_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_update/0","doc":"Dispatched when a role on a guild is updated.\n\n`old_role` will be `nil` when the pre-update role could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:guild_role_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_user_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_user_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_user_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_user_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_stickers_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_stickers_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_unavailable/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_unavailable/0"},{"type":"type","title":"Nostrum.Consumer.guild_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_update/0"},{"type":"type","title":"Nostrum.Consumer.integration_create/0","doc":"","ref":"Nostrum.Consumer.html#t:integration_create/0"},{"type":"type","title":"Nostrum.Consumer.integration_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:integration_delete/0"},{"type":"type","title":"Nostrum.Consumer.integration_update/0","doc":"Different from `t:guild_integrations_update/0` in that more than only the `guild_id` is provided","ref":"Nostrum.Consumer.html#t:integration_update/0"},{"type":"type","title":"Nostrum.Consumer.interaction_create/0","doc":"","ref":"Nostrum.Consumer.html#t:interaction_create/0"},{"type":"type","title":"Nostrum.Consumer.message_ack/0","doc":"","ref":"Nostrum.Consumer.html#t:message_ack/0"},{"type":"type","title":"Nostrum.Consumer.message_create/0","doc":"","ref":"Nostrum.Consumer.html#t:message_create/0"},{"type":"type","title":"Nostrum.Consumer.message_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:message_delete/0"},{"type":"type","title":"Nostrum.Consumer.message_delete_bulk/0","doc":"","ref":"Nostrum.Consumer.html#t:message_delete_bulk/0"},{"type":"type","title":"Nostrum.Consumer.message_poll_vote_add/0","doc":"Dispatched when a user adds a vote to a poll.","ref":"Nostrum.Consumer.html#t:message_poll_vote_add/0"},{"type":"type","title":"Nostrum.Consumer.message_poll_vote_remove/0","doc":"Dispatched when a user removes a vote from a poll.","ref":"Nostrum.Consumer.html#t:message_poll_vote_remove/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_add/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_add/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove_all/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove_all/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove_emoji/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove_emoji/0"},{"type":"type","title":"Nostrum.Consumer.message_update/0","doc":"","ref":"Nostrum.Consumer.html#t:message_update/0"},{"type":"type","title":"Nostrum.Consumer.presence_update/0","doc":"Dispatched when a user's presence is updated.\n\n`old_presence` will be `nil` when the pre-update presence could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:presence_update/0"},{"type":"type","title":"Nostrum.Consumer.ready/0","doc":"","ref":"Nostrum.Consumer.html#t:ready/0"},{"type":"type","title":"Nostrum.Consumer.resumed/0","doc":"","ref":"Nostrum.Consumer.html#t:resumed/0"},{"type":"type","title":"Nostrum.Consumer.thread_create/0","doc":"Dispatched when a thread is created or when added to a private thread","ref":"Nostrum.Consumer.html#t:thread_create/0"},{"type":"type","title":"Nostrum.Consumer.thread_delete/0","doc":"Dispatched when a thread is deleted, if the thread was cached, contains the original thread, otherwise contains `:noop`","ref":"Nostrum.Consumer.html#t:thread_delete/0"},{"type":"type","title":"Nostrum.Consumer.thread_list_sync/0","doc":"Dispatched when gaining access to a channel","ref":"Nostrum.Consumer.html#t:thread_list_sync/0"},{"type":"type","title":"Nostrum.Consumer.thread_member_update/0","doc":"Dispatched when a `ThreadMember` for the current user is updated","ref":"Nostrum.Consumer.html#t:thread_member_update/0"},{"type":"type","title":"Nostrum.Consumer.thread_members_update/0","doc":"Dispatched when member(s) are added or removed from a thread","ref":"Nostrum.Consumer.html#t:thread_members_update/0"},{"type":"type","title":"Nostrum.Consumer.thread_update/0","doc":"","ref":"Nostrum.Consumer.html#t:thread_update/0"},{"type":"type","title":"Nostrum.Consumer.typing_start/0","doc":"","ref":"Nostrum.Consumer.html#t:typing_start/0"},{"type":"type","title":"Nostrum.Consumer.user_settings_update/0","doc":"","ref":"Nostrum.Consumer.html#t:user_settings_update/0"},{"type":"type","title":"Nostrum.Consumer.user_update/0","doc":"Dispatched when a user is updated.\n\n`old_user` will be `nil` when the pre-update user could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:user_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_incoming_packet/0","doc":"Dispatched when async listening is enabled and another user is actively speaking\n\nThe second tuple element is an `t:Nostrum.Voice.rtp_opus/0`, which is a tuple with\nRTP header information and an opus packet. While someone is actively talking, you can\nexpect about 50 events per second per speaking user.\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.\nThat struct contains a `t:Nostrum.Struct.VoiceWSState.ssrc_map/0` that can determine the speaking user based\non the SSRC.","ref":"Nostrum.Consumer.html#t:voice_incoming_packet/0"},{"type":"type","title":"Nostrum.Consumer.voice_ready/0","doc":"Dispatched when the bot is ready to begin sending audio after joining a voice channel\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.","ref":"Nostrum.Consumer.html#t:voice_ready/0"},{"type":"type","title":"Nostrum.Consumer.voice_server_update/0","doc":"","ref":"Nostrum.Consumer.html#t:voice_server_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_speaking_update/0","doc":"Dispatched when the bot starts or stops speaking\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.","ref":"Nostrum.Consumer.html#t:voice_speaking_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_state_update/0","doc":"","ref":"Nostrum.Consumer.html#t:voice_state_update/0"},{"type":"type","title":"Nostrum.Consumer.webhooks_update/0","doc":"","ref":"Nostrum.Consumer.html#t:webhooks_update/0"},{"type":"module","title":"Nostrum.ConsumerGroup","doc":"Registers consumers and handles event dispatch.","ref":"Nostrum.ConsumerGroup.html"},{"type":"function","title":"Nostrum.ConsumerGroup.child_spec/1","doc":"","ref":"Nostrum.ConsumerGroup.html#child_spec/1"},{"type":"function","title":"Nostrum.ConsumerGroup.demonitor/1","doc":"Stop monitoring the given reference.","ref":"Nostrum.ConsumerGroup.html#demonitor/1"},{"type":"function","title":"Nostrum.ConsumerGroup.dispatch/1","doc":"Dispatch the given event(s) to all consumers.\n\nThis is called by nostrum internally, you likely won't need to call this\nmanually.","ref":"Nostrum.ConsumerGroup.html#dispatch/1"},{"type":"function","title":"Nostrum.ConsumerGroup.join/0","doc":"Equivalent to `ConsumerGroup.join(self())`. See `join/1`.","ref":"Nostrum.ConsumerGroup.html#join/0"},{"type":"function","title":"Nostrum.ConsumerGroup.join/1","doc":"Join the given process to the consumers.\n\nIf no process is given, joins the current process to the consumers. This can\nbe used for subscribing to gateway events and awaiting them inline.\n\nAfter the process has joined, it will receive any events sent by nostrum's\ngateway dispatch. These events are sent as messages `{:event,\nt:Consumer.Event.t/0}`. The given `pid` is automatically unsubscribed when it\nterminates.\n\nNote that there is currently no filtering done. If the gateway sends a lot of\nmessages and the event subscriber does not terminate swiftly, its message\nqueue will keep growing.","ref":"Nostrum.ConsumerGroup.html#join/1"},{"type":"function","title":"Example - Nostrum.ConsumerGroup.join/1","doc":"The following example illustrates how to use this to implement inline event\nawaiting:\n\n```elixir\ndefmodule MyBot.Command\n alias Nostrum.Api\n alias Nostrum.ConsumerGroup\n alias Nostrum.Struct.Message\n alias Nostrum.Struct.User\n\n def command(%Message{author: %User{id: author_id}}) do\n Api.create_message!(msg, \"Reply 'y' in 5 seconds to confirm ordering a large burger menu.\")\n ConsumerGroup.join()\n receive do\n {:event, {:MESSAGE_CREATE, %Message{author: %User{id: author_id}, content: \"y\"}, _}} ->\n Api.create_message!(msg, \"The large burger menu is coming.\")\n after\n 5_000 ->\n Api.create_message!(msg, \"Too slow!\")\n end\n end\nend\n```","ref":"Nostrum.ConsumerGroup.html#join/1-example"},{"type":"function","title":"Nostrum.ConsumerGroup.monitor/0","doc":"Monitor the consumer group for changes.\n\nReturn the initial state of the group on first call. Further updates are\ndelivered as messages to the calling process, see `:pg.monitor/2` for\ndetails. The returned `t:reference/0` must be saved for later calls to\n`demonitor/1`.","ref":"Nostrum.ConsumerGroup.html#monitor/0"},{"type":"function","title":"Nostrum.ConsumerGroup.start_link/1","doc":"","ref":"Nostrum.ConsumerGroup.html#start_link/1"},{"type":"module","title":"Nostrum.Permission","doc":"Functions that work on permissions.\n\nSome functions return a list of permissions. You can use enumerable functions\nto work with permissions:\n\n```elixir\nalias Nostrum.Cache.GuildCache\nalias Nostrum.Struct.Guild.Member\n\nguild = GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nmember_perms = Member.guild_permissions(member, guild)\n\nif :administrator in member_perms do\n IO.puts(\"This user has the administrator permission.\")\nend\n```","ref":"Nostrum.Permission.html"},{"type":"function","title":"Nostrum.Permission.all/0","doc":"Returns a list of all permissions.","ref":"Nostrum.Permission.html#all/0"},{"type":"function","title":"Nostrum.Permission.from_bit/1","doc":"Converts the given bit to a permission.\n\nThis function returns `:error` if `bit` does not map to a permission.","ref":"Nostrum.Permission.html#from_bit/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bit/1","doc":"```elixir\niex> Nostrum.Permission.from_bit(0x04000000)\n{:ok, :change_nickname}\n\niex> Nostrum.Permission.from_bit(0)\n:error\n```","ref":"Nostrum.Permission.html#from_bit/1-examples"},{"type":"function","title":"Nostrum.Permission.from_bit!/1","doc":"Same as `from_bit/1`, but raises `ArgumentError` in case of failure.","ref":"Nostrum.Permission.html#from_bit!/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bit!/1","doc":"```elixir\niex> Nostrum.Permission.from_bit!(0x04000000)\n:change_nickname\n\niex> Nostrum.Permission.from_bit!(0)\n** (ArgumentError) expected a valid bit, got: `0`\n```","ref":"Nostrum.Permission.html#from_bit!/1-examples"},{"type":"function","title":"Nostrum.Permission.from_bitset/1","doc":"Converts the given bitset to a list of permissions.\n\nIf invalid bits are given they will be omitted from the results.","ref":"Nostrum.Permission.html#from_bitset/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bitset/1","doc":"```elixir\niex> Nostrum.Permission.from_bitset(0x08000002)\n[:manage_nicknames, :kick_members]\n\niex> Nostrum.Permission.from_bitset(0x4000000000000)\n[]\n```","ref":"Nostrum.Permission.html#from_bitset/1-examples"},{"type":"macro","title":"Nostrum.Permission.is_permission/1","doc":"Returns `true` if `term` is a permission; otherwise returns `false`.","ref":"Nostrum.Permission.html#is_permission/1"},{"type":"macro","title":"Examples - Nostrum.Permission.is_permission/1","doc":"```elixir\niex> Nostrum.Permission.is_permission(:administrator)\ntrue\n\niex> Nostrum.Permission.is_permission(:not_a_permission)\nfalse\n```","ref":"Nostrum.Permission.html#is_permission/1-examples"},{"type":"function","title":"Nostrum.Permission.to_bit/1","doc":"Converts the given permission to a bit.","ref":"Nostrum.Permission.html#to_bit/1"},{"type":"function","title":"Examples - Nostrum.Permission.to_bit/1","doc":"```elixir\niex> Nostrum.Permission.to_bit(:administrator)\n8\n```","ref":"Nostrum.Permission.html#to_bit/1-examples"},{"type":"function","title":"Nostrum.Permission.to_bitset/1","doc":"Converts the given enumerable of permissions to a bitset.","ref":"Nostrum.Permission.html#to_bitset/1"},{"type":"function","title":"Examples - Nostrum.Permission.to_bitset/1","doc":"```elixir\niex> Nostrum.Permission.to_bitset([:administrator, :create_instant_invite])\n9\n```","ref":"Nostrum.Permission.html#to_bitset/1-examples"},{"type":"type","title":"Nostrum.Permission.bit/0","doc":"Represents a single permission as a bitvalue.","ref":"Nostrum.Permission.html#t:bit/0"},{"type":"type","title":"Nostrum.Permission.bitset/0","doc":"Represents a set of permissions as a bitvalue.","ref":"Nostrum.Permission.html#t:bitset/0"},{"type":"type","title":"Nostrum.Permission.general_permission/0","doc":"","ref":"Nostrum.Permission.html#t:general_permission/0"},{"type":"type","title":"Nostrum.Permission.t/0","doc":"","ref":"Nostrum.Permission.html#t:t/0"},{"type":"type","title":"Nostrum.Permission.text_permission/0","doc":"","ref":"Nostrum.Permission.html#t:text_permission/0"},{"type":"type","title":"Nostrum.Permission.voice_permission/0","doc":"","ref":"Nostrum.Permission.html#t:voice_permission/0"},{"type":"module","title":"Nostrum.Voice","doc":"Interface for playing and listening to audio through Discord's voice channels.\n\n# Using Discord Voice Channels\nTo play sound in Discord with Nostrum, you'll need `ffmpeg` to be installed.\nIf you don't have the executable `ffmpeg` in the path, the absolute path may\nbe configured through config keys `:nostrum, :ffmpeg`. If you don't want to use\nffmpeg, read on to the next section.\n\nA bot may be connected to at most one voice channel per guild. For this reason,\nmost of the functions in this module take a guild id, and the resulting action\nwill be performed in the given guild's voice channel that the bot is connected to.\n\nThe primary Discord gateway responsible for all text based communication relies on\none websocket connection per shard, where small bots typically only have one shard.\nThe Discord voice gateways work by establishing a websocket connection per guild/channel.\nAfter some handshaking on this connection, audio data can be sent over UDP/RTP. Behind\nthe scenes the voice websocket connections are implemented nearly the same way the main\nshard websocket connections are, and require no developer intervention.\n\nIn addition to playing audio, listening to incoming audio is supported through the\nfunctions `listen/3` and `start_listen_async/1`.","ref":"Nostrum.Voice.html"},{"type":"module","title":"Voice Without FFmpeg - Nostrum.Voice","doc":"If you wish to BYOE (Bring Your Own Encoder), there are a few options.\n - Use `:raw` as `type` for `play/4`\n - Provide the complete list of opus frames as the input\n - Use `:raw_s` as `type` for `play/4`\n - Provide a stateful enumerable of opus frames as input (think GenServer wrapped in `Stream.unfold/2`)\n - Use lower level functions to send opus frames at your leisure\n - Send packets on your own time using `send_frames/2`","ref":"Nostrum.Voice.html#module-voice-without-ffmpeg"},{"type":"function","title":"Nostrum.Voice.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Voice.html#child_spec/1"},{"type":"function","title":"Nostrum.Voice.connect_to_gateway/1","doc":"Low-level. Manually connect to voice websockets gateway.\n\nThis function should only be called if config option `:voice_auto_connect` is set to `false`.\nBy default Nostrum will automatically create a voice gateway when joining a channel.","ref":"Nostrum.Voice.html#connect_to_gateway/1"},{"type":"function","title":"Nostrum.Voice.create_ogg_bitstream/1","doc":"Create a complete Ogg logical bitstream from a list of Opus packets.\n\nThis function takes a list of opus packets and returns a list of Ogg\nencapsulated Opus pages for a single Ogg logical bitstream.\n\nIt is highly recommended to learn about the Ogg container format to\nunderstand how to use the data.\n\nTo get started, assuming you have a list of evenly temporally spaced\nand consecutive opus packets from a single source that you want written\nto a file, you can run the following:\n\n```elixir\nbitstream =\n opus_packets\n |> create_ogg_bitstream()\n |> :binary.list_to_bin()\n\nFile.write!(\"my_recording.ogg\", bitstream)\n```\n\nWhen creating a logical bitstream, ensure that the packets are all from a single SSRC.\nWhen listening in a channel with multiple speakers, you should be storing the received\npackets in unique buckets for each SSRC so that the multiple audio sources don't become\njumbled. A single logical bitstream should represent audio data from a single speaker.\nAn Ogg physical bitstream (e.g. a file) may be composed of multiple interleaved Ogg\nlogical bitstreams as each logical bitstream and its constituent pages contain a unique\nand randomly generated bitstream serial number, but this is a story for another time.\n\nAssuming you have a list of `t:rtp_opus/0` packets that are not separated by ssrc, you\nmay do the following:\n\n```elixir\njumbled_packets\n|> Stream.filter(fn {{_seq, _time, ssrc}, _opus} -> ssrc == particular_ssrc end)\n|> Enum.map(fn {{_seq, _time, _ssrc}, opus} -> opus end)\n|> create_ogg_bitstream()\n```","ref":"Nostrum.Voice.html#create_ogg_bitstream/1"},{"type":"function","title":"Nostrum.Voice.extract_opus_packet/1","doc":"Extract the opus packet from the RTP packet received from Discord.\n\nIncoming voice RTP packets contain a fixed length RTP header and an optional\nRTP header extension, which must be stripped to retrieve the underlying opus packet.","ref":"Nostrum.Voice.html#extract_opus_packet/1"},{"type":"function","title":"Nostrum.Voice.get_channel_id/1","doc":"Gets the id of the voice channel that the bot is connected to.","ref":"Nostrum.Voice.html#get_channel_id/1"},{"type":"function","title":"Parameters - Nostrum.Voice.get_channel_id/1","doc":"- `guild_id` - ID of guild that the resultant channel belongs to.\n\nReturns the `channel_id` for the channel the bot is connected to, otherwise `nil`.","ref":"Nostrum.Voice.html#get_channel_id/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.get_channel_id/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.get_channel(123456789)\n420691337\n\niex> Nostrum.Voice.leave_channel(123456789)\n\niex> Nostrum.Voice.get_channel(123456789)\nnil\n```","ref":"Nostrum.Voice.html#get_channel_id/1-examples"},{"type":"function","title":"Nostrum.Voice.get_current_url/1","doc":"Gets the current URL being played.\n\nIf `play/4` was invoked with type `:url`, `:ytdl`, or `:stream`, this function will return\nthe URL given as input last time it was called.\n\nIf `play/4` was invoked with type `:pipe`, `:raw`, or `:raw_s`, this will return `nil`\nas the input is raw audio data, not be a readable URL string.","ref":"Nostrum.Voice.html#get_current_url/1"},{"type":"function","title":"Nostrum.Voice.get_ssrc_map/1","doc":"Gets a map of RTP SSRC to user id.\n\nWithin a voice channel, an SSRC (synchronization source) will uniquely map to a\nuser id of a user who is speaking.\n\nIf listening to incoming voice packets asynchronously, this function will not be\nneeded as the `t:Nostrum.Struct.VoiceWSState.ssrc_map/0` will be available with every event.\nIf listening with `listen/3`, this function may be used. It is recommended to\ncache the result of this function and only call it again when you encounter an\nSSRC that is not present in the cached result. This is to reduce excess load on the\nvoice websocket and voice state processes.","ref":"Nostrum.Voice.html#get_ssrc_map/1"},{"type":"function","title":"Nostrum.Voice.join_channel/5","doc":"Joins or moves the bot to a voice channel.\n\nThis function calls `Nostrum.Api.update_voice_state/4`.\n\nThe fifth argument `persist` defaults to `true`. When true, if calling `join_channel/5`\nwhile already in a different channel in the same guild, the audio source will be persisted\nin the new channel. If the audio is actively playing at the time of changing channels,\nit will resume playing automatically upon joining. If there is an active audio source\nthat has been paused before changing channels, the audio will be able to be resumed manually if\n`resume/1` is called.\n\nIf `persist` is set to false, the audio source will be destroyed before changing channels.\nThe same effect is achieved by calling `stop/1` or `leave_channel/1` before `join_channel/5`","ref":"Nostrum.Voice.html#join_channel/5"},{"type":"function","title":"Nostrum.Voice.leave_channel/1","doc":"Leaves the voice channel of the given guild id.\n\nThis function is equivalent to calling `Nostrum.Api.update_voice_state(guild_id, nil)`.","ref":"Nostrum.Voice.html#leave_channel/1"},{"type":"function","title":"Nostrum.Voice.listen/3","doc":"Listen for incoming voice RTP packets.","ref":"Nostrum.Voice.html#listen/3"},{"type":"function","title":"Parameters - Nostrum.Voice.listen/3","doc":"- `guild_id` - ID of guild that the bot is listening to.\n - `num_packets` - Number of packets to wait for.\n - `raw_rtp` - Whether to return raw RTP packets. Defaults to `false`.\n\nReturns a list of tuples of type `t:rtp_opus/0`.\n\nThe inner tuple contains fields from the RTP header and can be matched against\nto retrieve information about the packet such as the SSRC, which identifies the source.\nNote that RTP timestamps are completely unrelated to Unix timestamps.\n\nIf `raw_rtp` is set to `true`, a list of raw RTP packets is returned instead.\nTo extract an opus packet from an RTP packet, see `extract_opus_packet/1`.\n\nThis function will block until the specified number of packets is received.","ref":"Nostrum.Voice.html#listen/3-parameters"},{"type":"function","title":"Nostrum.Voice.pad_opus/1","doc":"Pad discontinuous chunks of opus audio with silence.\n\nThis function takes a list of `t:rtp_opus/0`, which is a tuple containing RTP bits and\nopus audio data. It returns a list of opus audio packets. The reason the input has to be in\nthe `t:rtp_opus/0` tuple format returned by `listen/3` and async listen events is that the\nRTP packet header contains info on the relative timestamps of incoming packets; the opus\npackets themselves don't contain information relating to timing.\n\nThe Discord client will continue to internally increment the `t:rtp_timestamp()` when the\nuser is not speaking such that the duration of pauses can be determined from the RTP packets.\nBots will typically not behave this way, so if you call this function on audio produced by\na bot it is very likely that no silence will be inserted.\n\nThe use case of this function is as follows:\nConsider a user speaks for two seconds, pauses for ten seconds, then speaks for another two\nseconds. During the pause, no RTP packets will be received, so if you create a bitstream from\nit, the resulting audio will be both two-second speaking segments consecutively without the\nlong pause in the middle. If you wish to preserve the timing of the speaking and include the\npause, calling this function will interleave the appropriate amount of opus silence packets\nto maintain temporal fidelity.\n\nNote that the Discord client currently sends about 10 silence packets (200 ms) each time it\ndetects end of speech, so creating a bitstream without first padding your audio with this\nfunction will maintain short silences between speech segments.\n\n*This function should only be called on a collection of RTP packets from a single SSRC*","ref":"Nostrum.Voice.html#pad_opus/1"},{"type":"function","title":"Nostrum.Voice.pause/1","doc":"Pauses the current sound being played in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#pause/1"},{"type":"function","title":"Parameters - Nostrum.Voice.pause/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be paused in.\n\nReturns `{:error, reason}` if unable to pause or no sound is playing, else `:ok`.\n\nThis function is similar to `stop/1`, except that the sound may be\nresumed after being paused.","ref":"Nostrum.Voice.html#pause/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.pause/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/files/twelve_hour_loop_of_waterfall_sounds.mp3\")\n\niex> Nostrum.Voice.pause(123456789)\n```","ref":"Nostrum.Voice.html#pause/1-examples"},{"type":"function","title":"Nostrum.Voice.play/4","doc":"Plays sound in the voice channel the bot is in.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#play/4"},{"type":"function","title":"Parameters - Nostrum.Voice.play/4","doc":"- `guild_id` - ID of guild whose voice channel the sound will be played in.\n - `input` - Audio to be played, `t:play_input/0`. Input type determined by `type` parameter.\n - `type` - Type of input, `t:play_type/0` (defaults to `:url`).\n - `:url` Input will be [any url that `ffmpeg` can read](https://www.ffmpeg.org/ffmpeg-protocols.html).\n - `:pipe` Input will be data that is piped to stdin of `ffmpeg`.\n - `:ytdl` Input will be url for `youtube-dl`, which gets automatically piped to `ffmpeg`.\n - `:stream` Input will be livestream url for `streamlink`, which gets automatically piped to `ffmpeg`.\n - `:raw` Input will be an enumerable of raw opus packets. This bypasses `ffmpeg` and all options.\n - `:raw_s` Same as `:raw` but input must be stateful, i.e. calling `Enum.take/2` on `input` is not idempotent.\n - `options` - See options section below.\n\n\nReturns `{:error, reason}` if unable to play or a sound is playing, else `:ok`.","ref":"Nostrum.Voice.html#play/4-parameters"},{"type":"function","title":"Options - Nostrum.Voice.play/4","doc":"- `:start_pos` (string) - The start position of the audio to be played. Defaults to beginning.\n - `:duration` (string) - The duration to of the audio to be played. Defaults to entire duration.\n - `:realtime` (boolean) - Make ffmpeg process the input in realtime instead of as fast as possible. Defaults to true.\n - `:volume` (number) - The output volume of the audio. Default volume is 1.0.\n - `:filter` (string) - Filter(s) to be applied to the audio. No filters applied by default.\n\n The values of `:start_pos` and `:duration` can be [any time duration that ffmpeg can read](https://ffmpeg.org/ffmpeg-utils.html#Time-duration).\n The `:filter` can be used multiple times in a single call (see examples).\n The values of `:filter` can be [any audio filters that ffmpeg can read](https://ffmpeg.org/ffmpeg-filters.html#Audio-Filters).\n Filters will be applied in order and can be as complex as you want. The world is your oyster!\n\n Note that using the `:volume` option is shortcut for the \"volume\" filter, and will be added to the end of the filter chain, acting as a master volume.\n Volume values between `0.0` and `1.0` act as standard operating range where `0` is off and `1` is max.\n Values greater than `1.0` will add saturation and distortion to the audio.\n Negative values act the same as their position but reverse the polarity of the waveform.\n\n Having all the ffmpeg audio filters available is *extremely powerful* so it may be worth learning some of them for your use cases.\n If you use any filters to *increase* the playback speed of your audio, it's recommended to set the `:realtime` option to `false`\n because realtime processing is relative to the original playback speed.","ref":"Nostrum.Voice.html#play/4-options"},{"type":"function","title":"Examples - Nostrum.Voice.play/4","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/music/FavoriteSong.mp3\", :url)\n\niex> Nostrum.Voice.play(123456789, \"~/music/NotFavoriteButStillGoodSong.mp3\", :url, volume: 0.5)\n\niex> Nostrum.Voice.play(123456789, \"~/music/ThisWillBeHeavilyDistorted.mp3\", :url, volume: 1000)\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> raw_data = File.read!(\"~/music/sound_effect.wav\")\n\niex> Nostrum.Voice.play(123456789, raw_data, :pipe)\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://www.youtube.com/watch?v=b4RJ-QGOtw4\", :ytdl,\n...> realtime: true, start_pos: \"0:17\", duration: \"30\")\n\niex> Nostrum.Voice.play(123456789, \"https://www.youtube.com/watch?v=0ngcL_5ekXo\", :ytdl,\n...> filter: \"lowpass=f=1200\", filter: \"highpass=f=300\", filter: \"asetrate=44100*0.5\")\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://www.twitch.tv/pestily\", :stream)\n\niex> Nostrum.Voice.play(123456789, \"https://youtu.be/LN4r-K8ZP5Q\", :stream)\n```","ref":"Nostrum.Voice.html#play/4-examples"},{"type":"function","title":"Nostrum.Voice.playing?/1","doc":"Checks if the bot is playing sound in a voice channel.","ref":"Nostrum.Voice.html#playing?/1"},{"type":"function","title":"Parameters - Nostrum.Voice.playing?/1","doc":"- `guild_id` - ID of guild to check if audio being played.\n\nReturns `true` if the bot is currently being played in a voice channel, otherwise `false`.","ref":"Nostrum.Voice.html#playing?/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.playing?/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://a-real-site.biz/RickRoll.m4a\")\n\niex> Nostrum.Voice.playing?(123456789)\ntrue\n\niex> Nostrum.Voice.pause(123456789)\n\niex> Nostrum.Voice.playing?(123456789)\nfalse\n```","ref":"Nostrum.Voice.html#playing?/1-examples"},{"type":"function","title":"Nostrum.Voice.ready?/1","doc":"Checks if the connection is up and ready to play audio.","ref":"Nostrum.Voice.html#ready?/1"},{"type":"function","title":"Parameters - Nostrum.Voice.ready?/1","doc":"- `guild_id` - ID of guild to check if voice connection is up.\n\nReturns `true` if the bot is connected to a voice channel, otherwise `false`.\n\nThis function does not check if audio is already playing. For that, use `playing?/1`.","ref":"Nostrum.Voice.html#ready?/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.ready?/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.ready?(123456789)\ntrue\n\niex> Nostrum.Voice.leave_channel(123456789)\n\niex> Nostrum.Voice.ready?(123456789)\nfalse\n```","ref":"Nostrum.Voice.html#ready?/1-examples"},{"type":"function","title":"Nostrum.Voice.resume/1","doc":"Resumes playing the current paused sound in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#resume/1"},{"type":"function","title":"Parameters - Nostrum.Voice.resume/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be resumed in.\n\nReturns `{:error, reason}` if unable to resume or no sound has been paused, otherwise returns `:ok`.\n\nThis function is used to resume a sound that had previously been paused.","ref":"Nostrum.Voice.html#resume/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.resume/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/stuff/Toto - Africa (Bass Boosted)\")\n\niex> Nostrum.Voice.pause(123456789)\n\niex> Nostrum.Voice.resume(123456789)\n```","ref":"Nostrum.Voice.html#resume/1-examples"},{"type":"function","title":"Nostrum.Voice.send_frames/2","doc":"Low-level. Send pre-encoded audio packets directly.\n\nSpeaking should be set to true via `Nostrum.Voice.set_is_speaking/2` before sending frames.\n\nOpus frames will be encrypted and prefixed with the appropriate RTP header and sent immediately.\nThe length of `frames` depends on how often you wish to send a sequence of frames.\nA single frame contains 20ms of audio. Sending more than 50 frames (1 second of audio)\nin a single function call may result in inconsistent playback rates.\n\n`Nostrum.Voice.playing?/1` will not return accurate values when using `send_frames/2`\ninstead of `Nostrum.Voice.play/4`","ref":"Nostrum.Voice.html#send_frames/2"},{"type":"function","title":"Nostrum.Voice.set_is_speaking/2","doc":"Low-level. Set speaking flag in voice channel.\n\nThis function does not need to be called unless you are sending audio frames\ndirectly using `Nostrum.Voice.send_frames/2`.","ref":"Nostrum.Voice.html#set_is_speaking/2"},{"type":"function","title":"Nostrum.Voice.start_listen_async/1","doc":"Start asynchronously receiving events for incoming RTP packets for an active voice session.\n\nThis is an alternative to the blocking `listen/3`. Events will be generated asynchronously\nwhen a user is speaking. See `t:Nostrum.Consumer.voice_incoming_packet/0` for more info.","ref":"Nostrum.Voice.html#start_listen_async/1"},{"type":"function","title":"Nostrum.Voice.stop/1","doc":"Stops the current sound being played in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#stop/1"},{"type":"function","title":"Parameters - Nostrum.Voice.stop/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be stopped in.\n\nReturns `{:error, reason}` if unable to stop or no sound is playing, else `:ok`.\n\nIf a sound has finished playing, this function does not need to be called to start\nplaying another sound.","ref":"Nostrum.Voice.html#stop/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.stop/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"http://brandthill.com/files/weird_dubstep_noises.mp3\")\n\niex> Nostrum.Voice.stop(123456789)\n```","ref":"Nostrum.Voice.html#stop/1-examples"},{"type":"function","title":"Nostrum.Voice.stop_listen_async/1","doc":"Stop asynchronously receiving events for incoming RTP packets for an active voice session.","ref":"Nostrum.Voice.html#stop_listen_async/1"},{"type":"type","title":"Nostrum.Voice.opus_packet/0","doc":"Opus packet","ref":"Nostrum.Voice.html#t:opus_packet/0"},{"type":"type","title":"Nostrum.Voice.play_input/0","doc":"The play input\n\nThe input given to `play/4`, either a compatible URL or binary audio data.\nSee `play/4` for more information.","ref":"Nostrum.Voice.html#t:play_input/0"},{"type":"type","title":"Nostrum.Voice.play_type/0","doc":"The type of play input\n\nThe type given to `play/4` determines how the input parameter is interpreted.\nSee `play/4` for more information.","ref":"Nostrum.Voice.html#t:play_type/0"},{"type":"type","title":"Nostrum.Voice.rtp_opus/0","doc":"Tuple with RTP header elements and opus packet","ref":"Nostrum.Voice.html#t:rtp_opus/0"},{"type":"type","title":"Nostrum.Voice.rtp_sequence/0","doc":"RTP sequence","ref":"Nostrum.Voice.html#t:rtp_sequence/0"},{"type":"type","title":"Nostrum.Voice.rtp_ssrc/0","doc":"RTP SSRC","ref":"Nostrum.Voice.html#t:rtp_ssrc/0"},{"type":"type","title":"Nostrum.Voice.rtp_timestamp/0","doc":"RTP timestamp","ref":"Nostrum.Voice.html#t:rtp_timestamp/0"},{"type":"module","title":"Nostrum.Voice.Crypto.Aes","doc":"Handles encryption and decryption of outgoing and incoming voice data when an AES encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Aes.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Aes","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Aes.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Aes","doc":"AES is fully supported by the erlang `:crypto` module, so this module\njust provides a convenient wrapper around it for encryption and decryption.","ref":"Nostrum.Voice.Crypto.Aes.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Aes","doc":"Internally the functions `:crypto.crypto_one_time_aead/6` and `:crypto.crypto_one_time_aead/7` are\ncalled with the cipher argument set to `:aes_256_gcm`. Because these functions are implemented as\nNIFs with OpenSSL bindings, they faster than anything written in pure erlang/elixir.\n\nBecause the crypto function returns a tuple with the cipher text and tag (MAC) separately, the return\nvalue is an iolist with them in the order that Discord expects. This is done to reduce binary copies\nas the functions ingesting the encrypted messages all support iodata.\n\nReaders are encouraged to read more about the [erlang crypto module](https://www.erlang.org/doc/man/crypto).","ref":"Nostrum.Voice.Crypto.Aes.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Aes","doc":"AES is a well-established cipher and many modern CPUs have AES instruction sets to accelerate\nAES operations. While the Salsa20 and ChaCha20 stream ciphers are typically faster with pure\nsoftware implementations, hardware acceleration will typically give AES the leg up for performance.","ref":"Nostrum.Voice.Crypto.Aes.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Aes.decrypt/5","doc":"","ref":"Nostrum.Voice.Crypto.Aes.html#decrypt/5"},{"type":"function","title":"Nostrum.Voice.Crypto.Aes.encrypt/4","doc":"","ref":"Nostrum.Voice.Crypto.Aes.html#encrypt/4"},{"type":"module","title":"Nostrum.Voice.Crypto.Chacha","doc":"Handles encryption and decryption of outgoing and incoming voice data when a ChaCha encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Chacha.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Chacha","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Chacha","doc":"Erlang's `:crypto` module supports the chacha20_poly1305 AEAD stream cipher.\nAnalogously to Salsa20 and XSalsa20, XChaCha20 is a way to use 192-bit nonces\nwith ChaCha20 by hashing the key and part of the extended nonce to generate a\nsub-key, which is used as the input key for ChaCha20.\n\nTo leverage the crypto module, we had to implement the HChaCha20 hash function\nin elixir to then pass the resulting sub-key to the `crypto_one_time_aead`.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Chacha","doc":"The HChaCha20 function takes the first 16-bytes of the extended 24-byte XChaCha20 nonce,\nexpands the key and the 16-byte nonce slice into a block in place of the block count and\nusual smaller nonce. That block has 20 rounds of mutation, and instead of summing the block\nwith its starting state as is done with keystream generation, 8 of the 16 bytes are taken\nand used as the sub-key, which is the input key for the standard chacha20 cipher.\n\nEven though we've implemented the bulk of what's needed to generate chacha20 key streams\nfor encryption and decryption, we're only using this module to generate the inputs to\nuse the :crypto module's chacha20_poly1305 functionality in the capacity of xchacha20\nas is required by Discord with that encryption mode selected.\n\nThis is all in service of leveraging the performance benefits of the the NIF crypto\nfunctions, which are necessarily going to be more performant than anything implemented\nin pure elixir/erlang like the `:kcl` package.\n\n*ChaCha20 is a variant of the Salsa20 cipher. I will discuss in greater detail the implementation\nin the `Nostrum.Voice.Crypto.Salsa` module, where much is applicable here.*\n\nReferences for Salsa family of ciphers\n- https://cr.yp.to/snuffle/spec.pdf\n- https://cr.yp.to/chacha/chacha-20080128.pdf\n- https://cr.yp.to/snuffle/xsalsa-20110204.pdf\n- https://datatracker.ietf.org/doc/html/rfc7539\n- https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha","ref":"Nostrum.Voice.Crypto.Chacha.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Chacha","doc":"After the XChaCha20 sub-key is generated in elixir, the crypto NIF function performs the\nheavy lifting. If your bot is running on a machine without AES hardware acceleration, you\nmay find that using the chacha encryption mode yields better performance.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Chacha.decrypt/5","doc":"","ref":"Nostrum.Voice.Crypto.Chacha.html#decrypt/5"},{"type":"function","title":"Nostrum.Voice.Crypto.Chacha.encrypt/4","doc":"","ref":"Nostrum.Voice.Crypto.Chacha.html#encrypt/4"},{"type":"module","title":"Nostrum.Voice.Crypto.Salsa","doc":"Handles encryption and decryption of outgoing and incoming voice data when a ChaCha encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Salsa.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Salsa","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Salsa","doc":"To support xsalsa20_poly1305 without a NIF, we have to implement the\nSalsa20 cipher and HSalsa20 hash function to use 192-bit nonces in the capacity\nof XSalsa20.\n\nAlong with leveraging the :crypto module to perform the poly1305 MAC function\nand xor'ing arbitrary-length binaries, by being more thoughtful and explicit\nwith our implementation, we should be able to eek out better performance\nthan the `:kcl` package provides.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Salsa","doc":"The `:kcl` package is an impressive pure-elixir NaCl/libsodium compatible library\nthat Nostrum previously used for voice encryption. For our usage with Discord voice,\nwe only need the ability to encrypt and decrypt with 32-byte keys using 24-byte\nXSalsa20 nonces.\n\nSome of the key differences in our implementation compared to Kcl\n- Heavy use of explicit binary pattern matching instead of more traditional implicit enumeration\n- Intermediate block state stored in a 16-element tuple that is mutated during the 20-round hot loop instead of lists\n- Minimized the number binary copies, returning iolists when appropriate, instead of concatenating binaries\n- XOR whole keystream and message blocks instead of XOR'ing one byte at a time\n- Poly1305 MAC handled by crypto module instead of implemented in elixir\n- Only support 32-byte keys and 24-byte nonces (XSalsa20) instead of full NaCl/libsodium\n\nAdditionally there appears to be a bug in how the 16-byte block count is serialized during key expansion:\nIt's supposed to be little endian, and it happens to be for blocks 0-255, but for larger block counts,\nKcl may become incompatible with NaCl/libsodium-type libraries. For Discord's use case of encrypting short\n20 millisecond compressed audio packets, block counts were well-below this suspected problem threshold.\n\nThe cipher functions were implemented in the order they're defined in the original Salsa specification,\nand though it's using a lot of explicit binary pattern matching, it turned out to be quite legible.\nIn a single statement of binary pattern matching, the 512-bit initial block state is cast into 16\nlittle-endian 32-bit words. Standard elixir patterns might have you iterate through the binary until the\nend was reached, but matching and casting all sixteen block elements in a single statement then returning\na tuple is explicit, clear, and simple to understand when referenced against the spec.\n\nReaders interested in cryptography are encouraged to read more about the Salsa20/ChaCha20 ciphers.\n\nReferences for Salsa family of ciphers\n- https://cr.yp.to/snuffle/spec.pdf\n- https://cr.yp.to/chacha/chacha-20080128.pdf\n- https://cr.yp.to/snuffle/xsalsa-20110204.pdf\n- https://datatracker.ietf.org/doc/html/rfc7539\n- https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha","ref":"Nostrum.Voice.Crypto.Salsa.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Salsa","doc":"The entire keystream generation and xor'ing the message with the stream is done in elixir,\nonly performing the Poly1305 MAC function through the crypto module. Although it was implemented\nas thoughtfully and explicitly as possible with memory usage and performance in mind, using any\nof the Salsa modes will likely be less performant than ChaCha or AES.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.block_binary_to_tuple/1","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#block_binary_to_tuple/1"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.decrypt/3","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#decrypt/3"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.encrypt/3","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#encrypt/3"},{"type":"module","title":"Nostrum.Cache.CacheSupervisor","doc":"Supervises caches for nostrum structures.\n\nSee the documentation for the relevant submodules for details:\n\n- `Nostrum.Cache.GuildCache`\n- `Nostrum.Cache.Me`\n- `Nostrum.Cache.MemberCache`\n- `Nostrum.Cache.PresenceCache`\n- `Nostrum.Cache.UserCache`","ref":"Nostrum.Cache.CacheSupervisor.html"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.CacheSupervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.init/1","doc":"","ref":"Nostrum.Cache.CacheSupervisor.html#init/1"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.start_link/1","doc":"","ref":"Nostrum.Cache.CacheSupervisor.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Cache.ChannelGuildMapping","doc":"Cache behaviour & dispatcher for mapping channel IDs to their respective guilds.","ref":"Nostrum.Cache.ChannelGuildMapping.html"},{"type":"behaviour","title":"Purpose - Nostrum.Cache.ChannelGuildMapping","doc":"While retrieving the channels on a specific guild is trivial as they are\nstored on the guild, retrieving the guild a given channel belongs to is not\npossible with the regular data mode of channels. This module allows to\nretrieve guilds associated with a channel via `get/1`.","ref":"Nostrum.Cache.ChannelGuildMapping.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Cache.ChannelGuildMapping","doc":"By default, nostrum will use `Elixir.Nostrum.Cache.ChannelGuildMapping.ETS` to store the\nmapping. To override this, set the `[:caches, :channel_guild_mapping]`\nsetting on nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n caches: %{\n channel_guild_mapping: MyBot.Nostrum.Cache.ChannelGuildMapping\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Cache.ChannelGuildMapping.html#module-configuration"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.create/2","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#create/2"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.delete/1","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#delete/1"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.get/1","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#get/1"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:get/1"},{"type":"behaviour","title":"Nostrum.Cache.GuildCache","doc":"Cache behaviour & dispatcher for guilds.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.GuildCache.ETS will be used for caching guilds.\nYou can override this in the `:caches` option of the `:nostrum` application\nby setting the `:guilds` field to a different module implementing the\n`Nostrum.Cache.GuildCache` behaviour. Any module below\n`Nostrum.Cache.GuildCache` can be used as a cache.","ref":"Nostrum.Cache.GuildCache.html"},{"type":"behaviour","title":"Writing your own guild cache - Nostrum.Cache.GuildCache","doc":"As with the other caches, the guild cache API consists of three parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api`\ninstead.\n\n- functions for read operations, almost exclusively called by the end user\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement all callbacks in this module (except for\n`c:wrap_query/1`, since it is optional) for nostrum to work with your custom\ncache.\n\nThe \"upstream data\" wording in this module references the fact that the\ndata that the guild cache (and other caches) retrieves represents the raw\ndata we receive from the upstream connection, no attempt is made by nostrum\nto sanitize the data before it enters the cache. Caching implementations\nneed to cast the data to the resulting type themselves. A possible future\nimprovement would be moving the data casting into this module before the\nbacking cache implementation is called.","ref":"Nostrum.Cache.GuildCache.html#module-writing-your-own-guild-cache"},{"type":"function","title":"Nostrum.Cache.GuildCache.all/0","doc":"Returns an enumerable that yields all guilds in the cache.\n\nYou must wrap calls to this function in `wrap_query/1`.","ref":"Nostrum.Cache.GuildCache.html#all/0"},{"type":"callback","title":"Nostrum.Cache.GuildCache.all/0","doc":"Return an enumerable for all guilds in the cache.","ref":"Nostrum.Cache.GuildCache.html#c:all/0"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_create/2","doc":"Create a channel for the guild from upstream data.\n\nReturn the adapted `t:Nostrum.Struct.Channel.t/0` structure.","ref":"Nostrum.Cache.GuildCache.html#c:channel_create/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_delete/2","doc":"Delete the given channel from the guild.\n\nIf the channel was cached, return the original channel. Return `:noop`\notherwise.","ref":"Nostrum.Cache.GuildCache.html#c:channel_delete/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_update/2","doc":"Update the given channel on the given guild from upstream data.\n\nReturn the original channel before the update if known, and the updated\nchannel.","ref":"Nostrum.Cache.GuildCache.html#c:channel_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.GuildCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.create/1","doc":"Create a guild in the cache.","ref":"Nostrum.Cache.GuildCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.delete/1","doc":"Delete a guild from the cache.\n\nReturn the old guild if it was cached, or `nil` otherwise.","ref":"Nostrum.Cache.GuildCache.html#c:delete/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.emoji_update/2","doc":"Update the emoji list of the given guild from upstream data.\n\nDiscord sends us the complete emoji list on an update, which is passed here.\n\nReturn the old list of emojis before the update, and the updated list of\nemojis.","ref":"Nostrum.Cache.GuildCache.html#c:emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.fold/3","doc":"Fold (reduce) over all guilds in the cache.","ref":"Nostrum.Cache.GuildCache.html#fold/3"},{"type":"function","title":"Parameters - Nostrum.Cache.GuildCache.fold/3","doc":"- `acc`: The initial accumulator. Also returned if no guilds are cached.\n- `reducer`: Called for every guild in the result. Takes a pair in the form\n`(guild, acc)`, and must return the updated accumulator.\n- `cache` (optional): The cache to use. nostrum will use the cache configured\nat compile time by default.","ref":"Nostrum.Cache.GuildCache.html#fold/3-parameters"},{"type":"function","title":"Nostrum.Cache.GuildCache.get/1","doc":"Retrieves a single `Nostrum.Struct.Guild` from the cache via its `id`.\n\nReturns `{:error, :not_found}` if no result was found.","ref":"Nostrum.Cache.GuildCache.html#get/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.get/1","doc":"Retrieves a single `Nostrum.Struct.Guild` from the cache via its `id`.\n\nReturns `{:error, :not_found}` if no result was found.","ref":"Nostrum.Cache.GuildCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.get!/1","doc":"Same as `get/1`, but raises `Nostrum.Error.CacheError` in case of failure.","ref":"Nostrum.Cache.GuildCache.html#get!/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.member_count_down/1","doc":"Decrement the member count for this guild by one.","ref":"Nostrum.Cache.GuildCache.html#c:member_count_down/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.member_count_up/1","doc":"Increment the member count for this guild by one.","ref":"Nostrum.Cache.GuildCache.html#c:member_count_up/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_create/2","doc":"Create a role on the given guild from upstream data.\n\nReturn the casted role.","ref":"Nostrum.Cache.GuildCache.html#c:role_create/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_delete/2","doc":"Delete the given role on the given guild.\n\nReturn the guild and the old role if it was cached, or `:noop` otherwise.","ref":"Nostrum.Cache.GuildCache.html#c:role_delete/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_update/2","doc":"Update a role on the given guild from upstream data.\n\nReturn the old role before the update and the updated role.","ref":"Nostrum.Cache.GuildCache.html#c:role_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.stickers_update/2","doc":"Update the sticker list of the given guild from upstream data.\n\nDiscord sends us a complete list of stickers on an update, which is passed here.\n\nReturn the old list of stickers before the update, and the updated list of stickers.","ref":"Nostrum.Cache.GuildCache.html#c:stickers_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.update/1","doc":"Update a guild from upstream data.\n\nReturn the original guild before the update (if it was cached) and the\nupdated guild.","ref":"Nostrum.Cache.GuildCache.html#c:update/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.voice_state_update/2","doc":"Update the voice state of the given guild from upstream data.\n\nNote that it is recommended to drop the `:member` / `\"member\"` keys of\nthe supplied upstream data, as these would otherwise duplicate the data\nthat is being kept in the guild cache already.\n\nReturn the guild ID and the updated voice states of the guild.","ref":"Nostrum.Cache.GuildCache.html#c:voice_state_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.wrap_query/1","doc":"A function that should wrap any queries.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.GuildCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.GuildCache.html#wrap_query/2"},{"type":"module","title":"Nostrum.Cache.Me","doc":"Simple cache that stores information for the current user.","ref":"Nostrum.Cache.Me.html"},{"type":"function","title":"Nostrum.Cache.Me.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.Me.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.Me.get/0","doc":"Returns the current user's state.","ref":"Nostrum.Cache.Me.html#get/0"},{"type":"function","title":"Nostrum.Cache.Me.start_link/1","doc":"","ref":"Nostrum.Cache.Me.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Cache.MemberCache","doc":"Cache behaviour & dispatcher for guild members.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.MemberCache.ETS will be used for caching\nmembers. You can override this in the `:caches` option of the `:nostrum`\napplication by setting the `:members` field to a different module\nimplementing the behaviour defined by this module.\n\nThe user-facing functions of this module can be called with a custom cache as\nthe final argument. This is mainly useful if you want to test the cache: by\ndefault, nostrum will use Elixir.Nostrum.Cache.MemberCache.ETS.","ref":"Nostrum.Cache.MemberCache.html"},{"type":"callback","title":"Nostrum.Cache.MemberCache.bulk_create/2","doc":"Bulk create multiple members in the cache from upstream data.\n\nReturn value is unused, as we currently do not dispatch a gateway for this.","ref":"Nostrum.Cache.MemberCache.html#c:bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.by_guild/1","doc":"","ref":"Nostrum.Cache.MemberCache.html#by_guild/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.by_guild/1","doc":"Yield an enumerable of members associated with the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#c:by_guild/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.by_user/1","doc":"","ref":"Nostrum.Cache.MemberCache.html#by_user/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.by_user/1","doc":"Yield an enumerable of `{guild_id, member}` pairs associated with the given user ID.\n\nSince nostrum does not know when it can stop streaming you results, you have\nto wrap calls to this function in `wrap_query/1`.","ref":"Nostrum.Cache.MemberCache.html#c:by_user/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.MemberCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.create/2","doc":"Add the member for the given guild from upstream data.\n\nReturn the casted member structure.","ref":"Nostrum.Cache.MemberCache.html#c:create/2"},{"type":"callback","title":"Nostrum.Cache.MemberCache.delete/2","doc":"Remove the given user for the given guild.\n\nReturn the guild ID and old member if the member was cached. Otherwise,\nreturn `:noop`.","ref":"Nostrum.Cache.MemberCache.html#c:delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold/4","doc":"Fold (reduce) over members for the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#fold/4"},{"type":"function","title":"Parameters - Nostrum.Cache.MemberCache.fold/4","doc":"- `acc`: The initial accumulator. Also returned if no guild members were found.\n- `guild_id`: The guild for which to reduce members.\n- `member_reducer`: Called for every element in the result. Takes a pair\nin the form `(member, acc)`, and must return the updated accumulator.","ref":"Nostrum.Cache.MemberCache.html#fold/4-parameters"},{"type":"function","title":"Return value - Nostrum.Cache.MemberCache.fold/4","doc":"Returns the resulting accumulator via `fun`. Returns `acc` unchanged if no\nresults were found.","ref":"Nostrum.Cache.MemberCache.html#fold/4-return-value"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold/4","doc":"Fails when `by_guild/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold_by_user/4","doc":"Reduce over all members cached for the given user ID.\n\nThe members will be returned alongside their guild ID as a pair in the\nformat `{guild_id, member}`.","ref":"Nostrum.Cache.MemberCache.html#fold_by_user/4"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold_by_user/4","doc":"Fails when `by_user/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold_by_user/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Calls `fun` on each member and its user on the given guild ID, with the given\naccumulator.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4"},{"type":"function","title":"Parameters - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"- `acc` (`term()`): The initial accumulator. Also returned if no guild\nmembers were found.\n- `guild_id` (`t:Nostrum.Struct.Guild.id/0`): The guild for which to reduce members.\n- `fun` (`function()`): Called for every element in the result. Takes a pair\nin the form `({member, user}, acc)`, and must return the updated accumulator.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-parameters"},{"type":"function","title":"Return value - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Returns the resulting accumulator via `fun`. Returns `acc` unchanged if no\nresults were found.\n\nIf the user for a guild member is not found, the member _and_ user won't be\npresent in the result. Barring a bug in nostrum's caching, this should never\nhappen in practice.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-return-value"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Fails when `by_guild/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.get/2","doc":"Get a single member on the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#get/2"},{"type":"callback","title":"Nostrum.Cache.MemberCache.get/2","doc":"Retrieve a member from the cache by guild and user ID.","ref":"Nostrum.Cache.MemberCache.html#c:get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.get_with_user/3","doc":"Return a member together with its user via the user cache.","ref":"Nostrum.Cache.MemberCache.html#get_with_user/3"},{"type":"callback","title":"Nostrum.Cache.MemberCache.update/2","doc":"Update the given member for the given guild from upstream data.\n\nReturn the guild ID that was updated, the old cached member (if the member\nwas known to the cache), and the updated member.","ref":"Nostrum.Cache.MemberCache.html#c:update/2"},{"type":"callback","title":"Note regarding intents - Nostrum.Cache.MemberCache.update/2","doc":"Even if the required intents to receive `GUILD_MEMBER_UPDATE` events are\ndisabled to a point where we do not receive guild creation events, it is\nstill possible to receive the event for our own user. An example of this can\nbe found in [issue\n#293](https://github.com/Kraigie/nostrum/issues/293). Note that the issue\npredates the modern nostrum caching infrastructure.","ref":"Nostrum.Cache.MemberCache.html#c:update/2-note-regarding-intents"},{"type":"callback","title":"Nostrum.Cache.MemberCache.wrap_query/1","doc":"A function that should wrap any long-running query operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.MemberCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.MemberCache.html#wrap_query/2"},{"type":"behaviour","title":"Nostrum.Cache.MessageCache","doc":"Cache behaviour & dispatcher for Discord messages.\n\nBy default, Elixir.Nostrum.Cache.MessageCache.Noop will be used for caching\nmessages. You can override this in the `:caches` option of the `nostrum`\napplication by setting the `:messages` field to a different module, or\nto the tuple `{module, config}` where `module` is the module to use and\n`config` is any compile-time configuration to pass to the module.\n\nUnlike the other caches, the default is a no-op cache, as messages take\nup a lot of memory and most bots do not need messages to be cached.\nIf you would like to cache messages, you can change the cache implementation\nto one of the provided modules under `Nostrum.Cache.MessageCache`\nor write your own.","ref":"Nostrum.Cache.MessageCache.html"},{"type":"behaviour","title":"Writing your own message cache - Nostrum.Cache.MessageCache","doc":"As with the other caches, the message cache API consists of two parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api` instead.\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement both of them for nostrum to work with your custom\ncache.","ref":"Nostrum.Cache.MessageCache.html#module-writing-your-own-message-cache"},{"type":"callback","title":"Nostrum.Cache.MessageCache.bulk_delete/2","doc":"Deletes multiple messages from the cache, any message IDs given\nwill always be for the same channel.\n\nReturns a list of the deleted messages.\nNote that if a message was not found in the cache, it will\nnot be included in the returned list.","ref":"Nostrum.Cache.MessageCache.html#c:bulk_delete/2"},{"type":"callback","title":"Nostrum.Cache.MessageCache.channel_delete/1","doc":"Called when a channel is deleted.\n\nAny messages in the cache for the channel should be removed.","ref":"Nostrum.Cache.MessageCache.html#c:channel_delete/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.child_spec/1","doc":"Retrieve the child spec for starting the cache under a supervisor.\n\nThis callback is optional, and if not implemented, the cache will not be\nstarted under a supervisor.","ref":"Nostrum.Cache.MessageCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.create/1","doc":"Creates a message in the cache.\n\nThe argument given is the raw message payload from Discord's gateway.","ref":"Nostrum.Cache.MessageCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.delete/2","doc":"Deletes a message from the cache.\n\nExpects the deleted message to be returned if it was found.","ref":"Nostrum.Cache.MessageCache.html#c:delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.get/1","doc":"Retrieve a message from the cache by channel and message id.","ref":"Nostrum.Cache.MessageCache.html#get/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get/1","doc":"Retrieve a single `Nostrum.Struct.Message` from the cache by its ID.","ref":"Nostrum.Cache.MessageCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#get_by_author/3"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_author/3"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_channel/3","doc":"Retrieves a list of messages from the cache with a given channel ID,\nafter a given date, and before a given date.\n\nIntegers should be treated as snowflakes, and the atom `:infinity` when given\nas a before date should be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_channel/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.html#get_by_channel_and_author/4"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_channel_and_author/4"},{"type":"callback","title":"Nostrum.Cache.MessageCache.update/1","doc":"Updates a message in the cache.\n\nThe argument given is the raw message payload from Discord's gateway,\nand the return value is a tuple of the updated message and the old message if\nit was found in the cache, otherwise `nil`.","ref":"Nostrum.Cache.MessageCache.html#c:update/1"},{"type":"type","title":"Nostrum.Cache.MessageCache.timestamp_like/0","doc":"Used to constrain the return values of functions that can return\na list of messages from the cache.","ref":"Nostrum.Cache.MessageCache.html#t:timestamp_like/0"},{"type":"behaviour","title":"Nostrum.Cache.PresenceCache","doc":"Cache behaviour & dispatcher for Discord presences.\n\nBy default, `Elixir.Nostrum.Cache.PresenceCache.ETS` will be use for caching\npresences. You can override this in the `:caches` option of the `nostrum`\napplication by setting the `:presences` fields to a different module\nimplementing the `Nostrum.Cache.PresenceCache` behaviour. Any module below\n`Nostrum.Cache.PresenceCache` implements this behaviour and can be used as a\ncache.","ref":"Nostrum.Cache.PresenceCache.html"},{"type":"behaviour","title":"Writing your own presence cache - Nostrum.Cache.PresenceCache","doc":"As with the other caches, the presence cache API consists of two parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api`\ninstead.\n\n- the QLC query handle for read operations, `c:query_handle/0`, and\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement both of them for nostrum to work with your custom\ncache.","ref":"Nostrum.Cache.PresenceCache.html#module-writing-your-own-presence-cache"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.bulk_create/2","doc":"Bulk create multiple presences for the given guild in the cache.","ref":"Nostrum.Cache.PresenceCache.html#c:bulk_create/2"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.PresenceCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.create/1","doc":"Create a presence in the cache.","ref":"Nostrum.Cache.PresenceCache.html#c:create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.get/2","doc":"Retrieves a presence for a user from the cache by guild and id.\n\nIf successful, returns `{:ok, presence}`. Otherwise returns `{:error, reason}`.","ref":"Nostrum.Cache.PresenceCache.html#get/2"},{"type":"function","title":"Example - Nostrum.Cache.PresenceCache.get/2","doc":"```elixir\ncase Nostrum.Cache.PresenceCache.get(111133335555, 222244446666) do\n {:ok, presence} ->\n \"They're #{presence.status}\"\n {:error, _reason} ->\n \"They're dead Jim\"\nend\n```","ref":"Nostrum.Cache.PresenceCache.html#get/2-example"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.get/2","doc":"","ref":"Nostrum.Cache.PresenceCache.html#c:get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.get!/3","doc":"Same as `get/1`, but raise `Nostrum.Error.CacheError` in case of a failure.","ref":"Nostrum.Cache.PresenceCache.html#get!/3"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.update/1","doc":"Update the given presence in the cache from upstream data.","ref":"Nostrum.Cache.PresenceCache.html#c:update/1"},{"type":"callback","title":"Return value - Nostrum.Cache.PresenceCache.update/1","doc":"Return the guild ID along with the old presence (if it was cached, otherwise\n`nil`) and the updated presence structure. If the `:activities` or `:status`\nfields of the presence did not change, return `:noop`.","ref":"Nostrum.Cache.PresenceCache.html#c:update/1-return-value"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.wrap_query/1","doc":"A function that should wrap any `:qlc` operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.PresenceCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.PresenceCache.html#wrap_query/2"},{"type":"opaque","title":"Nostrum.Cache.PresenceCache.presence/0","doc":"Represents a presence as received from Discord.\nSee [Presence Update](https://discord.com/developers/docs/topics/gateway#presence-update).","ref":"Nostrum.Cache.PresenceCache.html#t:presence/0"},{"type":"behaviour","title":"Nostrum.Cache.UserCache","doc":"Cache behaviour & dispatcher for users.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.UserCache.ETS will be used for caching users.\nYou can override this in the `:caches` option of the `:nostrum` application\nby setting the `:users` field to a different module implementing the behaviour\ndefined by this module.\n\nSee the documentation for the `Nostrum.Cache.GuildCache` module for more details.","ref":"Nostrum.Cache.UserCache.html"},{"type":"callback","title":"Nostrum.Cache.UserCache.bulk_create/1","doc":"Bulk add multiple users to the cache at once.\n\nReturns `:ok`.","ref":"Nostrum.Cache.UserCache.html#c:bulk_create/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.UserCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.create/1","doc":"Add a new user to the cache based on the Discord Gateway payload.\n\nReturns a `t:Nostrum.Struct.User.t/0` struct representing the created user.","ref":"Nostrum.Cache.UserCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.delete/1","doc":"Delete a user by ID.\n\nReturns the deleted user if present in the cache, or\n`:noop` if the user was not cached.","ref":"Nostrum.Cache.UserCache.html#c:delete/1"},{"type":"function","title":"Nostrum.Cache.UserCache.get/1","doc":"Retrieve a user from the cache by ID.","ref":"Nostrum.Cache.UserCache.html#get/1"},{"type":"function","title":"Example - Nostrum.Cache.UserCache.get/1","doc":"```elixir\ncase Nostrum.Cache.UserCache.get(1111222233334444) do\n {:ok, user} ->\n \"We found \" <> user.username\n {:error, _reason} ->\n \"No es bueno\"\nend\n```","ref":"Nostrum.Cache.UserCache.html#get/1-example"},{"type":"callback","title":"Nostrum.Cache.UserCache.get/1","doc":"Retrieve a user from the cache by id.","ref":"Nostrum.Cache.UserCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.get!/1","doc":"Same as `get/1`, but raises `Nostrum.Error.CacheError` in case of a failure.","ref":"Nostrum.Cache.UserCache.html#get!/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.update/1","doc":"Update a user in the cache based on payload sent via the Gateway.\n\nReturns `:noop` if the user has not been updated in the cache, or\n`{old_user, new_user}` is the user has been written to the cache.","ref":"Nostrum.Cache.UserCache.html#c:update/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.wrap_query/1","doc":"A function that should wrap any `:qlc` operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. Nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.UserCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.UserCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.UserCache.html#wrap_query/2"},{"type":"module","title":"Nostrum.Struct.ApplicationCommand","doc":"Typespecs for creating Application Commands\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands","ref":"Nostrum.Struct.ApplicationCommand.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_edit_map/0","doc":"When editing an existing application command, only the following fields may be updated,\nmissing fields will remain unchanged.","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_edit_map/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_map/0","doc":"This defines the map for creating an application command.\n\n`:default_permission` is for if the command is enabled for all users by default\n\nFor more information see [the official documentation](https://discord.com/developers/docs/interactions/application-commands)","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_map/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_permission_type/0","doc":"- `1` for `ROLE`\n- `2` for `USER`\n- `3` for `CHANNEL`\n\nYou can use one of the `Nostrum.Constants.ApplicationCommandPermissionType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_permission_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_permissions/0","doc":"For editing the permissions for an application command\n - `:id` is the id of the role or user\n - `:type` is the type of the id, either `role` or `user`\n - `:allow` is whether the role or user should be allowed to use the command","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_permissions/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_choice/0","doc":"If you specify choices for a command those become the only valid options for the user to select from.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_choice/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_description/0","doc":"The description of the command, subcommand, or command_option.\nFor `CHAT_INPUT` commands, it must be between 1 and 100 characters in length.\nFor `USER` and `MESSAGE` commands it must be an empty string.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_description/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_name/0","doc":"The name of the command, subcommand, or command_option.\nIt must be between 1 and 32 characters in length and match the following regex: `^[w-]{1,32}$`.\nOnly `USER` and `MESSAGE` commands may include uppercase letters and spaces.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_option/0","doc":"This defines a command's parameters. Only valid for `CHAT_INPUT` commands.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option/0"},{"type":"type","title":"Notes - Nostrum.Struct.ApplicationCommand.command_option/0","doc":"- required parameters on a command must precede optional ones\n - for subcommands and subcommand groups, `:options` are its parameters\n - `:options` and `:choices` are mutually exclusive\n - `:autocomplete` must not be set to true if `:choices` is present\n - if `:type` is 7 then `:channel_types` can be a list of allowed [channel types](https://discord.com/developers/docs/resources/channel#channel-object-channel-types)","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option/0-notes"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_option_type/0","doc":"Indicates what type of argument the command expects.\n\n- `1` for `SUB_COMMAND`\n- `2` for `SUB_COMMAND_GROUP`\n- `3` for `​STRING`\n- `4` for `​INTEGER` *Note*: due to API limitations they can only be between -2^53 and 2^53\n- `5` for `BOOLEAN`\n- `6` for `USER`\n- `7` for `CHANNEL`\n- `8` for `ROLE`\n- `9` for `MENTIONABLE` *Note*: Includes users and roles\n- `10` for `NUMBER` *Note*: This has the same limitations as `​INTEGER`\n\nYou may use one of the `Nostrum.Constants.ApplicationCommandOptionType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_type/0","doc":"The type of application command you wish to create\n- `1` for `CHAT_INPUT`, regular slash commands (default)\n- `2` for `USER`, right-click menu commands on a specific user\n- `3` for `MESSAGE`, right-click menu commands on a specific message\n\nYou may use one of the `Nostrum.Constants.ApplicationCommandType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_type/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionData","doc":"Struct for interaction data.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.component_type/0","doc":"For components, the ``type`` of the component","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:component_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.components/0","doc":"For Modal Sumbit interactions, this will contain the values the user submitted.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.custom_id/0","doc":"For components, the ``custom_id`` of the component","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.id/0","doc":"ID of the invoked command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.interaction_type/0","doc":"The type of application command invoked.\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:interaction_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.name/0","doc":"Name of the invoked command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.options/0","doc":"Parameters and values supplied by the user, if applicable","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.resolved/0","doc":"Converted users & roles & channels","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:resolved/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.select_values/0","doc":"For select menu components, this will be a list of the values the user selected.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:select_values/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.t/0","doc":"Command interaction data for slash commands.\n\nUsed as part of `t:Nostrum.Struct.Interaction.t/0`.\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.target_id/0","doc":"ID of the user or message targeted by a context menu command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:target_id/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption","doc":"Struct for command invocation arguments.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.focused/0","doc":"Whether this parameter is focused for `autocomplete` interactions.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:focused/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.name/0","doc":"Parameter name","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.options/0","doc":"Parameter options for subcommands.\n\nMutually exclusive with `value`.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.t/0","doc":"Command interaction data struct","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.type/0","doc":"The application command option type.\n\nSee https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type\nfor more details.\n\nYou can use one of the `Nostrum.Constants.ApplicationCommandOptionType` methods.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.value/0","doc":"Parameter value.\n\nThe type of this depends on the `t:type/0`:\n\n- For `t:type/0` of `3`, this will be a `t:String.t/0`.\n- For `t:type/0` of `4`, this will be a `t:integer/0`.\n- For `t:type/0` of `5`, this will be a `t:boolean/0`.\n- For `t:type/0` of `6`, this will be a `t:Nostrum.Struct.User.id/0`. The\n corresponding guild member _and_ user can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `7`, this will be a `t:Nostrum.Struct.Channel.id/0`. The\n corresponding channel can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `8`, this will be a `t:Nostrum.Struct.Guild.Role.id/0`. The\n corresponding role can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `9`, this will be a `t:Nostrum.Struct.User.id/0` or `t:Nostrum.Struct.Guild.Role.id/0`. The\n corresponding user or role can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `10`, this will be a `t:number/0`.\n\nMutually exclusive with `options`. If `options` is not `nil`, this will be `nil`.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","doc":"Converted interaction payload.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.attachments/0","doc":"Attachments sent along with the interaction.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:attachments/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.channels/0","doc":"IDs and corresponding partial channels.\n\nThe channels in this map *only* have the following keys set:\n\n- ``id``\n- ``name``\n- ``type``\n- ``permissions``","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:channels/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.members/0","doc":"IDs and corresponding partial members.\n\nThese members are *missing* values on the following fields:\n\n- ``user``\n- ``deaf``\n- ``mute``\n\nThe corresponding user data can be looked up in ``users``. For members that\nare part of this map, data for the corresponding user will always be included.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:members/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.messages/0","doc":"The IDs and corresponding messages.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:messages/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.roles/0","doc":"IDs and corresponding roles","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.t/0","doc":"Resolved interaction data","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.users/0","doc":"IDs and corresponding users","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:users/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule","doc":"Struct representing an auto-moderation rule.","ref":"Nostrum.Struct.AutoModerationRule.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.actions/0","doc":"A list of Actions which will be performed when the rule is triggered.","ref":"Nostrum.Struct.AutoModerationRule.html#t:actions/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.creator_id/0","doc":"The id of the user who created the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:creator_id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.enabled/0","doc":"If the rule is enabled or not.","ref":"Nostrum.Struct.AutoModerationRule.html#t:enabled/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.event_type/0","doc":"Indicates in what event context a rule should be checked\n\n| value | type | description\n| ---- | ---- | -----------\n|`1` | `MESSAGE_SEND` | when a member sends or edits a message in a guild","ref":"Nostrum.Struct.AutoModerationRule.html#t:event_type/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.exempt_channels/0","doc":"A list of channels that are exempt from the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:exempt_channels/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.exempt_roles/0","doc":"A list of roles that are exempt from the rule.","ref":"Nostrum.Struct.AutoModerationRule.html#t:exempt_roles/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.guild_id/0","doc":"The id of the guild the rule belongs to","ref":"Nostrum.Struct.AutoModerationRule.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.id/0","doc":"The id of the auto-moderation rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.name/0","doc":"The name of the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.preset_values/0","doc":"Values which represent the different presets defined by Discord\n\n| value | type | description\n| ---- | ---- | -----------\n|`1` | `PROFANITY` | Words which may be considered profane\n| `2` | `HARMFUL_LINK` | Words that refer to sexually explicit behavior or activity\n| `3` | `SLURS` | Personal insults or words that may be considered hate speech","ref":"Nostrum.Struct.AutoModerationRule.html#t:preset_values/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.t/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.trigger_metadata/0","doc":"Additional data used to determine if the rule should triggered.\n\nThe `t:trigger_type/0` field will determine which of the following fields are present.\n\n| key | associated `trigger_type`\n| ---- | -----------\n| `keywords` | `​KEYWORD`\n| `preset` | `KEYWORD_PRESET`","ref":"Nostrum.Struct.AutoModerationRule.html#t:trigger_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.trigger_type/0","doc":"Characters the type of content which triggered the rule\n\n| value | type | max per guild | description\n| ---- | ---- | ----- | -----------\n|`1` | `​KEYWORD` | 3 | check if content contains words from a user defined list of keywords\n| `2` | `HARMFUL_LINK` | 1 | check if the content contains any harmful links\n| `3` | `SPAM` | 1 | check if the content represents generic spam\n| `4` | `KEYWORD_PRESET `| 1 | check if the content contains a list of discord defined keywords\n\nnote: `HARMFUL_LINK` and `SPAM` are not yet offically released at the time of this writing.","ref":"Nostrum.Struct.AutoModerationRule.html#t:trigger_type/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.Action","doc":"Defines an action to be taken when a rule is triggered.","ref":"Nostrum.Struct.AutoModerationRule.Action.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.action_type/0","doc":"The type of action to be taken.\n\n| value | action | description\n| ---- | ---- | -----------\n|`1` | `BLOCK_MESSAGE` | Blocks the message from being created\n| `2` | `SEND_ALERT_MESSAGE` | Logs the content of the message in the specified channel\n| `3` | `TIMEOUT` | timeout a user for a specified duration","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:action_type/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.metadata/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.t/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata","doc":"Struct representing any additional data used when an action is taken.","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.send_alert_message_metadata/0","doc":"The id of the channel to send an alert message to.","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:send_alert_message_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.t/0","doc":"The type of metadata present depends on the action type.\n\n| value | type\n| ---- | ----\n| `channel_id` | `SEND_ALERT_MESSAGE`\n| `duration_seconds` | `TIMEOUT`","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.timeout_metadata/0","doc":"The number of seconds to timeout the user for,\nhas a maximum of 2419200 seconds (4 weeks).","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:timeout_metadata/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","doc":"Struct representing the metadata of a trigger.","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.keyword_metadata/0","doc":"Contains the list of keywords to that will trigger the rule.","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:keyword_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.preset_value_metadata/0","doc":"A list of Values which represent the different presets defined by Discord\n\n| value | type | description\n| ---- | ---- | -----------\n| `1` | `PROFANITY` | Words which may be considered profane\n| `2` | `HARMFUL_LINK` | Words that refer to sexually explicit behavior or activity\n| `3` | `SLURS` | Personal insults or words that may be considered hate speech","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:preset_value_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.t/0","doc":"Additional data used to determine if the rule should triggered.\n\nThe `t:Nostrum.Struct.AutoModerationRule.trigger_type/0` of the parent struct determine which of the following fields are not `nil`.\n\n| key | associated `trigger_type`\n| ---- | -----------\n| `keywords` | `​KEYWORD`\n| `preset` | `KEYWORD_PRESET`","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Channel","doc":"Struct and helper functions for working with channels.","ref":"Nostrum.Struct.Channel.html"},{"type":"module","title":"Channel Struct - Nostrum.Struct.Channel","doc":"The channel struct is used by Nostrum to represent a _Discord Channel Object_. More information can be found on the [Discord API Channel Documentation](https://discord.com/developers/docs/resources/channel#channels-resource).\n\nThe struct can have one of several forms depending on the type of channel. You can read more about the individual channel types [below](#module-channel-types).\n\nA typical channel would appear as:\n\n```elixir\n%Nostrum.Struct.Channel{\n guild_id: 766435015768539156,\n id: 827333533688397865,\n name: \"announcements\",\n nsfw: false,\n permission_overwrites: [],\n position: 1,\n type: 5,\n}\n```\n\nThe channel struct implements `String.Chars` protocol through the `mention/1` function. This example uses our channel from the previous code block.\n\n```elixir\nchannel |> to_string()\n\"<#766435015768539156>\"\n```","ref":"Nostrum.Struct.Channel.html#module-channel-struct"},{"type":"module","title":"Channel Caching - Nostrum.Struct.Channel","doc":"Channels are cached within the guild object they are a member of. To fetch a cached channel you should use the `Nostrum.Cache.ChannelGuildMapping` cache to map a cache to a guild ID.\n\nOnce you have a guild ID, you can use the `Nostrum.Cache.GuildCache` to fetch the guild and all channels, then use the `t:Nostrum.Struct.Guild.channels/0` field to find the channel.\n\n> #### Note on DM Channels {: .tip}\n>\n> The `Nostrum.Cache.ChannelGuildMapping` by design only caches a mapping of channels to their respective guilds, and the stored channel object sits within the `Nostrum.Cache.GuildCache`.\n>\n> Due to how Direct Message channels work (no `CHANNEL_CREATE` events, not sent in any gateway events, etc.), we make no attempt to store direct message channels within any of the\n> built-in Nostrum caching adapters.\n>\n> If you wish to implement this functionality yourself, you will have to fetch the channel details from the API by looking at the `channel_id` field of received message objects,\n> you can then store these details in your own choice of caching system (ETS, Mnesia, etc.).","ref":"Nostrum.Struct.Channel.html#module-channel-caching"},{"type":"module","title":"Example - Nostrum.Struct.Channel","doc":"```elixir\n> guild_id = Nostrum.Cache.ChannelGuildMapping.get(1229955694258684005)\n1226944827137069107\n> {:ok, guild} = Nostrum.Cache.GuildCache.get(guild_id)\n{:ok,\n %Nostrum.Struct.Guild{\n id: 1226944827137069107,\n name: \"Craig Cat Zone\",\n ...\n}}\n> guild.channels[channel_id].name\n\"cat-general\"\n```","ref":"Nostrum.Struct.Channel.html#module-example"},{"type":"module","title":"Helper Functions - Nostrum.Struct.Channel","doc":"This module contains two functions for assisting with channel structs. `mention/1` to convert the channel into a mention as a string, and `link/1` to convert the channel into a hyperlink as a string. Further details and examples are detailed in the [Functions section of this module.](#functions)","ref":"Nostrum.Struct.Channel.html#module-helper-functions"},{"type":"module","title":"Api Functions - Nostrum.Struct.Channel","doc":"The Nostrum Api contains numerous functions related to channels. Notable functions relating to channels are shown below.\n\n- `Nostrum.Api.create_guild_channel/2`\n- `Nostrum.Api.get_channel/1`\n- `Nostrum.Api.modify_channel/3`\n- `Nostrum.Api.delete_channel/2`\n- `Nostrum.Api.add_pinned_channel_message/2`\n- `Nostrum.Api.create_channel_invite/3`\n- `Nostrum.Api.get_guild_channels/1`\n- `Nostrum.Api.modify_guild_channel_positions/2`\n\n> Note: This is not an exhaustive list, for full details please see the `Nostrum.Api` module documentation.","ref":"Nostrum.Struct.Channel.html#module-api-functions"},{"type":"module","title":"Channel Types - Nostrum.Struct.Channel","doc":"Channels take the shape of various types depending on their use and not all fields are always used. The currently implemented channel types are detailed below. The type of channel is determined by the `:type` field.\n\nThis diagram represents the regular channel types `0`, `2`, `5` and `13`.\n\n ![Discord Channels](./assets/channel_types.png)\n\n The currently implemented channel types are:\n\n| |Channel Type | |\n|---- |-------------------- |--------------------------------------------------------------- |\n|`0` |[`GUILD_TEXT`](`t:guild_text_channel/0`) |_A text channel within a server_ |\n|`1` |[`DM`](`t:dm_channel/0`) |_A direct message between users_ |\n|`2` |[`GUILD_VOICE`](`t:guild_voice_channel/0`) |_A voice channel within a server_ |\n|`3` |[`GROUP_DM`](`t:group_dm_channel/0`) |_A direct message between multiple users_ |\n|`4` |[`GUILD_CATEGORY`](`t:guild_category_channel/0`) |_A category that contains up to 50 channels_ |\n|`5` |[`GUILD_NEWS`](`t:guild_news_channel/0`) |_A channel that users can follow and crosspost_ |\n|`6` |[`GUILD_STORE`](`t:guild_store_channel/0`) |_A channel to sell games on Discord_ |\n|`10` |[`GUILD_NEWS_THREAD`](`t:guild_news_thread_channel/0`) |_A temporary sub-channel within a news channel_ |\n|`11` |[`GUILD_PUBLIC_THREAD`](`t:guild_public_thread_channel/0`) |_A temporary sub-channel within a text channel_ |\n|`12` |[`GUILD_PRIVATE_THREAD`](`t:guild_private_thread_channel/0`) |_A temporary private sub-channel within a text channel_ |\n|`13` |[`GUILD_STAGE_VOICE`](`t:guild_stage_voice_channel/0`) |_A voice channel for hosting events with an audience_ |\n|`15` |[`GUILD_FORUM`](`t:guild_forum_channel/0`) |_A channel that can only contain threads |\n\nYou can use one of the `Nostrum.Constants.ChannelType` methods.\n\nMore information about _Discord Channel Types_ can be found on the [Discord API Channel Type Documentation](https://discord.com/developers/docs/resources/channel#channel-object-channel-types).","ref":"Nostrum.Struct.Channel.html#module-channel-types"},{"type":"function","title":"Nostrum.Struct.Channel.mention/1","doc":"Convert a channel into a mention.\n\nHandles the conversion of a `Nostrum.Struct.Channel` into the required format to _mention_ the channel within a message. Mentioning the channel will provide a clickable link to take the user to the channel.","ref":"Nostrum.Struct.Channel.html#mention/1"},{"type":"function","title":"Parameters - Nostrum.Struct.Channel.mention/1","doc":"- channel: `t:Nostrum.Struct.Channel.t/0`","ref":"Nostrum.Struct.Channel.html#mention/1-parameters"},{"type":"function","title":"Examples - Nostrum.Struct.Channel.mention/1","doc":"```elixir\nchannel\n|> Nostrum.Struct.Channel.mention()\n\"<#381889573426429952>\"\n\n```","ref":"Nostrum.Struct.Channel.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Channel.application_id/0","doc":"The id of the application that created a group direct message or thread.\n\nThis applies to bot created channels.","ref":"Nostrum.Struct.Channel.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.applied_tags/0","doc":"","ref":"Nostrum.Struct.Channel.html#t:applied_tags/0"},{"type":"type","title":"Nostrum.Struct.Channel.archive_timestamp/0","doc":"When the thread was archived.","ref":"Nostrum.Struct.Channel.html#t:archive_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.archived/0","doc":"The threads archived status.","ref":"Nostrum.Struct.Channel.html#t:archived/0"},{"type":"type","title":"Nostrum.Struct.Channel.auto_archive_duration/0","doc":"Archive duration for the thread in minutes.\n\n- 60, 1 hour\n- 1440, 24 hours\n- 4320, 3 days\n- 10080, 7 days","ref":"Nostrum.Struct.Channel.html#t:auto_archive_duration/0"},{"type":"type","title":"Nostrum.Struct.Channel.bitrate/0","doc":"The bitate of the voice channel.","ref":"Nostrum.Struct.Channel.html#t:bitrate/0"},{"type":"type","title":"Nostrum.Struct.Channel.channel_mention/0","doc":"A partial channel object representing a channel mention.\n\nMore information about the _Discord Channel Mention Object_ can be found at the [Discord API Channel Mention Object\nDocumentation](https://discord.com/developers/docs/resources/channel#channel-mention-object).","ref":"Nostrum.Struct.Channel.html#t:channel_mention/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_auto_archive_duration/0","doc":"Default duration for newly created threads in minutes.\n\n- 60, 1 hour\n- 1440, 24 hours\n- 4320, 3 days\n- 10080, 7 days","ref":"Nostrum.Struct.Channel.html#t:default_auto_archive_duration/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_reaction_emoji/0","doc":"An object that specifies the emoji to use as the default way to react to a forum post.\n\n`:emoji_id` and `:emoji_name` are mutually exclusive","ref":"Nostrum.Struct.Channel.html#t:default_reaction_emoji/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_thread_rate_limit_per_user/0","doc":"The `:rate_limit_per_user` which will be applied to threads created in the channel, in seconds.","ref":"Nostrum.Struct.Channel.html#t:default_thread_rate_limit_per_user/0"},{"type":"type","title":"Nostrum.Struct.Channel.dm_channel/0","doc":"Type 1 partial channel object representing a direct message.","ref":"Nostrum.Struct.Channel.html#t:dm_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.flags/0","doc":"User thread settings, currently only used for notifications.","ref":"Nostrum.Struct.Channel.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Channel.forum_tag/0","doc":"A map representing a tag for use in forum channels.\n\n`:moderated` indicates whether the tag can only be added or removed by moderators.\n`:emoji_id` and `:emoji_name` are mutually exclusive and indicate the emoji used to represent the tag.","ref":"Nostrum.Struct.Channel.html#t:forum_tag/0"},{"type":"type","title":"Nostrum.Struct.Channel.group_dm_channel/0","doc":"Type 3 partial channel object representing a group direct message.","ref":"Nostrum.Struct.Channel.html#t:group_dm_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_category_channel/0","doc":"Type 4 partial channel object representing a channel category.\n\n> Note: Other channels `parent_id` field refers to this type of object.","ref":"Nostrum.Struct.Channel.html#t:guild_category_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_channel/0","doc":"Guild channel types","ref":"Nostrum.Struct.Channel.html#t:guild_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_forum_channel/0","doc":"Type 15 a guild forum channel.","ref":"Nostrum.Struct.Channel.html#t:guild_forum_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_id/0","doc":"The id of the guild the channel is located in.","ref":"Nostrum.Struct.Channel.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_news_channel/0","doc":"Type 5 partial channel object representing a news channel.","ref":"Nostrum.Struct.Channel.html#t:guild_news_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_news_thread_channel/0","doc":"Type 10 partial channel object representing a news thread.","ref":"Nostrum.Struct.Channel.html#t:guild_news_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_private_thread_channel/0","doc":"Type 12 partial channel object representing a private thread.","ref":"Nostrum.Struct.Channel.html#t:guild_private_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_public_thread_channel/0","doc":"Type 11 partial channel object representing a standard thread.","ref":"Nostrum.Struct.Channel.html#t:guild_public_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_stage_voice_channel/0","doc":"Type 13 channel object representing a stage channel.","ref":"Nostrum.Struct.Channel.html#t:guild_stage_voice_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_store_channel/0","doc":"Type 6 partial channel object representing a store channel.","ref":"Nostrum.Struct.Channel.html#t:guild_store_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_text_channel/0","doc":"Type 0 partial channel object representing a text channel within a guild.","ref":"Nostrum.Struct.Channel.html#t:guild_text_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_voice_channel/0","doc":"Type 2 partial channel object representing an audio channel within a guild.","ref":"Nostrum.Struct.Channel.html#t:guild_voice_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.icon/0","doc":"The hash of the channels icon.","ref":"Nostrum.Struct.Channel.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Channel.id/0","doc":"The id of the channel object.","ref":"Nostrum.Struct.Channel.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Channel.join_timestamp/0","doc":"When the user joined the thread.","ref":"Nostrum.Struct.Channel.html#t:join_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.last_message_id/0","doc":"The id of the last message sent in the channel.\n\nFor `GUILD_FORUM` channels, this is the last thread created in the channel.","ref":"Nostrum.Struct.Channel.html#t:last_message_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.last_pin_timestamp/0","doc":"Timestamp for the last pinned message.","ref":"Nostrum.Struct.Channel.html#t:last_pin_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.locked/0","doc":"The threads locked status.","ref":"Nostrum.Struct.Channel.html#t:locked/0"},{"type":"type","title":"Nostrum.Struct.Channel.member/0","doc":"Present when the bot joins a thread.\n\nNote: This is omitted on threads that the bot can immediately access on `:GUILD_CREATE` events received.","ref":"Nostrum.Struct.Channel.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Channel.member_count/0","doc":"Approximate count of members in a thread, capped at 50.","ref":"Nostrum.Struct.Channel.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Channel.message_count/0","doc":"Approximate count of messages in a thread, capped at 50.","ref":"Nostrum.Struct.Channel.html#t:message_count/0"},{"type":"type","title":"Nostrum.Struct.Channel.name/0","doc":"The name of the channel.","ref":"Nostrum.Struct.Channel.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Channel.newly_created/0","doc":"Included only in the `THREAD_CREATE` event.","ref":"Nostrum.Struct.Channel.html#t:newly_created/0"},{"type":"type","title":"Nostrum.Struct.Channel.nsfw/0","doc":"Whether the NSFW setting is enabled for this channel.","ref":"Nostrum.Struct.Channel.html#t:nsfw/0"},{"type":"type","title":"Nostrum.Struct.Channel.owner_id/0","doc":"The id of the user of a group direct message or thread.\n\nThis applies to user created channels.","ref":"Nostrum.Struct.Channel.html#t:owner_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.parent_id/0","doc":"The id of the parent channel that this channel is located under.\n\nFor threads, that is the channel that contains the thread. For regular channels, it is the category that the channel is located under.","ref":"Nostrum.Struct.Channel.html#t:parent_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.permission_overwrites/0","doc":"A list of permission overwrites applied to the channel.","ref":"Nostrum.Struct.Channel.html#t:permission_overwrites/0"},{"type":"type","title":"Nostrum.Struct.Channel.permissions/0","doc":"Computed permissions of the invoking user.\n\nPermissions for the invoking user in the channel, including overwrites, only included when part of the resolved data received on a slash command interaction","ref":"Nostrum.Struct.Channel.html#t:permissions/0"},{"type":"type","title":"Nostrum.Struct.Channel.position/0","doc":"The position of the channel in the sidebar of the guild.","ref":"Nostrum.Struct.Channel.html#t:position/0"},{"type":"type","title":"Nostrum.Struct.Channel.rate_limit_per_user/0","doc":"The users rate limit.\n\nAmount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission manage_messages or manage_channel, are unaffected","ref":"Nostrum.Struct.Channel.html#t:rate_limit_per_user/0"},{"type":"type","title":"Nostrum.Struct.Channel.recipients/0","doc":"A list of users in a group DM.","ref":"Nostrum.Struct.Channel.html#t:recipients/0"},{"type":"type","title":"Nostrum.Struct.Channel.rtc_region/0","doc":"Region id for the channel.\n\nMore information about _region ids_ can be found on the [Discord API Voice Region Object Documentation](https://discord.com/developers/docs/resources/voice#voice-region-object).","ref":"Nostrum.Struct.Channel.html#t:rtc_region/0"},{"type":"type","title":"Nostrum.Struct.Channel.t/0","doc":"All valid channel types.","ref":"Nostrum.Struct.Channel.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Channel.text_channel/0","doc":"All valid text channels.","ref":"Nostrum.Struct.Channel.html#t:text_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.thread_metadata/0","doc":"Thread-specific fields not needed by other channels.","ref":"Nostrum.Struct.Channel.html#t:thread_metadata/0"},{"type":"type","title":"Nostrum.Struct.Channel.topic/0","doc":"The topic of the channel.","ref":"Nostrum.Struct.Channel.html#t:topic/0"},{"type":"type","title":"Nostrum.Struct.Channel.type/0","doc":"The type of channel.\n\nMore information about _Discord Channel Types_ can be found under the [`types`](#module-channel-types) on the [Discord API Channel Type Documentation](https://discord.com/developers/docs/resources/channel#channel-object-channel-types).","ref":"Nostrum.Struct.Channel.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Channel.user_id/0","doc":"User id of the threads creator.","ref":"Nostrum.Struct.Channel.html#t:user_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.user_limit/0","doc":"The user limit of a voice channel.","ref":"Nostrum.Struct.Channel.html#t:user_limit/0"},{"type":"type","title":"Nostrum.Struct.Channel.video_quality_mode/0","doc":"The video quality mode of the channel.\n\nMore information about _video quality modes_ can be found on the [Discord API Video Quality Mode Documentation](https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes).","ref":"Nostrum.Struct.Channel.html#t:video_quality_mode/0"},{"type":"type","title":"Nostrum.Struct.Channel.voice_channel/0","doc":"A `Nostrum.Struct.Channel` that represents a voice channel","ref":"Nostrum.Struct.Channel.html#t:voice_channel/0"},{"type":"behaviour","title":"Nostrum.Struct.Component","doc":"Components are a framework for adding interactive elements to the messages your app or bot sends. They're accessible, customizable, and easy to use. There are several different types of components; this documentation will outline the basics of this new framework and each example.\n\n> Components have been broken out into individual modules for easy distinction between them and to separate helper functions and individual type checking between component types - especially as more components are added by Discord.\n\nEach of the components are provided all of the valid types through this module to avoid repetition and allow new components to be added quicker and easier.","ref":"Nostrum.Struct.Component.html"},{"type":"behaviour","title":"Action Row - Nostrum.Struct.Component","doc":"An Action Row is a non-interactive container component for other types of components. It has a `type: 1` and a sub-array of `components` of other types.\n\n- You can have up to 5 Action Rows per message\n- An Action Row cannot contain another Action Row\n- An Action Row containing buttons cannot also contain a select menu","ref":"Nostrum.Struct.Component.html#module-action-row"},{"type":"behaviour","title":"Buttons - Nostrum.Struct.Component","doc":"Buttons are interactive components that render on messages. They have a `type: 2`, They can be clicked by users. Buttons in Nostrum are further separated into two types, detailed below. Only the [Interaction Button](#module-interaction-buttons-non-link-buttons) will fire a `Nostrum.Struct.Interaction` when pressed.\n\n![Discord Buttons](./assets/buttons.png)\n\n- Buttons must exist inside an Action Row\n- An Action Row can contain up to 5 buttons\n- An Action Row containing buttons cannot also contain a select menu\n\nFor more information check out the [Discord API Button Styles](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles) for more information.","ref":"Nostrum.Struct.Component.html#module-buttons"},{"type":"behaviour","title":"Link Buttons - Nostrum.Struct.Component","doc":"- Link buttons **do not** send an `interaction` to your app when clicked\n- Link buttons **must** have a `url`, and **cannot** have a `custom_id`\n- Link buttons will **always** use `style: 5`\n\n#### Link `style: 5`\n![Link Button](./assets/secondary_button.png)","ref":"Nostrum.Struct.Component.html#module-link-buttons"},{"type":"behaviour","title":"Interaction Buttons ( Non-link Buttons ) - Nostrum.Struct.Component","doc":"> Discord calls these buttons \"Non-link Buttons\" due to the fact that they do not contain a url. However it would be more accurate to call them an \"Interaction Button\" as they **do** fire an interaction when clicked which is far more useful for your applications interactivity. As such they are referred to as \"Interaction Button\" throughout the rest of this module.\n\n- Interaction buttons **must** have a `custom_id`, and **cannot** have a `url`\n- Can have one of the below `:style` applied.\n\n#### Primary `style: 1`\n![Primary](./assets/primary_button.png)\n\n#### Secondary `style: 2`\n![Secondary](./assets/secondary_button.png)\n\n#### Success `style: 3`\n![Success](./assets/success_button.png)\n\n#### Danger `style: 4`\n![Danger (1)](./assets/danger_button.png)","ref":"Nostrum.Struct.Component.html#module-interaction-buttons-non-link-buttons"},{"type":"behaviour","title":"🐼 ~~Emoji Buttons~~ - Nostrum.Struct.Component","doc":"> Note: The discord documentation and marketing material in relation to buttons indicates that there are three kinds of buttons: 🐼 **Emoji Buttons**, **Link Buttons** & **Non-Link Buttons**. When in fact all buttons can contain an emoji. Because of this reason 🐼 **Emoji Buttons** are not included as a separate type. Emojis will be instead handled by the two included ( superior ) button types.\n\n![emoji buttons in action](./assets/emoji_button.png)\n\n> The field requirements are already becoming convoluted especially considering everything so far is all still a \"Component\". Using the sub types and helper functions will ensure all of the rules are followed when creating components.","ref":"Nostrum.Struct.Component.html#module-emoji-buttons"},{"type":"behaviour","title":"Select Menu - Nostrum.Struct.Component","doc":"Select menus are another interactive component that renders on messages. On desktop, clicking on a select menu opens a dropdown-style UI; on mobile, tapping a select menu opens up a half-sheet with the options.\n\n![Discord Selects](./assets/select_menu.png)\n\nSelect menus support single-select and multi-select behavior, meaning you can prompt a user to choose just one item from a list, or multiple. When a user finishes making their choice by clicking out of the dropdown or closing the half-sheet, your app will receive an interaction.\n- Select menus **must** be sent inside an Action Row\n- An Action Row can contain **only one** select menu\n- An Action Row containing a select menu **cannot** also contain buttons","ref":"Nostrum.Struct.Component.html#module-select-menu"},{"type":"behaviour","title":"Text Input - Nostrum.Struct.Component","doc":"Text inputs are an interactive component that render on modals. They can be used to collect short-form or long-form text.\n- Text inputs **must** be sent inside an Action Row\n- An Action Row can contain **only one** text input\n- An Action Row containing a text input **cannot** also contain buttons or a select menu\n\nCan be used to collect short-form or long-form text.\n- For short-form text, use `style: 1`\n- For long-form text, use `style: 2`\n\nText inputs are only allowed to be sent as part of an Interaction response that opens a MODAL.","ref":"Nostrum.Struct.Component.html#module-text-input"},{"type":"callback","title":"Nostrum.Struct.Component.new/1","doc":"Create a component from the given keyword list of options\n\n> Note: While using this function directly, you are not guaranteed to produce a valid component and it is the responsibility of the user to ensure they are passing a valid combination of component attributes. eg. if you pass a button component both a `custom_id`, and a `url`, the component is invalid as only one of these fields is allowed.","ref":"Nostrum.Struct.Component.html#c:new/1"},{"type":"function","title":"Nostrum.Struct.Component.to_struct/1","doc":"","ref":"Nostrum.Struct.Component.html#to_struct/1"},{"type":"callback","title":"Nostrum.Struct.Component.update/2","doc":"Updates a component with the parameters provided.\n\n> Note: While using this function directly, you are not guaranteed to produce a valid component and it is the responsibility of the user to ensure they are passing a valid combination of component attributes. eg. if you pass a button component both a `custom_id`, and a `url`, the component is invalid as only one of these fields is allowed.","ref":"Nostrum.Struct.Component.html#c:update/2"},{"type":"type","title":"Nostrum.Struct.Component.channel_types/0","doc":"","ref":"Nostrum.Struct.Component.html#t:channel_types/0"},{"type":"type","title":"Nostrum.Struct.Component.components/0","doc":"A list of components to place inside an action row.\n\nDue to constraints of action rows, this can either be a list of up to five buttons, a single select menu, or a single text input.\n\nValid for [Action Row](#module-action-row).","ref":"Nostrum.Struct.Component.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Component.custom_id/0","doc":"Used to identify the component when the interaction is sent to you from the user.\n\nValid for [Interaction Buttons](#module-interaction-button), [Select Menus](#module-select-menu), and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.Component.default_values/0","doc":"","ref":"Nostrum.Struct.Component.html#t:default_values/0"},{"type":"type","title":"Nostrum.Struct.Component.disabled/0","doc":"Indicates if the component is disabled or not.\n\nValid for [Buttons](#module-buttons) & [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:disabled/0"},{"type":"type","title":"Nostrum.Struct.Component.emoji/0","doc":"A partial emoji to display on the object.\n\nValid for [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Component.label/0","doc":"A string that appears on the button, max 80 characters.\n\nValid for [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Component.max_length/0","doc":"The maximum length of the text input. Minimum value 1, max 4000.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:max_length/0"},{"type":"type","title":"Nostrum.Struct.Component.max_values/0","doc":"The maximum number of permitted selections. Minimum value 0, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:max_values/0"},{"type":"type","title":"Nostrum.Struct.Component.min_length/0","doc":"The minimum length of the text input. Minimum value 0, max 4000.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:min_length/0"},{"type":"type","title":"Nostrum.Struct.Component.min_values/0","doc":"The minimum number of permitted selections. Minimum value 0, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:min_values/0"},{"type":"type","title":"Nostrum.Struct.Component.options/0","doc":"A list of options for select menus, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.Component.placeholder/0","doc":"Placeholder text if nothing is selected, max 100 characters\n\nValid for [Select Menus](#module-select-menu) and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:placeholder/0"},{"type":"type","title":"Nostrum.Struct.Component.required/0","doc":"Indicates if the text input is required.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:required/0"},{"type":"type","title":"Nostrum.Struct.Component.style/0","doc":"Indicates the style.\n\nYou can use one of the `Nostrum.Constants.ButtonStyle` methods.\n\nValid for Valid for [Interaction Buttons](#module-interaction-button) and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:style/0"},{"type":"type","title":"Nostrum.Struct.Component.t/0","doc":"The currently valid component types.","ref":"Nostrum.Struct.Component.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.type/0","doc":"The type of component.\n\nValid for All Types.\n\n| | Component Types |\n|------|-----|\n| `1` | Action Row |\n| `2` | Button |\n| `3` | SelectMenu |\n| `4` | TextInput |\n\nYou can use one of the `Nostrum.Constants.ComponentType` methods.\n\nCheck out the [Discord API Message Component Types](https://discord.com/developers/docs/interactions/message-components#component-object-component-types) for more information.","ref":"Nostrum.Struct.Component.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Component.url/0","doc":"A url for link buttons.\n\nValid for: [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Component.value/0","doc":"A pre-filled value for the text input, max 4000 characters.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Component.ActionRow","doc":"Action Rows.","ref":"Nostrum.Struct.Component.ActionRow.html"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.action_row/1","doc":"Create an empty action row.\n\nOptions can be passed as a keyword list. The only supported option is a list of inner components","ref":"Nostrum.Struct.Component.ActionRow.html#action_row/1"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.append/2","doc":"Appends a button to the action row.\n\nReturns the action row unchanged if there are already 5 buttons or if the action row contains a select menu or text input.","ref":"Nostrum.Struct.Component.ActionRow.html#append/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.append_lazy/2","doc":"Lazily appends a button to the action row.\n\nIf there are already 5 buttons, the first one will be dropped.","ref":"Nostrum.Struct.Component.ActionRow.html#append_lazy/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.flatten/1","doc":"","ref":"Nostrum.Struct.Component.ActionRow.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.put/2","doc":"Puts the given component into the action row, any existing components are discarded.","ref":"Nostrum.Struct.Component.ActionRow.html#put/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.put_new/2","doc":"Puts the components into the action row unless a list of inner components already exists.","ref":"Nostrum.Struct.Component.ActionRow.html#put_new/2"},{"type":"type","title":"Nostrum.Struct.Component.ActionRow.t/0","doc":"","ref":"Nostrum.Struct.Component.ActionRow.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.Button","doc":"Helpers for dealing with Button Components","ref":"Nostrum.Struct.Component.Button.html"},{"type":"function","title":"Nostrum.Struct.Component.Button.button/1","doc":"Create a button.\n\nThis function provides direct access to the `new/1` callback.\n\n> Note: While using this function directly you are **not** guaranteed to return a valid button, providing a valid combination of options becomes the responsibility of the reader. It is instead recommended to use the helper functions provided below.","ref":"Nostrum.Struct.Component.Button.html#button/1"},{"type":"function","title":"Nostrum.Struct.Component.Button.disable/2","doc":"Disables the button when `disabled` is true. Enables it otherwise.","ref":"Nostrum.Struct.Component.Button.html#disable/2"},{"type":"function","title":"Nostrum.Struct.Component.Button.flatten/1","doc":"","ref":"Nostrum.Struct.Component.Button.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.Button.interaction_button/3","doc":"Create an interaction button.\n\nRead more about interaction buttons in the `Nostrum.Struct.Component` documentation.","ref":"Nostrum.Struct.Component.Button.html#interaction_button/3"},{"type":"function","title":"Nostrum.Struct.Component.Button.link_button/3","doc":"Create a link button.\n\nRead more about link buttons in the `Nostrum.Struct.Component` documentation.","ref":"Nostrum.Struct.Component.Button.html#link_button/3"},{"type":"function","title":"Nostrum.Struct.Component.Button.put_style/2","doc":"Changes the style of the button.","ref":"Nostrum.Struct.Component.Button.html#put_style/2"},{"type":"function","title":"Nostrum.Struct.Component.Button.toggle/1","doc":"Toggle the buttons disabled state.","ref":"Nostrum.Struct.Component.Button.html#toggle/1"},{"type":"type","title":"Nostrum.Struct.Component.Button.interaction_button/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:interaction_button/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.link_button/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:link_button/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.opt/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.opts/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.t/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.ChannelSelect","doc":"Channel Select","ref":"Nostrum.Struct.Component.ChannelSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.ChannelSelect.channel_select/2","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#channel_select/2"},{"type":"function","title":"Nostrum.Struct.Component.ChannelSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#flatten/1"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.DefaultValue","doc":"Default Value","ref":"Nostrum.Struct.Component.DefaultValue.html"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.id/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.t/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.type/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Component.MentionableSelect","doc":"Mentionable Select","ref":"Nostrum.Struct.Component.MentionableSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.MentionableSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.MentionableSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.Option","doc":"Component Options","ref":"Nostrum.Struct.Component.Option.html"},{"type":"type","title":"Nostrum.Struct.Component.Option.default/0","doc":"If this option is selected by default.","ref":"Nostrum.Struct.Component.Option.html#t:default/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.description/0","doc":"An optional description of the option. Max length is 100 characters.","ref":"Nostrum.Struct.Component.Option.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.emoji/0","doc":"","ref":"Nostrum.Struct.Component.Option.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.label/0","doc":"The user-facing name of the option.","ref":"Nostrum.Struct.Component.Option.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.t/0","doc":"","ref":"Nostrum.Struct.Component.Option.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.value/0","doc":"The developer defined value of the option.","ref":"Nostrum.Struct.Component.Option.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Component.RoleSelect","doc":"Role Select","ref":"Nostrum.Struct.Component.RoleSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.RoleSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.RoleSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.SelectMenu","doc":"Select Menu","ref":"Nostrum.Struct.Component.SelectMenu.html"},{"type":"function","title":"Nostrum.Struct.Component.SelectMenu.flatten/1","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"Creates a select menu that can be used inside an action row.\n\nOptions can be passed as a keyword list.","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2"},{"type":"function","title":"Parameters - Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"- `custom_id` - lower case string, used for matching against when your application receives an interaction.","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2-parameters"},{"type":"function","title":"Options - Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"- `disabled` - If the select should be disabled\n- `options` - A list of options for the select menu, see `Nostrum.Struct.Component.Option`\n- `placeholder` - Value to be shown before anything is selected\n- `min_values` - minimum number of values the user must select, between 0 and 25, default is 1\n- `max_values` - maximum number of values the user must select, between 0 and 25, default is 1","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2-options"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.opt/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.opts/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.t/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.TextInput","doc":"Text Input.","ref":"Nostrum.Struct.Component.TextInput.html"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.flatten/1","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.put_style/2","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#put_style/2"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.text_input/3","doc":"Create a text input component.","ref":"Nostrum.Struct.Component.TextInput.html#text_input/3"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.opt/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.opts/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.t/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.UserSelect","doc":"User Select","ref":"Nostrum.Struct.Component.UserSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.UserSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.UserSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:t/0"},{"type":"behaviour","title":"Nostrum.Struct.Embed","doc":"Functions that work on Discord embeds.","ref":"Nostrum.Struct.Embed.html"},{"type":"behaviour","title":"Building Embeds - Nostrum.Struct.Embed","doc":"`Nostrum.Struct.Embed`s can be built using this module's builder functions\nor standard `Map` syntax:\n\n```elixir\niex> import Nostrum.Struct.Embed\n...> embed =\n...> %Nostrum.Struct.Embed{}\n...> |> put_title(\"craig\")\n...> |> put_description(\"nostrum\")\n...> |> put_url(\"https://google.com/\")\n...> |> put_timestamp(\"2016-05-05T21:04:13.203Z\")\n...> |> put_color(431_948)\n...> |> put_field(\"Field 1\", \"Test\")\n...> |> put_field(\"Field 2\", \"More test\", true)\n...> embed\n%Nostrum.Struct.Embed{\n title: \"craig\",\n description: \"nostrum\",\n url: \"https://google.com/\",\n timestamp: \"2016-05-05T21:04:13.203Z\",\n color: 431_948,\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n}\n```","ref":"Nostrum.Struct.Embed.html#module-building-embeds"},{"type":"behaviour","title":"Using structs - Nostrum.Struct.Embed","doc":"You can also create `Nostrum.Struct.Embed`s from structs, by using the\n`Nostrum.Struct.Embed` module. Here's how the example above could be build using structs\n\n```elixir\n defmodule MyApp.MyStruct do\n use Nostrum.Struct.Embed\n\n defstruct []\n\n def title(_), do: \"craig\"\n def description(_), do: \"nostrum\"\n def url(_), do: \"https://google.com/\"\n def timestamp(_), do: \"2016-05-05T21:04:13.203Z\"\n def color(_), do: 431_948\n\n def fields(_) do\n [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n end\n end\n\niex> Nostrum.Struct.Embed.from(%MyApp.MyStruct{})\n%Nostrum.Struct.Embed{\n title: \"craig\",\n description: \"nostrum\",\n url: \"https://google.com/\",\n timestamp: \"2016-05-05T21:04:13.203Z\",\n color: 431_948,\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n}\n```\nSee this modules callbacks for a list of all the functions that can be implemented.\n\nThe implementation of these callbacks is optional. Not implemented functions will simply\nbe ignored.","ref":"Nostrum.Struct.Embed.html#module-using-structs"},{"type":"callback","title":"Nostrum.Struct.Embed.author/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:author/1"},{"type":"callback","title":"Nostrum.Struct.Embed.color/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:color/1"},{"type":"callback","title":"Nostrum.Struct.Embed.description/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:description/1"},{"type":"callback","title":"Nostrum.Struct.Embed.fields/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:fields/1"},{"type":"callback","title":"Nostrum.Struct.Embed.footer/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:footer/1"},{"type":"function","title":"Nostrum.Struct.Embed.from/1","doc":"Create an embed from a struct that implements the `Nostrum.Struct.Embed` behaviour","ref":"Nostrum.Struct.Embed.html#from/1"},{"type":"callback","title":"Nostrum.Struct.Embed.image/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:image/1"},{"type":"function","title":"Nostrum.Struct.Embed.put_author/4","doc":"Puts a `Nostrum.Struct.Embed.Author` under `:author` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_author/4"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_author/4","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_author(embed, \"skippi\", \"https://github.com/skippi\", nil)\n%Nostrum.Struct.Embed{\n author: %Nostrum.Struct.Embed.Author{\n name: \"skippi\",\n url: \"https://github.com/skippi\",\n icon_url: nil\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_author/4-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_color/2","doc":"Puts the given `value` under `:color` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_color/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_color/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_color(embed, 431948)\n%Nostrum.Struct.Embed{color: 431948}\n```","ref":"Nostrum.Struct.Embed.html#put_color/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_description/2","doc":"Puts the given `value` under `:description` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_description/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_description/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_description(embed, \"An elixir library for the discord API.\")\n%Nostrum.Struct.Embed{description: \"An elixir library for the discord API.\"}\n```","ref":"Nostrum.Struct.Embed.html#put_description/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_field/4","doc":"Adds a `Nostrum.Struct.Embed.Field` under `:fields` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_field/4"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_field/4","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_field(embed, \"First User\", \"b1nzy\")\n%Nostrum.Struct.Embed{\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"}\n ]\n}\n\niex> embed = %Nostrum.Struct.Embed{\n...> fields: [\n...> %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"}\n...> ]\n...> }\n...> Nostrum.Struct.Embed.put_field(embed, \"Second User\", \"Danny\")\n%Nostrum.Struct.Embed{\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"},\n %Nostrum.Struct.Embed.Field{name: \"Second User\", value: \"Danny\"}\n ]\n}\n```","ref":"Nostrum.Struct.Embed.html#put_field/4-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_footer/3","doc":"Puts a `Nostrum.Struct.Embed.Footer` under `:footer` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_footer/3"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_footer/3","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_footer(embed, \"Discord API\", nil)\n%Nostrum.Struct.Embed{\n footer: %Nostrum.Struct.Embed.Footer{\n text: \"Discord API\",\n icon_url: nil\n }\n}\n\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_footer(embed, \"nostrum footer\", \"https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg\")\n%Nostrum.Struct.Embed{\n footer: %Nostrum.Struct.Embed.Footer{\n text: \"nostrum footer\",\n icon_url: \"https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_footer/3-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_image/2","doc":"Puts a `Nostrum.Struct.Embed.Image` under `:image` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_image/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_image/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_image(embed, \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\")\n%Nostrum.Struct.Embed{\n image: %Nostrum.Struct.Embed.Image{\n url: \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_image/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_thumbnail/2","doc":"Puts a `Nostrum.Struct.Embed.Thumbnail` under `:thumbnail` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_thumbnail/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_thumbnail/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_thumbnail(embed, \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\")\n%Nostrum.Struct.Embed{\n thumbnail: %Nostrum.Struct.Embed.Thumbnail{\n url: \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_thumbnail/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_timestamp/2","doc":"Puts the given `value` under `:timestamp` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_timestamp/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_timestamp/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_timestamp(embed, \"2018-04-21T17:33:51.893000Z\")\n%Nostrum.Struct.Embed{timestamp: \"2018-04-21T17:33:51.893000Z\"}\n```","ref":"Nostrum.Struct.Embed.html#put_timestamp/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_title/2","doc":"Puts the given `value` under `:title` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_title/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_title/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_title(embed, \"nostrum\")\n%Nostrum.Struct.Embed{title: \"nostrum\"}\n```","ref":"Nostrum.Struct.Embed.html#put_title/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_url/2","doc":"Puts the given `value` under `:url` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_url/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_url(embed, \"https://github.com/Kraigie/nostrum\")\n%Nostrum.Struct.Embed{url: \"https://github.com/Kraigie/nostrum\"}\n```","ref":"Nostrum.Struct.Embed.html#put_url/2-examples"},{"type":"callback","title":"Nostrum.Struct.Embed.thumbnail/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:thumbnail/1"},{"type":"callback","title":"Nostrum.Struct.Embed.timestamp/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:timestamp/1"},{"type":"callback","title":"Nostrum.Struct.Embed.title/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:title/1"},{"type":"callback","title":"Nostrum.Struct.Embed.url/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:url/1"},{"type":"type","title":"Nostrum.Struct.Embed.author/0","doc":"Author information","ref":"Nostrum.Struct.Embed.html#t:author/0"},{"type":"type","title":"Nostrum.Struct.Embed.color/0","doc":"Color code of the embed","ref":"Nostrum.Struct.Embed.html#t:color/0"},{"type":"type","title":"Nostrum.Struct.Embed.description/0","doc":"Description of the embed","ref":"Nostrum.Struct.Embed.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Embed.fields/0","doc":"Fields information","ref":"Nostrum.Struct.Embed.html#t:fields/0"},{"type":"type","title":"Nostrum.Struct.Embed.footer/0","doc":"Footer information","ref":"Nostrum.Struct.Embed.html#t:footer/0"},{"type":"type","title":"Nostrum.Struct.Embed.image/0","doc":"Image information","ref":"Nostrum.Struct.Embed.html#t:image/0"},{"type":"type","title":"Nostrum.Struct.Embed.provider/0","doc":"Provider information","ref":"Nostrum.Struct.Embed.html#t:provider/0"},{"type":"type","title":"Nostrum.Struct.Embed.t/0","doc":"","ref":"Nostrum.Struct.Embed.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.thumbnail/0","doc":"Thumbnail information","ref":"Nostrum.Struct.Embed.html#t:thumbnail/0"},{"type":"type","title":"Nostrum.Struct.Embed.timestamp/0","doc":"Timestamp of embed content","ref":"Nostrum.Struct.Embed.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Embed.title/0","doc":"Title of the embed","ref":"Nostrum.Struct.Embed.html#t:title/0"},{"type":"type","title":"Nostrum.Struct.Embed.type/0","doc":"Type of the embed","ref":"Nostrum.Struct.Embed.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Embed.url/0","doc":"Url of the embed","ref":"Nostrum.Struct.Embed.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.video/0","doc":"Video information","ref":"Nostrum.Struct.Embed.html#t:video/0"},{"type":"module","title":"Nostrum.Struct.Embed.Author","doc":"Struct representing a Discord embed author.","ref":"Nostrum.Struct.Embed.Author.html"},{"type":"type","title":"Nostrum.Struct.Embed.Author.icon_url/0","doc":"URL of the author icon","ref":"Nostrum.Struct.Embed.Author.html#t:icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.name/0","doc":"Name of the author","ref":"Nostrum.Struct.Embed.Author.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.proxy_icon_url/0","doc":"Proxied URL of author icon","ref":"Nostrum.Struct.Embed.Author.html#t:proxy_icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.t/0","doc":"","ref":"Nostrum.Struct.Embed.Author.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.url/0","doc":"URL of the author","ref":"Nostrum.Struct.Embed.Author.html#t:url/0"},{"type":"module","title":"Nostrum.Struct.Embed.Field","doc":"Struct representing a Discord embed field.","ref":"Nostrum.Struct.Embed.Field.html"},{"type":"type","title":"Nostrum.Struct.Embed.Field.inline/0","doc":"Whether the field should display as inline","ref":"Nostrum.Struct.Embed.Field.html#t:inline/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.name/0","doc":"Name of the field","ref":"Nostrum.Struct.Embed.Field.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.t/0","doc":"","ref":"Nostrum.Struct.Embed.Field.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.value/0","doc":"Value of the field","ref":"Nostrum.Struct.Embed.Field.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Embed.Footer","doc":"Struct representing a Discord embed footer.","ref":"Nostrum.Struct.Embed.Footer.html"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.icon_url/0","doc":"URL of footer icon","ref":"Nostrum.Struct.Embed.Footer.html#t:icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.proxy_icon_url/0","doc":"Proxied URL of footer icon","ref":"Nostrum.Struct.Embed.Footer.html#t:proxy_icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.t/0","doc":"","ref":"Nostrum.Struct.Embed.Footer.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.text/0","doc":"Footer text","ref":"Nostrum.Struct.Embed.Footer.html#t:text/0"},{"type":"module","title":"Nostrum.Struct.Embed.Image","doc":"Struct representing a Discord embed image.","ref":"Nostrum.Struct.Embed.Image.html"},{"type":"type","title":"Nostrum.Struct.Embed.Image.height/0","doc":"Height of the image","ref":"Nostrum.Struct.Embed.Image.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.proxy_url/0","doc":"URL of image icon","ref":"Nostrum.Struct.Embed.Image.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.t/0","doc":"","ref":"Nostrum.Struct.Embed.Image.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.url/0","doc":"Image text","ref":"Nostrum.Struct.Embed.Image.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.width/0","doc":"Width of the image","ref":"Nostrum.Struct.Embed.Image.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Embed.Provider","doc":"Struct representing a Discord embed provider.","ref":"Nostrum.Struct.Embed.Provider.html"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.name/0","doc":"Name of the provider","ref":"Nostrum.Struct.Embed.Provider.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.t/0","doc":"","ref":"Nostrum.Struct.Embed.Provider.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.url/0","doc":"URL of provider","ref":"Nostrum.Struct.Embed.Provider.html#t:url/0"},{"type":"module","title":"Nostrum.Struct.Embed.Thumbnail","doc":"Struct representing a Discord embed thumbnail.","ref":"Nostrum.Struct.Embed.Thumbnail.html"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.height/0","doc":"Height of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.proxy_url/0","doc":"URL of thumbnail icon","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.t/0","doc":"","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.url/0","doc":"Source URL of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.width/0","doc":"Width of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Embed.Video","doc":"Struct representing a Discord embed video.","ref":"Nostrum.Struct.Embed.Video.html"},{"type":"type","title":"Nostrum.Struct.Embed.Video.height/0","doc":"Height of the video","ref":"Nostrum.Struct.Embed.Video.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.t/0","doc":"","ref":"Nostrum.Struct.Embed.Video.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.url/0","doc":"Source URL of the video","ref":"Nostrum.Struct.Embed.Video.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.width/0","doc":"Width of the video","ref":"Nostrum.Struct.Embed.Video.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Emoji","doc":"Struct representing a Discord emoji.","ref":"Nostrum.Struct.Emoji.html"},{"type":"module","title":"Mentioning Emojis in Messages - Nostrum.Struct.Emoji","doc":"A `Nostrum.Struct.Emoji` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nemoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: \"foxbot\"}\nNostrum.Api.create_message!(184046599834435585, \"#{emoji}\")\n%Nostrum.Struct.Message{content: \"<:foxbot:437093487582642177>\"}\n\nemoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Emoji.mention(emoji)}\")\n%Nostrum.Struct.Message{content: \"<:tealixir:436885297037312001>\"}\n```","ref":"Nostrum.Struct.Emoji.html#module-mentioning-emojis-in-messages"},{"type":"module","title":"Using Emojis in the Api - Nostrum.Struct.Emoji","doc":"A `Nostrum.Struct.Emoji` can be used in `Nostrum.Api` by using its api name\nor the struct itself.\n\n```elixir\nemoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\nNostrum.Api.create_reaction(381889573426429952, 436247584349356032, Nostrum.Struct.Emoji.api_name(emoji))\n{:ok}\n\nemoji = %Nostrum.Struct.Emoji{id: 436189601820966923, name: \"elixir\"}\nNostrum.Api.create_reaction(381889573426429952, 436247584349356032, emoji)\n{:ok}\n```\n\nSee `t:Nostrum.Struct.Emoji.api_name/0` for more information.","ref":"Nostrum.Struct.Emoji.html#module-using-emojis-in-the-api"},{"type":"function","title":"Nostrum.Struct.Emoji.api_name/1","doc":"Formats an emoji struct into its `t:Nostrum.Struct.Emoji.api_name/0`.","ref":"Nostrum.Struct.Emoji.html#api_name/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.api_name/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{name: \"Γ¡É\"}\n...> Nostrum.Struct.Emoji.api_name(emoji)\n\"Γ¡É\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: \"foxbot\"}\n...> Nostrum.Struct.Emoji.api_name(emoji)\n\"foxbot:437093487582642177\"\n```","ref":"Nostrum.Struct.Emoji.html#api_name/1-examples"},{"type":"function","title":"Nostrum.Struct.Emoji.image_url/1","doc":"Returns the url of a custom emoji's image. If the emoji is not a custom one,\nreturns `nil`.","ref":"Nostrum.Struct.Emoji.html#image_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.image_url/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{id: 450225070569291776}\niex> Nostrum.Struct.Emoji.image_url(emoji)\n\"https://cdn.discordapp.com/emojis/450225070569291776.png\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 406140226998894614, animated: true}\niex> Nostrum.Struct.Emoji.image_url(emoji)\n\"https://cdn.discordapp.com/emojis/406140226998894614.gif\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: nil, name: \"Γ¡É\"}\niex> Nostrum.Struct.Emoji.image_url(emoji)\nnil\n```","ref":"Nostrum.Struct.Emoji.html#image_url/1-examples"},{"type":"function","title":"Nostrum.Struct.Emoji.mention/1","doc":"Formats an `Nostrum.Struct.Emoji` into a mention.","ref":"Nostrum.Struct.Emoji.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.mention/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{name: \"≡ƒæì\"}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\"≡ƒæì\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\"<:tealixir:436885297037312001>\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 437016804309860372, name: \"blobseizure\", animated: true}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\" \"\n```","ref":"Nostrum.Struct.Emoji.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Emoji.animated/0","doc":"Whether this emoji is animated","ref":"Nostrum.Struct.Emoji.html#t:animated/0"},{"type":"type","title":"Nostrum.Struct.Emoji.api_name/0","doc":"Emoji string to be used with the Discord API.\n\nSome API endpoints take an `emoji`. If it is a custom emoji, it must be\nstructured as `\"id:name\"`. If it is an unicode emoji, it can be structured\nas any of the following:\n\n * `\"name\"`\n * A base 16 unicode emoji string.\n\n`api_name/1` is a convenience function that returns a `Nostrum.Struct.Emoji`'s\napi name.","ref":"Nostrum.Struct.Emoji.html#t:api_name/0"},{"type":"type","title":"Examples - Nostrum.Struct.Emoji.api_name/0","doc":"```elixir\n# Custom Emojis\n\"nostrum:431890438091489\"\n\n# Unicode Emojis\n\"≡ƒæì\"\n\"\\xF0\\x9F\\x98\\x81\"\n\"\\u2b50\"\n```","ref":"Nostrum.Struct.Emoji.html#t:api_name/0-examples"},{"type":"type","title":"Nostrum.Struct.Emoji.id/0","doc":"Id of the emoji","ref":"Nostrum.Struct.Emoji.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Emoji.managed/0","doc":"Whether this emoji is managed","ref":"Nostrum.Struct.Emoji.html#t:managed/0"},{"type":"type","title":"Nostrum.Struct.Emoji.name/0","doc":"Name of the emoji","ref":"Nostrum.Struct.Emoji.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Emoji.require_colons/0","doc":"Whether this emoji must be wrapped in colons","ref":"Nostrum.Struct.Emoji.html#t:require_colons/0"},{"type":"type","title":"Nostrum.Struct.Emoji.roles/0","doc":"Roles this emoji is whitelisted to","ref":"Nostrum.Struct.Emoji.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Emoji.t/0","doc":"","ref":"Nostrum.Struct.Emoji.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Emoji.user/0","doc":"User that created this emoji","ref":"Nostrum.Struct.Emoji.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild","doc":"Struct representing a Discord guild.","ref":"Nostrum.Struct.Guild.html"},{"type":"function","title":"Nostrum.Struct.Guild.banner_url/2","doc":"Returns the URL of the guild's banner, or `nil` if no guild banner has been set.\n\nSupported image formats are PNG, GIF, JPEG and WebP.","ref":"Nostrum.Struct.Guild.html#banner_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.banner_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{banner: \"656477617264736e6f7764656e\",\n...> id: 112233445566778899}\niex> Nostrum.Struct.Guild.banner_url(guild)\n\"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.webp\"\niex> Nostrum.Struct.Guild.banner_url(guild, \"png\")\n\"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.png\"\n```","ref":"Nostrum.Struct.Guild.html#banner_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.discovery_splash_url/2","doc":"Returns the URL of the guild's discovery splash, or `nil` if no discovery splash.\n\nSupported image formats are PNG, JPEG and WebP.","ref":"Nostrum.Struct.Guild.html#discovery_splash_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.discovery_splash_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{discovery_splash: \"656477617264736e6f7764656e\",\n...> id: 112233445566778899}\niex> Nostrum.Struct.Guild.discovery_splash_url(guild)\n\"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.webp\"\niex> Nostrum.Struct.Guild.discovery_splash_url(guild, \"png\")\n\"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.png\"\n```","ref":"Nostrum.Struct.Guild.html#discovery_splash_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.icon_url/2","doc":"Returns the URL of a guild's icon, or `nil` if there is no icon.\n\nSupported image formats are PNG, JPEG, and WebP.","ref":"Nostrum.Struct.Guild.html#icon_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.icon_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{icon: \"86e39f7ae3307e811784e2ffd11a7310\",\n...> id: 41771983423143937}\niex> Nostrum.Struct.Guild.icon_url(guild)\n\"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp\"\niex> Nostrum.Struct.Guild.icon_url(guild, \"png\")\n\"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png\"\n\niex> guild = %Nostrum.Struct.Guild{icon: nil}\niex> Nostrum.Struct.Guild.icon_url(guild)\nnil\n```","ref":"Nostrum.Struct.Guild.html#icon_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.splash_url/2","doc":"Returns the URL of a guild's splash, or `nil` if there is no splash.\n\nSupported image formats are PNG, JPEG, and WebP.","ref":"Nostrum.Struct.Guild.html#splash_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.splash_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{splash: \"86e39f7ae3307e811784e2ffd11a7310\",\n...> id: 41771983423143937}\niex> Nostrum.Struct.Guild.splash_url(guild)\n\"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp\"\niex> Nostrum.Struct.Guild.splash_url(guild, \"png\")\n\"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png\"\n\niex> guild = %Nostrum.Struct.Guild{splash: nil}\niex> Nostrum.Struct.Guild.splash_url(guild)\nnil\n```","ref":"Nostrum.Struct.Guild.html#splash_url/2-examples"},{"type":"type","title":"Nostrum.Struct.Guild.afk_channel_id/0","doc":"The id of the guild's afk channel","ref":"Nostrum.Struct.Guild.html#t:afk_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.afk_timeout/0","doc":"The time someone must be afk before being moved","ref":"Nostrum.Struct.Guild.html#t:afk_timeout/0"},{"type":"type","title":"Nostrum.Struct.Guild.application_id/0","doc":"Application id of the guild creator if it is bot created.","ref":"Nostrum.Struct.Guild.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.available_guild/0","doc":"A `Nostrum.Struct.Guild` that is fully available.","ref":"Nostrum.Struct.Guild.html#t:available_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.banner/0","doc":"Banner hash for the guild, if prefixed with `a_` an animated GIF is available.","ref":"Nostrum.Struct.Guild.html#t:banner/0"},{"type":"type","title":"Nostrum.Struct.Guild.channels/0","doc":"List of channels","ref":"Nostrum.Struct.Guild.html#t:channels/0"},{"type":"type","title":"Nostrum.Struct.Guild.default_message_notifications/0","doc":"Default message notifications level.","ref":"Nostrum.Struct.Guild.html#t:default_message_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.description/0","doc":"User-set description of the guild","ref":"Nostrum.Struct.Guild.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.discovery_splash/0","doc":"Hash of the Discovery splash screen","ref":"Nostrum.Struct.Guild.html#t:discovery_splash/0"},{"type":"type","title":"Nostrum.Struct.Guild.emojis/0","doc":"List of emojis","ref":"Nostrum.Struct.Guild.html#t:emojis/0"},{"type":"type","title":"Nostrum.Struct.Guild.explicit_content_filter/0","doc":"Explicit content filter level.","ref":"Nostrum.Struct.Guild.html#t:explicit_content_filter/0"},{"type":"type","title":"Nostrum.Struct.Guild.features/0","doc":"List of guild features","ref":"Nostrum.Struct.Guild.html#t:features/0"},{"type":"type","title":"Nostrum.Struct.Guild.guild_scheduled_events/0","doc":"List of scheduled events","ref":"Nostrum.Struct.Guild.html#t:guild_scheduled_events/0"},{"type":"type","title":"Nostrum.Struct.Guild.icon/0","doc":"The hash of the guild's icon","ref":"Nostrum.Struct.Guild.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.id/0","doc":"The guild's id","ref":"Nostrum.Struct.Guild.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.joined_at/0","doc":"Date the bot user joined the guild","ref":"Nostrum.Struct.Guild.html#t:joined_at/0"},{"type":"type","title":"Nostrum.Struct.Guild.large/0","doc":"Whether the guild is considered 'large'","ref":"Nostrum.Struct.Guild.html#t:large/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_members/0","doc":"Maximum members for the guild","ref":"Nostrum.Struct.Guild.html#t:max_members/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_presences/0","doc":"Maximum number of presences for the guild.\n\nThis will be unset for most guilds, except for in Discord's terms, the\n\"largest of guilds\", where the field will be set to the maximum number of\nonline (gateway connected) members.","ref":"Nostrum.Struct.Guild.html#t:max_presences/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_stage_video_channel_users/0","doc":"The maximum amount of users in a stage video channel","ref":"Nostrum.Struct.Guild.html#t:max_stage_video_channel_users/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_video_channel_users/0","doc":"The maximum amount of users in a video channel","ref":"Nostrum.Struct.Guild.html#t:max_video_channel_users/0"},{"type":"type","title":"Nostrum.Struct.Guild.member_count/0","doc":"Total number of members in the guild","ref":"Nostrum.Struct.Guild.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Guild.mfa_level/0","doc":"Required MFA level of the guild","ref":"Nostrum.Struct.Guild.html#t:mfa_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.name/0","doc":"The name of the guild.","ref":"Nostrum.Struct.Guild.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.nsfw_level/0","doc":"NSFW level for the guild, unrated guilds have `:default`","ref":"Nostrum.Struct.Guild.html#t:nsfw_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.owner_id/0","doc":"The id of the guild owner","ref":"Nostrum.Struct.Guild.html#t:owner_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.preferred_locale/0","doc":"Preferred locale for the guild, set by the user","ref":"Nostrum.Struct.Guild.html#t:preferred_locale/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_progress_bar_enabled/0","doc":"Whether the guild has the boost progress bar enabled","ref":"Nostrum.Struct.Guild.html#t:premium_progress_bar_enabled/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_subscription_count/0","doc":"Number of boosts received by the guild","ref":"Nostrum.Struct.Guild.html#t:premium_subscription_count/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_tier/0","doc":"Premium tier of the guild (0-3)","ref":"Nostrum.Struct.Guild.html#t:premium_tier/0"},{"type":"type","title":"Nostrum.Struct.Guild.public_updates_channel_id/0","doc":"The id of the channel where admins and moderators receive notices from Discord. This\nis only available to guilds that contain ``PUBLIC`` in `t:features/0`.","ref":"Nostrum.Struct.Guild.html#t:public_updates_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.region/0","doc":"The id of the voice region","ref":"Nostrum.Struct.Guild.html#t:region/0"},{"type":"type","title":"Nostrum.Struct.Guild.rest_guild/0","doc":"A `Nostrum.Struct.Guild` that is sent on guild-specific rest endpoints.","ref":"Nostrum.Struct.Guild.html#t:rest_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.roles/0","doc":"List of roles","ref":"Nostrum.Struct.Guild.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Guild.rules_channel_id/0","doc":"The id of the channel that is used for rules. This is only available to guilds that\ncontain ``PUBLIC`` in `t:features/0`.","ref":"Nostrum.Struct.Guild.html#t:rules_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.safety_alerts_channel_id/0","doc":"The id of the channel where admins and moderators of Community guilds receive safety alerts from Discord","ref":"Nostrum.Struct.Guild.html#t:safety_alerts_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.splash/0","doc":"The hash of the guild's splash","ref":"Nostrum.Struct.Guild.html#t:splash/0"},{"type":"type","title":"Nostrum.Struct.Guild.stickers/0","doc":"Custom stickers registered to the guild","ref":"Nostrum.Struct.Guild.html#t:stickers/0"},{"type":"type","title":"Nostrum.Struct.Guild.system_channel_flags/0","doc":"Bitset representing the system channel flags\n\nSee `Nostrum.Struct.Guild.SystemChannelFlags` for more information on the flag\ncontents as well as methods to parse and create your own values for this\nfield.","ref":"Nostrum.Struct.Guild.html#t:system_channel_flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.system_channel_id/0","doc":"The id of the channel to which system messages are sent.","ref":"Nostrum.Struct.Guild.html#t:system_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.t/0","doc":"","ref":"Nostrum.Struct.Guild.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.threads/0","doc":"All active threads in the guild that the current user has permission to view","ref":"Nostrum.Struct.Guild.html#t:threads/0"},{"type":"type","title":"Nostrum.Struct.Guild.unavailable/0","doc":"Whether the guild is available","ref":"Nostrum.Struct.Guild.html#t:unavailable/0"},{"type":"type","title":"Nostrum.Struct.Guild.unavailable_guild/0","doc":"A `Nostrum.Struct.Guild` that is unavailable.","ref":"Nostrum.Struct.Guild.html#t:unavailable_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.user_guild/0","doc":"A `Nostrum.Struct.Guild` that is sent on user-specific rest endpoints.","ref":"Nostrum.Struct.Guild.html#t:user_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.vanity_url_code/0","doc":"Guild invite vanity URL","ref":"Nostrum.Struct.Guild.html#t:vanity_url_code/0"},{"type":"type","title":"Nostrum.Struct.Guild.verification_level/0","doc":"The level of verification","ref":"Nostrum.Struct.Guild.html#t:verification_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.voice_states/0","doc":"List of voice states as maps","ref":"Nostrum.Struct.Guild.html#t:voice_states/0"},{"type":"type","title":"Nostrum.Struct.Guild.welcome_screen/0","doc":"The welcome screen of a Community guild, shown to new members, returned in an Invite's guild object","ref":"Nostrum.Struct.Guild.html#t:welcome_screen/0"},{"type":"type","title":"Nostrum.Struct.Guild.widget_channel_id/0","doc":"The channel id for the server widget.","ref":"Nostrum.Struct.Guild.html#t:widget_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.widget_enabled/0","doc":"Whether or not the server widget is enabled.","ref":"Nostrum.Struct.Guild.html#t:widget_enabled/0"},{"type":"module","title":"Nostrum.Struct.Guild.AuditLog","doc":"Represents a guild's audit log.","ref":"Nostrum.Struct.Guild.AuditLog.html"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.entries/0","doc":"Entries of this guild's audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:entries/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.t/0","doc":"","ref":"Nostrum.Struct.Guild.AuditLog.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.users/0","doc":"Users found in the audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:users/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.webhooks/0","doc":"Webhooks found in the audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:webhooks/0"},{"type":"module","title":"Nostrum.Struct.Guild.AuditLogEntry","doc":"Represents a single entry in the guild's audit log.","ref":"Nostrum.Struct.Guild.AuditLogEntry.html"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.action_type/0","doc":"An audit log event identifier. See [Audit log events](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:action_type/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.changes/0","doc":"Individual changes of this audit log entry.\nChange keys are documented [here](https://discord.com/developers/docs/resources/audit-log#audit-log-change-object-audit-log-change-key)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:changes/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.id/0","doc":"The ID of this entry","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.options/0","doc":"[Optional audit entry info](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-optional-audit-entry-info)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.reason/0","doc":"The reason for this change, if applicable","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:reason/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.t/0","doc":"","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.target_id/0","doc":"The ID of the affected entity","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:target_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.user_id/0","doc":"The user who made the changes","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Guild.Ban","doc":"Represents a guild ban.","ref":"Nostrum.Struct.Guild.Ban.html"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.reason/0","doc":"The reason for the ban","ref":"Nostrum.Struct.Guild.Ban.html#t:reason/0"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.t/0","doc":"","ref":"Nostrum.Struct.Guild.Ban.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.user/0","doc":"The banned user","ref":"Nostrum.Struct.Guild.Ban.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration","doc":"Struct representing a Discord guild integration.\n\nThe struct defined here only has the fields provided for Discord Bot\nintegrations available. If you use Nostrum in a non-bot application, feel\nfree to open an issue to add it.","ref":"Nostrum.Struct.Guild.Integration.html"},{"type":"module","title":"References - Nostrum.Struct.Guild.Integration","doc":"- https://discord.com/developers/docs/resources/guild#integration-object","ref":"Nostrum.Struct.Guild.Integration.html#module-references"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.account/0","doc":"The integration account.","ref":"Nostrum.Struct.Guild.Integration.html#t:account/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.application/0","doc":"The bot/OAuth2 application for discord integrations","ref":"Nostrum.Struct.Guild.Integration.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.enabled/0","doc":"Whether this integration is enabled","ref":"Nostrum.Struct.Guild.Integration.html#t:enabled/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.guild_id/0","doc":"The id of the guild this integration is for.\n\nOnly included when the Integration is sent via the gateway.","ref":"Nostrum.Struct.Guild.Integration.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.id/0","doc":"Snowflake ID of the integration","ref":"Nostrum.Struct.Guild.Integration.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.name/0","doc":"Name of the integration","ref":"Nostrum.Struct.Guild.Integration.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.t/0","doc":"Represents a Guild integration","ref":"Nostrum.Struct.Guild.Integration.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.type/0","doc":"Integration type (Twitch, YouTube or Discord)","ref":"Nostrum.Struct.Guild.Integration.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration.Account","doc":"Struct representing a Discord guild's integration account.","ref":"Nostrum.Struct.Guild.Integration.Account.html"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.id/0","doc":"The id of the account","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.name/0","doc":"The name of the account","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.t/0","doc":"","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration.Application","doc":"Struct representing a Discord Guild Integration Application.","ref":"Nostrum.Struct.Guild.Integration.Application.html"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.bot/0","doc":"The bot associated with the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:bot/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.description/0","doc":"The description of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.icon/0","doc":"The icon hash of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.id/0","doc":"The id of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.name/0","doc":"The name of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.summary/0","doc":"The summary of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:summary/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.t/0","doc":"","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Member","doc":"Struct representing a Discord guild member.\n\nA `Nostrum.Struct.Guild.Member` stores a `Nostrum.Struct.User`'s properties\npertaining to a specific `Nostrum.Struct.Guild`.","ref":"Nostrum.Struct.Guild.Member.html"},{"type":"module","title":"Mentioning Members in Messages - Nostrum.Struct.Guild.Member","doc":"A `Nostrum.Struct.Guild.Member` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nmember = %Nostrum.Struct.Guild.Member{user_id: 120571255635181568}\nNostrum.Api.create_message!(184046599834435585, \"#{member}\")\n%Nostrum.Struct.Message{content: \"<@120571255635181568>\"}\n\nmember = %Nostrum.Struct.Guild.Member{user_id: 89918932789497856}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Guild.Member.mention(member)}\")\n%Nostrum.Struct.Message{content: \"<@89918932789497856>\"}\n```","ref":"Nostrum.Struct.Guild.Member.html#module-mentioning-members-in-messages"},{"type":"function","title":"Nostrum.Struct.Guild.Member.avatar_url/3","doc":"Returns a guild-specific avatar URL for a `Nostrum.Struct.Guild.Member`.\n\nSupported formats are `png` (default), `jpg`, `webp` and `gif`.\n\nAs mentioned in the avatar hash typedoc, if the avatar hash begins with `a_`, the\navatar is animated and can be returned as a gif.","ref":"Nostrum.Struct.Guild.Member.html#avatar_url/3"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.avatar_url/3","doc":"```elixir\niex> member = %Nostrum.Struct.Guild.Member{\n...> user_id: 165023948638126080,\n...> avatar: \"4c8319db8ea745275a1399f8f8aa74ab\"\n...> }\niex> guild_id = 1226944827137069107\niex> Nostrum.Struct.Guild.Member.avatar_url(member, guild_id)\n\"https://cdn.discordapp.com/guilds/1226944827137069107/users/165023948638126080/avatars/4c8319db8ea745275a1399f8f8aa74ab.png\"\n```","ref":"Nostrum.Struct.Guild.Member.html#avatar_url/3-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.guild_channel_permissions/3","doc":"Returns a member's permissions in a guild channel, based on its `Nostrum.Struct.Overwrite`s.","ref":"Nostrum.Struct.Guild.Member.html#guild_channel_permissions/3"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.guild_channel_permissions/3","doc":"```elixir\nguild = Nostrum.Cache.GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nchannel_id = 381889573426429952\nNostrum.Struct.Guild.Member.guild_channel_permissions(member, guild, channel_id)\n#=> [:manage_messages]\n```","ref":"Nostrum.Struct.Guild.Member.html#guild_channel_permissions/3-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.guild_permissions/2","doc":"Returns a member's guild permissions.","ref":"Nostrum.Struct.Guild.Member.html#guild_permissions/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.guild_permissions/2","doc":"```elixir\nguild = Nostrum.Cache.GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nNostrum.Struct.Guild.Member.guild_permissions(member, guild)\n#=> [:administrator]\n```","ref":"Nostrum.Struct.Guild.Member.html#guild_permissions/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.mention/1","doc":"Formats a `Nostrum.Struct.Guild.Member` into a mention.","ref":"Nostrum.Struct.Guild.Member.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.mention/1","doc":"```elixir\niex> member = %Nostrum.Struct.Guild.Member{user_id: 177888205536886784}\n...> Nostrum.Struct.Guild.Member.mention(member)\n\"<@177888205536886784>\"\n```","ref":"Nostrum.Struct.Guild.Member.html#mention/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.top_role/2","doc":"Return the topmost role of the given member on the given guild.\n\nThe topmost role is determined via `t:Nostrum.Struct.Guild.Role.position`.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2"},{"type":"function","title":"Parameters - Nostrum.Struct.Guild.Member.top_role/2","doc":"- `member`: The member whose top role to return.\n- `guild`: The guild which the member belongs to.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2-parameters"},{"type":"function","title":"Return value - Nostrum.Struct.Guild.Member.top_role/2","doc":"The topmost role of the member on the given guild, if the member has roles\nassigned. Otherwise, `nil` is returned.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2-return-value"},{"type":"type","title":"Nostrum.Struct.Guild.Member.avatar/0","doc":"Avatar hash of the custom avatar set by the user in the guild.\n\nIf animated, this is prefixed with `a_`.\n\nYou can use `avatar_url/3` to fetch a full-formed URL of this asset.","ref":"Nostrum.Struct.Guild.Member.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.communication_disabled_until/0","doc":"Current timeout status of the member.\n\nIf member is currently timed out this will be a `t:DateTime.t/0` of the\nunmute time, it will be `nil` or a date in the past if the member is not\ncurrently timed out.","ref":"Nostrum.Struct.Guild.Member.html#t:communication_disabled_until/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.deaf/0","doc":"Whether the member is deafened.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:deaf/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.flags/0","doc":"Guild member flags represented as a bitset.\n\nLook at the `Nostrum.Struct.Guild.Member.Flags` module for guidance parsing this value.","ref":"Nostrum.Struct.Guild.Member.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.joined_at/0","doc":"Date the member joined the guild, as a unix timestamp.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:joined_at/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.mute/0","doc":"Whether the member is muted.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:mute/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.nick/0","doc":"The nickname of the member","ref":"Nostrum.Struct.Guild.Member.html#t:nick/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.pending/0","doc":"Current guild member gate status. `false` if user has yet to pass the membership screening\nconfiguration for the guild, `true` if the member has passed.","ref":"Nostrum.Struct.Guild.Member.html#t:pending/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.premium_since/0","doc":"Current guild booster status of the member.\n\nIf member is currently boosting a guild this will be a `t:DateTime.t/0` since\nthe start of the boosting, it will be `nil` if the member is not currently\nboosting the guild.","ref":"Nostrum.Struct.Guild.Member.html#t:premium_since/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.roles/0","doc":"A list of role ids","ref":"Nostrum.Struct.Guild.Member.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.t/0","doc":"","ref":"Nostrum.Struct.Guild.Member.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.user_id/0","doc":"The user ID.\n\nThis field can be `nil` if the Member struct came as a partial Member object\nincluded in a message received from a guild channel. To retrieve the user\nobject, use `Nostrum.Cache.UserCache`.","ref":"Nostrum.Struct.Guild.Member.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Guild.Member.Flags","doc":"Struct representing the flags a guild member can have.","ref":"Nostrum.Struct.Guild.Member.Flags.html"},{"type":"function","title":"Nostrum.Struct.Guild.Member.Flags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API, normally from `t:Nostrum.Struct.Guild.Member.flags/0`.","ref":"Nostrum.Struct.Guild.Member.Flags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.Flags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.Guild.Member.Flags.from_integer(9)\n%Nostrum.Struct.Guild.Member.Flags{\n did_rejoin: true,\n completed_onboarding: false,\n bypasses_verification: false,\n started_onboarding: true\n}\n```","ref":"Nostrum.Struct.Guild.Member.Flags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.Flags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.Guild.Member.Flags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.Flags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.Guild.Member.Flags{\n...> did_rejoin: true,\n...> completed_onboarding: false,\n...> bypasses_verification: false,\n...> started_onboarding: true\n...> }\niex> Nostrum.Struct.Guild.Member.Flags.to_integer(my_flags)\n9\n```","ref":"Nostrum.Struct.Guild.Member.Flags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.bypasses_verification/0","doc":"Member is exempt from guild verification requirements","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:bypasses_verification/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.completed_onboarding/0","doc":"Member has completed onboarding","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:completed_onboarding/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.did_rejoin/0","doc":"Member has left and rejoined the guild","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:did_rejoin/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.flags/0","doc":"","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.started_onboarding/0","doc":"Member has started onboarding","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:started_onboarding/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.t/0","doc":"","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Role","doc":"Struct representing a Discord role.","ref":"Nostrum.Struct.Guild.Role.html"},{"type":"module","title":"Mentioning Roles in Messages - Nostrum.Struct.Guild.Role","doc":"A `Nostrum.Struct.Guild.Role` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nrole = %Nostrum.Struct.Guild.Role{id: 431886897539973131}\nNostrum.Api.create_message!(184046599834435585, \"#{role}\")\n%Nostrum.Struct.Message{}\n\nrole = %Nostrum.Struct.Guild.Role{id: 431884023535632398}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Guild.Role.mention(role)}\")\n%Nostrum.Struct.Message{}\n```","ref":"Nostrum.Struct.Guild.Role.html#module-mentioning-roles-in-messages"},{"type":"function","title":"Nostrum.Struct.Guild.Role.mention/1","doc":"Formats an `Nostrum.Struct.Role` into a mention.","ref":"Nostrum.Struct.Guild.Role.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Role.mention/1","doc":"```elixir\niex> role = %Nostrum.Struct.Guild.Role{id: 431886639627763722}\n...> Nostrum.Struct.Guild.Role.mention(role)\n\"<@&431886639627763722>\"\n```","ref":"Nostrum.Struct.Guild.Role.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.Role.color/0","doc":"The hexadecimal color code","ref":"Nostrum.Struct.Guild.Role.html#t:color/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.hoist/0","doc":"Whether the role is pinned in the user listing","ref":"Nostrum.Struct.Guild.Role.html#t:hoist/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.icon/0","doc":"The hash of the role icon","ref":"Nostrum.Struct.Guild.Role.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.id/0","doc":"The id of the role","ref":"Nostrum.Struct.Guild.Role.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.managed/0","doc":"Whether the role is managed by an integration","ref":"Nostrum.Struct.Guild.Role.html#t:managed/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.mentionable/0","doc":"Whether the role is mentionable","ref":"Nostrum.Struct.Guild.Role.html#t:mentionable/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.name/0","doc":"The name of the role","ref":"Nostrum.Struct.Guild.Role.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.permissions/0","doc":"The permission bit set","ref":"Nostrum.Struct.Guild.Role.html#t:permissions/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.position/0","doc":"The position of the role","ref":"Nostrum.Struct.Guild.Role.html#t:position/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.t/0","doc":"","ref":"Nostrum.Struct.Guild.Role.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.unicode_emoji/0","doc":"The standard unicode character emoji icon for the role","ref":"Nostrum.Struct.Guild.Role.html#t:unicode_emoji/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent","doc":"Struct representing a scheduled event in a guild.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html"},{"type":"function","title":"Nostrum.Struct.Guild.ScheduledEvent.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.channel_id/0","doc":"The id of the channel the scheduled event is in.\nWill be `nil` if `entity_type` is `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.creator/0","doc":"The user who created the scheduled event. Only present when retrieving the event from the API.\n\nnote: This will be `nil` for events created before October 25th, 2021.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:creator/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.creator_id/0","doc":"The id of the user who created the scheduled event.\n\nnote: This will be `nil` only for events created before October 25th, 2021.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:creator_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.description/0","doc":"The description of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_id/0","doc":"the id of an entity associated with a guild scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_metadata/0","doc":"Holds additional metadata associated with a scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_metadata/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_type/0","doc":"The type of entity the scheduled event is for.\n\n`1` - `STAGE_INSTANCE`\n`2` - `VOICE`\n`3` - `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_type/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.guild_id/0","doc":"The id of the guild the scheduled event is in.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.name/0","doc":"The name of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.privacy_level/0","doc":"The privacy level of the scheduled event.\nAt the time of writing, this is always `2` for `GUILD_ONLY`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:privacy_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.scheduled_end_time/0","doc":"The time the scheduled event ends as an ISO8601 timestamp.\nOnly required if `entity_type` is `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:scheduled_end_time/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.scheduled_start_time/0","doc":"The time the scheduled event starts.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:scheduled_start_time/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.status/0","doc":"The status of the scheduled event.\n\n`1` - `SCHEDULED`\n`2` - `ACTIVE`\n`3` - `COMPLETED`\n`4` - `CANCELLED`\n\nnote: Once status is set to Completed or Cancelled it can no longer be updated.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:status/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.user_count/0","doc":"The number of users who have subscribed to the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:user_count/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","doc":"Struct representing any additional metadata associated with a Guild Event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.location/0","doc":"The location of the event, 1-100 characters.\n\nRequired for events with `entity_type` of `EXTERNAL`.","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html#t:location/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent.User","doc":"Struct representing a user in a guild's scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html"},{"type":"function","title":"Nostrum.Struct.Guild.ScheduledEvent.User.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.event_id/0","doc":"The ID of the guild scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:event_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.member/0","doc":"The guild member for the event","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.user/0","doc":"The user which is subscribed to the event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild.SystemChannelFlags","doc":"Struct representing the flags on a guild's system channel","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html"},{"type":"function","title":"Nostrum.Struct.Guild.SystemChannelFlags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API, normally from `t:Nostrum.Struct.Guild.Member.flags/0`.","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.SystemChannelFlags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.Guild.SystemChannelFlags.from_integer(3)\n%Nostrum.Struct.Guild.SystemChannelFlags{\n suppress_guild_reminder_notifications: false,\n suppress_join_notification_replies: false,\n suppress_join_notifications: true,\n suppress_premium_subscriptions: true,\n suppress_role_subscription_purchase_notification_replies: false,\n suppress_role_subscription_purchase_notifications: false\n}\n```","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.SystemChannelFlags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.SystemChannelFlags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.Guild.SystemChannelFlags{\n...> suppress_join_notifications: true,\n...> suppress_join_notification_replies: true\n...> }\niex> Nostrum.Struct.Guild.SystemChannelFlags.to_integer(my_flags)\n9\n```","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.flags/0","doc":"","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_guild_reminder_notifications/0","doc":"Suppress server setup tips","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_guild_reminder_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_join_notification_replies/0","doc":"Hide member join sticker reply buttons","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_join_notification_replies/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_join_notifications/0","doc":"Suppress member join notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_join_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_premium_subscriptions/0","doc":"Suppress server boost notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_premium_subscriptions/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_role_subscription_purchase_notifications/0","doc":"Suppress role subscription purchase and renewal notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_role_subscription_purchase_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_role_subscription_purchase_notifications_replies/0","doc":"Hide role subscription sticker reply buttons","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_role_subscription_purchase_notifications_replies/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.t/0","doc":"","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.UnavailableGuild","doc":"Struct representing an unavailable Discord guild.","ref":"Nostrum.Struct.Guild.UnavailableGuild.html"},{"type":"function","title":"Nostrum.Struct.Guild.UnavailableGuild.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.id/0","doc":"The guild's id","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.t/0","doc":"","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.unavailable/0","doc":"Whether the guild is available","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:unavailable/0"},{"type":"module","title":"Nostrum.Struct.Interaction","doc":"Application command and Component invocation struct.","ref":"Nostrum.Struct.Interaction.html"},{"type":"type","title":"Nostrum.Struct.Interaction.application_id/0","doc":"ID of the application that this interaction is for\n\nWill be `nil` if the interaction was part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.channel/0","doc":"PartialChannel object for the channel where the command was invoked\n\nAt the time of writing, only the fields `:type` and `:id` are guaranteed to be present.","ref":"Nostrum.Struct.Interaction.html#t:channel/0"},{"type":"type","title":"Nostrum.Struct.Interaction.channel_id/0","doc":"ID of the channel where the command was invoked","ref":"Nostrum.Struct.Interaction.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.data/0","doc":"Invocation data.\n\nOnly present for *ApplicationCommand* and *MessageComponent* interactions, that is, `type=2` or `type=3`.","ref":"Nostrum.Struct.Interaction.html#t:data/0"},{"type":"type","title":"Nostrum.Struct.Interaction.guild_id/0","doc":"ID of the guild where the command was invoked","ref":"Nostrum.Struct.Interaction.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.guild_locale/0","doc":"The guild's preferred locale, if invoked in a guild.","ref":"Nostrum.Struct.Interaction.html#t:guild_locale/0"},{"type":"type","title":"Nostrum.Struct.Interaction.id/0","doc":"Interaction identifier","ref":"Nostrum.Struct.Interaction.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.locale/0","doc":"The selected langauge of the invoking user.\n\nAvailable on all interaction types except for *PING*","ref":"Nostrum.Struct.Interaction.html#t:locale/0"},{"type":"type","title":"Nostrum.Struct.Interaction.member/0","doc":"Member information about the invoker, if invoked on a guild","ref":"Nostrum.Struct.Interaction.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Interaction.message/0","doc":"For components, the message they were attached to","ref":"Nostrum.Struct.Interaction.html#t:message/0"},{"type":"type","title":"Nostrum.Struct.Interaction.t/0","doc":"A command invocation for Application Commands or Components.\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands","ref":"Nostrum.Struct.Interaction.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Interaction.token/0","doc":"Continuation token for responses\n\nWill be `nil` if this interaction is part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:token/0"},{"type":"type","title":"Nostrum.Struct.Interaction.type/0","doc":"Interaction kind.\n\n- `1` for *Ping*\n- `2` for *ApplicationCommand*\n- `3` for *MessageComponent*\n- `4` for *ApplicationCommandAutocomplete*\n- `5` for *ModalSubmit*","ref":"Nostrum.Struct.Interaction.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Interaction.user/0","doc":"User object for the invoking user, will be a copy of `member.user` if invoked in a guild","ref":"Nostrum.Struct.Interaction.html#t:user/0"},{"type":"type","title":"Nostrum.Struct.Interaction.version/0","doc":"Version identifier, always `1`\n\nWill be `nil` if this interaction is part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:version/0"},{"type":"module","title":"Nostrum.Struct.Invite","doc":"Struct representing a Discord invite.","ref":"Nostrum.Struct.Invite.html"},{"type":"type","title":"Nostrum.Struct.Invite.approximate_member_count/0","doc":"Approximate total member count of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:approximate_member_count/0"},{"type":"type","title":"Nostrum.Struct.Invite.approximate_presence_count/0","doc":"Approximate online member count of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:approximate_presence_count/0"},{"type":"type","title":"Nostrum.Struct.Invite.channel/0","doc":"The channel this invite is for.","ref":"Nostrum.Struct.Invite.html#t:channel/0"},{"type":"type","title":"Nostrum.Struct.Invite.code/0","doc":"The invite code (unique ID).","ref":"Nostrum.Struct.Invite.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Invite.created_at/0","doc":"When this invite was created.","ref":"Nostrum.Struct.Invite.html#t:created_at/0"},{"type":"type","title":"Nostrum.Struct.Invite.detailed_invite/0","doc":"An invite with metadata.","ref":"Nostrum.Struct.Invite.html#t:detailed_invite/0"},{"type":"type","title":"Nostrum.Struct.Invite.guild/0","doc":"Partially populated guild struct of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:guild/0"},{"type":"type","title":"Nostrum.Struct.Invite.inviter/0","doc":"The user who created this invite.","ref":"Nostrum.Struct.Invite.html#t:inviter/0"},{"type":"type","title":"Nostrum.Struct.Invite.max_age/0","doc":"Duration (in seconds) after which the invite expires.","ref":"Nostrum.Struct.Invite.html#t:max_age/0"},{"type":"type","title":"Nostrum.Struct.Invite.max_uses/0","doc":"Max number of times this invite can be used.","ref":"Nostrum.Struct.Invite.html#t:max_uses/0"},{"type":"type","title":"Nostrum.Struct.Invite.simple_invite/0","doc":"An invite without metadata.","ref":"Nostrum.Struct.Invite.html#t:simple_invite/0"},{"type":"type","title":"Nostrum.Struct.Invite.t/0","doc":"","ref":"Nostrum.Struct.Invite.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Invite.target_user/0","doc":"Partially populated user struct of the target user for this invite.","ref":"Nostrum.Struct.Invite.html#t:target_user/0"},{"type":"type","title":"Nostrum.Struct.Invite.target_user_type/0","doc":"The type of user target for this invite.","ref":"Nostrum.Struct.Invite.html#t:target_user_type/0"},{"type":"type","title":"Nostrum.Struct.Invite.temporary/0","doc":"Whether this invite only grants temporary membership.","ref":"Nostrum.Struct.Invite.html#t:temporary/0"},{"type":"type","title":"Nostrum.Struct.Invite.uses/0","doc":"Number of times this invite has been used.","ref":"Nostrum.Struct.Invite.html#t:uses/0"},{"type":"module","title":"Nostrum.Struct.Message","doc":"A `Nostrum.Struct.Message` represents a message.\n\nMore information can be found on the\n[Discord API Message Object Documentation](https://discord.com/developers/docs/resources/channel#message-object).","ref":"Nostrum.Struct.Message.html"},{"type":"function","title":"Nostrum.Struct.Message.to_url/1","doc":"Takes the message and produces a URL that, when clicked from the user client, will\njump them to that message, assuming they have access to the message and the message\nis valid.","ref":"Nostrum.Struct.Message.html#to_url/1"},{"type":"type","title":"Nostrum.Struct.Message.activity/0","doc":"The activity of the message. Sent with Rich Presence-related chat embeds","ref":"Nostrum.Struct.Message.html#t:activity/0"},{"type":"type","title":"Nostrum.Struct.Message.application/0","doc":"The application of the message. Sent with Rich Presence-related chat embeds","ref":"Nostrum.Struct.Message.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Message.application_id/0","doc":"if the message is a response to an interaction, this is the ID of the interaction's application","ref":"Nostrum.Struct.Message.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Message.attachments/0","doc":"List of attached files in the message","ref":"Nostrum.Struct.Message.html#t:attachments/0"},{"type":"type","title":"Nostrum.Struct.Message.author/0","doc":"The user struct of the author","ref":"Nostrum.Struct.Message.html#t:author/0"},{"type":"type","title":"Nostrum.Struct.Message.channel_id/0","doc":"The id of the channel","ref":"Nostrum.Struct.Message.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Message.components/0","doc":"List of Message Components","ref":"Nostrum.Struct.Message.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Message.content/0","doc":"The content of the message","ref":"Nostrum.Struct.Message.html#t:content/0"},{"type":"type","title":"Nostrum.Struct.Message.edited_timestamp/0","doc":"When the message was edited","ref":"Nostrum.Struct.Message.html#t:edited_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Message.embeds/0","doc":"List of embedded content in the message","ref":"Nostrum.Struct.Message.html#t:embeds/0"},{"type":"type","title":"Nostrum.Struct.Message.guild_id/0","doc":"The id of the guild","ref":"Nostrum.Struct.Message.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Message.id/0","doc":"The id of the message","ref":"Nostrum.Struct.Message.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.interaction/0","doc":"Message interaction object","ref":"Nostrum.Struct.Message.html#t:interaction/0"},{"type":"type","title":"Nostrum.Struct.Message.member/0","doc":"Partial Guild Member object received with the Message Create event if message came from a guild channel","ref":"Nostrum.Struct.Message.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_channels/0","doc":"List of channels mentioned in the message\n\n[Discord API Channel Mention Object Documentation](https://discord.com/developers/docs/resources/channel#channel-mention-object-channel-mention-structure)","ref":"Nostrum.Struct.Message.html#t:mention_channels/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_everyone/0","doc":"Whether this message mentions everyone","ref":"Nostrum.Struct.Message.html#t:mention_everyone/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_roles/0","doc":"List of roles ids mentioned in the message","ref":"Nostrum.Struct.Message.html#t:mention_roles/0"},{"type":"type","title":"Nostrum.Struct.Message.mentions/0","doc":"List of users mentioned in the message","ref":"Nostrum.Struct.Message.html#t:mentions/0"},{"type":"type","title":"Nostrum.Struct.Message.message_reference/0","doc":"Reference data sent with crossposted messages and replies.\n\nFor `THREAD_STARTER_MESSAGE` messages, this field points to the message that the thread was started from.","ref":"Nostrum.Struct.Message.html#t:message_reference/0"},{"type":"type","title":"Nostrum.Struct.Message.nonce/0","doc":"Validates if a message was sent","ref":"Nostrum.Struct.Message.html#t:nonce/0"},{"type":"type","title":"Nostrum.Struct.Message.pinned/0","doc":"Whether this message is pinned","ref":"Nostrum.Struct.Message.html#t:pinned/0"},{"type":"type","title":"Nostrum.Struct.Message.poll/0","doc":"The poll object attached to the message","ref":"Nostrum.Struct.Message.html#t:poll/0"},{"type":"type","title":"Nostrum.Struct.Message.reactions/0","doc":"Reactions to the message.","ref":"Nostrum.Struct.Message.html#t:reactions/0"},{"type":"type","title":"Nostrum.Struct.Message.referenced_message/0","doc":"The message associated with the `:message_reference`\n\nThis field is only returned for messages with a `type: 19` (Reply). If the message is a reply but the`:referenced_message` field is not present, the backend did not attempt to fetch the message that was being replied to,so its state is unknown. If the field exists but is `nil`, the referenced message was deleted.","ref":"Nostrum.Struct.Message.html#t:referenced_message/0"},{"type":"type","title":"Nostrum.Struct.Message.sticker_items/0","doc":"Array of Message Sticker Item Objects","ref":"Nostrum.Struct.Message.html#t:sticker_items/0"},{"type":"type","title":"Nostrum.Struct.Message.t/0","doc":"","ref":"Nostrum.Struct.Message.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.thread/0","doc":"The thread that was started from this message, includes a thread member object","ref":"Nostrum.Struct.Message.html#t:thread/0"},{"type":"type","title":"Nostrum.Struct.Message.timestamp/0","doc":"When the message was sent","ref":"Nostrum.Struct.Message.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Message.tts/0","doc":"Whether this was a TTS message","ref":"Nostrum.Struct.Message.html#t:tts/0"},{"type":"type","title":"Nostrum.Struct.Message.type/0","doc":"[Discord API Message Object Type Documentation](https://discord.com/developers/docs/resources/channel#message-object-message-types)\n\n- `0` - `DEFAULT`\n- `1` - `RECIPIENT_ADD`\n- `2` - `RECIPIENT_REMOVE`\n- `3` - `CALL`\n- `4` - `CHANNEL_NAME_CHANGE`\n- `5` - `CHANNEL_ICON_CHANGE`\n- `6` - `CHANNEL_PINNED_MESSAGE`\n- `7` - `GUILD_MEMBER_JOIN`\n- `8` - `USER_PREMIUM_GUILD_SUBSCRIPTION`\n- `9` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1`\n- `10` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2`\n- `11` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3`\n- `12` - `CHANNEL_FOLLOW_ADD`\n- `14` - `GUILD_DISCOVERY_DISQUALIFIED`\n- `15` - `GUILD_DISCOVERY_REQUALIFIED`\n- `16` - `GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING`\n- `17` - `GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING`\n- `18` - `THREAD_CREATED`\n- `19` - `REPLY`\n- `20` - `APPLICATION_COMMAND`\n- `21` - `THREAD_STARTER_MESSAGE`\n- `22` - `GUILD_INVITE_REMINDER`","ref":"Nostrum.Struct.Message.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Message.webhook_id/0","doc":"If the message is generated by a webhook, this is the webhook's id","ref":"Nostrum.Struct.Message.html#t:webhook_id/0"},{"type":"module","title":"Nostrum.Struct.Message.Activity","doc":"Struct representing a Discord message activity.","ref":"Nostrum.Struct.Message.Activity.html"},{"type":"type","title":"Nostrum.Struct.Message.Activity.party_id/0","doc":"The party id from a [rich presence event](https://discord.com/developers/docs/rich-presence/how-to).","ref":"Nostrum.Struct.Message.Activity.html#t:party_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Activity.t/0","doc":"","ref":"Nostrum.Struct.Message.Activity.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Activity.type/0","doc":"[Type of message activity](https://discord.com/developers/docs/resources/channel#message-object-message-activity-types).","ref":"Nostrum.Struct.Message.Activity.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Message.Application","doc":"Struct representing a Discord message application.","ref":"Nostrum.Struct.Message.Application.html"},{"type":"type","title":"Nostrum.Struct.Message.Application.cover_image/0","doc":"Id of the embed's image asset","ref":"Nostrum.Struct.Message.Application.html#t:cover_image/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.description/0","doc":"Application's description","ref":"Nostrum.Struct.Message.Application.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.icon/0","doc":"Id of the application's icon","ref":"Nostrum.Struct.Message.Application.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.id/0","doc":"Id of the application","ref":"Nostrum.Struct.Message.Application.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.name/0","doc":"Name of the application","ref":"Nostrum.Struct.Message.Application.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.t/0","doc":"","ref":"Nostrum.Struct.Message.Application.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Attachment","doc":"Struct representing a Discord message attachment.","ref":"Nostrum.Struct.Message.Attachment.html"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.filename/0","doc":"Name of attached file","ref":"Nostrum.Struct.Message.Attachment.html#t:filename/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.height/0","doc":"Height of the file (if image)","ref":"Nostrum.Struct.Message.Attachment.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.id/0","doc":"Attachment id","ref":"Nostrum.Struct.Message.Attachment.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.proxy_url/0","doc":"Proxy url of the file","ref":"Nostrum.Struct.Message.Attachment.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.size/0","doc":"Size of the file in bytes","ref":"Nostrum.Struct.Message.Attachment.html#t:size/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.t/0","doc":"","ref":"Nostrum.Struct.Message.Attachment.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.url/0","doc":"Source url of the file","ref":"Nostrum.Struct.Message.Attachment.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.width/0","doc":"Width of the file (if image)","ref":"Nostrum.Struct.Message.Attachment.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Message.Component","doc":"A component attached to a message.\n\nNote that the fields present depend on the `t:type/0` of the component object.\n\nSee the [Discord API Component Object\nDocumentation](https://discord.com/developers/docs/interactions/message-components#component-object)\nfor more information.","ref":"Nostrum.Struct.Message.Component.html"},{"type":"type","title":"Nostrum.Struct.Message.Component.components/0","doc":"Child components for action rows.\n\nOnly present for action rows.","ref":"Nostrum.Struct.Message.Component.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.custom_id/0","doc":"A developer-defined identifier for the component.\n\nMaximum of 100 characters. Only present for buttons and select menus.","ref":"Nostrum.Struct.Message.Component.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.disabled/0","doc":"Whether the component is disabled.\n\nOnly present for buttons and select menus.","ref":"Nostrum.Struct.Message.Component.html#t:disabled/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.emoji/0","doc":"Partial emoji of the button.\n\nOnly present for buttons. The following fields are set:\n\n- ``name``\n- ``id``\n- ``animated``","ref":"Nostrum.Struct.Message.Component.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.label/0","doc":"Text that appears on the button, or above the text input.\n\nMaximum of 80 characters. Only present for buttons and text input.","ref":"Nostrum.Struct.Message.Component.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.max_length/0","doc":"Maximum length of the input text.\n\nDefaults to ``1``. Maximum of ``4000``. Only present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:max_length/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.max_values/0","doc":"Maximum number of items that must be chosen.\n\nDefaults to ``1``. Maximum of ``25``. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:max_values/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.min_length/0","doc":"Minimum length of the input text.\n\nDefaults to ``0``. Maximum of ``4000``. Only present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:min_length/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.min_values/0","doc":"Minimum number of items that must be chosen.\n\nDefaults to ``1``. Minimum of ``0``. Maximum of ``25``. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:min_values/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.options/0","doc":"Choices of the select menu.\n\nMaximum of 25 options. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:options/0"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.options/0","doc":"See [Discord Developer Portal: Select Option\nStructure](https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-option-structure).","ref":"Nostrum.Struct.Message.Component.html#t:options/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.placeholder/0","doc":"Custom placeholder text if nothing is selected.\n\nMaximum of 100 characters. Only present for select menus and text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:placeholder/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.required/0","doc":"Whether the component is required to be filled, defaults to `false`.\n\nOnly present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:required/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.style/0","doc":"An integer representing the style of the button or text input.\n\nOnly present for buttons and text input.","ref":"Nostrum.Struct.Message.Component.html#t:style/0"},{"type":"type","title":"Values (Button) - Nostrum.Struct.Message.Component.style/0","doc":"- ``1``: Primary - blurple, ``custom_id`` required.\n- ``2``: Secondary - grey, ``custom_id`` required.\n- ``3``: Success - green, ``custom_id`` required.\n- ``4``: Danger - red, ``custom_id`` required.\n- ``5``: Link - grey, ``url`` required, navigates to the URL.","ref":"Nostrum.Struct.Message.Component.html#t:style/0-values-button"},{"type":"type","title":"Values (Text Input) - Nostrum.Struct.Message.Component.style/0","doc":"- ``1``: Short - A single line text input.\n- ``2``: Paragraph - A multi-line text input.","ref":"Nostrum.Struct.Message.Component.html#t:style/0-values-text-input"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.style/0","doc":"See [Discord Developer Portal: Button\nStyles](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles).","ref":"Nostrum.Struct.Message.Component.html#t:style/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.t/0","doc":"Represents a message component.","ref":"Nostrum.Struct.Message.Component.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.type/0","doc":"Component type.\n\nThis field is always set.","ref":"Nostrum.Struct.Message.Component.html#t:type/0"},{"type":"type","title":"Values - Nostrum.Struct.Message.Component.type/0","doc":"- ``1``: Action Row - A container for other components.\n- ``2``: Button - A button object.\n- ``3``: Select Menu - A select menu for picking from choices.\n- ``4``: Text Input - A text input field.","ref":"Nostrum.Struct.Message.Component.html#t:type/0-values"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.type/0","doc":"See [Discord Developer Portal: Component\nTypes](https://discord.com/developers/docs/interactions/message-components#component-object-component-types).","ref":"Nostrum.Struct.Message.Component.html#t:type/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.url/0","doc":"URL for link-style buttons.\n\nOnly present for buttons.","ref":"Nostrum.Struct.Message.Component.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.value/0","doc":"The current value of the component.\n\nWhen creating a new component, this will be its pre-filled value if present.\nOnly present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll","doc":"Struct representing a poll in a Discord chat.\n\nThere are various helper methods on this structure to create new poll, see `create_poll/2` and `put_answer/2` & `put_answer/3` for code samples.","ref":"Nostrum.Struct.Message.Poll.html"},{"type":"function","title":"Nostrum.Struct.Message.Poll.create_poll/2","doc":"Create a new poll struct.\n\nUse `Nostrum.Api.create_message` to send it once you've populated it.\n\nAccepts a `question_text` parameter which is the string to use as the poll title.\n\nKeyword arguments:\n- `duration`: duration (in hours) the poll should be open for\n- `allow_multiselect`: whether users should be able to select multiple answers\n\nYou can also pass an `answers` key with answers, though `put_answer/2` and `put_answer/3` are advised.","ref":"Nostrum.Struct.Message.Poll.html#create_poll/2"},{"type":"function","title":"Examples - Nostrum.Struct.Message.Poll.create_poll/2","doc":"```elixir\npoll = Poll.create_poll(\"Do you enjoy pineapple on pizza?\", duration: 2, allow_multiselect: false)\n |> Poll.put_answer(\"Yes!\", default_emoji: \"\\u2705\") # check mark emoji\n |> Poll.put_answer(\"No!\", default_emoji: \"\\u274C\") # cross emoji\n\nApi.create_message(channel_id, poll: poll)\n```","ref":"Nostrum.Struct.Message.Poll.html#create_poll/2-examples"},{"type":"function","title":"Nostrum.Struct.Message.Poll.put_answer/2","doc":"Add an answer to the provided poll.\n\nSee `create_poll/2` for a code sample of this function.\n\nTakes a required \"answer\" text field, as well as either of the optional arguments:\n- `custom_emoji`: An integer representing the snowflake of an emoji to display with the option\n- `default_emoji`: A default platform emoji represented as a unicode character","ref":"Nostrum.Struct.Message.Poll.html#put_answer/2"},{"type":"function","title":"Nostrum.Struct.Message.Poll.put_answer/3","doc":"","ref":"Nostrum.Struct.Message.Poll.html#put_answer/3"},{"type":"type","title":"Nostrum.Struct.Message.Poll.allow_multiselect/0","doc":"Whether the poll allows selection of multiple answers","ref":"Nostrum.Struct.Message.Poll.html#t:allow_multiselect/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.answers/0","doc":"List of potential answers for the poll","ref":"Nostrum.Struct.Message.Poll.html#t:answers/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.duration/0","doc":"Duration of poll in hours","ref":"Nostrum.Struct.Message.Poll.html#t:duration/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.expiry/0","doc":"Expiry time of the poll","ref":"Nostrum.Struct.Message.Poll.html#t:expiry/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.layout_type/0","doc":"Layout type for the poll, currently only 1 (`DEFAULT`) is supported here.\n\nIf set to `nil`, the value will default to `1` at the Discord API.","ref":"Nostrum.Struct.Message.Poll.html#t:layout_type/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.question/0","doc":"Question for the poll","ref":"Nostrum.Struct.Message.Poll.html#t:question/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.results/0","doc":"Result counts of a poll that has been voted on.\n\nThis field is only present for poll objects received over the gateway or Discord API.\n\nAs mentioned in the `Nostrum.Struct.Message.Poll.Results` documentation, if an answer has not been voted on it\nwill not be in this object.","ref":"Nostrum.Struct.Message.Poll.html#t:results/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.Answer","doc":"A struct representing a poll answer.","ref":"Nostrum.Struct.Message.Poll.Answer.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.answer_id/0","doc":"ID of the answer, this is only sent *from* the gateway, you do not need to send this to the gateway.","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:answer_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.poll_media/0","doc":"Object representing how the answer is displayed visually, with the text and optional emojis.","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:poll_media/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.MediaObject","doc":"A struct representing a media item of a poll (e.g. a question or answer)","ref":"Nostrum.Struct.Message.Poll.MediaObject.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.emoji/0","doc":"A partial emoji (only supported for answers).\n\nFor a custom emoji, only the `id` field needs to be sent, for a default emoji, only the\n`name` field needs to be sent (with the Unicode emoji).","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.text/0","doc":"Text of the poll media object, either the question or answer text.","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:text/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.Results","doc":"A struct representing the results of a poll.","ref":"Nostrum.Struct.Message.Poll.Results.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.answer_counts/0","doc":"A list of objects representing the counts for each of the potential answers in the poll.\n\nThe `id` property of each item corresponds to the `answer_id`\nof the poll answers. If an option is not present in this list, then\nthere were no votes for that answer.","ref":"Nostrum.Struct.Message.Poll.Results.html#t:answer_counts/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.is_finalized/0","doc":"A flag on whether the poll has finished counting.\n\nIf this is set to true, the counts are guaranteed to be accurate from Discord.","ref":"Nostrum.Struct.Message.Poll.Results.html#t:is_finalized/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.Results.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Reaction","doc":"Struct representing a Discord message reaction.","ref":"Nostrum.Struct.Message.Reaction.html"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.count/0","doc":"Times this emoji has been used to react","ref":"Nostrum.Struct.Message.Reaction.html#t:count/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.emoji/0","doc":"Emoji information","ref":"Nostrum.Struct.Message.Reaction.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.me/0","doc":"Whether the current user is the one who reacted","ref":"Nostrum.Struct.Message.Reaction.html#t:me/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.t/0","doc":"","ref":"Nostrum.Struct.Message.Reaction.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Reference","doc":"Struct representing a discord message reference.","ref":"Nostrum.Struct.Message.Reference.html"},{"type":"type","title":"Nostrum.Struct.Message.Reference.channel_id/0","doc":"Id of the originating message's channel","ref":"Nostrum.Struct.Message.Reference.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.guild_id/0","doc":"Id of the originating message's guild","ref":"Nostrum.Struct.Message.Reference.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.message_id/0","doc":"Id of the originating message","ref":"Nostrum.Struct.Message.Reference.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.t/0","doc":"","ref":"Nostrum.Struct.Message.Reference.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Overwrite","doc":"Struct representing a Discord overwrite.","ref":"Nostrum.Struct.Overwrite.html"},{"type":"type","title":"Nostrum.Struct.Overwrite.allow/0","doc":"Permission bit set","ref":"Nostrum.Struct.Overwrite.html#t:allow/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.deny/0","doc":"Permission bit set","ref":"Nostrum.Struct.Overwrite.html#t:deny/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.id/0","doc":"Role or User id","ref":"Nostrum.Struct.Overwrite.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.t/0","doc":"","ref":"Nostrum.Struct.Overwrite.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.type/0","doc":"Either ``0`` (role) or ``1`` (member)","ref":"Nostrum.Struct.Overwrite.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Sticker","doc":"A `Nostrum.Struct.Sticker` represents a sticker that can be sent inside a\n`Nostrum.Struct.Message`.","ref":"Nostrum.Struct.Sticker.html"},{"type":"function","title":"Nostrum.Struct.Sticker.cdn_url/1","doc":"Fetch a CDN URL for the sticker object.\n\n`:png` and `:apng` stickers will return a `.png` URL, `:gif` will return a\n`.gif` URL and `:lottie` will return a `.json` URL.","ref":"Nostrum.Struct.Sticker.html#cdn_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Sticker.cdn_url/1","doc":"```elixir\niex> sticker = %Nostrum.Struct.Sticker{format_type: :gif, id: 112233445566778899}\niex> Nostrum.Struct.Sticker.cdn_url sticker\n\"https://media.discordapp.net/stickers/112233445566778899.gif\"\n```\n\n```elixir\niex> sticker = %Nostrum.Struct.Sticker{format_type: :apng, id: 998877665544332211}\niex> Nostrum.Struct.Sticker.cdn_url sticker\n\"https://cdn.discordapp.com/stickers/998877665544332211.png\"\n```","ref":"Nostrum.Struct.Sticker.html#cdn_url/1-examples"},{"type":"type","title":"Nostrum.Struct.Sticker.available/0","doc":"Whether this guild sticker can be used.\n\nMay be false due to loss of Server Boosts","ref":"Nostrum.Struct.Sticker.html#t:available/0"},{"type":"type","title":"Nostrum.Struct.Sticker.description/0","doc":"Description of the sticker","ref":"Nostrum.Struct.Sticker.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Sticker.format_type/0","doc":"Format of the sticker.\n\nThis field is used to determine the return URL in `cdn_url/1`.","ref":"Nostrum.Struct.Sticker.html#t:format_type/0"},{"type":"type","title":"Nostrum.Struct.Sticker.guild_id/0","doc":"ID of the guild that owns this sticker.\n\n`nil` if the sticker is a built-in (type `:standard`) sticker.","ref":"Nostrum.Struct.Sticker.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.id/0","doc":"ID of the sticker","ref":"Nostrum.Struct.Sticker.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.name/0","doc":"Name of the sticker","ref":"Nostrum.Struct.Sticker.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Sticker.pack_id/0","doc":"ID of the pack the sticker is from","ref":"Nostrum.Struct.Sticker.html#t:pack_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.sort_value/0","doc":"The sticker's sort order within its pack.\n\nSometimes provided for stickers with type `:standard` that are in a pack.","ref":"Nostrum.Struct.Sticker.html#t:sort_value/0"},{"type":"type","title":"Nostrum.Struct.Sticker.t/0","doc":"","ref":"Nostrum.Struct.Sticker.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Sticker.tags/0","doc":"Tags used by the Discord client to auto-complete a sticker.\n\nFor default sticker packs, this is a comma-separated list. For guild stickers,\nthis is the name of the unicode emoji associated by the sticker creator with\nthe sticker.\n\nThis is technically a free-text field so consistency in formatting is not guaranteed.","ref":"Nostrum.Struct.Sticker.html#t:tags/0"},{"type":"type","title":"Nostrum.Struct.Sticker.type/0","doc":"Whether the sticker is a standard (platform made) sticker or a custom guild sticker.","ref":"Nostrum.Struct.Sticker.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Sticker.user/0","doc":"User that uploaded the guild sticker.\n\n`nil` if the sticker is a built-in (type `:standard`) sticker.","ref":"Nostrum.Struct.Sticker.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Sticker.Pack","doc":"Represents a platform-curated sticker pack on Discord","ref":"Nostrum.Struct.Sticker.Pack.html"},{"type":"function","title":"Nostrum.Struct.Sticker.Pack.banner_url/1","doc":"Return the banner pack URL for a given sticker pack.\n\nThis is a marketing banner provided by Discord for their platform curated sticker packs.","ref":"Nostrum.Struct.Sticker.Pack.html#banner_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Sticker.Pack.banner_url/1","doc":"```elixir\niex> pack = %Nostrum.Struct.Sticker.Pack{banner_asset_id: 112233445566778899}\niex> Nostrum.Struct.Sticker.Pack.banner_url pack\n\"https://cdn.discordapp.com/app-assets/710982414301790216/store/112233445566778899.png\"\n```","ref":"Nostrum.Struct.Sticker.Pack.html#banner_url/1-examples"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.banner_asset_id/0","doc":"Asset ID of the banner for this sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:banner_asset_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.cover_sticker_id/0","doc":"ID of a sticker contained within the pack that should be the cover.","ref":"Nostrum.Struct.Sticker.Pack.html#t:cover_sticker_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.description/0","doc":"Marketing description of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.id/0","doc":"ID of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.name/0","doc":"Name of the pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.sku_id/0","doc":"SKU ID of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:sku_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.stickers/0","doc":"A list of stickers contained within the pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:stickers/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.t/0","doc":"","ref":"Nostrum.Struct.Sticker.Pack.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.ThreadMember","doc":"Struct representing a thread member object","ref":"Nostrum.Struct.ThreadMember.html"},{"type":"type","title":"Nostrum.Struct.ThreadMember.flags/0","doc":"Any user-thread settings","ref":"Nostrum.Struct.ThreadMember.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.guild_id/0","doc":"The id of the guild the thread is in.\n\nOnly present within `THREAD_MEMBER_UPDATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.id/0","doc":"The id of the thread, omitted within `GUILD_CREATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.join_timestamp/0","doc":"The timestamp of when the user last joined the thread","ref":"Nostrum.Struct.ThreadMember.html#t:join_timestamp/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.t/0","doc":"","ref":"Nostrum.Struct.ThreadMember.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.user_id/0","doc":"The id of the user, omitted within `GUILD_CREATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.User","doc":"Struct representing a Discord user.","ref":"Nostrum.Struct.User.html"},{"type":"module","title":"Mentioning Users in Messages - Nostrum.Struct.User","doc":"A `Nostrum.Struct.User` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nuser = %Nostrum.Struct.User{id: 120571255635181568}\nNostrum.Api.create_message!(184046599834435585, \"#{user}\")\n%Nostrum.Struct.Message{content: \"<@120571255635181568>\"}\n\nuser = %Nostrum.Struct.User{id: 89918932789497856}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.User.mention(user)}\")\n%Nostrum.Struct.Message{content: \"<@89918932789497856>\"}\n```","ref":"Nostrum.Struct.User.html#module-mentioning-users-in-messages"},{"type":"module","title":"User vs. Member - Nostrum.Struct.User","doc":"A `user` contains only general information about that user such as a `username` and an `avatar`.\nA `member` has everything that a `user` has, but also additional information on a per guild basis. This includes things like a `nickname` and a list of `roles`.","ref":"Nostrum.Struct.User.html#module-user-vs-member"},{"type":"function","title":"Nostrum.Struct.User.avatar_url/2","doc":"Returns the URL of a user's display avatar.\n\nIf `:avatar` is `nil`, the default avatar url is returned.\n\nSupported image formats are PNG, JPEG, WebP, and GIF.","ref":"Nostrum.Struct.User.html#avatar_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.User.avatar_url/2","doc":"```elixir\niex> user = %Nostrum.Struct.User{avatar: \"8342729096ea3675442027381ff50dfe\",\n...> id: 80351110224678912}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.webp\"\niex> Nostrum.Struct.User.avatar_url(user, \"png\")\n\"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.png\"\n\niex> user = %Nostrum.Struct.User{avatar: nil,\n...> id: 80351110224678912,\n...> discriminator: \"0\"}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/embed/avatars/5.png\"\n\niex> user = %Nostrum.Struct.User{avatar: nil,\n...> discriminator: \"1337\"}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/embed/avatars/2.png\"\n```","ref":"Nostrum.Struct.User.html#avatar_url/2-examples"},{"type":"function","title":"Nostrum.Struct.User.full_name/1","doc":"Returns a user's `:global_name` if present, otherwise returns their\n`:username` and `:discriminator` separated by a hashtag.","ref":"Nostrum.Struct.User.html#full_name/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.full_name/1","doc":"```elixir\niex> user = %Nostrum.Struct.User{global_name: \"TheRealJason\",\n...> username: \"therealjason\",\n...> discriminator: \"0\"}\niex> Nostrum.Struct.User.full_name(user)\n\"TheRealJason\"\n```\n\n```elixir\niex> user = %Nostrum.Struct.User{username: \"b1nzy\",\n...> discriminator: \"0852\"}\niex> Nostrum.Struct.User.full_name(user)\n\"b1nzy#0852\"\n```","ref":"Nostrum.Struct.User.html#full_name/1-examples"},{"type":"function","title":"Nostrum.Struct.User.mention/1","doc":"Formats an `Nostrum.Struct.User` into a mention.","ref":"Nostrum.Struct.User.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.mention/1","doc":"```elixir\niex> user = %Nostrum.Struct.User{id: 177888205536886784}\n...> Nostrum.Struct.User.mention(user)\n\"<@177888205536886784>\"\n```","ref":"Nostrum.Struct.User.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.User.avatar/0","doc":"User's avatar hash","ref":"Nostrum.Struct.User.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.User.bot/0","doc":"Whether the user is a bot","ref":"Nostrum.Struct.User.html#t:bot/0"},{"type":"type","title":"Nostrum.Struct.User.discriminator/0","doc":"The user's 4--digit discord-tag","ref":"Nostrum.Struct.User.html#t:discriminator/0"},{"type":"type","title":"Nostrum.Struct.User.global_name/0","doc":"The user's display name, if it is set","ref":"Nostrum.Struct.User.html#t:global_name/0"},{"type":"type","title":"Nostrum.Struct.User.id/0","doc":"The user's id","ref":"Nostrum.Struct.User.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.User.public_flags/0","doc":"The user's public flags, as a bitset.\n\nTo parse these, use `Nostrum.Struct.User.Flags.from_integer/1`.","ref":"Nostrum.Struct.User.html#t:public_flags/0"},{"type":"type","title":"Nostrum.Struct.User.t/0","doc":"","ref":"Nostrum.Struct.User.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.User.username/0","doc":"The user's username","ref":"Nostrum.Struct.User.html#t:username/0"},{"type":"module","title":"Nostrum.Struct.User.Connection","doc":"Struct representing a Discord User's connections","ref":"Nostrum.Struct.User.Connection.html"},{"type":"module","title":"Nostrum.Struct.User.Flags","doc":"Struct representing the flags a user account can have","ref":"Nostrum.Struct.User.Flags.html"},{"type":"function","title":"Nostrum.Struct.User.Flags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API (either public_flags or flags).","ref":"Nostrum.Struct.User.Flags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.Flags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.User.Flags.from_integer(131842)\n%Nostrum.Struct.User.Flags{\n bug_hunter_level_1: false,\n bug_hunter_level_2: false,\n early_supporter: true,\n hypesquad_balance: true,\n hypesquad_bravery: false,\n hypesquad_brilliance: false,\n hypesquad_events: false,\n partner: true,\n staff: false,\n system: false,\n team_user: false,\n verified_bot: false,\n verified_developer: true\n}\n```","ref":"Nostrum.Struct.User.Flags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.User.Flags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.User.Flags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.Flags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.User.Flags{\n...> bug_hunter_level_1: false,\n...> bug_hunter_level_2: false,\n...> early_supporter: true,\n...> hypesquad_balance: true,\n...> hypesquad_bravery: false,\n...> hypesquad_brilliance: false,\n...> hypesquad_events: false,\n...> partner: true,\n...> staff: false,\n...> system: false,\n...> team_user: false,\n...> verified_bot: false,\n...> verified_developer: true\n...> }\niex> Nostrum.Struct.User.Flags.to_integer(my_flags)\n131842\n```","ref":"Nostrum.Struct.User.Flags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.User.Flags.bug_hunter_level_1/0","doc":"Bug Hunter (Level 1)","ref":"Nostrum.Struct.User.Flags.html#t:bug_hunter_level_1/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.bug_hunter_level_2/0","doc":"Bug Hunter (Level 2)","ref":"Nostrum.Struct.User.Flags.html#t:bug_hunter_level_2/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.early_supporter/0","doc":"Early Supporter","ref":"Nostrum.Struct.User.Flags.html#t:early_supporter/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.flags/0","doc":"","ref":"Nostrum.Struct.User.Flags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_balance/0","doc":"HypeSquad Balance","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_balance/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_bravery/0","doc":"HypeSquad Bravery","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_bravery/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_brilliance/0","doc":"HypeSquad Brilliance","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_brilliance/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_events/0","doc":"HypeSquad Events","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_events/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.partner/0","doc":"Discord Partner","ref":"Nostrum.Struct.User.Flags.html#t:partner/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.raw_flags/0","doc":"Raw user flags as sent by the Discord API","ref":"Nostrum.Struct.User.Flags.html#t:raw_flags/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.staff/0","doc":"Discord Employee","ref":"Nostrum.Struct.User.Flags.html#t:staff/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.system/0","doc":"System user","ref":"Nostrum.Struct.User.Flags.html#t:system/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.t/0","doc":"","ref":"Nostrum.Struct.User.Flags.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.team_user/0","doc":"Team User","ref":"Nostrum.Struct.User.Flags.html#t:team_user/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.verified_bot/0","doc":"Verified bot","ref":"Nostrum.Struct.User.Flags.html#t:verified_bot/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.verified_developer/0","doc":"Verified developer","ref":"Nostrum.Struct.User.Flags.html#t:verified_developer/0"},{"type":"module","title":"Nostrum.Struct.VoiceRegion","doc":"Struct representing a Discord voice region.","ref":"Nostrum.Struct.VoiceRegion.html"},{"type":"type","title":"Nostrum.Struct.VoiceRegion.t/0","doc":"","ref":"Nostrum.Struct.VoiceRegion.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.VoiceWSState","doc":"Struct representing the current Voice WS state.","ref":"Nostrum.Struct.VoiceWSState.html"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.channel_id/0","doc":"The channel id that this voice websocket state applies to","ref":"Nostrum.Struct.VoiceWSState.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.conn/0","doc":"PID of the `:gun` worker connected to the websocket","ref":"Nostrum.Struct.VoiceWSState.html#t:conn/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.conn_pid/0","doc":"PID of the connection process","ref":"Nostrum.Struct.VoiceWSState.html#t:conn_pid/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.gateway/0","doc":"Gateway URL","ref":"Nostrum.Struct.VoiceWSState.html#t:gateway/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.guild_id/0","doc":"The guild id that this voice websocket state applies to","ref":"Nostrum.Struct.VoiceWSState.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_ack/0","doc":"Whether or not the last heartbeat sent was ACK'd","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_interval/0","doc":"Interval at which heartbeats are sent","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_interval/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_ref/0","doc":"Time ref for the heartbeat","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_ref/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.identified/0","doc":"Whether the session has been identified","ref":"Nostrum.Struct.VoiceWSState.html#t:identified/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.last_heartbeat_ack/0","doc":"The time the last heartbeat was acknowledged, will be nil if a heartbeat\nhasn't been ACK'd yet","ref":"Nostrum.Struct.VoiceWSState.html#t:last_heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.last_heartbeat_send/0","doc":"The time the last heartbeat was sent, if a heartbeat hasn't been sent it\nwill be the time the websocket process was started","ref":"Nostrum.Struct.VoiceWSState.html#t:last_heartbeat_send/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.secret_key/0","doc":"The secret key for audio encryption","ref":"Nostrum.Struct.VoiceWSState.html#t:secret_key/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.session/0","doc":"The session id","ref":"Nostrum.Struct.VoiceWSState.html#t:session/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.ssrc_map/0","doc":"A mapping of RTP SSRC (synchronization source) to user id\n\nThis map can be used to identify the user who generated the incoming\naudio data when an RTP packet is received.","ref":"Nostrum.Struct.VoiceWSState.html#t:ssrc_map/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.stream/0","doc":"Stream reference for `:gun`","ref":"Nostrum.Struct.VoiceWSState.html#t:stream/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.t/0","doc":"","ref":"Nostrum.Struct.VoiceWSState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.token/0","doc":"The session token","ref":"Nostrum.Struct.VoiceWSState.html#t:token/0"},{"type":"module","title":"Nostrum.Struct.WSState","doc":"Struct representing the current WS state.","ref":"Nostrum.Struct.WSState.html"},{"type":"type","title":"Nostrum.Struct.WSState.compress_ctx/0","doc":"Reference to the current compression context","ref":"Nostrum.Struct.WSState.html#t:compress_ctx/0"},{"type":"type","title":"Nostrum.Struct.WSState.conn/0","doc":"PID of the `:gun` worker connected to the websocket","ref":"Nostrum.Struct.WSState.html#t:conn/0"},{"type":"type","title":"Nostrum.Struct.WSState.conn_pid/0","doc":"PID of the connection process","ref":"Nostrum.Struct.WSState.html#t:conn_pid/0"},{"type":"type","title":"Nostrum.Struct.WSState.gateway/0","doc":"Gateway URL","ref":"Nostrum.Struct.WSState.html#t:gateway/0"},{"type":"type","title":"Nostrum.Struct.WSState.heartbeat_ack/0","doc":"Whether or not the last hearbeat sent was ACK'd","ref":"Nostrum.Struct.WSState.html#t:heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.WSState.heartbeat_interval/0","doc":"Interval at which heartbeats are sent","ref":"Nostrum.Struct.WSState.html#t:heartbeat_interval/0"},{"type":"type","title":"Nostrum.Struct.WSState.last_heartbeat_ack/0","doc":"The time the last heartbeat was acknowledged, will be nil if a heartbeat\nhasn't been ACK'd yet","ref":"Nostrum.Struct.WSState.html#t:last_heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.WSState.last_heartbeat_send/0","doc":"The time the last heartbeat was sent, if a heartbeat hasn't been sent it\nwill be the time the websocket process was started","ref":"Nostrum.Struct.WSState.html#t:last_heartbeat_send/0"},{"type":"type","title":"Nostrum.Struct.WSState.resume_gateway/0","doc":"Gateway URL to use for resuming.","ref":"Nostrum.Struct.WSState.html#t:resume_gateway/0"},{"type":"type","title":"Nostrum.Struct.WSState.seq/0","doc":"The sequence number of the last event","ref":"Nostrum.Struct.WSState.html#t:seq/0"},{"type":"type","title":"Nostrum.Struct.WSState.session/0","doc":"The session id","ref":"Nostrum.Struct.WSState.html#t:session/0"},{"type":"type","title":"Nostrum.Struct.WSState.shard_num/0","doc":"The shard number","ref":"Nostrum.Struct.WSState.html#t:shard_num/0"},{"type":"type","title":"Nostrum.Struct.WSState.stream/0","doc":"Stream reference for `:gun`","ref":"Nostrum.Struct.WSState.html#t:stream/0"},{"type":"type","title":"Nostrum.Struct.WSState.t/0","doc":"","ref":"Nostrum.Struct.WSState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.WSState.total_shards/0","doc":"The highest shard number for this bot.\n\nThis may not be started locally, it is just used by nostrum to inform the\ngateway which events we are interested in.","ref":"Nostrum.Struct.WSState.html#t:total_shards/0"},{"type":"module","title":"Nostrum.Struct.Webhook","doc":"Struct representing a Discord webhook.","ref":"Nostrum.Struct.Webhook.html"},{"type":"type","title":"Nostrum.Struct.Webhook.avatar/0","doc":"Default avatar of the webhook","ref":"Nostrum.Struct.Webhook.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.Webhook.channel_id/0","doc":"Channel the webhook is for","ref":"Nostrum.Struct.Webhook.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.guild_id/0","doc":"Guild the webhook is for","ref":"Nostrum.Struct.Webhook.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.id/0","doc":"Id of the webhook","ref":"Nostrum.Struct.Webhook.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.name/0","doc":"Default name of the webhook","ref":"Nostrum.Struct.Webhook.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Webhook.t/0","doc":"","ref":"Nostrum.Struct.Webhook.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Webhook.token/0","doc":"Secure token of the webhook","ref":"Nostrum.Struct.Webhook.html#t:token/0"},{"type":"type","title":"Nostrum.Struct.Webhook.user/0","doc":"User who created the webhook","ref":"Nostrum.Struct.Webhook.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.AutoModerationRuleExecute","doc":"Sent when an auto-moderation rule executes.\n(e.g. message is blocked).","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.action/0","doc":"The action that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:action/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.alert_system_message_id/0","doc":"The id of any system message that was generated as a result of the action\n\nnote: will not exist if the event does not correspond to an action that generates a system message","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:alert_system_message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.channel_id/0","doc":"The id of the channel in which the content was posted\n\nnote: this field may not exist if the content was blocked from being created","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.content/0","doc":"The content of the message which triggered the rule","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:content/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.guild_id/0","doc":"The id of the guild in which the action was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.matched_content/0","doc":"The substring which matched the content","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:matched_content/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.matched_keyword/0","doc":"The keyword that was matched in the content","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:matched_keyword/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.message_id/0","doc":"The id of the message which was posted\n\nnote: this field will not exist if the content was blocked from being created","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.rule_id/0","doc":"The id of the rule that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:rule_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.rule_trigger_type/0","doc":"The type of the rule that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:rule_trigger_type/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.t/0","doc":"","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.user_id/0","doc":"The id of the user which generated the content which triggered the rule","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.ChannelPinsUpdate","doc":"Represents an update to channel pins.","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.channel_id/0","doc":"The ID of the channel","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.guild_id/0","doc":"The ID of the guild, if the pin update was on a guild","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.last_pin_timestamp/0","doc":"The time at which the most recent pinned message was pinned","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:last_pin_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.t/0","doc":"Event sent when a message is pinned or unpinned in a text channel","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildBanAdd","doc":"Sent when a user is banned from a guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.guild_id/0","doc":"ID of the guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.t/0","doc":"Event sent when a user is banned from a guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.user/0","doc":"Banned user","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildBanRemove","doc":"Sent when a user is unbanned from a guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.guild_id/0","doc":"ID of the guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.t/0","doc":"Event sent when a user is unbanned from a guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.user/0","doc":"Unbanned user","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildIntegrationDelete","doc":"Event fired when a guild integration is deleted.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.application_id/0","doc":"id of the bot/OAuth2 application for this discord integration","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.guild_id/0","doc":"The id of the guild the integration is in.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.id/0","doc":"The id of the deleted integration.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate","doc":"Sent when a guild integration is updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate.guild_id/0","doc":"ID of the guild whose integrations were updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate.t/0","doc":"Event sent when a guild integration is updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","doc":"Struct representing a guild scheduled event user add event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.guild_id/0","doc":"The id of the guild the event is scheduled for.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.guild_scheduled_event_id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:guild_scheduled_event_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.user_id/0","doc":"The id of the user that subscribed to the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","doc":"Struct representing a guild scheduled event user remove event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.guild_id/0","doc":"The id of the guild the event is scheduled for.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.guild_scheduled_event_id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:guild_scheduled_event_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.user_id/0","doc":"The id of the user that unsubscribed to the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.InviteCreate","doc":"Struct representing an Invite Create event","ref":"Nostrum.Struct.Event.InviteCreate.html"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.channel_id/0","doc":"Channel id of the channel this invite is for.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.code/0","doc":"The unique invite code.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.created_at/0","doc":"The time at which the invite was created.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:created_at/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.guild_id/0","doc":"Guild id of the guild this invite is for.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.inviter/0","doc":"The user that created the invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:inviter/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.max_age/0","doc":"Duration (in seconds) after which the invite expires.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:max_age/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.max_uses/0","doc":"Max number of times this invite can be used.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:max_uses/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.t/0","doc":"","ref":"Nostrum.Struct.Event.InviteCreate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.target_user/0","doc":"Partially populated user struct of the target user for this invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:target_user/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.target_user_type/0","doc":"The type of user target for this invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:target_user_type/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.temporary/0","doc":"Whether this invite only grants temporary membership.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:temporary/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.uses/0","doc":"Number of times this invite has been used.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:uses/0"},{"type":"module","title":"Nostrum.Struct.Event.InviteDelete","doc":"Struct representing an Invite Delete event","ref":"Nostrum.Struct.Event.InviteDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.channel_id/0","doc":"Channel id of the channel this invite is for.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.code/0","doc":"The unique invite code.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.guild_id/0","doc":"Guild id of the guild this invite is for.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.InviteDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageDelete","doc":"Struct representing a Message Delete event","ref":"Nostrum.Struct.Event.MessageDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.channel_id/0","doc":"Channel id of the deleted message","ref":"Nostrum.Struct.Event.MessageDelete.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.deleted_message/0","doc":"The deleted message, if it was found\nin the message cache.","ref":"Nostrum.Struct.Event.MessageDelete.html#t:deleted_message/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.guild_id/0","doc":"Guild id of the deleted message\n\n`nil` if a non-guild message was deleted.","ref":"Nostrum.Struct.Event.MessageDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.id/0","doc":"Id of the deleted message","ref":"Nostrum.Struct.Event.MessageDelete.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.MessageDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageDeleteBulk","doc":"Struct representing a Message Delete Bulk event","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.channel_id/0","doc":"Channel id of the deleted message","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.deleted_messages/0","doc":"The deleted messages, if any were not found\nin the message cache they will only have the id and channel_id set.","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:deleted_messages/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.guild_id/0","doc":"Guild id of the deleted message\n\n`nil` if a non-guild message was deleted.","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.ids/0","doc":"Ids of the deleted messages","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:ids/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.t/0","doc":"","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionAdd","doc":"Sent when a user adds a reaction to a message","ref":"Nostrum.Struct.Event.MessageReactionAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.channel_id/0","doc":"Channel in which the reaction was added","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.emoji/0","doc":"The (partial) emoji used to react","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.guild_id/0","doc":"Guild ID in which the reaction was added, if applicable","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.member/0","doc":"The member who reacted, if this happened on a guild","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.message_id/0","doc":"Message to which the reaction was added","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.t/0","doc":"Event sent when a user adds a reaction to a message","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.user_id/0","doc":"ID of the user who added the reaction","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemove","doc":"Sent when a user removes a reaction from a message","ref":"Nostrum.Struct.Event.MessageReactionRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.channel_id/0","doc":"ID of the channel in which the reaction was created","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.emoji/0","doc":"Partial emoji object that was removed","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.guild_id/0","doc":"ID of the guild on which the message lives, if applicable","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.message_id/0","doc":"ID of the message to which the reaction was attached","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.t/0","doc":"Event sent when a user removes a reaction from a message","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.user_id/0","doc":"Author of the reaction","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemoveAll","doc":"Sent when a user explicitly removes all reactions from a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.channel_id/0","doc":"ID of the channel in which the message resides.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.guild_id/0","doc":"ID of the guild for the message, if applicable.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.message_id/0","doc":"ID of the message from which all reactions were removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.t/0","doc":"Event sent when a user explicitly removes all reactions from a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","doc":"Sent when a bot removes all instances of a given emoji from the reactions of a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.channel_id/0","doc":"Channel in which the message resides.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.emoji/0","doc":"The (partial) emoji that was removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.guild_id/0","doc":"Guild on which the message resides, if applicable.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.message_id/0","doc":"Message from which the emoji was removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.t/0","doc":"Event sent when a bot removes all instances of a given emoji from the reactions of a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.PartialApplication","doc":"Sent on `READY`","ref":"Nostrum.Struct.Event.PartialApplication.html"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.flags/0","doc":"Public flags of the application.\n\nSee https://discord.com/developers/docs/resources/application#application-object-application-flags","ref":"Nostrum.Struct.Event.PartialApplication.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.id/0","doc":"ID of the application","ref":"Nostrum.Struct.Event.PartialApplication.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.t/0","doc":"Event sent as part of the `READY` payload.","ref":"Nostrum.Struct.Event.PartialApplication.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.PollVoteChange","doc":"Represents an addition or removal of a vote from a Discord poll.\n\nFor polls where multiple answers were selected, one of these events will be fired for each vote.","ref":"Nostrum.Struct.Event.PollVoteChange.html"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.answer_id/0","doc":"ID corresponding to the answer_id in the `t:Nostrum.Struct.Message.Poll.answers/0` list","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:answer_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.channel_id/0","doc":"ID of the channel the vote took place in","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.guild_id/0","doc":"ID of the guild the poll is in (unless it is a private channel)","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.message_id/0","doc":"ID of the message the poll was attached to","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.t/0","doc":"Event representing a addition or removal of a vote from a poll","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.type/0","doc":"Whether the vote was an addition or removal for a vote of the option","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.user_id/0","doc":"ID of the user that has voted","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.Ready","doc":"Sent after initial handshake with the gateway","ref":"Nostrum.Struct.Event.Ready.html"},{"type":"type","title":"Nostrum.Struct.Event.Ready.application/0","doc":"Partial application object with `id` and `flags`","ref":"Nostrum.Struct.Event.Ready.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.guilds/0","doc":"The guilds that the bot user is in","ref":"Nostrum.Struct.Event.Ready.html#t:guilds/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.resume_gateway_url/0","doc":"Similar to `t:session_id/0`, this is the URL that Discord has requested\nreconnection attempts to be made against.\n\nNostrum stores and handles this for you, this value is provided for\ndebugging purposes.","ref":"Nostrum.Struct.Event.Ready.html#t:resume_gateway_url/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.session_id/0","doc":"Used for resuming connections.\n\nIf you are wondering whether you need to use this, you probably don't.\nNostrum handles reconnections for you.","ref":"Nostrum.Struct.Event.Ready.html#t:session_id/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.shard/0","doc":"A pair of two integers ``{shard_id, num_shards}``.\n\nFor more information, see\nhttps://discord.com/developers/docs/topics/gateway#sharding.","ref":"Nostrum.Struct.Event.Ready.html#t:shard/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.t/0","doc":"Event sent after initial handshake with the gateway","ref":"Nostrum.Struct.Event.Ready.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.user/0","doc":"Information about the bot user","ref":"Nostrum.Struct.Event.Ready.html#t:user/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.v/0","doc":"Gateway version.\nSee https://discord.com/developers/docs/topics/gateway#gateways-gateway-versions","ref":"Nostrum.Struct.Event.Ready.html#t:v/0"},{"type":"module","title":"Nostrum.Struct.Event.SpeakingUpdate","doc":"Struct representing a Nostrum-generated Speaking Update event\n\nNostrum will generate this event when the bot starts or stops playing audio.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.channel_id/0","doc":"Id of the channel this speaking update is occurring in.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.current_url/0","doc":"Current URL being played if a readable format.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:current_url/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.guild_id/0","doc":"Id of the guild this speaking update is occurring in.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.speaking/0","doc":"Boolean representing if bot has started or stopped speaking.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:speaking/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.t/0","doc":"","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.timed_out/0","doc":"Boolean representing if speaking update was caused by an audio timeout.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:timed_out/0"},{"type":"module","title":"Nostrum.Struct.Event.ThreadListSync","doc":"Struct representing a Thread List Sync event.\n\nThis event is sent when the user gains access to a channel.","ref":"Nostrum.Struct.Event.ThreadListSync.html"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.channel_ids/0","doc":"The parent channel ids whose threads are being synced.\nIf omitted, all threads were synced for the entire guild.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:channel_ids/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.guid_id/0","doc":"The id of the guild.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:guid_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.members/0","doc":"All thread member objects from the synced threads for the current user,\nindicating which threads the user has been added to.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:members/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.t/0","doc":"","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.threads/0","doc":"All active threads in the given channels that the user can access.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:threads/0"},{"type":"module","title":"Nostrum.Struct.Event.ThreadMembersUpdate","doc":"Struct representing a thread members update event.\n\nThis event is sent whenever a user is added or removed from a thread.\n\nIf the current user does not have the `GUILD_MEMBERS` intent,\nthis event will only be sent when the current user is added to or removed from a thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.added_members/0","doc":"The members that were added to the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:added_members/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.guild_id/0","doc":"The id of the guild the thread is in.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.id/0","doc":"The id of the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.member_count/0","doc":"The approximate number of members in the thread.\n\nThis number is capped at 50, though there can be more members in the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.removed_member_ids/0","doc":"The ids of the members that were removed from the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:removed_member_ids/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.t/0","doc":"","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.TypingStart","doc":"Sent when a user starts typing in a channel","ref":"Nostrum.Struct.Event.TypingStart.html"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.channel_id/0","doc":"Channel in which the user started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.guild_id/0","doc":"ID of the guild where the user started typing, if applicable","ref":"Nostrum.Struct.Event.TypingStart.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.member/0","doc":"The member who started typing if this happened in a guild","ref":"Nostrum.Struct.Event.TypingStart.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.t/0","doc":"Event sent when a user starts typing in a channel","ref":"Nostrum.Struct.Event.TypingStart.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.timestamp/0","doc":"When the user started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.user_id/0","doc":"ID of the user who started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceReady","doc":"Struct representing a Nostrum-generated Voice Ready event\n\nNostrum will generate this event when the bot joins a voice channel\nand is ready to play audio.\n\nListening to this event may be used for bots that begin playing audio\ndirectly after joining a voice channel as an alternative to waiting\nuntil `Nostrum.Voice.ready?/1` returns `true`.","ref":"Nostrum.Struct.Event.VoiceReady.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.channel_id/0","doc":"Id of the channel that voice is ready in.","ref":"Nostrum.Struct.Event.VoiceReady.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.guild_id/0","doc":"Id of the guild that voice is ready in.","ref":"Nostrum.Struct.Event.VoiceReady.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.t/0","doc":"","ref":"Nostrum.Struct.Event.VoiceReady.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceServerUpdate","doc":"Sent when a guild's voice server is updated","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.endpoint/0","doc":"The voice server host","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:endpoint/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.guild_id/0","doc":"Guild this voice server update is for","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.t/0","doc":"Event sent when a guild's voice server is updated","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.token/0","doc":"Voice connection token","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:token/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceState","doc":"Represents a user's voice connection status","ref":"Nostrum.Struct.Event.VoiceState.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.channel_id/0","doc":"Channel ID this voice state is for","ref":"Nostrum.Struct.Event.VoiceState.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.deaf/0","doc":"Whether this user is deafened by the server","ref":"Nostrum.Struct.Event.VoiceState.html#t:deaf/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.guild_id/0","doc":"Guild ID this voice state is for, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.member/0","doc":"Guild member this voice state is for, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.mute/0","doc":"Whether this user is muteened by the server","ref":"Nostrum.Struct.Event.VoiceState.html#t:mute/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.request_to_speak_timestamp/0","doc":"Time at which the user requested to speak, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:request_to_speak_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_deaf/0","doc":"Whether this user is locally deafened","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_deaf/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_mute/0","doc":"Whether this user is locally muted","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_mute/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_stream/0","doc":"Whether the user is streaming using \"Go Live\"","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_stream/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_video/0","doc":"Whether this user's camera is enabled","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_video/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.session_id/0","doc":"Session ID for this voice state","ref":"Nostrum.Struct.Event.VoiceState.html#t:session_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.suppress/0","doc":"Whether this user is muted by the current user","ref":"Nostrum.Struct.Event.VoiceState.html#t:suppress/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.t/0","doc":"Event sent when a user's voice status is updated","ref":"Nostrum.Struct.Event.VoiceState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.user_id/0","doc":"User this voice state is for","ref":"Nostrum.Struct.Event.VoiceState.html#t:user_id/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandOptionType","doc":"Defines available types used for defining application command option types for passed options\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type","ref":"Nostrum.Constants.ApplicationCommandOptionType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.attachment/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#attachment/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.boolean/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#boolean/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.channel/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#channel/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.integer/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#integer/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.mentionable/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#mentionable/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.number/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#number/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.role/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#role/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.string/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#string/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.sub_command/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#sub_command/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.sub_command_group/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#sub_command_group/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandPermissionType","doc":"Defines available types for application command permissions\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.channel/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#channel/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.role/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#role/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandType","doc":"Defines available types used for selecting application command types\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types","ref":"Nostrum.Constants.ApplicationCommandType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.chat_input/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#chat_input/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.message/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#message/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ButtonStyle","doc":"Defines available styles for button message components\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#button-object-button-styles","ref":"Nostrum.Constants.ButtonStyle.html"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.danger/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#danger/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.link/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#link/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.primary/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#primary/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.secondary/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#secondary/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.success/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#success/0"},{"type":"module","title":"Nostrum.Constants.ChannelType","doc":"Defines available types for channels\nFor more info please refer to https://discord.com/developers/docs/resources/channel#channel-object-channel-types","ref":"Nostrum.Constants.ChannelType.html"},{"type":"function","title":"Nostrum.Constants.ChannelType.announcement_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#announcement_thread/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.dm/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#dm/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.group_db/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#group_db/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_announcement/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_announcement/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_category/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_category/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_directory/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_directory/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_forum/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_forum/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_text/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_text/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_voice/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_voice/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.private_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#private_thread/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.public_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#public_thread/0"},{"type":"module","title":"Nostrum.Constants.ComponentType","doc":"Defines available types for message components\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#component-object-component-types","ref":"Nostrum.Constants.ComponentType.html"},{"type":"function","title":"Nostrum.Constants.ComponentType.action_row/0","doc":"Container for other components","ref":"Nostrum.Constants.ComponentType.html#action_row/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.button/0","doc":"Button object","ref":"Nostrum.Constants.ComponentType.html#button/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.channel_select/0","doc":"Select menu for channels","ref":"Nostrum.Constants.ComponentType.html#channel_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.mentionable_select/0","doc":"Select menu for mentionables (users and roles)","ref":"Nostrum.Constants.ComponentType.html#mentionable_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.role_select/0","doc":"Select menu for roles","ref":"Nostrum.Constants.ComponentType.html#role_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.string_select/0","doc":"Select menu for picking from defined text options","ref":"Nostrum.Constants.ComponentType.html#string_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.text_input/0","doc":"Text input object","ref":"Nostrum.Constants.ComponentType.html#text_input/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.user_select/0","doc":"Select menu for users","ref":"Nostrum.Constants.ComponentType.html#user_select/0"},{"type":"module","title":"Nostrum.Constants.InteractionCallbackType","doc":"Defines available types for interaction callbacks\nFor more info please refer to https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type","ref":"Nostrum.Constants.InteractionCallbackType.html"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.application_command_autocomplete_result/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#application_command_autocomplete_result/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.channel_message_with_source/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#channel_message_with_source/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.deferred_channel_message_with_source/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#deferred_channel_message_with_source/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.deferred_update_message/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#deferred_update_message/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.modal/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#modal/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.pong/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#pong/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.update_message/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#update_message/0"},{"type":"module","title":"Nostrum.Constants.InteractionType","doc":"Defines available types for interactions\nFor more info please refer to https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type","ref":"Nostrum.Constants.InteractionType.html"},{"type":"function","title":"Nostrum.Constants.InteractionType.application_command/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#application_command/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.application_command_autocomplete/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#application_command_autocomplete/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.message_component/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#message_component/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.modal_submit/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#modal_submit/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.ping/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#ping/0"},{"type":"module","title":"Nostrum.Constants.TextInputStyle","doc":"Defines available styles for modal text inputs\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles","ref":"Nostrum.Constants.TextInputStyle.html"},{"type":"function","title":"Nostrum.Constants.TextInputStyle.paragraph/0","doc":"","ref":"Nostrum.Constants.TextInputStyle.html#paragraph/0"},{"type":"function","title":"Nostrum.Constants.TextInputStyle.short/0","doc":"","ref":"Nostrum.Constants.TextInputStyle.html#short/0"},{"type":"module","title":"Nostrum.Constants.WebhookType","doc":"Defines available types for channels\nFor more info please refer to https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types","ref":"Nostrum.Constants.WebhookType.html"},{"type":"function","title":"Nostrum.Constants.WebhookType.application/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#application/0"},{"type":"function","title":"Nostrum.Constants.WebhookType.channel_follower/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#channel_follower/0"},{"type":"function","title":"Nostrum.Constants.WebhookType.incoming/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#incoming/0"},{"type":"module","title":"Nostrum.Snowflake","doc":"Functions that work on Snowflakes.","ref":"Nostrum.Snowflake.html"},{"type":"function","title":"Nostrum.Snowflake.cast/1","doc":"Attempts to convert a term into a snowflake.","ref":"Nostrum.Snowflake.html#cast/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.cast/1","doc":"```elixir\niex> Nostrum.Snowflake.cast(200317799350927360)\n{:ok, 200317799350927360}\n\niex> Nostrum.Snowflake.cast(\"200317799350927360\")\n{:ok, 200317799350927360}\n\niex> Nostrum.Snowflake.cast(nil)\n{:ok, nil}\n\niex> Nostrum.Snowflake.cast(true)\n:error\n\niex> Nostrum.Snowflake.cast(-1)\n:error\n```","ref":"Nostrum.Snowflake.html#cast/1-examples"},{"type":"function","title":"Nostrum.Snowflake.cast!/1","doc":"Same as `cast/1`, except it raises an `ArgumentError` on failure.","ref":"Nostrum.Snowflake.html#cast!/1"},{"type":"function","title":"Nostrum.Snowflake.creation_time/1","doc":"Returns the creation time of the snowflake.","ref":"Nostrum.Snowflake.html#creation_time/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.creation_time/1","doc":"```elixir\niex> Nostrum.Snowflake.creation_time(177888205536886784)\n~U[2016-05-05 21:04:13.203Z]\n```","ref":"Nostrum.Snowflake.html#creation_time/1-examples"},{"type":"function","title":"Nostrum.Snowflake.dump/1","doc":"Convert a snowflake into its external representation.","ref":"Nostrum.Snowflake.html#dump/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.dump/1","doc":"```elixir\niex> Nostrum.Snowflake.dump(109112383011581952)\n\"109112383011581952\"\n```","ref":"Nostrum.Snowflake.html#dump/1-examples"},{"type":"function","title":"Nostrum.Snowflake.from_datetime/1","doc":"Converts the given `datetime` into a snowflake.\n\nIf `datetime` occurred before the discord epoch, the function will return\n`:error`.\n\nThe converted snowflake's last 22 bits will be zeroed out due to missing data.","ref":"Nostrum.Snowflake.html#from_datetime/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.from_datetime/1","doc":"```elixir\niex> {:ok, dt, _} = DateTime.from_iso8601(\"2016-05-05T21:04:13.203Z\")\niex> Nostrum.Snowflake.from_datetime(dt)\n{:ok, 177888205536755712}\n\niex> {:ok, dt, _} = DateTime.from_iso8601(\"1998-12-25T00:00:00.000Z\")\niex> Nostrum.Snowflake.from_datetime(dt)\n:error\n```","ref":"Nostrum.Snowflake.html#from_datetime/1-examples"},{"type":"function","title":"Nostrum.Snowflake.from_datetime!/1","doc":"Same as `from_datetime/1`, except it raises an `ArgumentError` on failure.","ref":"Nostrum.Snowflake.html#from_datetime!/1"},{"type":"macro","title":"Nostrum.Snowflake.is_snowflake/1","doc":"Returns `true` if `term` is a snowflake; otherwise returns `false`.","ref":"Nostrum.Snowflake.html#is_snowflake/1"},{"type":"macro","title":"Examples - Nostrum.Snowflake.is_snowflake/1","doc":"```elixir\niex> Nostrum.Snowflake.is_snowflake(89918932789497856)\ntrue\n\niex> Nostrum.Snowflake.is_snowflake(-1)\nfalse\n\niex> Nostrum.Snowflake.is_snowflake(0xFFFFFFFFFFFFFFFF + 1)\nfalse\n\niex> Nostrum.Snowflake.is_snowflake(\"117789813427535878\")\nfalse\n```","ref":"Nostrum.Snowflake.html#is_snowflake/1-examples"},{"type":"type","title":"Nostrum.Snowflake.external_snowflake/0","doc":"The type that represents snowflakes in JSON.\n\nIn JSON, Snowflakes are typically represented as strings due\nto some languages not being able to represent such a large number.","ref":"Nostrum.Snowflake.html#t:external_snowflake/0"},{"type":"type","title":"Nostrum.Snowflake.t/0","doc":"The snowflake type.\n\nSnowflakes are 64-bit unsigned integers used to represent discord\nobject ids.","ref":"Nostrum.Snowflake.html#t:t/0"},{"type":"module","title":"Nostrum.Token","doc":"A helper module for verifying the Discord bot token.\n\nThe token can be generated in the \"Bot\" tab of your Application the [Discord Developer Portal](https://discord.com/developers/applications) and\ncan be configured in your config file.\n\n```elixir\nconfig :nostrum,\n token: \"666\" # The token of your bot as a string\n```","ref":"Nostrum.Token.html"},{"type":"function","title":"Nostrum.Token.check_token!/0","doc":"Checks if the Discord bot token has the correct format.\n\nWe check if the token is a binary followed by splitting it into 3 parts separated by a dot `\".\"`.\nThe first part is the Base64 encoded user_id which we decode and parse into as integer.\nThe second part is an encoded timestamp, and the last part an arbitrary cryptographic signature.\n\nRaises on failure.","ref":"Nostrum.Token.html#check_token!/0"},{"type":"function","title":"Examples - Nostrum.Token.check_token!/0","doc":"iex> token = \"OTY4NTU2MzQ4MzkwMzkxODU5.G49NjP.pD8PLpKp-Xx8sr-8m1DCxSPTJZdcpcJZOExc1c\"\n iex> Nostrum.Token.check_token!(token)\n :ok\n\n iex> token = \"ODY4MDcxODUzMDMyMzU3OTc4.YPqU6Q.jNJcq1daGG3otexX3c1LcxCpgpQ\"\n iex> Nostrum.Token.check_token!(token)\n :ok","ref":"Nostrum.Token.html#check_token!/0-examples"},{"type":"function","title":"Nostrum.Token.check_token!/1","doc":"","ref":"Nostrum.Token.html#check_token!/1"},{"type":"module","title":"Nostrum.Util","doc":"Utility functions","ref":"Nostrum.Util.html"},{"type":"function","title":"Nostrum.Util.enum_to_struct/2","doc":"","ref":"Nostrum.Util.html#enum_to_struct/2"},{"type":"function","title":"Nostrum.Util.gateway/0","doc":"Returns the gateway url and shard count for current websocket connections.\n\nIf by chance no gateway connection has been made, will fetch the url to use and store it\nfor future use.","ref":"Nostrum.Util.html#gateway/0"},{"type":"function","title":"Nostrum.Util.get_all_shard_latencies/0","doc":"Gets the latencies of all shard connections.\n\nCalls `get_shard_latency/1` on all shards and returns a map whose keys are\nshard nums and whose values are latencies in milliseconds.","ref":"Nostrum.Util.html#get_all_shard_latencies/0"},{"type":"function","title":"Nostrum.Util.get_shard_latency/1","doc":"Gets the latency of the shard connection from a `Nostrum.Struct.WSState.t()` struct.\n\nReturns the latency in milliseconds as an integer, returning nil if unknown.","ref":"Nostrum.Util.html#get_shard_latency/1"},{"type":"function","title":"Nostrum.Util.map_update_if_present/3","doc":"Updates a map with a new value if the key is present.\nOtherwise, returns the map unchanged.","ref":"Nostrum.Util.html#map_update_if_present/3"},{"type":"function","title":"Nostrum.Util.maybe_to_atom/1","doc":"Attempts to convert a string to an atom.\n\nBinary `token`s that consist of digits are assumed to be snowflakes, and will\nbe parsed as such.\n\nSome maps sent from Discord are integer-indexed, for these we just return the integer\nprovided.\n\nIf atom does not currently exist, will warn that we're doing an unsafe conversion.","ref":"Nostrum.Util.html#maybe_to_atom/1"},{"type":"function","title":"Nostrum.Util.maybe_to_datetime/1","doc":"Converts possibly nil ISO8601 timestamp to a `DateTime`.\n\nIf a `DateTime` is provided, return it as-is.","ref":"Nostrum.Util.html#maybe_to_datetime/1"},{"type":"function","title":"Nostrum.Util.maybe_to_unixtime/1","doc":"Converts possibly nil ISO8601 timestamp to unix time.","ref":"Nostrum.Util.html#maybe_to_unixtime/1"},{"type":"function","title":"Nostrum.Util.now/0","doc":"Returns the number of milliseconds since unix epoch.","ref":"Nostrum.Util.html#now/0"},{"type":"function","title":"Nostrum.Util.now_iso/0","doc":"Returns the current date as an ISO formatted string.","ref":"Nostrum.Util.html#now_iso/0"},{"type":"function","title":"Nostrum.Util.num_shards/0","doc":"Returns the total amount of shards as per the configuration.","ref":"Nostrum.Util.html#num_shards/0"},{"type":"function","title":"Return value - Nostrum.Util.num_shards/0","doc":"- If you specified your shards as `:auto`, the return value will be the\nrecommended number of shards as given by the gateway.\n\n- If you explicitly specified your shard numbers as an integer, it will be\nthe given number.\n\n- If you specified your shards in the form `{lowest, highest, total}` to\nstart a specific range of the total shards you want to start, this will be\nthe `total` value.\n\nShould Discord not supply us with any shard information, this will return\n`1`.\n\nNote that this is not the number of currently active shards, but the number\nof shards specified in your config.","ref":"Nostrum.Util.html#num_shards/0-return-value"},{"type":"function","title":"Nostrum.Util.safe_atom_map/1","doc":"Converts a map into an atom-keyed map.\n\nGiven a map with variable type keys, returns the same map with all keys as `atoms`.\nTo support maps keyed with integers (such as in Discord's interaction data),\nbinaries that appear to be integers will be parsed as such.\n\nThis function will attempt to convert keys to an existing atom, and if that fails will default to\ncreating a new atom while displaying a warning. The idea here is that we should be able to see\nif any results from Discord are giving variable keys. Since we *will* define all\ntypes of objects returned by Discord, the amount of new atoms created *SHOULD* be 0. 👀","ref":"Nostrum.Util.html#safe_atom_map/1"},{"type":"function","title":"Nostrum.Util.timestamp_like_to_snowflake/1","doc":"Helper function for converting a DateTime to a Snowflake.\nWhile allowing Snowflakes to be returned as-is and `:infinity`\nis also passed through as-is since it's used as a special value\nby some cache lookup functions to indicate no upper bound.","ref":"Nostrum.Util.html#timestamp_like_to_snowflake/1"},{"type":"function","title":"Nostrum.Util.unused_atoms/0","doc":"Since we're being sacrilegious and converting strings to atoms from the WS, there will be some\natoms that we see that aren't defined in any Discord structs. This method mainly serves as a\nmeans to define those atoms once so the user isn't warned about them in the\n`Nostrum.Util.maybe_to_atom/1` function when they are in fact harmless.\n\nThe function is public to prevent it from being optimized out at compile time.","ref":"Nostrum.Util.html#unused_atoms/0"},{"type":"function","title":"Nostrum.Util.usec_now/0","doc":"Returns the number of microseconds since unix epoch.","ref":"Nostrum.Util.html#usec_now/0"},{"type":"behaviour","title":"Nostrum.Store.GuildShardMapping","doc":"Behaviour & dispatcher for storing guild to shard mappings.","ref":"Nostrum.Store.GuildShardMapping.html"},{"type":"behaviour","title":"Purpose - Nostrum.Store.GuildShardMapping","doc":"When nostrum needs to run API calls over the gateway and multiple shards are\nused, it needs to determine which shard process will run the request. This\nmodule stores a mapping of guild IDs to their respective shard numbers. It is\nunlikely you need to use this module directly yourself.","ref":"Nostrum.Store.GuildShardMapping.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Store.GuildShardMapping","doc":"By default, nostrum will use `Elixir.Nostrum.Store.GuildShardMapping.ETS` to store the\nmapping. To override this, set the `[:stores, :guild_shard_mapping]` setting\non nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n stores: %{\n guild_shard_mapping: MyBot.Nostrum.Store.GuildShardMapping\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Store.GuildShardMapping.html#module-configuration"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Store.GuildShardMapping.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.create/2","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#create/2"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.html#c:create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.delete/1","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#delete/1"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.html#c:delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.get/1","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#get/1"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.get/1","doc":"Retrieve the shard number for the given guild ID.\n\nReturns `nil` if no associated shard number was found.","ref":"Nostrum.Store.GuildShardMapping.html#c:get/1"},{"type":"module","title":"Nostrum.Store.Supervisor","doc":"Supervises processes managing nostrum's internal state.\n\nPlease see the following modules for more details:\n- `Nostrum.Store.GuildShardMapping`\n- `Nostrum.Store.UnavailableGuild`","ref":"Nostrum.Store.Supervisor.html"},{"type":"function","title":"Nostrum.Store.Supervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.Supervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.Supervisor.init/1","doc":"","ref":"Nostrum.Store.Supervisor.html#init/1"},{"type":"function","title":"Nostrum.Store.Supervisor.start_link/1","doc":"","ref":"Nostrum.Store.Supervisor.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Store.UnavailableGuild","doc":"Behaviour & dispatcher for storing unavailable guilds.","ref":"Nostrum.Store.UnavailableGuild.html"},{"type":"behaviour","title":"Purpose - Nostrum.Store.UnavailableGuild","doc":"The `GUILD_CREATE` gateway event on its own provides no means to determine\nwhether the guild we receive is a guild that the bot joined, or a guild that\nhas just become available over the gateway. To work around this, this store\nkeeps track of unavailable guilds we received to determine whether a guild\nsent over this event is unavailable or new. It is therefore unlikely this\nmodule needs to be used outside of nostrum.","ref":"Nostrum.Store.UnavailableGuild.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Store.UnavailableGuild","doc":"By default, nostrum will use `Elixir.Nostrum.Store.UnavailableGuild.ETS` to store\nunavailable guilds. To override this, set the `[:stores,\n:unavailable_guilds]` setting on nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n stores: %{\n unavailable_guilds: MyBot.Nostrum.Store.UnavailableGuild\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Store.UnavailableGuild.html#module-configuration"},{"type":"behaviour","title":"Implementation - Nostrum.Store.UnavailableGuild","doc":"If implementing your own unavailable guild store, in addition to the\ncallbacks of this module, you must also provide the function `child_spec/1`.\nThe recommended approach is to spawn a `Supervisor` to manage your store.","ref":"Nostrum.Store.UnavailableGuild.html#module-implementation"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Store.UnavailableGuild.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.create/1","doc":"","ref":"Nostrum.Store.UnavailableGuild.html#create/1"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.create/1","doc":"Mark the given guild as unavailable.","ref":"Nostrum.Store.UnavailableGuild.html#c:create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.is?/1","doc":"","ref":"Nostrum.Store.UnavailableGuild.html#is?/1"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.is?/1","doc":"Return whether the guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.html#c:is?/1"},{"type":"module","title":"Nostrum.Cache.MessageCache.Mnesia","doc":"An Mnesia-based cache for messages.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.\n\n\nBy default, the cache will store up to `10_000` messages,\nand will evict the `100` oldest messages when the limit is reached.\n\nThe reason for the eviction count is that with mnesia it is more efficient to\nfind X oldest records and delete them all at once than to find the oldest\nrecord and delete it each time a new record is added.\n\nThe Mnesia cache supports the following configuration options:\n- `size_limit`: The maximum number of messages to store in the cache.\ndefault: `10_000`\n- `eviction_count`: The number of messages to evict when the cache is full.\ndefault: `100`\n- `table_name`: The name of the Mnesia table to use for the cache.\ndefault: `:nostrum_messages`\n- `compressed`: Whether to use compressed in memory storage for the table.\ndefault: `false`\n- `type`: Sets the type of Mnesia table created to cache messages.\nCan be either `:set` or `:ordered_set`, by choosing `:ordered_set` the\neviction of the oldest messages will be more efficient, however it means\nthat the table cannot be changed to only store its contents on disk later.\ndefault: `:ordered_set`\n\nTo change this configuration, you can add the following to your\n`config.exs`:\n\n```elixir\nconfig :nostrum,\n caches: %{\n messages: {Nostrum.Cache.MessageCache.Mnesia,\n size_limit: 1000, eviction_count: 50,\n table_name: :my_custom_messages_table_name,\n compressed: true, type: :set}\n }\n```\n\nYou can also change the table name used by the cache by setting the\n`table_name` field in the configuration for the `messages` cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.bulk_delete/2","doc":"Removes and returns a list of messages from the cache.\nMessages not found in the cache will not be included in the returned list.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#bulk_delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.channel_delete/1","doc":"Removes all messages for a channel which was deleted.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#channel_delete/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.create/1","doc":"Adds a message to the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.delete/2","doc":"Removes a message from the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get/1","doc":"Retrieve a single message from the cache by id.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_author/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_channel/3","doc":"Retrieve a list of messages from the cache with a given channel ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_channel/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_channel_and_author/4"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.query_handle/0","doc":"Return a QLC query handle for the cache for read operations.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#query_handle/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.update/1","doc":"Updates a message in the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#update/1"},{"type":"module","title":"Nostrum.Cache.MessageCache.Noop","doc":"A no-op message cache.\n\nThis cache does not store any messages and always returns `{:error, :not_found}`\nfor any operation.","ref":"Nostrum.Cache.MessageCache.Noop.html"},{"type":"function","title":"Nostrum.Cache.MessageCache.Noop.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MessageCache.Noop.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Noop.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MessageCache.Noop.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.ETS","doc":"Maps channels to guilds via `:ets`.\n\nPlease use the function `table/0` for retrieving a reference to the table\nused by nostrum.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.table/0","doc":"Retrieve the table used by this module.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#table/0"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia","doc":"An Mnesia-based mapping between channel and guild IDs.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.table/0","doc":"Retrieve the table used by this module.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.NoOp","doc":"NoOp implementation for the Channel Guild map","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.GuildCache.ETS","doc":"An ETS-based cache for guilds.\n\nThe supervisor defined by this module will set up the ETS table associated\nwith it.\n\nThe default table name under which guilds are cached is `nostrum_guilds`.\nIn addition to the cache behaviour implementations provided by this module,\nyou can also call regular ETS table methods on it, such as `:ets.info`.\n\nNote that users should not call the functions not related to this specific\nimplementation of the cache directly. Instead, call the functions of\n`Nostrum.Cache.GuildCache` directly, which will dispatch to the configured\ncache.","ref":"Nostrum.Cache.GuildCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_create/2","doc":"Create the given channel for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_delete/2","doc":"Delete the channel from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_update/2","doc":"Update the channel on the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.create/1","doc":"Create the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.delete/1","doc":"Delete the given guild from the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.emoji_update/2","doc":"Update the emoji list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.get/1","doc":"Get a guild from the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.GuildCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.member_count_down/1","doc":"Decrement the guild member count by one.","ref":"Nostrum.Cache.GuildCache.ETS.html#member_count_down/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.member_count_up/1","doc":"Increment the guild member count by one.","ref":"Nostrum.Cache.GuildCache.ETS.html#member_count_up/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_create/2","doc":"Create the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_delete/2","doc":"Delete the given role from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_update/2","doc":"Update the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.stickers_update/2","doc":"Update the sticker list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#stickers_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.tabname/0","doc":"Retrieve the ETS table name used for the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#tabname/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.update/1","doc":"Update the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#update/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.voice_state_update/2","doc":"Update guild voice states with the given voice state in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#voice_state_update/2"},{"type":"module","title":"Nostrum.Cache.GuildCache.Mnesia","doc":"An Mnesia-based cache for guilds.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.GuildCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_create/2","doc":"Create the given channel for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_delete/2","doc":"Delete the channel from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_update/2","doc":"Update the channel on the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.create/1","doc":"Create a guild from upstream data.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.delete/1","doc":"Remove the given guild from the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.emoji_update/2","doc":"Update the emoji list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.get/1","doc":"Get a guild from the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.member_count_down/1","doc":"Decrement the guild member count by one.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#member_count_down/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.member_count_up/1","doc":"Increment the guild member count by one.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#member_count_up/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_create/2","doc":"Create the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_delete/2","doc":"Delete the given role from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_update/2","doc":"Update the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.stickers_update/2","doc":"Update the sticker list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#stickers_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.update/1","doc":"Update the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.voice_state_update/2","doc":"Update guild voice states with the given voice state in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#voice_state_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.wrap_query/1","doc":"Wrap queries in a transaction.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.GuildCache.NoOp","doc":"A cache module that does nothing.\n\nUseful for bots that don't need to cache guilds.","ref":"Nostrum.Cache.GuildCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.init/1","doc":"Start up the cache supervisor.","ref":"Nostrum.Cache.GuildCache.NoOp.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.MemberCache.ETS","doc":"An ETS-based cache for members.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.MemberCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.bulk_create/2","doc":"Bulk create a chunk of members for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.create/2","doc":"Add the given member to the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.delete/2","doc":"Remove the given member from the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.get/2","doc":"Retrieve the member for the given guild and user in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.MemberCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.update/2","doc":"Update the given member for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#update/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.wrap_query/1","doc":"Wrap long-running queries operations.","ref":"Nostrum.Cache.MemberCache.ETS.html#wrap_query/1"},{"type":"function","title":"Safety {: .note} - Nostrum.Cache.MemberCache.ETS.wrap_query/1","doc":"Any operations are surrounded by `:ets.safe_fixtable`. It is therefore\nrecommended to finish your read quickly.","ref":"Nostrum.Cache.MemberCache.ETS.html#wrap_query/1-safety-note"},{"type":"module","title":"Nostrum.Cache.MemberCache.Mnesia","doc":"An Mnesia-based cache for guild members.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.MemberCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.bulk_create/2","doc":"Bulk create a chunk of members for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.create/2","doc":"Add the given member to the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.delete/2","doc":"Remove the given member from the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.get/2","doc":"Retrieve the member for the given guild and user in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.update/2","doc":"Update the given member for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#update/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.wrap_query/1","doc":"Wrap long-running queries in a transaction.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.MemberCache.NoOp","doc":"A NoOp implementation for the MemberCache\n\nThis cache does nothing, enable it if you dont need to cache members","ref":"Nostrum.Cache.MemberCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.ETS","doc":"ETS-based cache for user presences.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.PresenceCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.bulk_create/2","doc":"Bulk create multiple presences in the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.create/1","doc":"Add the given presence data to the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.get/2","doc":"Retrieve a presence from the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.PresenceCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.update/1","doc":"Update the given presence data in the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#update/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.Mnesia","doc":"An Mnesia-based cache for presences.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.bulk_create/2","doc":"Bulk create a chunk of presences for the given guild in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.create/1","doc":"Add the given presence to the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.get/2","doc":"Retrieve a presence from the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.table/0","doc":"Retrieve the table name used by the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.update/1","doc":"Update the given presence in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.wrap_query/1","doc":"Wrap query operations in a transaction.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.NoOp","doc":"A cache module that does not cache anything.\n\nUseful for bots that do not need presence caching.","ref":"Nostrum.Cache.PresenceCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.init/1","doc":"Start up the cache supervisor.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.UserCache.ETS","doc":"An ETS-based cache for users.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.UserCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.bulk_create/1","doc":"Bulk create a list of users from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#bulk_create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.create/1","doc":"Create a user from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.get/1","doc":"Retrieve a user from the cache.","ref":"Nostrum.Cache.UserCache.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.UserCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.UserCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.update/1","doc":"Update a user from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#update/1"},{"type":"module","title":"Nostrum.Cache.UserCache.Mnesia","doc":"An Mnesia-based cache for users.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.UserCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.bulk_create/1","doc":"Bulk create a chunk of users in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#bulk_create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.create/1","doc":"Create a user from upstream data.","ref":"Nostrum.Cache.UserCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.delete/1","doc":"Remove the given user from cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.get/1","doc":"Retrieve a user from the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.UserCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.UserCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.update/1","doc":"Update a User if it exists in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.wrap_query/1","doc":"Wrap QLC operations in a transaction.","ref":"Nostrum.Cache.UserCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.UserCache.NoOp","doc":"A NoOp implementation for the UserCache\n\nThis cache does nothing, enable it if you dont need to cache users","ref":"Nostrum.Cache.UserCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.UserCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Store.GuildShardMapping.ETS","doc":"Maintains a mapping of guild IDs to their shard numbers using `:ets`.\n\nIf programmatic access to the ETS table is needed, please use the `table/0`\nfunction.\n\nPlease do not use this module directly, apart from special functions such as\n`table/0`. Use `Nostrum.Store.GuildShardMapping` to call the configured\nmapping instead.","ref":"Nostrum.Store.GuildShardMapping.ETS.html"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.get/1","doc":"Get the shard number for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#get/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.init/1","doc":"Set up the store's ETS table.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#init/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.table/0","doc":"Retrieve the ETS table reference used for the store.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#table/0"},{"type":"module","title":"Nostrum.Store.GuildShardMapping.Mnesia","doc":"Maintains a mapping of guild IDs to their shard numbers using Mnesia.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.get/1","doc":"Get the shard number for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.init/1","doc":"Set up the store's Mnesia table.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the store.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.teardown/0","doc":"Drop the table used for the store.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Store.UnavailableGuild.ETS","doc":"Stores guilds that are currently unavailable using `:ets`.\n\nIf programmatic access to the ETS table is needed, please use the `table/0`\nfunction.\n\nPlease do not use this module directly, apart from special functions such as\n`tabname/0`. Use `Nostrum.Store.UnavailableGuild` to call the configured\nmapping instead.","ref":"Nostrum.Store.UnavailableGuild.ETS.html"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.create/1","doc":"Create the given guild as an unavailable guild.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.init/1","doc":"Set up the store's ETS table.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#init/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.is?/1","doc":"Return whether the given guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#is?/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.table/0","doc":"Retrieve the ETS table reference used for the store.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#table/0"},{"type":"module","title":"Nostrum.Store.UnavailableGuild.Mnesia","doc":"Keeps track of unavailable guilds.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.create/1","doc":"Create the given guild as an unavailable guild.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.init/1","doc":"Set up the store's Mnesia table.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.is?/1","doc":"Return whether the given guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#is?/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the store.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.teardown/0","doc":"Drop the table used for the store.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Api.Ratelimiter","doc":"Handles REST calls to the Discord API while respecting ratelimits.","ref":"Nostrum.Api.Ratelimiter.html"},{"type":"module","title":"Purpose - Nostrum.Api.Ratelimiter","doc":"Discord's API returns information about ratelimits that we must respect. This\nmodule performs serialization of these requests through a single process,\nthus preventing concurrency issues from arising if two processes make a\nremote API call at the same time.\n\n\n>","ref":"Nostrum.Api.Ratelimiter.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Api.Ratelimiter","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Api.Ratelimiter.html#module-internal-module-info"},{"type":"module","title":"Asynchronous requests - Nostrum.Api.Ratelimiter","doc":"The ratelimiter is fully asynchronous internally. In theory, it also supports\nqueueing requests in an asynchronous manner. However, support for this is\ncurrently not implemented in `Nostrum.Api`.\n\nIf you want to make one or multiple asynchronous requests manually, you can\nuse the following pattern:\n\n```elixir\nreq = :gen_statem.send_request(Nostrum.Api.Ratelimiter, {:queue, request})\n# ...\nresponse = :gen_statem.receive_response(req, timeout)\n```\n\nwhere `request` is a map describing the request to run - see `Nostrum.Api`\nfor more information. You can also send multiple requests at the same time\nand wait for their response: see `:gen_statem.reqids_add/3` and\n`:gen_statem.wait_response/3` for more information.","ref":"Nostrum.Api.Ratelimiter.html#module-asynchronous-requests"},{"type":"module","title":"Multi-node - Nostrum.Api.Ratelimiter","doc":"nostrum will transparently distribute client requests across all ratelimiter\nclusters running in the cluster. This allows us to account for per-route\nratelimits whilst still distributing work across cluster nodes. **Note that\nthe API enforces a global user ratelimit across all requests**, which we\ncannot account for using this method.","ref":"Nostrum.Api.Ratelimiter.html#module-multi-node"},{"type":"module","title":"Inner workings - Nostrum.Api.Ratelimiter","doc":"When a client process wants to perform some request on the Discord API, it\nsends a request to the `:gen_statem` behind this module to ask it to `:queue`\nthe incoming request.","ref":"Nostrum.Api.Ratelimiter.html#module-inner-workings"},{"type":"module","title":"Connection setup - Nostrum.Api.Ratelimiter","doc":"If the state machine is not connected to the HTTP endpoint, it will\ntransition to the `:connecting` state and try to open the connection. If this\nsucceeds, it transitions to the `:connected` state.","ref":"Nostrum.Api.Ratelimiter.html#module-connection-setup"},{"type":"module","title":"Queueing requests - Nostrum.Api.Ratelimiter","doc":"The state machine associates a `t::queue.queue/1` of `t:queued_request/0` to\neach individual bucket, together with an internal count of remaining calls.\nWhen queueing requests, the following cases occur:\n\n- If there are no remaining calls in the bot's global ratelimit bucket or\nthere are no remaining calls in the bucket, the request is put into the\nbucket's queue.\n\n- If there is an `:initial` running request to the bucket, the request is put\ninto the bucket's queue.\n\n- If there are more than 0 remaining calls on both the request-specific\nbucket and the global bucket, the request is started right away. This allows\nnostrum to dispatch multiple requests to the same endpoint as soon as\npossible as long as calls remain.\n\n- If no ratelimit information is known for the bucket and remaining calls on\nthe global bucket, the request is sent out as the \"pioneer\" request that will\nretrieve how many calls we have for this bucket (`:initial`, see above).\n\n- If none of the above is true, a new queue is created and the pending\nrqeuest marked as the `:initial` request. It will be run as soon as the bot's\nglobal limit limit expires.\n\nThe request starting function, `:next`, will start new requests from the\nqueue as long as more calls are possible in the timeframe. Any requests are\nthen started asynchronously. Bookkeeping is set up to associate the resulting\n`t::gun.stream_ref/0` with the original client along with its request and the\nratelimiter bucket.\n\nResults from the HTTP connection are delivered non-blocking: simple responses\nwith purely status codes and no body (code `204`) will be sent in a single\nmessage, other requests will be sent to us incrementally. To finally deliver\nthe full response body to the client with the final package, an internal\nbuffer of the body is kept. A possible future optimization could be having a\nway for `:gun` to only send the ratelimiter state machine the initial\n`:gun_response` and forward any item of the body directly to the client.\n\nWhen the headers for a request have been received, the ratelimiter parses the\nratelimit information and starts off an internal timer expiring when the\nratelimits expire. It will also reschedule calls with the `:next` internal\nevent for as many remaining calls as it knows about. Once the timer expires\nfor the current bucket, two cases can happen:\n\n- The queue has items: Schedule all items and repeat this later.\n\n- The queue is empty: Delete the queue and remaining calls from the\noutstanding buckets.\n\nIn practice, this means that we never store more information than we need,\nand removes the previous regular bucket sweeping functionality that the\nratelimit buckets required.\n\n**Global ratelimits** (note this is a distinct ratelimit from the bot's\n\"global\", per-user ratelimit) are handled with the special `global_limit`\nstate. This state is entered for exactly the the `X-Ratelimit-Reset-After`\ntime provided in the global ratelimit response. This state does nothing apart\nfrom postponing any events it receives and returning to the previous state\n(`:connected`) once the global timeout is gone. Requests that failed because\nof the global ratelimit are requeued after returning back into the regular\nstate: a warning is logged to inform you of this.","ref":"Nostrum.Api.Ratelimiter.html#module-queueing-requests"},{"type":"module","title":"Failure modes - Nostrum.Api.Ratelimiter","doc":"#### HTTP connection death\n\nIf the HTTP connection dies, the ratelimiter will inform each affected client\nby replying with `{:error, {:connection_died, reason}}`, where `reason` is\nthe reason as provided by the `:gun_down` event. It will then transition to\n`:disconnected` state. If no requests were running at time the connection was\nshut down - for instance, because we simply reached the maximum idle time on\nthe HTTP/2 connection - we will simply move on.\n\n#### Upstream errors\n\nThe ratelimiter works by queueing requests aggressively as soon as it has\nratelimit information to do so. If no ratelimit information is available, for\ninstance, because Discord returned us a 502 status code, the ratelimiter will\nnot automatically kick the queue to start further running requests.\n\n#### Other internal issues\n\nAny other internal problems that are not handled appropriately in the\nratelimiter will crash it, effectively resulting in the complete loss of any\nqueued requests.","ref":"Nostrum.Api.Ratelimiter.html#module-failure-modes"},{"type":"module","title":"Implementation benefits & drawbacks - Nostrum.Api.Ratelimiter","doc":"#### A history of ratelimiting\n\nFirst, it is important to give a short history of nostrum's ratelimiting: pre\n`0.8`, nostrum used to use a `GenServer` that would call out to ETS tables to\nlook up ratelimiting buckets for requests. If it needed to sleep before\nissuing a request due to the bucket being exhausted, it would do so in the\nserver process and block other callers.\n\nIn nostrum 0.8, the existing ratelimiter bucket storage architecture was\nrefactored to be based around the [pluggable caching\nfunctionality](../advanced/pluggable_caching.md), and buckets with no\nremaining calls were adjusted to be slept out on the client-side by having\nthe `GenServer` respond to the client with `{:error, {:retry_after, millis}}`\nand the client trying again and again to schedule its requests. This allowed\nusers to distribute their ratelimit buckets around however they wish, out of\nthe box, nostrum shipped with an ETS and a Mnesia-based ratelimit bucket\nstore.\n\n\n#### Problems we solved\n\nThe approach above still came with a few problems:\n\n- Requests were still being done synchronously in the ratelimiter, and it was\nblocked from anything else whilst running the requests, even though we are\ntheoretically free to start requests for other buckets while one is still\nrunning.\n\n- The ratelimiter itself was half working on its own, but half required the\nexternal storage mechanisms, which made the code hard to follow and required\nregular automatic pruning because the store had no idea when a bucket was no\nlonger relevant on its own.\n\n- Requests would not be pipelined to run as soon as ideally possible.\n\n- The ratelimiter did not inform clients if their request died in-flight.\n\n- If the client disconnected before we returned the response, we had to\nhandle this explicitly via `handle_info`.\n\nThe new state machine-based ratelimiter solves these problems.","ref":"Nostrum.Api.Ratelimiter.html#module-implementation-benefits-drawbacks"},{"type":"function","title":"Nostrum.Api.Ratelimiter.callback_mode/0","doc":"","ref":"Nostrum.Api.Ratelimiter.html#callback_mode/0"},{"type":"function","title":"Nostrum.Api.Ratelimiter.child_spec/1","doc":"","ref":"Nostrum.Api.Ratelimiter.html#child_spec/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.code_change/4","doc":"","ref":"Nostrum.Api.Ratelimiter.html#code_change/4"},{"type":"function","title":"Nostrum.Api.Ratelimiter.connected/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#connected/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.connecting/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#connecting/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.disconnected/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#disconnected/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.get_endpoint/2","doc":"Retrieves a proper ratelimit endpoint from a given route and url.","ref":"Nostrum.Api.Ratelimiter.html#get_endpoint/2"},{"type":"function","title":"Nostrum.Api.Ratelimiter.global_limit/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#global_limit/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.init/1","doc":"","ref":"Nostrum.Api.Ratelimiter.html#init/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.queue/1","doc":"Queue the given request and wait for the response synchronously.\n\nRatelimits on the endpoint are handled by the ratelimiter. Global ratelimits\nwill cause this to return an error.","ref":"Nostrum.Api.Ratelimiter.html#queue/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.start_link/1","doc":"Starts the ratelimiter.","ref":"Nostrum.Api.Ratelimiter.html#start_link/1"},{"type":"type","title":"Nostrum.Api.Ratelimiter.bucket/0","doc":"A bucket for endpoints unter the same ratelimit.","ref":"Nostrum.Api.Ratelimiter.html#t:bucket/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.queued_request/0","doc":"A bucket-specific request waiting to be queued, alongside its client.","ref":"Nostrum.Api.Ratelimiter.html#t:queued_request/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.remaining/0","doc":"Remaining calls on a route, as provided by the API response.\n\nThe ratelimiter internally counts the remaining calls per route to dispatch\nnew requests as soon as it's capable of doing so, but this is only possible\nif the API already provided us with ratelimit information for an endpoint.\n\nTherefore, if the initial call on an endpoint is made, the special `:initial`\nvalue is specified. This is used by the limit parsing function to set the\nremaining calls if and only if it is the response for the initial call -\notherwise, the value won't represent the truth anymore.","ref":"Nostrum.Api.Ratelimiter.html#t:remaining/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.request/0","doc":"A request to make in the ratelimiter.","ref":"Nostrum.Api.Ratelimiter.html#t:request/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.state/0","doc":"The state of the ratelimiter.\n\nWhile this has no public use, it is still documented here to provide help\nwhen tracing the ratelimiter via `:sys.trace/2` or other means.","ref":"Nostrum.Api.Ratelimiter.html#t:state/0"},{"type":"type","title":"Fields - Nostrum.Api.Ratelimiter.state/0","doc":"- `:outstanding`: Outstanding (unqueued) requests per bucket alongside with\nthe remaining calls that may be made on said bucket.\n\n- `:running`: Requests that have been sent off. Used to associate back the\nclient with a request when the response comes in.\n\n- `:inflight`: Requests for which we have started getting a response, but we\nhave not fully received it yet. For responses that have a body, this will\nbuffer their body until we can send it back to the client.\n\n- `:conn`: The `:gun` connection backing the server. Used for making new\nrequests, and updated as the state changes.\n\n- `:remaining_in_window`: How many calls we may still make to the API during\nthis time window. Reset automatically via timeouts.\n\n- `:wrapped_token`: An anonymous function that is internally used to retrieve\nthe token. This is wrapped to ensure that it is not accidentally exposed in\nstacktraces.","ref":"Nostrum.Api.Ratelimiter.html#t:state/0-fields"},{"type":"module","title":"Nostrum.Api.RatelimiterGroup","doc":"Tracks ratelimiters and determines correct ratelimiters to use per request.","ref":"Nostrum.Api.RatelimiterGroup.html"},{"type":"module","title":"Purpose - Nostrum.Api.RatelimiterGroup","doc":"In a multi-node setup, users want to be able to make API requests from any\nnode in the cluster without having to worry about hitting ratelimits. This\nmodule serves as the mediator between API clients on any nodes and their\ntarget ratelimiter.\n\n>","ref":"Nostrum.Api.RatelimiterGroup.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Api.RatelimiterGroup","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Api.RatelimiterGroup.html#module-internal-module-info"},{"type":"module","title":"Approach - Nostrum.Api.RatelimiterGroup","doc":"A naive implementation might simply forward requests to the locally (on the\nsame node) running ratelimiter. However, this falls short when modules on\nother nodes want to make API requests, as they then effectively begin\ntracking their own ratelimit state, rendering it inconsistent.\n\nInstead, the approach is that we have a locally running ratelimiter on each\nnode, all of which are registered via the `:pg` process group managed by this\nmodule. When an API request comes in, we determine its ratelimit bucket (see\n`Nostrum.Api.Ratelimiter.get_endpoint/2`) and based on that, determine the\ntarget ratelimiter by selecting it from the list of known ratelimiters via\n`:erlang.phash2/2`.","ref":"Nostrum.Api.RatelimiterGroup.html#module-approach"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.child_spec/1","doc":"","ref":"Nostrum.Api.RatelimiterGroup.html#child_spec/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.join/1","doc":"Join the given ratelimiter to the group.","ref":"Nostrum.Api.RatelimiterGroup.html#join/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.limiter_for_bucket/1","doc":"Return a ratelimiter PID to use for requests to the given ratelimiter `bucket`.","ref":"Nostrum.Api.RatelimiterGroup.html#limiter_for_bucket/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.start_link/1","doc":"","ref":"Nostrum.Api.RatelimiterGroup.html#start_link/1"},{"type":"module","title":"Nostrum.Shard.Session","doc":"Manages a single shard's gateway connection.","ref":"Nostrum.Shard.Session.html"},{"type":"module","title":"Purpose - Nostrum.Shard.Session","doc":"Discord's gateway sends us events over websocket. The shard session state\nmachine concerns it self with parsing these events and dispatching them to\nclients as appropriate.\n\n\n>","ref":"Nostrum.Shard.Session.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.html#module-internal-module-info"},{"type":"module","title":"Inner workings - Nostrum.Shard.Session","doc":"The session is implemented via `:gen_statem` and can be in one of the\nfollowing states:\n\n- `disconnected`: when no connection is up at all. On initial connection of\nthe session (e.g. no `seq` field is available), this will block if we need to\nwait a moment to respect the session startup concurrency limits. Afterwards,\nit will transition to `connecting_http`.\n\n- `connecting_http`: We are setting up a HTTP connection to the API. This\nmeans that no connection was available previously at all, and we need to open\nit from scratch. Used for gateway-initiated reconnect requests (\"Cloudflare\nWebsocket proxy restarting\") and on `:gun_down` notifications for the\nconnection in connected state. Once `:gun` notifies us that the connection is\nup, we transition to the `connecting_ws` state.\n\n- `connecting_ws`: We are turning the HTTP connection into a WebSocket\nconnection. If this succeeds, we head into the `connected` state.\n\n- `connected`: The WebSocket connection is up. This state actively deals with\nnew data from the gateway, and takes care of heartbeating. If Discord fails\nto respond to our heartbeats, we close down the full connection and attempt\nto re-establish and resume events.","ref":"Nostrum.Shard.Session.html#module-inner-workings"},{"type":"function","title":"Nostrum.Shard.Session.callback_mode/0","doc":"","ref":"Nostrum.Shard.Session.html#callback_mode/0"},{"type":"function","title":"Nostrum.Shard.Session.child_spec/1","doc":"","ref":"Nostrum.Shard.Session.html#child_spec/1"},{"type":"function","title":"Nostrum.Shard.Session.connected/3","doc":"","ref":"Nostrum.Shard.Session.html#connected/3"},{"type":"function","title":"Nostrum.Shard.Session.connecting_http/3","doc":"","ref":"Nostrum.Shard.Session.html#connecting_http/3"},{"type":"function","title":"Nostrum.Shard.Session.connecting_ws/3","doc":"","ref":"Nostrum.Shard.Session.html#connecting_ws/3"},{"type":"function","title":"Nostrum.Shard.Session.disconnect/1","doc":"","ref":"Nostrum.Shard.Session.html#disconnect/1"},{"type":"function","title":"Nostrum.Shard.Session.disconnect/2","doc":"","ref":"Nostrum.Shard.Session.html#disconnect/2"},{"type":"function","title":"Nostrum.Shard.Session.disconnected/3","doc":"","ref":"Nostrum.Shard.Session.html#disconnected/3"},{"type":"function","title":"Nostrum.Shard.Session.format_status/1","doc":"","ref":"Nostrum.Shard.Session.html#format_status/1"},{"type":"function","title":"Nostrum.Shard.Session.get_ws_state/1","doc":"","ref":"Nostrum.Shard.Session.html#get_ws_state/1"},{"type":"function","title":"Nostrum.Shard.Session.init/1","doc":"","ref":"Nostrum.Shard.Session.html#init/1"},{"type":"function","title":"Nostrum.Shard.Session.request_guild_members/3","doc":"","ref":"Nostrum.Shard.Session.html#request_guild_members/3"},{"type":"function","title":"Nostrum.Shard.Session.start_link/2","doc":"","ref":"Nostrum.Shard.Session.html#start_link/2"},{"type":"function","title":"Nostrum.Shard.Session.update_status/5","doc":"","ref":"Nostrum.Shard.Session.html#update_status/5"},{"type":"function","title":"Nostrum.Shard.Session.update_voice_state/5","doc":"","ref":"Nostrum.Shard.Session.html#update_voice_state/5"},{"type":"behaviour","title":"Nostrum.Shard.Session.Compression","doc":"A behaviour for compression methods supported by the Discord gateway to implement.\n\nSee the modules nested under this behaviour for reference implementations.\n\n>","ref":"Nostrum.Shard.Session.Compression.html"},{"type":"behaviour","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.html#module-internal-module-info"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.create_context/0","doc":"Create a new compression context that can be passed as an argument to other\nmethods within the behaviour to inflate data or reset the context to a\nblank state.","ref":"Nostrum.Shard.Session.Compression.html#c:create_context/0"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.inflate/2","doc":"Decompress a frame received from Discord over the gateway. Should return an\niolist of the decompressed data.","ref":"Nostrum.Shard.Session.Compression.html#c:inflate/2"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.reset_context/1","doc":"Reset a decompression context to a blank slate, this is useful after a websocket\nresume has taken place or something similar requiring the reset of the state\nfor a shard.","ref":"Nostrum.Shard.Session.Compression.html#c:reset_context/1"},{"type":"module","title":"Nostrum.Shard.Session.Compression.Zlib","doc":"Implementation of compression methods for the `zlib` compression algorithm.\n\n>","ref":"Nostrum.Shard.Session.Compression.Zlib.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression.Zlib","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.Zlib.html#module-internal-module-info"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.create_context/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#create_context/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.inflate/2","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#inflate/2"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.reset_context/1","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#reset_context/1"},{"type":"module","title":"Nostrum.Shard.Session.Compression.Zstd","doc":"Implementation of compression methods for the `zstd` compression algorithm.\n\n>","ref":"Nostrum.Shard.Session.Compression.Zstd.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression.Zstd","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.Zstd.html#module-internal-module-info"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.check_available!/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#check_available!/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.create_context/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#create_context/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.inflate/2","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#inflate/2"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.reset_context/1","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#reset_context/1"},{"type":"module","title":"Nostrum.Shard.Supervisor","doc":"Supervises shard processes.","ref":"Nostrum.Shard.Supervisor.html"},{"type":"module","title":"Implementation - Nostrum.Shard.Supervisor","doc":"As events are sent to the shard, the following happens:\n\n1. Shard looks to see what type of event it is, only dispatch events are sent\n to the producer.\n\n2. If the event is a `Dispatch`, the payload is converted to an atom-keyed map.\n This is done because over ETF (which Nostrum uses), map keys are sometimes\n binaries and sometimes strings, making it a real headache. Additionally,\n with atom keys, we can use the `Map.key` notation. This is normally\n considered unsafe but a debug messages will be emitted if a key is unsafely\n converted to an atom. In this way we can ensure that our atom table is not\n growing unbounded.\n\n3. The payload is then written to the cache. To make sure we're not overrunning\n the cache, especially at startup with `request_guild_members` or other heavy\n payloads, this is done in the shard itself.\n\n4. The cache updates itself from the new data. In some cases, such as update or\n delete events, it may send out a second \"old\" object as well, that helps the\n library user to determine what changed.\n\n5. After writing to the cache, the shard `send`s out the event after going\n through the cache to all subscribed processes. In general, the payload will\n often match the payload described by the official Discord API documentation.\n\n6. The shard instructs the websocket client that it's ready to read more data.\n This prevents flooding the shard with messages that it may not be able to\n handle yet, thus growing the message queue and the memory usage.","ref":"Nostrum.Shard.Supervisor.html#module-implementation"},{"type":"function","title":"Nostrum.Shard.Supervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Shard.Supervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Shard.Supervisor.connect/2","doc":"Spawns a shard with the specified number and connects it to the discord gateway.","ref":"Nostrum.Shard.Supervisor.html#connect/2"},{"type":"function","title":"Nostrum.Shard.Supervisor.disconnect/1","doc":"Disconnects the shard with the given shard number from the Gateway.\n\nThis function returns `t:resume_information/0` which can be provided\nto `reconnect/1` to reconnect a shard to the gateway and (attempt) to\ncatch up on any missed events.","ref":"Nostrum.Shard.Supervisor.html#disconnect/1"},{"type":"function","title":"Examples - Nostrum.Shard.Supervisor.disconnect/1","doc":"```elixir\niex> Nostrum.Shard.Supervisor.disconnect(4)\n%{shard_num: 4, ...}\n```","ref":"Nostrum.Shard.Supervisor.html#disconnect/1-examples"},{"type":"function","title":"Nostrum.Shard.Supervisor.reconnect/1","doc":"Reconnect to the gateway using the provided `t:resume_information/0`.\n\nResuming is performed by the gateway on a best effort basis, it is not\nguaranteed that a resume will work (though Nostrum will handle failed attempts\nat a resumption). If a reconnect is successful, any events received during the\nreconnection period should be received. If the reconnect fails, events\nreceived between the disconnect and re-authentication may be lost.\n\nFor more information about resuming sessions, visit\n[the Discord Developer Portal](https://discord.com/developers/docs/topics/gateway#resuming).","ref":"Nostrum.Shard.Supervisor.html#reconnect/1"},{"type":"function","title":"Examples - Nostrum.Shard.Supervisor.reconnect/1","doc":"```elixir\niex> resume = Nostrum.Shard.Supervisor.disconnect(4)\n%{shard_num: 4, ...}\niex> Nostrum.Shard.Supervisor.reconnect(resume)\n```","ref":"Nostrum.Shard.Supervisor.html#reconnect/1-examples"},{"type":"function","title":"Nostrum.Shard.Supervisor.start_link/1","doc":"","ref":"Nostrum.Shard.Supervisor.html#start_link/1"},{"type":"function","title":"Nostrum.Shard.Supervisor.update_status/4","doc":"","ref":"Nostrum.Shard.Supervisor.html#update_status/4"},{"type":"function","title":"Nostrum.Shard.Supervisor.update_voice_state/4","doc":"","ref":"Nostrum.Shard.Supervisor.html#update_voice_state/4"},{"type":"type","title":"Nostrum.Shard.Supervisor.resume_information/0","doc":"Represents gateway resume information.","ref":"Nostrum.Shard.Supervisor.html#t:resume_information/0"},{"type":"type","title":"Nostrum.Shard.Supervisor.shard_num/0","doc":"Shard number(`shard_id`). Range is `0..total_shards-1`.","ref":"Nostrum.Shard.Supervisor.html#t:shard_num/0"},{"type":"type","title":"Nostrum.Shard.Supervisor.total_shards/0","doc":"Total shard count(`num_shards`).","ref":"Nostrum.Shard.Supervisor.html#t:total_shards/0"},{"type":"module","title":"Nostrum.StateMachineTranslator","doc":"Translate error reports for `:gen_statem` modules in Elixir.\n\n>","ref":"Nostrum.StateMachineTranslator.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.StateMachineTranslator","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.StateMachineTranslator.html#module-internal-module-info"},{"type":"module","title":"Reasoning - Nostrum.StateMachineTranslator","doc":"By default, Elixir will ignore these messages altogether, see [this\nElixirForum\npost](https://elixirforum.com/t/why-does-logger-translator-ignore-gen-statem-reports/37418).\nA possible workaround seems to be using the `gen_state_machine` library, but\npulling in a library purely to have error reporting for something built-in to\nOTP seems pretty strange to me.","ref":"Nostrum.StateMachineTranslator.html#module-reasoning"},{"type":"function","title":"Nostrum.StateMachineTranslator.translate/4","doc":"","ref":"Nostrum.StateMachineTranslator.html#translate/4"},{"type":"exception","title":"Nostrum.Error.ApiError","doc":"Represents a failed response from the API.\n\nThis occurs when `:gun` fails, or when the API doesn't respond with `200` or `204`.\nThis should only be raised explicitly when using the banged API methods.","ref":"Nostrum.Error.ApiError.html"},{"type":"type","title":"Nostrum.Error.ApiError.detailed_error/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:detailed_error/0"},{"type":"type","title":"Nostrum.Error.ApiError.discord_status_code/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:discord_status_code/0"},{"type":"type","title":"Nostrum.Error.ApiError.error/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:error/0"},{"type":"type","title":"Nostrum.Error.ApiError.error_list_map/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:error_list_map/0"},{"type":"type","title":"Nostrum.Error.ApiError.errors/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:errors/0"},{"type":"type","title":"Nostrum.Error.ApiError.response/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:response/0"},{"type":"type","title":"Nostrum.Error.ApiError.status_code/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:status_code/0"},{"type":"type","title":"Nostrum.Error.ApiError.t/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:t/0"},{"type":"exception","title":"Nostrum.Error.CacheError","doc":"Represents an error when interacting with the cache.\n\nThis likely occurs because a specified item could not be found in the cache,\nor your were searching for something invalid.\nThis should only occur when using the banged cache methods.","ref":"Nostrum.Error.CacheError.html"},{"type":"exception","title":"Nostrum.Error.VoiceError","doc":"Represents an error when playing sound through voice channels.\n\nThis occurs when attempting to play audio and the file can't be found\nfor the ffmpeg, youtube-dl, or streamlink executables.","ref":"Nostrum.Error.VoiceError.html"},{"type":"extras","title":"Introduction","doc":"# Introduction\n\nnostrum is an Elixir library that can be used to interact with Discord.\n\nTo see documentation about a specific part of the library, please visit one of\nthe following:\n\n* [API](api-1.html) - Methods to interact with the RESTful API (and some other goodies).\n* [State](state.html) - Caches that keep information from Discord fresh at your disposal.\n* [Events](event_handling.html) - Handling events from Discord as they come in.\n* [Voice](voice-2.html) - Playing audio through Discord voice channels.","ref":"intro.html"},{"type":"extras","title":"Setup - Introduction","doc":"There are two versions of nostrum, a stable version released on Hex and a dev\nversion on GitHub. The dev version will be more up to date but will likely\nhave more errors.\n\n```elixir\ndef deps do\n [{:nostrum, \"~> 0.10\"}]\n # Or, for bleeding edge changes:\n # [{:nostrum, github: \"Kraigie/nostrum\"}]\nend\n```\n\nNext up, you need to configure nostrum. The most basic configuration is simply\nsetting a token to log in with:\n\n```elixir\nconfig :nostrum,\n token: \"666\" # The token of your bot as a string\n```","ref":"intro.html#setup"},{"type":"extras","title":"Configuration options - Introduction","doc":"Apart from the `token` field mentioned above, the following fields are also supported:\n\n- `num_shards` - the amount of shards to run. Can be one of the following:\n - `:auto`: use the suggested amount of shards as provided by Discord.\n - *`num`*: a number of shards to run. nostrum will warn if this is not the\n recommended amount.\n - `{lowest, highest, total}`: start shards `lowest` to `highest`. `total`\n should contain the total amount of shards that your bot is expected to have.\n Useful for splitting a single bot across multiple servers, but see also [the\n multi-node documentation](../advanced/multi_node.md).\n - `:manual`: nostrum does not automatically spawn shards. See the [Manual\n Sharding](../advanced/manual_sharding.md) guide for more information.\n- `gateway_intents` - a list of atoms representing gateway intents for Nostrum\n to subscribe to from the Discord API. More information can be found in the\n [gateway intents](./gateway_intents.md) documentation page.\n- `request_guild_members` - perform member chunking to retrieve a complete list\n of members for all guilds at startup. Depending on your [cache\n backend](../advanced/pluggable_caching.md), this may increase startup time\n and memory usage by quite a bit. Defaults to `false`.\n- `gateway_compression` - use either `:zlib` (default) or `:zstd` for compression\n of messages from the Discord gateway. See the documentation on\n [Gateway Compression](../advanced/gateway_compression.md) for more information.","ref":"intro.html#configuration-options"},{"type":"extras","title":"Voice-specific - Introduction","doc":"- `ffmpeg` - Specifies the path to the `ffmpeg` executable for playing audio.\n Defaults to `\"ffmpeg\"`.\n- `youtubedl` - Specifies the path to the `youtube-dl` executable for playing\n audio with youtube-dl support. Defaults to `\"youtube-dl\"`.\n- `streamlink` - Specifies the path to the `streamlink` executable for playing\n livestream audio with streamlink support. Defaults to `\"streamlink\"`.\n- `audio_timeout` - Milliseconds that input must begin generating audio by\n upon invoking `play`. More information about this option can be found in the\n [voice](./voice-2.html) documentation page. Defaults to `20_000` (20s).\n- `audio_frames_per_burst` - Number of opus frames to send at a time while\n playing audio. More information about this option can be found in the\n [voice](./voice-2.html) documentation page. Defaults to `10`.\n- `voice_auto_connect` - This will determine if Nostrum automatically connects\n to voice websockets gateways upon joining voice channels. If set to `false`\n but you still wish to connect to the voice gateway, you can do so manually\n by calling `Nostrum.Voice.connect_to_gateway/1` after joining a voice\n channel. Defaults to `true`.\n- `voice_encryption_mode` - Defaults to `:aes256_gcm`. More information about this\n option can be found [here](./voice-2.html#encryption-modes).","ref":"intro.html#voice-specific"},{"type":"extras","title":"Development & debugging - Introduction","doc":"- `log_full_events` - This will log the full payload received over the\n websocket. Defaults to `false`.\n- `log_dispatch_events` - This will log dispatch events as they are received\n from the gateway. Defaults to `false`.\n- `fullsweep_after_default` - Sets the `fullsweep_after` flag for processes\n that can have irregularly high memory usage due to Discord payloads. This\n options will dramatically reduce the amount of memory used by some processes\n at the cost of increased CPU usage. This is useful if you're running your\n application under a memory constrained environment. This comes at the cost\n of increased CPU usage. By default, this option will only affect some\n processes. You can set this flag for *all* processes using environment\n variables or by [setting the system flag\n yourself](http://erlang.org/doc/man/erlang.html#system_flag-2). Defaults to\n whatever your system recommends, which is probably `65535`.\n- `force_http1` - Set to `true` if you wish to disable automatic use of HTTP 2\n or newer HTTP versions for API requests to Discord. Useful to diagnose issues\n with ratelimiter connections during abnormal network conditions.","ref":"intro.html#development-debugging"},{"type":"extras","title":"Internal options - Introduction","doc":"The following options are only used for testing nostrum itself.\n\n- `dev` - This is added to enable Nostrum to be run completely stand alone for\n development purposes. `true` will cause Nostrum to spawn its own event\n consumers. If you have the dev flag set to true while running Nostrum\n alongside your application some of your events will be consumed. Defaults to\n `false`.","ref":"intro.html#internal-options"},{"type":"extras","title":"Logging - Introduction","doc":"nostrum uses Elixir's standard logger to inform you about regular and irregular\nevents. Normal messages include Discord-requested shard reconnections and the\n`IDENTIFY` and `READY` events.\n\nThe following metadata fields through logger:\n\n - `shard` - Id of the shard on which the event occurred\n - `guild` - Name of the guild on which the voice connection event occurred\n - `channel` - Name of the channel on which the voice connection event occurred\n\nTo enable this metadata, logger can be configured as such:\n```elixir\nconfig :logger, :console,\n metadata: [:shard, :guild, :channel]\n``` \n\nFor more information on how this works, and how to change the logging\nconfiguration for nostrum on its own, please see the [Logger\ndocumentation](https://hexdocs.pm/logger/Logger.html)","ref":"intro.html#logging"},{"type":"extras","title":"Why Elixir? - Introduction","doc":"From the Elixir website -\n\n> Elixir is a dynamic, functional language designed for building scalable and\n> maintainable applications.\n\n> Elixir leverages the Erlang VM, known for running low-latency, distributed\n> and fault-tolerant systems, while also being successfully used in web\n> development and the embedded software domain.\n\n**How does Nostrum leverage these benefits?**\n\n- **Fault tolerance**: nostrum attempts, where reasonable, to allow for\n different parts of the application to fail with minimal harm. Supervisors are\n used heavily to ensure that anything that breaks will be restarted. Nostrum\n attempts to avoid most errors, but if they do occur (*and they will!*) it\n shouldn't be the end of the world.\n\n- **Concurrency** - Concurrency is considered to be a first class citizen in\n Elixir. Through the use of SMP and processes, information should travel\n through the application quickly.\n\n- **Distributed**: nostrum does not currently support full distribution of all\n components out of the box - that would fall out of the scope of the library.\n However, see the [multi-node](../advanced/multi_node.md) document for\n provided functionality.","ref":"intro.html#why-elixir"},{"type":"extras","title":"Example bots - Introduction","doc":"- A simple bot that consumes events from the gateway can be found [at\n `examples/event_consumer.ex`](https://github.com/Kraigie/nostrum/blob/master/examples/event_consumer.ex).\n\n- An example bot that plays audio through voice channels can be found [at\n `examples/audio_player_example.ex`](https://github.com/Kraigie/nostrum/blob/master/examples/audio_player_example.ex).\n\n- A properly structured bot with commands utilizing\n [nosedrum](https://github.com/jchristgit/nosedrum) can be found [in this\n GitHub repository](https://github.com/kshannoninnes/sample_bot)\n\n- A rather large and complex bot, bolt, can be found\n [here](https://github.com/jchristgit/bolt).\n\n\n\n","ref":"intro.html#example-bots"},{"type":"extras","title":"API","doc":"# API\n\nnostrum includes a complete implementation of the endpoints supported by\nDiscord's API. Method names are copied closely from the documentation to\neliminate any confusion about what a method does, as well as to allow users to\neasily lookup the endpoints in the official API documentation.\n\nFor a full listing of method definitions, please see the `Nostrum.Api` module.","ref":"api-4.html"},{"type":"extras","title":"Banged (`!`) API methods - API","doc":"A lot of methods have a `banged` version of themselves. This is a common Elixir\nidiom hailing from Elixir's style of failing fast.\n\nBy default, the API method will return a tuple like one of the following:\n\n```elixir\n# Success\n{:ok, msg} = Nostrum.Api.create_message(179679229036724225, \"456\")\n\n# Failure\n{:error, reason} = Nostrum.Api.create_message(123, \"eat my shorts api\")\n```\n\nA banged method, instead of returning an `error` tuple, will throw an error. If\nsuccessful, it will directly return the response with no `:ok` tuple.\n\n```elixir\n# Success\nmsg = Nostrum.Api.create_message!(179679229036724225, \"456\")\n\n# Failure - Throws an error\nNostrum.Api.create_message!(123, \"eat my shorts api\")\n```","ref":"api-4.html#banged-api-methods"},{"type":"extras","title":"Abstractions - API","doc":"When appropriate, some helpers are defined to make interacting with the API\nsimpler. An example of this is `Nostrum.Api.get_channel_messages/3`. By default\nthis endpoint only allows the retrieval of `100` messages at a time. A general\nuse case will have a user wanting more messages than that, thus nostrum handles\nthe retrieval of any number of messages for the user.\n\nThere are other endpoints that could use grooming like above, feel free to\nsuggest an interface and implementation for these methods.","ref":"api-4.html#abstractions"},{"type":"extras","title":"Ratelimiting - API","doc":"Ratelimiting is handled internally by nostrum, so long as you use the methods\nsupplied in the `Nostrum.Api` module. This means either calling the methods as\nthey're given or using `Nostrum.Api.request/4` to call an endpoint.\n\nTo ensure that every request is handled properly, no matter if they're called\nasynchronously or not, nostrum funnels all requests through the\n`Nostrum.Api.Ratelimiter` state machine.","ref":"api-4.html#ratelimiting"},{"type":"extras","title":"REST-only - API","doc":"If you only want to use the REST portion of the provided API, the only process\nneeded is the ratelimiter, which can be manually started by calling\n`Nostrum.Api.Ratelimiter.start_link/1`. \n\nIf you don't want to start nostrum, you can add `runtime: false` to the\ndependency options. If you're using `mix release`, all `runtime: false` deps\nwill be excluded from the build, so you'll also need to add `:nostrum` app to\n`mix.exs` in `:included_applications` application option or in the `releases`\nproject option.\n\n","ref":"api-4.html#rest-only"},{"type":"extras","title":"Application commands","doc":"# Application commands\n\nDiscord allows you to create commands for your bot that work within the slash\ncommand menu or via the context menu.\n\nUsing nostrum, you can create, receive, and respond to application commands invoked\nby Discord users.","ref":"application_commands.html"},{"type":"extras","title":"Permissions required - Application commands","doc":"Quoting the [official Discord\ndocumentation](https://discord.com/developers/docs/interactions/application-commands#authorizing-your-application):\n\n> In order to make Commands work within a guild, the guild must authorize\n> your application with the `applications.commands` scope. The `bot` scope is not\n> enough.","ref":"application_commands.html#permissions-required"},{"type":"extras","title":"Getting started - Application commands","doc":"Discord differentiates between **global** and **guild-specific** slash\ncommands. Global commands will be distributed across all guilds that your bot\nis in within an hour. Guild-specific commands slash commands will be available\ninstantly, which is why we will use guild-specific commands for testing.\n\nWe will create a command that will allow the user to assign or remove a role of\nchoice. The `guild_id` parameter is the ID of the guild on which the command\nwill be created.\n\nOur command definition looks as follows:\n\n```elixir\ncommand = %{\n name: \"role\",\n description: \"assign or remove a role\",\n options: [\n %{\n # ApplicationCommandType::ROLE\n type: 8,\n name: \"name\",\n description: \"role to assign or remove\",\n required: true\n },\n %{\n # ApplicationCommandType::STRING\n type: 3,\n name: \"action\",\n description: \"whether to assign or remove the role\",\n required: true,\n choices: [\n %{\n name: \"assign\",\n value: \"assign\"\n },\n %{\n name: \"remove\",\n value: \"remove\"\n }\n ]\n }\n ]\n}\n```\n\nTo register this command on the guild, we simply pass it to\n`Nostrum.Api.create_guild_application_command/2`:\n\n```elixir\nNostrum.Api.create_guild_application_command(guild_id, command)\n```\n\nYou can register the command in the ``:READY`` gateway event handler.","ref":"application_commands.html#getting-started"},{"type":"extras","title":"Receiving interactions - Application commands","doc":"Set up a gateway event handler for ``:INTERACTION_CREATE``. On command\ninvocation the interaction payload will look something like the following:\n\n```elixir\n%Nostrum.Struct.Interaction{\n channel_id: 474025345243414539,\n data: %{\n id: 793152718839087135,\n name: \"role\",\n options: [\n %{name: \"name\", value: \"458692275199803406\"},\n %{name: \"action\", value: \"assign\"}\n ]\n },\n # ...\n```\n\nNote that Discord already converted the user-supplied role to a snowflake.\nConvenient!\n\nLet's match on the retrieved event and create two function heads for the\nseparate operation modes:\n\n```elixir\nalias Nostrum.Api\nalias Nostrum.Struct.Interaction\n\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"assign\"}]}} = interaction) do\n Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\nend\n\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"remove\"}]}} = interaction) do\n Api.remove_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\nend\n\ndef handle_event({:INTERACTION_CREATE, %Interaction{data: %{name: \"role\"}} = interaction, _ws_state}) do\n manage_role(interaction)\nend\n```\n\nOkay, we now have our handling code done. This is pretty much the same code\nthat you would use for regular commands.","ref":"application_commands.html#receiving-interactions"},{"type":"extras","title":"Responding to interactions - Application commands","doc":"To respond to interactions, use ``Nostrum.Api.create_interaction_response/2``:\n\n```elixir\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"assign\"}]}} = interaction) do\n Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\n response = %{\n type: 4, # ChannelMessageWithSource\n data: %{\n content: \"role assigned\"\n }\n }\n Api.create_interaction_response(interaction, response)\nend\n```\n\nWe have now built a simple command using slash commands, with argument\nconversion delegated to Discords side of things. Further actions on the\ncommand, such as checking permissions, author roles, and more - are left as an\nexercise to the reader.","ref":"application_commands.html#responding-to-interactions"},{"type":"extras","title":"Gateway Intents","doc":"# Gateway Intents\n\nThe Discord API allows you to fine tune the payloads that are received by your bot through gateway intents.\n\nWhen connecting to Discord you can instruct Discord on which events you want to receive (i.e. messages, user presences, etc.).\n\nNostrum allows you to set these intents within your configuration, **by default all non-privileged intents are enabled**.\n\nTo pass intents you should use the following configuration:\n```elixir\nconfig :nostrum,\n token: \"bot_token\",\n gateway_intents: [\n :guilds,\n # other gateway intents\n ]\n```\n\nPossible intents (and the gateway events they correspond to) are:\n\n```\nguilds:\n - GUILD_CREATE\n - GUILD_UPDATE\n - GUILD_DELETE\n - GUILD_ROLE_CREATE\n - GUILD_ROLE_UPDATE\n - GUILD_ROLE_DELETE\n - CHANNEL_CREATE\n - CHANNEL_UPDATE\n - CHANNEL_DELETE\n - CHANNEL_PINS_UPDATE\n\nguild_members*:\n - GUILD_MEMBER_ADD\n - GUILD_MEMBER_UPDATE\n - GUILD_MEMBER_REMOVE\n\nguild_moderation:\n - GUILD_AUDIT_LOG_ENTRY_CREATE\n - GUILD_BAN_ADD\n - GUILD_BAN_REMOVE\n\nguild_emojis:\n - GUILD_EMOJIS_UPDATE\n\nguild_integrations:\n - GUILD_INTEGRATIONS_UPDATE\n\nguild_webhooks:\n - WEBHOOKS_UPDATE\n\nguild_invites:\n - INVITE_CREATE\n - INVITE_DELETE\n\nguild_voice_states:\n - VOICE_STATE_UPDATE\n\nguild_presences*:\n - PRESENCE_UPDATE\n\nguild_messages:\n - MESSAGE_CREATE\n - MESSAGE_UPDATE\n - MESSAGE_DELETE\n - MESSAGE_DELETE_BULK\n\nguild_message_reactions:\n - MESSAGE_REACTION_ADD\n - MESSAGE_REACTION_REMOVE\n - MESSAGE_REACTION_REMOVE_ALL\n - MESSAGE_REACTION_REMOVE_EMOJI\n\nguild_message_typing:\n - TYPING_START\n\ndirect_messages:\n - MESSAGE_CREATE\n - MESSAGE_UPDATE\n - MESSAGE_DELETE\n - CHANNEL_PINS_UPDATE\n\ndirect_message_reactions:\n - MESSAGE_REACTION_ADD\n - MESSAGE_REACTION_REMOVE\n - MESSAGE_REACTION_REMOVE_ALL\n - MESSAGE_REACTION_REMOVE_EMOJI\n\ndirect_message_typing:\n - TYPING_START\n\nmessage_content*:\n - MESSAGE_CONTENT\n\nguild_scheduled_events:\n - GUILD_SCHEDULED_EVENT_CREATE\n - GUILD_SCHEDULED_EVENT_UPDATE\n - GUILD_SCHEDULED_EVENT_DELETE\n - GUILD_SCHEDULED_EVENT_USER_ADD\n - GUILD_SCHEDULED_EVENT_USER_REMOVE\n\nauto_moderation_configuration:\n - AUTO_MODERATION_RULE_CREATE\n - AUTO_MODERATION_RULE_DELETE\n - AUTO_MODERATION_RULE_UPDATE\n\nauto_moderation_execution:\n - AUTO_MODERATION_RULE_EXECUTION\n\nguild_message_polls:\n - MESSAGE_POLL_VOTE_ADD\n - MESSAGE_POLL_VOTE_REMOVE\n\ndirect_message_polls:\n - MESSAGE_POLL_VOTE_ADD\n - MESSAGE_POLL_VOTE_REMOVE\n```\n\nBesides an explicit list of atoms, acceptable configuration values are `:all` and `:nonprivileged`.\n\nNote that intents marked with `*` are **privileged** intents. You must enable these intents by visiting the Discord Developer portal.\n\nOnce your bot passes 100 servers Discord will force you to **verify your bot**. If you require privileged intents you may need to write additional information on your usage of them.\n\nNostrum's default value for `gateway_intents` is `:nonprivileged`, which enables all non-privileged intents.\nThis is equivalent to setting `gateway_intents` to the above list without the **privileged** intents.\nIf you require all intents, including privileged ones, set `gateway_intents` to `:all`.\n\nMore information on gateway intents can be found in the [Discord Developer documentation](https://discord.com/developers/docs/topics/gateway#gateway-intents).","ref":"gateway_intents.html"},{"type":"extras","title":"Event handling","doc":"# Event handling\n\nEvent handling is how your bot application will interact with the information\nsent from Discord over a websocket connection. By defining an event handler for\nan event, when something like a message is created or a channel is deleted, your\napplication can perform an action as a result of that event.\n\nNostrum uses [Erlang's `:pg` module](https://www.erlang.org/doc/man/pg.html) to\ndetermine which consumers are interested in events, via\n`Nostrum.ConsumerGroup`. This allows dynamic subscriptions at runtime, even\nacross nodes. Events are dispatched to group members as they appear from the\nDiscord Gateway after ingestion into the cache.\n\nTo see the documentation on handling events of provided consumers, please see\n`Nostrum.Consumer`.\n\n\n","ref":"event_handling.html"},{"type":"extras","title":"State","doc":"# State\n\nNostrum keeps track of the state that your bot can see, which is updated based\non events from the WS connection. We differentiate between _caches_, which are\noptional and are used to provide your bot with fresh data, and _state_, which is\nmandatory state that we must track internally.","ref":"state.html"},{"type":"extras","title":"Caches - State","doc":"Caching will by default use Erlang's ETS tables. Abstractions are provided for\ncommon operations. If you feel the caches are missing some abstraction, feel\nfree to suggest it [on GitHub](https://github.com/Kraigie/nostrum/issues).\n\nShould the default ETS-based caching not be enough for you - for instance, you\nwant to integrate to some external caching mechanism or want to distribute your\nbot across multiple nodes, and the built-in Mnesia-based caching is not enough\nfor you either, please see the [pluggable\ncaching](../advanced/pluggable_caching.md) documentation.","ref":"state.html#caches"},{"type":"extras","title":"Implementing your own caches - State","doc":"To implement custom caches, implement the behaviour defined by the cache\nmodule, such as `Nostrum.Cache.GuildCache`. For ease of use, these modules\ndefine both a user-facing API to obtain objects from the configured cache, as\nwell as the developer-facing behaviour description.","ref":"state.html#implementing-your-own-caches"},{"type":"extras","title":"Internal state - State","doc":"In addition to the optional caching, nostrum also needs to keep track of\ninternal state so it functions properly. State follows the same pattern as the\npluggable caching functionality described above, but disabling state storage via\n`NoOp` as with caching is not possible.\n\nThe modules under `Nostrum.Store` are used for this functionality.\n\n\n\n","ref":"state.html#internal-state"},{"type":"extras","title":"Voice","doc":"# Voice","ref":"voice-3.html"},{"type":"extras","title":"Voice channels - Voice","doc":"Discord voice channels allow audio data to be sent to the voice servers over UDP.\nA bot is able to connect to up to one voice channel per guild. One websocket\nconnection will be opened and maintained for each voice channel the bot joins.\nThe websocket connection should reconnect automatically the same way that the \nmain Discord gateway websocket connections do. For available voice functions and\nusage see the `Nostrum.Voice` module.","ref":"voice-3.html#voice-channels"},{"type":"extras","title":"FFmpeg - Voice","doc":"Nostrum uses the powerful [ffmpeg](https://ffmpeg.org/) command line utility to\nencode any audio (or video) file for sending to Discord's voice servers.\nBy default Nostrum will look for the executable `ffmpeg` in the system path.\nIf the executable is elsewhere, the path may be configured via\n`config :nostrum, :ffmpeg, \"/path/to/ffmpeg\"`.\nThe function `Nostrum.Voice.play/4` allows sound to played via files, local or \nremote, or via raw data that gets piped to `stdin` of the `ffmpeg` process.\nWhen playing from a url, the url can be a name of a file on the filesystem or a url\nof file on a remote server - [ffmpeg supports a ton of protocols](https://www.ffmpeg.org/ffmpeg-protocols.html),\nthe most common of which are probably `http` or simply reading a file from the filesystem.\nIt is also possible to send raw opus frames, bypassing ffmpeg, if desired.","ref":"voice-3.html#ffmpeg"},{"type":"extras","title":"youtube-dl - Voice","doc":"With only `ffmpeg` installed, Nostrum supports playing audio/video files or raw, piped\ndata as discussed in the section above. Nostrum also has support for `youtube-dl`, another\npowerful command line utility for downloading audio/video from online video services.\nAlthough the name implies support for Youtube, `youtube-dl` supports downloading from\n[an immense list of sites](https://github.com/ytdl-org/youtube-dl/blob/master/docs/supportedsites.md).\nBy default Nostrum will look for the executable `youtube-dl` in the system path. If the\nexecutable is elsewhere, the path may be configured via `config :nostrum, :youtubedl, \"/path/to/youtube-dl\"`.\nWhen `Nostrum.Voice.play/4` is called with `:ytdl` for the `type` parameter, `youtube-dl` will be\nrun with options `-f bestaudio -q -o -`, which will attempt to download the audio at the given url and pipe it to `ffmpeg`.\n\n> #### Forks {: .warning}\n> The `youtube-dl` project has not been regularly maintained, and the latest release is not presently compatible with YouTube.\n> The use of the `yt-dlp` fork is recommended in its place.\n>\n> ```elixir\n> config :nostrum, :youtubedl, \"yt-dlp\"\n> ```","ref":"voice-3.html#youtube-dl"},{"type":"extras","title":"streamlink - Voice","doc":"Nostrum also has support for `streamlink`, yet another powerful command line utility \nfor downloading live streams from online video streaming services.\nBy default Nostrum will look for the executable `streamlink` in the system path. \nIf the executable is elsewhere, the path may be configured via `config :nostrum, :streamlink, \"/path/to/streamlink\"`.\nWhen `Nostrum.Voice.play/4` is called with `:stream` for the `type` parameter, `streamlink` \nwill attempt to download the live stream content and pipe it to `ffmpeg`.\nIt's recommended to use the most up-to-date version of `streamlink` to properly\nplay human-readable URLs from services such as Youtube and Twitch. Version 3.x.x\ncurrently works with both of these services. If the short, human-readable url of the streaming service\ndoesn't work with `streamlink` out of the box, you may have more luck extracting the underlying raw stream url.\nThese are typically long URLs that end in `.m3u8` or `.hls`. If you have `youtube-dl` installed,\nyou can attempt to get this URL by running the following:\n\n```elixir\n{raw_url, 0} = System.cmd(\"youtube-dl\", [\"-f\", \"best\", \"-g\", url])\nraw_url = raw_url |> String.trim()\n```","ref":"voice-3.html#streamlink"},{"type":"extras","title":"Audio Timeout - Voice","doc":"Upon invoking `Nostrum.Voice.play/4`, the player process has a large configurable initial window\n(`20_000` milliseconds by default) that it must generate audio within before timing out. This is done to allow\nample time for slow networks to download large audio/video files. This configurable timeout only applies to when\n`play` is initially invoked; once audio has begun transmitting, the timeout drops to `500` milliseconds.\nBecause the `ffmpeg` process doesn't close when its input device is `stdin`, which is the case\nwhen `type` is set to `:pipe`, `:ytdl`, or `:stream` the timeout is necessary to promptly detect end of input.\nIf the audio process times out within the initial window, the `Nostrum.Struct.Event.SpeakingUpdate`\nthat is generated will have its `timed_out` field set to `true`. It will be `false` in all other cases.\nIf your use case does not include large, slow downloads and you wish to more quickly be notified\nof timeouts or errors, you may consider setting `audio_timeout` to a lower value.\nHowever, `youtube-dl` typically takes at least 2.5 seconds to begin outputting audio data,\neven on a fast connection.\nIf your use case involves playing large files at a timestamp several hours in like this,\n`play(guild_id, url, :ytdl, start_time: \"2:37:56\")`, you may consider setting the timeout to a higher value,\nas downloading a large youtube video and having `ffmpeg` seek through several hours\nof audio may take 15-20 seconds, even with a fast network connection.","ref":"voice-3.html#audio-timeout"},{"type":"extras","title":"Audio Frames Per Burst - Voice","doc":"The value `:audio_frames_per_burst` represents the number of consecutive packets to send before resting.\nWhen using `Nostrum.Voice.play/4` to play audio, Nostrum collects a number of opus frames from the \naudio input source before sending them all to Discord as a \"burst\" of ordered frames. \nThis is done to reduce the overhead of process-sleeping and setup.\nFor reference, a single opus frame is 20 milliseconds of audio (at least for the format that Discord uses).\nBy default, the `:audio_frames_per_burst` is set to `10`, equivalent to 200 milliseconds of audio.\n\nUnder normal circumstances, there's no reason to change this value. However, if you attempt to play a very short\npiece of audio that's less than `10` frames (200ms) in length, it will time out (after the configured \n`:audio_timeout` duration has passed) as it waits to collect `10` frames to send. For those cases, configure the\nvalue to *at most* the minimum frame length of the audio you intend to play, or simply `1`. Setting the value to `1`\nmeans that each opus frame from your audio source will be taken individually and be sent in its own \"burst\" with the \nplayer process sleeping between each; you likely won't notice a difference in audio playback quality compared to the \ndefault value of `10` other than that your sub-200ms audio files will play as expected.","ref":"voice-3.html#audio-frames-per-burst"},{"type":"extras","title":"Voice Events - Voice","doc":"There are a few voice related events that bots can consume with a `Nostrum.Consumer` process:\n - `t:Nostrum.Consumer.voice_state_update/0`\n - `t:Nostrum.Consumer.voice_server_update/0`\n - `t:Nostrum.Consumer.voice_speaking_update/0`\n - `t:Nostrum.Consumer.voice_ready/0`\n - `t:Nostrum.Consumer.voice_incoming_packet/0`\n\nBoth `t:Nostrum.Consumer.voice_state_update/0` and `t:Nostrum.Consumer.voice_server_update/0` \nare sent by the shard gateway session when a bot joins a voice channel. The receipt of both of \nthese events is required for a voice gateway session to begin, and it happens automatically when \njoining a channel. The `t:Nostrum.Consumer.voice_state_update/0` event is also sent every time \nany user joins or leaves a voice channel, and `t:Nostrum.Struct.Guild.voice_states/0` is \nautomatically updated within the guild cache to reflect current state of voice channels.\n\nA use case for listening to both `t:Nostrum.Consumer.voice_state_update/0` and \n`t:Nostrum.Consumer.voice_server_update/0` events would be to outsource voice connections to \nan application outside of Nostrum. This can be done by setting the config option \n`:voice_auto_connect` to `false` and taking the session and token information \nfrom both of the events and passing them to your external voice app. \nOutside of this niche use case, another use case for listening solely to the\n`t:Nostrum.Consumer.voice_state_update/0` event would be to detect when users join or leave \nvoice channels.\n\nThe `t:Nostrum.Consumer.voice_speaking_update/0` event is generated by Nostrum for convenience. It is \nsent every time the bot starts or stops speaking/sending audio. A use case for this event is if \nyou have a queue of URLs to play, listening to the `t:Nostrum.Consumer.voice_speaking_update/0` \nwill let the bot know when the current URL has finished playing and that it should begin playing \nthe next one in the queue. The alternative approach for this use case that is not event-driven \nis to periodically call `Nostrum.Voice.playing?/1` and wait for it to return `false` as the \ntrigger to play the next URL. Note that the third element in the event is of type\n`t:Nostrum.Struct.VoiceWSState.t/0` and not `t:Nostrum.Struct.WSState.t/0`.\n\nThe `t:Nostrum.Consumer.voice_ready/0` event is generated by Nostrum for convenience. It is sent\nwhen the bot is ready to begin sending audio data upon joining a voice channel. From the moment\nthe bot joins a voice channel, Nostrum handles the multi-step handshaking process that is \nrequired before any audio packets can be sent or received. It is a common use case for bots to\nimmediately begin playing audio upon joining a voice channel. Calling `Nostrum.Voice.play/4`\ndirectly after calling `Nostrum.Voice.join_channel/4` will always return an error as several\nnetwork actions must take place before playing audio is possible. Listening for the\n`t:Nostrum.Consumer.voice_ready/0` event can be used by the bot to begin playing audio as soon \nas it is able to. The alternative approach for this use case that is not event-driven is to \nperiodically call `Nostrum.Voice.ready?/1` and wait for it to return `true` as the trigger to\nbegin playing. Another common approach is to define a `try_play` function as follows:\n```elixir\ndef try_play(guild_id, url, type, opts \\\\ []) do\n case Nostrum.Voice.play(guild_id, url, type, opts) do\n {:error, _msg} ->\n Process.sleep(100)\n try_play(guild_id, url, type, opts)\n\n _ ->\n :ok\n end\nend\n```\nNote that the third element in the event is of type `t:Nostrum.Struct.VoiceWSState.t/0` and \nnot `t:Nostrum.Struct.WSState.t/0`.\n\nThe `t:Nostrum.Consumer.voice_incoming_packet/0` event is generated by Nostrum. None will be generated\nby default. You must first be connected to a voice channel, call the `Nostrum.Voice.start_listen_async/1`\nfunction, then have another user in the same voice channel speak. If these conditions are met, an event\nwill be received for each RTP packet the bot receives; 50 packets per 1 second for each user that is\nactively speaking. These events are only useful if you intend to listen to incoming audio and are disabled\nby default. An alternative approach to listening to incoming audio that is not event driven is to call\n`Nostrum.Voice.listen/3`. This function blocks until the specified number of RTP packets is received.\n`Nostrum.Voice.listen/3` has the additional features of removing duplicate RTP packets within the set of\npackets returned per invocation and the option to return the raw RTP packet. In practice these features\nlikely won't be missed when consuming incoming voice packets asynchronously.\nNote that the third element in the event is of type\n`t:Nostrum.Struct.VoiceWSState.t/0` and not `t:Nostrum.Struct.WSState.t/0`.","ref":"voice-3.html#voice-events"},{"type":"extras","title":"Encryption Modes - Voice","doc":"Nostrum supports all of Discord's available encryption modes for voice channels.\nThe encryption mode is invisible to the user, and you will likely never need to touch it.\n\nDifferent encryption modes may have different performance characteristics depending on the\nhardware architecture your bot is running on. If you're interested, keep reading.\n\n#### Encryption Mode Configuration Options\n\nThis is a compile-time configuration option, so should you wish to set it,\ndo it in `config.exs` or one of its imported config files, *not* `runtime.exs`.\n\n```elixir\nconfig :nostrum, :voice_encryption_mode, :aes256_gcm # Default\n```\n\nAvailable configuration options are as follows:\n- `:xsalsa20_poly1305`\n- `:xsalsa20_poly1305_suffix`\n- `:xsalsa20_poly1305_lite`\n- `:xsalsa20_poly1305_lite_rtpsize` *(not yet documented by Discord)*\n- `:aead_xchacha20_poly1305_rtpsize` *(not yet documented by Discord)*\n- `:aead_aes256_gcm` *(not yet documented by Discord)*\n- `:aead_aes256_gcm_rtpsize` *(not yet documented by Discord)*\n- `:xchacha20_poly1305` (alias for `:aead_xchacha20_poly1305_rtpsize`)\n- `:aes256_gcm` (alias for `:aead_aes256_gcm_rtpsize`)\n\nThe first seven are Discord's available options, while the last two are shorter aliases.\n\nThe latter four of Discord's seven modes are not yet documented, but [will be soon](https://github.com/discord/discord-api-docs/pull/6801).\n\n#### Implementation Details\n\nOf the seven supported modes, three different ciphers are used. The remaining differences\nare variations in how the nonce is determined and where the encrypted portion of the RTP packet begins.\n\nErlang's `:crypto` module is leveraged as much as possible as the ciphers are NIFs.\n\n##### xsalsa20_poly1305\n\nThe entire Salsa20/XSalsa20 cipher is implemented in elixir. The poly1305 MAC function is handled by the `:crypto` module.\nAs a result, xsalsa_poly1305 modes will likely have the slowest performance.\n\n##### xchacha20_poly1305\n\nThe `:crypto` module supports the `chacha20_poly1305` AEAD cipher. The only thing implemented in elixir \nis the HChaCha20 hash function that generates a sub-key from the key and the longer nonce that XChaCha20 \nspecifies, which is then passed to the `chacha20_poly1305` cipher.\nIf your hardware doesn't have AES hardware acceleration, the `chacha` option may perform\nthe best for you.\n\n##### aes256_gcm\n\nThe `:crypto` module completely supports AES256 in GCM mode requiring no implementation in elixir. \nMany CPUs have hardware acceleration specifically for AES. For these reasons, Nostrum defaults to `aes256_gcm`.","ref":"voice-3.html#encryption-modes"},{"type":"extras","title":"Gateway Compression","doc":"# Gateway Compression\n\nNostrum supports either the `zlib-stream` or `zstd-stream` gateway compression\nmethods, as documented\n[here](https://discord.com/developers/docs/topics/gateway#encoding-and-compression)\n\nMost users are fine to leave the `gateway_compression` configuration option set\nto `:zlib` (default), but users looking for a potential reduction in payload\nsizes from the Discord gateway can optionally set `:zstd` here.","ref":"gateway_compression.html"},{"type":"extras","title":"Using `:zstd` compression - Gateway Compression","doc":"Using `:zstd` depends on the [`:ezstd`](https://hex.pm/packages/ezstd) library,\nso you will have to add this dependency to your `mix.exs` file:\n\n```elixir\n defp deps do\n [\n {:nostrum, ...},\n {:ezstd, \"~> 1.1\"} # new dependency\n ]\n end\n```\n\n\n> #### `:ezstd` NIFs {: .info}\n>\n> Some functionality of `:ezstd` depends on Erlang NIFs (Natively Implemented\n> Functions). This means that a proper compiler installation as well as other\n> build tools like `git` may be necessary at the stage where you compile your\n> dependencies.\n>\n> It may be useful to run `mix deps.compile` in any build systems to ensure that\n> your application does not need build utilities in the built application image.\n\nOnce you have this additional dependency installed in your project, set the\n`:nostrum`, `:gateway_compression` configuration option to `:zstd` and Nostrum\nshould pick up on it.\n\nYou will need to run `mix deps.get` and `mix deps.compile` to install and\ncompile the new `:ezstd` dependency.\n\n> #### Nostrum detection of `:ezstd` {: .tip}\n>\n> Since the check for `:ezstd` takes place when you compile Nostrum, you might\n> need to run `mix deps.compile --force nostrum` to ensure that Nostrum is\n> recompiled and recognises the newly installed `:ezstd` dependency.\n>\n> Not doing this may mean that your compiled Nostrum version is still using\n> dummy handlers that will error out even when `:ezstd` is installed.","ref":"gateway_compression.html#using-zstd-compression"},{"type":"extras","title":"Hot code upgrade","doc":"# Hot code upgrade\n\nFor the library users whose Discord bot can afford absolutely no downtime due to\nrestarts, nostrum ships with [`appup`\nfiles](https://www.erlang.org/doc/man/appup.html) via the\n[`castle`](https://github.com/ausimian/castle) library.\n\n\n>","ref":"hot_code_upgrade.html"},{"type":"extras","title":"Maintenance {: .info} - Hot code upgrade","doc":"> \n> The appups are maintained on a best-effort basis. While they are expected to\n> work and be present and documented as such, no guarantee can be made that they\n> will choose the most optimal path to upgrade and downgrade releases.\n> Contributions in this regard are welcome.","ref":"hot_code_upgrade.html#maintenance-info"},{"type":"extras","title":"Usage - Hot code upgrade","doc":"To make use of nostrum's hot code upgrade support, please follow the\ninstructions to install the [`castle`](https://github.com/ausimian/castle)\nlibrary in order to configure your release appropriately. Outside of shipping\nthe appup, nostrum does not provide further functionality to facilitate this.","ref":"hot_code_upgrade.html#usage"},{"type":"extras","title":"nostrum as included application - Hot code upgrade","doc":"When nostrum is run as an included application as documented in [the\nmulti-node support document](./multi_node.md), nostrum's default appup won't\nbe read on generation of the release upgrade file.\n\nPlease see the OTP documentation on [Changing Included\nApplications](https://www.erlang.org/doc/design_principles/appup_cookbook.html#changing-included-applications)\nfor information on how to deal with upgrades in this case.\n\n\n","ref":"hot_code_upgrade.html#nostrum-as-included-application"},{"type":"extras","title":"Manual Sharding","doc":"# Manual Sharding\n\nAdvanced users can use methods located in the `Nostrum.Shard.Supervisor` module\nto manually connect shards to the gateway as well as initiate manual disconnect\nand reconnects (attempting to `RESUME` sessions where possible).\n\nYou can set the `num_shards` option in your `nostrum` application config to\n`:manual` to prevent Nostrum from automatically starting shards. You should use\nthe methods in the shard supervisor such as `Nostrum.Shard.Supervisor.connect/2`\nto manually start shards if using this configuration option.","ref":"manual_sharding.html"},{"type":"extras","title":"Reconnection example - Manual Sharding","doc":"```elixir\n# On Node A\niex> Nostrum.Shard.Supervisor.connect(0, 1)\niex> resume_info = Nostrum.Shard.Supervisor.disconnect(0)\n%{shard_num: 0, ...}\n\n# On another node\niex> Nostrum.Shard.Supervisor.reconnect(resume_info)\n```\n\nDiscord will perform a best effort attempt to resume the gateway from the time\nof disconnection, relaying any missed events. Resumption is not guaranteed to\nwork, in the event it fails Nostrum will reconnect the shard from scratch,\nthough this may mean some events are missed.","ref":"manual_sharding.html#reconnection-example"},{"type":"extras","title":"Multi-node","doc":"# Multi-node\n\nAt the moment, you can run nostrum in highly available mode across multiple\nnodes via OTP's distributed application support, see below. Support for properly\ndistributing nostrum across multiple nodes and using them as one big entity is\nnot supported (yet).\n\nAs a general rule: if you are running distributed Erlang over the internet, make\nsure to secure it with [a solid VPN](https://www.wireguard.com) and / or by\n[using TLS for Erlang\ndistribution](https://www.erlang.org/doc/apps/ssl/ssl_distribution.html).","ref":"multi_node.html"},{"type":"extras","title":"High availability - Multi-node","doc":"Running using OTP's [distributed\napplications](https://www.erlang.org/doc/design_principles/distributed_applications.html)\nallows us to connect multiple nodes together and have your app and nostrum\nrescheduled on another node when things go south. Let's see how we can configure\nit. In this example, we will make use of three nodes, and all of them will be\nrun from your bot's directory. The only difference on their command line is the\n`--sname` / `--name` you specify. We'll use `--sname`s for testing here, for\nproper fault tolerance you will want to use multiple hosts with `--name`. Let's\nassume we name our nodes `joe`, `robert`, and `mike`.","ref":"multi_node.html#high-availability"},{"type":"extras","title":"Bundling nostrum with our app - Multi-node","doc":"We want to colocate nostrum with our app to allow it to move around as our\napplication is moved around. For this, utilize OTP's [included\napplications](https://www.erlang.org/doc/design_principles/included_applications.html)\nfeature to include nostrum into our supervision tree. You also need to\nexplicitly include nostrum's dependencies to ensure they are started, as the\nregular nostrum application startup won't handle it for you. This can be done by\nchanging your application definition in `mix.exs` as follows:\n\n```elixir\n def application do\n [\n mod: {MyBot.Application, []},\n included_applications: [:nostrum],\n # You can see this with `mix app.tree nostrum`\n extra_applications: [:certifi, :gun, :inets, :jason, :mime]\n # ...\n ]\n end\n```\n\nYou also need to set `runtime: false` for `:nostrum` itself in your\ndependencies, and any dependencies of your app that depend on `:nostrum`, such\nas command frameworks like `:nosedrum`:\n\n```elixir\n defp deps do\n [\n {:nostrum, \"~> 0.10\", runtime: false},\n # {:nosedrum, \"~> 0.6\", runtime: false},\n ]\n end\n```\n\nYou now need to add nostrum to your applications' children to start it as part\nof your app:\n\n```elixir\n def start(type, args) do\n children = [\n Nostrum.Application,\n # ...\n ]\n end\n```\n\nIf you want to run some logic ahead of starting nostrum, you can naturally also\nput it later into the list.\n\nYou can start your bot now, and it's going to run. If you look at your\nbot's application in `:observer`, you will see that nostrum has now become one\nwith your bot. We call that integration engineering.\n\nNow that our app bundles everything it needs with itself, this means starting\nour app will also starting nostrum, and stopping will also stop nostrum. We need\nthis for step two.","ref":"multi_node.html#bundling-nostrum-with-our-app"},{"type":"extras","title":"Setting up distribution - Multi-node","doc":"The avid reader will probably know that starting with the same `--cookie` and\n`--sname` / `--name` is only step one, the nodes need to connect to each other\nas well.\n\nTo be able to test this in interactive mode we will configure the settings in\nErlang configuration files, for releases you can use your regular\n`config/prod.exs`. We will set up the following:\n\n- Instruct OTP that our app, `:mybot` is a distributed app, and give it the\n hosts to run it on.\n\n- On startup, tell OTP it should wait for the other nodes to become available.\n\nWith the Erlang configuration files, this can be done as follows:\n\n```erl\n% mybot_joe.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [mike@HOSTNAME, robert@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n```erl\n% mybot_robert.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [joe@HOSTNAME, mike@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n```erl\n% mybot_mike.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [joe@HOSTNAME, robert@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n\nNote the only thing that changes is the `sync_node_mandatory` setting, which\ninstructs OTP which hosts to wait for on startup. The other settings must match.\nThese options instructs OTP that our app `:mybot` is distributed and should be\nstarted at `:joe@HOSTNAME` first. If that fails, it moves to `:robert@HOSTNAME`\nor `:mike@HOSTNAME`.\n\nFor details on the options, please see the [kernel reference\nmanual](https://www.erlang.org/doc/man/kernel_app.html).","ref":"multi_node.html#setting-up-distribution"},{"type":"extras","title":"Playtest - Multi-node","doc":"In three distinct windows, run the following:\n\n1. `iex --sname joe --cookie foo --erl-config myapp_joe.config -S mix`\n2. `iex --sname robert --cookie foo --erl-config myapp_robert.config -S mix`\n3. `iex --sname mike --cookie foo --erl-config myapp_mike.config -S mix`\n\nIf you have some other application that breaks on startup now - like monitoring\nexporters that bind to specific ports, or similar things - this is when they\nwill blow up. Decide whether you want to run this on every node indeed or\ninclude it with your app as shown above.\n\nYou now have three instances of the VM running. `:joe@HOSTNAME` runs your bot\nright now. If you stop that node, one of the other two nodes will start running\nyour app. High availability complete.","ref":"multi_node.html#playtest"},{"type":"extras","title":"Being informed about takeover - Multi-node","doc":"Your application's `def start` function takes a `type` argument. In this case,\non the node that now runs your application, that `type` was `{:failover,\n:joe@HOSTNAME}`. If you start `:joe@HOSTNAME` back up, `:joe@HOSTNAME` is\nstarted with `{:takeover, source_node}`, where `source_node` is the node that it\ntook over from.","ref":"multi_node.html#being-informed-about-takeover"},{"type":"extras","title":"Manual takeover - Multi-node","doc":"If you want to move your app around manually, you can use\n`:application.takeover`, for example `:application.takeover(:mybot,\n:permanent)`.","ref":"multi_node.html#manual-takeover"},{"type":"extras","title":"Final thoughts - Multi-node","doc":"At present, nostrum can not perform any state synchronization between nodes, it\nis an effective restart from scratch. For most bots, this type of failover will\nbe sufficient.\n\n\n","ref":"multi_node.html#final-thoughts"},{"type":"extras","title":"Pluggable caching","doc":"# Pluggable caching\n\nThe default ETS-based caches supplied by nostrum should work for most of your\nneeds, but all of the caches can be exchanged for your own implementations. For\nthis, implement the behaviours exported by the cache modules under\n`Nostrum.Cache`.\n\n>","ref":"pluggable_caching.html"},{"type":"extras","title":"Exception {: .info} - Pluggable caching","doc":">\n> The exception to the above is the `Nostrum.Cache.MessageCache`, which does not\n> include an ETS-based implementation, and defaults to a NoOp cache. This is\n> an intentional design decision because caching messages consumes a\n> lot more memory than other objects, and is often not needed by most users.\n\nUse the `[:nostrum, :caches]` configuration for configuring which cache\nimplementation you want to use. This can only be set at dependency compilation\ntime. A common situation is that you don't want to cache presences in your bot,\nmost likely you don't care about user's status, so you can disable it altogether\nby using the `NoOp` presence cache:\n\n```elixir\nconfig :nostrum,\n caches: %{\n presences: Nostrum.Cache.PresenceCache.NoOp\n }\n```\n\nIn addition to regular caches that associate Discord snowflakes with the proper\n\"full\" object, nostrum also maintains junction table-like mappings that allow\nyou to find the matching object from one cache in another. One example for this\nis `Nostrum.Cache.ChannelGuildMapping`.\n\nNostrum also ships with Mnesia-based caches. **These are only compiled in when\nmnesia is available**: they may not be available on Nerves or when Mnesia was\nnot installed with OTP.","ref":"pluggable_caching.html#exception-info"},{"type":"extras","title":"Implementations - Pluggable caching","doc":"","ref":"pluggable_caching.html#implementations"},{"type":"extras","title":"ETS caching - Pluggable caching","doc":"Caching based on `:ets` is used by default. No configuration is required. Fast,\nlight on memory, but does not support any form of distribution or secondary\nindexing: queries such as fetching all guild members for a guild by its ID will\nperform a full table scan. For smaller bots, this is perfectly acceptable.","ref":"pluggable_caching.html#ets-caching"},{"type":"extras","title":"Mnesia caching - Pluggable caching","doc":"Mnesia-based caching is mainly suggested for larger bots that require\nfeatures such as cache distribution, fragmentation, secondary indexing and more.\n\nThe caches will attempt to create their tables automatically at startup:\ntherefore, Mnesia must be started ahead of nostrum. Caches expose a function\n`table/0` that can be called to retrieve the table name used by the cache and\nperform schema operations on it, such as adding replicas or fragmenting them.\n\n\n\nAccess to Mnesia is presently done in `sync_transaction` mode for best\nconsistency. If needed, a compile-time configuration option for the cache to\nswitch this can be added.\n\nMnesia-based caching assumes the user is familar with usage and\nmaintenance of Mnesia: the [Mnesia User's\nGuide](https://www.erlang.org/doc/apps/mnesia/mnesia_chap1.html) is a good\nstarting point.","ref":"pluggable_caching.html#mnesia-caching"},{"type":"extras","title":"NoOp caching - Pluggable caching","doc":"The NoOp cache adapters are supplied for the case where you do not want to cache\nspecific data from Discord at all.","ref":"pluggable_caching.html#noop-caching"},{"type":"extras","title":"Cache invalidation - Pluggable caching","doc":"Nostrum does not invalidate most caches in any special way: it will maintain it in\nresponse to gateway events (for instance by deleting a guild and its members\nupon leaving it), but won't regularly prune caches or associate expiration times\nwith entries. For volatile (RAM-based) caches this is perfectly fine, however,\nwhen implementing your own cache backend that persists to disk in some way, you\nneed to take care of this yourself.\n\nThe exception to this is the `Nostrum.Cache.MessageCache.Mnesia` module, which has a\ndefault size limit of 10,000 and will automatically remove the 100 oldest\nmessages when this limit is reached as well as delete all cached messages for a\nchannel when the channel is deleted.","ref":"pluggable_caching.html#cache-invalidation"},{"type":"extras","title":"Cache performance - Pluggable caching","doc":"nostrum strives to provide the most performant caches on the Discord bot caching\nmarket. If you run into performance issues with caches that you feel are not\nadequately documented as such, please feel free to open an issue.\n\nBenchmarks for caches can be found in the [`benchmarks/`\ndirectory](https://github.com/Kraigie/nostrum/tree/master/benchmarks) of the\nsource code tree. If you want to get a feeling for how the caches perform or\nimplement optimizations, check them out.","ref":"pluggable_caching.html#cache-performance"},{"type":"extras","title":"API Usage","doc":"# API Usage\n\nThis cheat sheet covers basic use of the Discord API through the `Nostrum.Api` module.","ref":"api-1.html"},{"type":"extras","title":"Messages - API Usage","doc":"{: .col-2}","ref":"api-1.html#messages"},{"type":"extras","title":"Sending a message - API Usage","doc":"```elixir\nutc_now = DateTime.utc_now\natom_count = :erlang.system_info(:atom_count)\n\ncontent = \"\"\"\nUTC time is: #{DateTime.to_iso8601(utc_now)}\nAtom table size is: #{atom_count}\n\"\"\"\n\nNostrum.Api.create_message(msg.channel_id, content)\n```","ref":"api-1.html#sending-a-message"},{"type":"extras","title":"Sending a message with an embed - API Usage","doc":"```elixir\nimport Nostrum.Struct.Embed\n\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"Craig's Cats\")\n |> put_description(\"nostrum\")\n |> put_url(\"https://google.com/\")\n |> put_timestamp(\"2016-05-05T21:04:13.203Z\")\n |> put_color(431_948)\n |> put_field(\"Field 1\", \"Test\")\n # set inline attribute to true\n |> put_field(\"Field 2\", \"More test\", true)\n\nNostrum.Api.create_message(msg.channel_id, embeds: [embed])\n```\n\nYou can look at the documentation in `m:Nostrum.Struct.Embed#module-using-structs` for more advanced usage.","ref":"api-1.html#sending-a-message-with-an-embed"},{"type":"extras","title":"Upload an attachment - API Usage","doc":"```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n files: [\n # file from filesystem\n \"/path/to/file.txt\",\n # file from memory\n %{body: \"test file\", name: \"example.txt\"}\n ]\n)\n```","ref":"api-1.html#upload-an-attachment"},{"type":"extras","title":"Reply to a message - API Usage","doc":"With a mention:\n\n```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello!\",\n message_reference: %{message_id: msg.id}\n)\n```\n\nWithout a mention:\n\n```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello!\",\n message_reference: %{message_id: msg.id},\n allowed_mentions: :none\n)\n```","ref":"api-1.html#reply-to-a-message"},{"type":"extras","title":"Send a poll - API Usage","doc":"```elixir\npoll = Poll.create_poll(\n \"Do you enjoy pineapple on pizza?\",\n duration: 2,\n allow_multiselect: false\n)\n|> Poll.put_answer(\"Yes!\", default_emoji: \"\\u2705\")\n|> Poll.put_answer(\"No!\", default_emoji: \"\\u274C\")\n\nApi.create_message(channel_id, poll: poll)\n```","ref":"api-1.html#send-a-poll"},{"type":"extras","title":"React to a message - API Usage","doc":"Using a default emoji (unicode representation):\n```elixir\nNostrum.Api.create_reaction(\n msg.channel_id,\n msg.id,\n \"👾\"\n)\n```\n\nUsing a custom Discord emoji:\n```elixir\nemoji = %Nostrum.Struct.Emoji{\n name: \"emojiname\",\n id: 1228698654022434866\n}\n\nNostrum.Api.create_reaction(msg.channel_id, msg.id, emoji)\n```","ref":"api-1.html#react-to-a-message"},{"type":"extras","title":"Miscellaneous - API Usage","doc":"{: .col-2}","ref":"api-1.html#miscellaneous"},{"type":"extras","title":"Update the bot status - API Usage","doc":"```elixir\nNostrum.Api.update_status(\n :dnd,\n \"craigs cats\",\n 3 # Watching status\n)\n```\nYou can also update a single shard with `Nostrum.Api.update_shard_status/5`.","ref":"api-1.html#update-the-bot-status"},{"type":"extras","title":"Create a guild emoji - API Usage","doc":"```elixir\nimage = \"data:image/png;base64,...\"\n\nNostrum.Api.create_guild_emoji(\n msg.guild_id,\n name: \"nostrum\",\n image: image\n)\n```","ref":"api-1.html#create-a-guild-emoji"},{"type":"extras","title":"Voice Usage","doc":"# Voice Usage\n\nThis cheat sheet covers basic use of the Discord Voice API through the `Nostrum.Voice` module.","ref":"voice-2.html"},{"type":"extras","title":"Playing Audio - Voice Usage","doc":"{: .col-2}","ref":"voice-2.html#playing-audio"},{"type":"extras","title":"Playing immediately with a `try_play` function - Voice Usage","doc":"```elixir\ndef try_play(guild_id, url, type, opts \\\\ []) do\n case Voice.play(guild_id, url, type, opts) do\n {:error, _msg} ->\n # Wait for handshaking to complete\n Process.sleep(100)\n try_play(guild_id, url, type, opts)\n\n _ ->\n :ok\n end\nend\n```\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\niex> try_play(guild_id, \"./song.mp3\", :url)\n```","ref":"voice-2.html#playing-immediately-with-a-try_play-function"},{"type":"extras","title":"Playing immediately using `Nostrum.Voice.ready?/1` - Voice Usage","doc":"```elixir\ndef play_when_ready(guild_id, url, type, opts \\\\ []) do\n if Voice.ready?(guild_id) do\n Voice.play(guild_id, url, type, opts)\n else\n # Wait for handshaking to complete\n Process.sleep(25)\n play_when_ready(guild_id, url, type, opts)\n end\nend\n```\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\niex> play_when_ready(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl)\n```","ref":"voice-2.html#playing-immediately-using-nostrum-voice-ready-1"},{"type":"extras","title":"Playing immediately by using events - Voice Usage","doc":"```elixir\nalias Nostrum.Struct.Event.VoiceReady\nalias Nostrum.Voice\n\ndef handle_event({:VOICE_READY, %VoiceReady{guild_id: guild_id} = _event, _v_ws_state}) do\n Voice.play(guild_id, \"~/loud_noise.mp3\", :url, volume: 10)\nend\n```\n\nOnce the voice handshake has completed, audio will begin playing\nwithout the need for polling functions like `try_play/4` or `play_when_ready/4`\nas shown in the other examples\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\n# Playback will start automatically when ready\n```","ref":"voice-2.html#playing-immediately-by-using-events"},{"type":"extras","title":"Audio FFmpeg options - Voice Usage","doc":"{: .col-2}","ref":"voice-2.html#audio-ffmpeg-options"},{"type":"extras","title":"Volume - Voice Usage","doc":"#### Half volume\n\n```elixir\nVoice.play(guild_id, \"~/final_mix.wav\", :url, \n volume: 0.5\n)\n```\n\n#### Extreme clipping\n\n```elixir\nVoice.play(guild_id, \"~/boost_this.m4a\", :url, \n volume: 100\n)\n```\n\n#### Normal volume with inverted phase\n\n```elixir\nVoice.play(guild_id, \"~/music.mp3\", :url, \n volume: -1.0\n)\n```","ref":"voice-2.html#volume"},{"type":"extras","title":"Start position and duration - Voice Usage","doc":"Start at 37.8 seconds\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl, \n start_pos: \"0:37.8\"\n)\n```\n\nPlay the first at 15.3 seconds from the beginning\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl, \n duration: \"15.3\"\n)\n```\n\nPlay for 80 seconds (equivalently 1:20) starting from 90 seconds (equivalently 1:30) in\n\n```elixir\nVoice.play(guild_id, \"~/music.mp3\", :url, \n start_pos: \"90\", \n duration: \"80\"\n)\n```","ref":"voice-2.html#start-position-and-duration"},{"type":"extras","title":"Advanced audio filtering - Voice Usage","doc":"#### Cutoff filters\n\nLow-pass filter at 1200 Hz, high-pass filter at 300 Hz\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n filter: \"lowpass=f=1200\",\n filter: \"highpass=f=300\"\n)\n```\n\n#### Sample rate\n\nPlay at half tempo and pitch (assumes a 48kHz sample rate)\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n filter: \"asetrate=48000*0.5\"\n)\n```\n\nPlay at 30% higher tempo and pitch. Realtime must be set to `false` for ffmpeg to keep up with faster-than-normal playback.\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n realtime: false,\n filter: \"asetrate=48000*1.3\"\n)\n```\n\n#### Heavily distorted and effected lo-fi FX chain\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/Hd_giv-wcJU\", :ytdl,\n volume: 3,\n start_pos: \"0:55\",\n filter: \"asetrate=48000*0.73\",\n filter: \"vibrato=d=0.05:f=698.46\",\n filter: \"vibrato=f=1:d=0.8\",\n filter: \"lowpass=f=1200\",\n filter: \"aphaser=in_gain=0.4:out_gain=0.5:delay=3.0:decay=0.3:speed=0.3:type=t\"\n)\n```","ref":"voice-2.html#advanced-audio-filtering"}],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,50,46,49]}} \ No newline at end of file +searchData={"items":[{"type":"task","title":"mix gh.docs","doc":"Task that pushes docs to gh-pages branch on Discord.","ref":"Mix.Tasks.Gh.Docs.html"},{"type":"function","title":"Mix.Tasks.Gh.Docs.run/1","doc":"","ref":"Mix.Tasks.Gh.Docs.html#run/1"},{"type":"module","title":"Nostrum.Api","doc":"Interface for Discord's rest API.\n\nBy default all methods in this module are ran synchronously. If you wish to\nhave async rest operations I recommend you execute these functions inside of a\ntask.\n\n**Examples**\n```elixir\n# Async Task\nt = Task.async fn ->\n Nostrum.Api.get_channel_messages(12345678912345, :infinity, {})\nend\nmessages = Task.await t\n\n# A lot of times we don't care about the return value of the function\nTask.start fn ->\n messages = [\"in\", \"the\", \"end\", \"it\", \"doesn't\", \"even\", \"matter\"]\n Enum.each messages, &Nostrum.Api.create_message!(12345678912345, &1)\nend\n```\n\n#### A note about Strings and Ints\nCurrently, responses from the REST api will have `id` fields as `string`.\nEverything received from the WS connection will have `id` fields as `int`.\n\nIf you're processing a response from the API and trying to access something in the cache\nbased off of an `id` in the response, you will need to convert it to an `int` using\n`String.to_integer/1`. I'm open to suggestions for how this should be handled going forward.\n\n**Example**\n```elixir\nmessages = Nostrum.Api.get_pinned_messages!(12345678912345)\n\nauthors =\n Enum.map messages, fn msg ->\n author_id = String.to_integer(msg.author.id)\n Nostrum.Cache.User.get!(id: author_id)\n end\n```","ref":"Nostrum.Api.html"},{"type":"function","title":"Nostrum.Api.add_guild_member/3","doc":"Puts a user in a guild.\n\nThis endpoint fires the `t:Nostrum.Consumer.guild_member_add/0` event.\nIt requires the `CREATE_INSTANT_INVITE` permission. Additionally, it\nsituationally requires the `MANAGE_NICKNAMES`, `MANAGE_ROLES`,\n`MUTE_MEMBERS`, and `DEAFEN_MEMBERS` permissions.\n\nIf successful, returns `{:ok, member}` or `{:ok}` if the user was already a member of the\nguild. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#add_guild_member/3"},{"type":"function","title":"Options - Nostrum.Api.add_guild_member/3","doc":"* `:access_token` (string) - the user's oauth2 access token\n * `:nick` (string) - value to set users nickname to\n * `:roles` (list of `t:Nostrum.Struct.Guild.Role.id/0`) - array of role ids the member is assigned\n * `:mute` (boolean) - if the user is muted\n * `:deaf` (boolean) - if the user is deafened\n\n`:access_token` is always required.","ref":"Nostrum.Api.html#add_guild_member/3-options"},{"type":"function","title":"Examples - Nostrum.Api.add_guild_member/3","doc":"```elixir\nNostrum.Api.add_guild_member(\n 41771983423143937,\n 18374719829378473,\n access_token: \"6qrZcUqja7812RVdnEKjpzOL4CvHBFG\",\n nick: \"nostrum\",\n roles: [431849301, 913809431]\n)\n```","ref":"Nostrum.Api.html#add_guild_member/3-examples"},{"type":"function","title":"Nostrum.Api.add_guild_member!/3","doc":"Same as `add_guild_member/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#add_guild_member!/3"},{"type":"function","title":"Nostrum.Api.add_guild_member_role/4","doc":"Adds a role to a member.\n\nRole to add is specified by `role_id`.\nUser to add role to is specified by `guild_id` and `user_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#add_guild_member_role/4"},{"type":"function","title":"Nostrum.Api.add_pinned_channel_message/2","doc":"Pins a message in a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', and\n'MANAGE_MESSAGES' permissions. It fires the\n`t:Nostrum.Consumer.message_update/0` and\n`t:Nostrum.Consumer.channel_pins_update/0` events.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#add_pinned_channel_message/2"},{"type":"function","title":"Examples - Nostrum.Api.add_pinned_channel_message/2","doc":"```elixir\nNostrum.Api.add_pinned_channel_message(43189401384091, 18743893102394)\n```","ref":"Nostrum.Api.html#add_pinned_channel_message/2-examples"},{"type":"function","title":"Nostrum.Api.add_pinned_channel_message!/2","doc":"Same as `add_pinned_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#add_pinned_channel_message!/2"},{"type":"function","title":"Nostrum.Api.add_thread_member/2","doc":"Add a user to a thread, requires the ability to send messages in the thread.","ref":"Nostrum.Api.html#add_thread_member/2"},{"type":"function","title":"Nostrum.Api.batch_edit_application_command_permissions/3","doc":"Edits command permissions for a specific command for your application in a guild. You can only add up to 10 permission overwrites for a command.","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3"},{"type":"function","title":"Parameters - Nostrum.Api.batch_edit_application_command_permissions/3","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.\n- `permissions`: List of partial [guild application command permissions](hhttps://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure) with `id` and `permissions`. You can add up to 10 overwrites per command.","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.batch_edit_application_command_permissions/3","doc":"This method returns a guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#batch_edit_application_command_permissions/3-return-value"},{"type":"function","title":"Nostrum.Api.begin_guild_prune/3","doc":"Begins a guild prune to prune members within `days`.\n\nAn optional `reason` can be provided for the guild audit log.\n\nThis endpoint requires the `KICK_MEMBERS` permission. It fires multiple\n`t:Nostrum.Consumer.guild_member_remove/0` events.\n\nIf successful, returns `{:ok, %{pruned: pruned}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#begin_guild_prune/3"},{"type":"function","title":"Examples - Nostrum.Api.begin_guild_prune/3","doc":"```elixir\nNostrum.Api.begin_guild_prune(81384788765712384, 1)\n{:ok, %{pruned: 0}}\n```","ref":"Nostrum.Api.html#begin_guild_prune/3-examples"},{"type":"function","title":"Nostrum.Api.begin_guild_prune!/3","doc":"Same as `begin_guild_prune/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#begin_guild_prune!/3"},{"type":"function","title":"Nostrum.Api.bulk_delete_messages/3","doc":"Deletes multiple messages from a channel.\n\n`messages` is a list of `Nostrum.Struct.Message.id` that you wish to delete.\nWhen given more than 100 messages, this function will chunk the given message\nlist into blocks of 100 and send them off to the API. It will stop deleting\non the first error that occurs. Keep in mind that deleting thousands of\nmessages will take a pretty long time and it may be proper to just delete\nthe channel you want to bulk delete in and recreate it.\n\nThis method can only delete messages sent within the last two weeks.\n`Filter` is an optional parameter that specifies whether messages sent over\ntwo weeks ago should be filtered out; defaults to `true`.","ref":"Nostrum.Api.html#bulk_delete_messages/3"},{"type":"function","title":"Nostrum.Api.bulk_delete_messages!/3","doc":"Same as `bulk_delete_messages/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#bulk_delete_messages!/3"},{"type":"function","title":"Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"Overwrite the existing global application commands.\n\nThis action will:\n- Create any command that was provided and did not already exist\n- Update any command that was provided and already existed if its configuration changed\n- Delete any command that was not provided but existed on Discord's end\n\nUpdates will be available in all guilds after 1 hour.\nCommands that do not already exist will count toward daily application command create limits.","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2"},{"type":"function","title":"Parameters - Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"- `application_id`: Application ID for which to overwrite the commands.\n If not given, this will be fetched from `Me`.\n- `commands`: List of command configurations, see the linked API documentation for reference.","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.bulk_overwrite_global_application_commands/2","doc":"Updated list of global application commands. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-global-application-commands","ref":"Nostrum.Api.html#bulk_overwrite_global_application_commands/2-return-value"},{"type":"function","title":"Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"Overwrite the existing guild application commands on the specified guild.\n\nThis action will:\n- Create any command that was provided and did not already exist\n- Update any command that was provided and already existed if its configuration changed\n- Delete any command that was not provided but existed on Discord's end","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3"},{"type":"function","title":"Parameters - Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"- `application_id`: Application ID for which to overwrite the commands.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild on which to overwrite the commands.\n- `commands`: List of command configurations, see the linked API documentation for reference.","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.bulk_overwrite_guild_application_commands/3","doc":"Updated list of guild application commands. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-guild-application-commands","ref":"Nostrum.Api.html#bulk_overwrite_guild_application_commands/3-return-value"},{"type":"function","title":"Nostrum.Api.create_channel_invite/3","doc":"Creates an invite for a guild channel.\n\nAn optional `reason` can be provided for the audit log.\n\nThis endpoint requires the `CREATE_INSTANT_INVITE` permission.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_channel_invite/3"},{"type":"function","title":"Options - Nostrum.Api.create_channel_invite/3","doc":"* `:max_age` (integer) - duration of invite in seconds before expiry, or 0 for never.\n (default: `86400`)\n * `:max_uses` (integer) - max number of uses or 0 for unlimited.\n (default: `0`)\n * `:temporary` (boolean) - Whether the invite should grant temporary\n membership. (default: `false`)\n * `:unique` (boolean) - used when creating unique one time use invites.\n (default: `false`)","ref":"Nostrum.Api.html#create_channel_invite/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_channel_invite/3","doc":"```elixir\nNostrum.Api.create_channel_invite(41771983423143933)\n{:ok, Nostrum.Struct.Invite{}}\n\nNostrum.Api.create_channel_invite(41771983423143933, max_uses: 20)\n{:ok, %Nostrum.Struct.Invite{}}\n```","ref":"Nostrum.Api.html#create_channel_invite/3-examples"},{"type":"function","title":"Nostrum.Api.create_channel_invite!/3","doc":"Same as `create_channel_invite/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_channel_invite!/3"},{"type":"function","title":"Nostrum.Api.create_dm/1","doc":"Create a new DM channel with a user.\n\nIf successful, returns `{:ok, dm_channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_dm/1"},{"type":"function","title":"Examples - Nostrum.Api.create_dm/1","doc":"```elixir\nNostrum.Api.create_dm(150061853001777154)\n{:ok, %Nostrum.Struct.Channel{type: 1}}\n```","ref":"Nostrum.Api.html#create_dm/1-examples"},{"type":"function","title":"Nostrum.Api.create_dm!/1","doc":"Same as `create_dm/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_dm!/1"},{"type":"function","title":"Nostrum.Api.create_followup_message/3","doc":"Create a followup message for an interaction.\n\nDelegates to ``execute_webhook/3``, see the function for more details.","ref":"Nostrum.Api.html#create_followup_message/3"},{"type":"function","title":"Nostrum.Api.create_followup_message!/3","doc":"Same as `create_followup_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_followup_message!/3"},{"type":"function","title":"Nostrum.Api.create_global_application_command/2","doc":"Create a new global application command.\n\nThe new command will be available on all guilds in around an hour.\nIf you want to test commands, use `create_guild_application_command/2` instead,\nas commands will become available instantly there.\nIf an existing command with the same name exists, it will be overwritten.","ref":"Nostrum.Api.html#create_global_application_command/2"},{"type":"function","title":"Parameters - Nostrum.Api.create_global_application_command/2","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#create_global_application_command/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.create_global_application_command/2","doc":"The created command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#create-global-application-command","ref":"Nostrum.Api.html#create_global_application_command/2-return-value"},{"type":"function","title":"Example - Nostrum.Api.create_global_application_command/2","doc":"```elixir\nNostrum.Api.create_global_application_command(\n %{name: \"edit\", description: \"ed, man! man, ed\", options: []}\n)\n```","ref":"Nostrum.Api.html#create_global_application_command/2-example"},{"type":"function","title":"Nostrum.Api.create_group_dm/2","doc":"Creates a new group DM channel.\n\nIf successful, returns `{:ok, group_dm_channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`access_tokens` are user oauth2 tokens. `nicks` is a map that maps a user id\nto a nickname.","ref":"Nostrum.Api.html#create_group_dm/2"},{"type":"function","title":"Examples - Nostrum.Api.create_group_dm/2","doc":"```elixir\nNostrum.Api.create_group_dm([\"6qrZcUqja7812RVdnEKjpzOL4CvHBFG\"], %{41771983423143937 => \"My Nickname\"})\n{:ok, %Nostrum.Struct.Channel{type: 3}}\n```","ref":"Nostrum.Api.html#create_group_dm/2-examples"},{"type":"function","title":"Nostrum.Api.create_group_dm!/2","doc":"Same as `create_group_dm/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_group_dm!/2"},{"type":"function","title":"Nostrum.Api.create_guild_application_command/3","doc":"Create a guild application command on the specified guild.\n\nThe new command will be available immediately.","ref":"Nostrum.Api.html#create_guild_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_guild_application_command/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild on which to create the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#create_guild_application_command/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.create_guild_application_command/3","doc":"The created command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#create-guild-application-command","ref":"Nostrum.Api.html#create_guild_application_command/3-return-value"},{"type":"function","title":"Nostrum.Api.create_guild_auto_moderation_rule/2","doc":"Create a new auto-moderation rule for a guild.","ref":"Nostrum.Api.html#create_guild_auto_moderation_rule/2"},{"type":"function","title":"Options - Nostrum.Api.create_guild_auto_moderation_rule/2","doc":"* `:name` (`t:String.t/0`) - The name of the rule.\n * `:event_type` (`t:AutoModerationRule.event_type/0`) - The type of event that triggers the rule.\n * `:trigger_type` (`t:AutoModerationRule.trigger_type/0`) - The type of content that triggers the rule.\n * `:trigger_metadata` (`t:AutoModerationRule.trigger_metadata/0`) - The metadata associated with the rule trigger.\n - optional, based on the `:trigger_type`.\n * `:actions` (`t:AutoModerationRule.actions/0`) - The actions to take when the rule is triggered.\n * `:enabled` (`t:AutoModerationRule.enabled/0`) - Whether the rule is enabled or not.\n - optional, defaults to `false`.\n * `:exempt_roles` - (`t:AutoModerationRule.exempt_roles/0`) - A list of role id's that are exempt from the rule.\n - optional, defaults to `[]`, maximum of 20.\n * `:exempt_channels` - (`t:AutoModerationRule.exempt_channels/0`) - A list of channel id's that are exempt from the rule.\n - optional, defaults to `[]`, maximum of 50.","ref":"Nostrum.Api.html#create_guild_auto_moderation_rule/2-options"},{"type":"function","title":"Nostrum.Api.create_guild_ban/4","doc":"Bans a user from a guild.\n\nUser to delete is specified by `guild_id` and `user_id`.\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#create_guild_ban/4"},{"type":"function","title":"Nostrum.Api.create_guild_channel/2","doc":"Creates a channel for a guild.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission. It fires a\n`t:Nostrum.Consumer.channel_create/0` event.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_channel/2"},{"type":"function","title":"Options - Nostrum.Api.create_guild_channel/2","doc":"* `:name` (string) - channel name (2-100 characters)\n * `:type` (integer) - the type of channel (See `Nostrum.Struct.Channel`)\n * `:topic` (string) - channel topic (0-1024 characters)\n * `:bitrate` (integer) - the bitrate (in bits) of the voice channel (voice only)\n * `:user_limit` (integer) - the user limit of the voice channel (voice only)\n * `:permission_overwrites` (list of `t:Nostrum.Struct.Overwrite.t/0` or equivalent map) -\n the channel's permission overwrites\n * `:parent_id` (`t:Nostrum.Struct.Channel.id/0`) - id of the parent category for a channel\n * `:nsfw` (boolean) - if the channel is nsfw\n\n`:name` is always required.","ref":"Nostrum.Api.html#create_guild_channel/2-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_channel/2","doc":"```elixir\nNostrum.Api.create_guild_channel(81384788765712384, name: \"elixir-nostrum\", topic: \"craig's domain\")\n{:ok, %Nostrum.Struct.Channel{guild_id: 81384788765712384}}\n```","ref":"Nostrum.Api.html#create_guild_channel/2-examples"},{"type":"function","title":"Nostrum.Api.create_guild_channel!/2","doc":"Same as `create_guild_channel/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_channel!/2"},{"type":"function","title":"Nostrum.Api.create_guild_emoji/3","doc":"Creates a new emoji for the given guild.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_emoji/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_emoji/3","doc":"* `:name` (string) - name of the emoji\n * `:image` (base64 data URI) - the 128x128 emoji image. Maximum size of 256kb\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - roles for which this emoji will be whitelisted\n (default: [])\n\n`:name` and `:image` are always required.","ref":"Nostrum.Api.html#create_guild_emoji/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_emoji/3","doc":"```elixir\nimage = \"data:image/png;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=\"\n\nNostrum.Api.create_guild_emoji(43189401384091, name: \"nostrum\", image: image, roles: [])\n```","ref":"Nostrum.Api.html#create_guild_emoji/3-examples"},{"type":"function","title":"Nostrum.Api.create_guild_emoji!/3","doc":"Same as `create_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_emoji!/3"},{"type":"function","title":"Nostrum.Api.create_guild_integrations/2","doc":"Creates a new guild integeration.\n\nGuild to create integration with is specified by `guild_id`.\n\n`options` is a map with the following requires keys:\n * `type` - Integration type.\n * `id` - Integeration id.","ref":"Nostrum.Api.html#create_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.create_guild_role/3","doc":"Creates a guild role.\n\nAn optional reason for the audit log can be provided via `reason`.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_create/0` event.\n\nIf successful, returns `{:ok, role}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_guild_role/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_role/3","doc":"* `:name` (string) - name of the role (default: \"new role\")\n * `:permissions` (integer) - bitwise of the enabled/disabled permissions (default: @everyone perms)\n * `:color` (integer) - RGB color value (default: 0)\n * `:hoist` (boolean) - whether the role should be displayed separately in the sidebar (default: false)\n * `:mentionable` (boolean) - whether the role should be mentionable (default: false)\n * `:icon` (string) - URL role icon (default: `nil`)\n * `:unicode_emoji` (string) - standard unicode character emoji role icon (default: `nil`)","ref":"Nostrum.Api.html#create_guild_role/3-options"},{"type":"function","title":"Examples - Nostrum.Api.create_guild_role/3","doc":"```elixir\nNostrum.Api.create_guild_role(41771983423143937, name: \"nostrum-club\", hoist: true)\n```","ref":"Nostrum.Api.html#create_guild_role/3-examples"},{"type":"function","title":"Nostrum.Api.create_guild_role!/3","doc":"Same as `create_guild_role/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_guild_role!/3"},{"type":"function","title":"Nostrum.Api.create_guild_scheduled_event/3","doc":"Creates a new scheduled event for the guild.","ref":"Nostrum.Api.html#create_guild_scheduled_event/3"},{"type":"function","title":"Options - Nostrum.Api.create_guild_scheduled_event/3","doc":"* `:channel_id` - (`t:Nostrum.Snowflake.t/0`) optional channel id for the event\n * `:entity_metadata` - (`t:Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.t/0`) metadata for the event\n * `:name` - (string) required name for the event\n * `:privacy_level` - (integer) at the time of writing, this must always be 2 for `GUILD_ONLY`\n * `:scheduled_start_time` - required time for the event to start as a `DateTime` or (ISO8601 timestamp)[`DateTime.to_iso8601/3`]\n * `:scheduled_end_time` - optional time for the event to end as a `DateTime` or (ISO8601 timestamp)[`DateTime.to_iso8601/3`]\n * `:description` - (string) optional description for the event\n * `:entity_type` - (integer) an integer representing the type of entity the event is for\n * `1` - `STAGE_INSTANCE`\n * `2` - `VOICE`\n * `3` - `EXTERNAL`\n\nSee the (official documentation)[https://discord.com/developers/docs/resources/guild-scheduled-event] for more information.\n\n\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#create_guild_scheduled_event/3-options"},{"type":"function","title":"Nostrum.Api.create_guild_sticker/6","doc":"Create a sticker in a guild.\n\nEvery guild has five free sticker slots by default, and each Boost level will\ngrant access to more slots.\n\nUploaded stickers are constrained to 5 seconds in length for animated stickers, and 320 x 320 pixels.\n\nStickers in the [Lottie file format](https://airbnb.design/lottie/) can only\nbe uploaded on guilds that have either the `VERIFIED` and/or the `PARTNERED`\nguild feature.","ref":"Nostrum.Api.html#create_guild_sticker/6"},{"type":"function","title":"Parameters - Nostrum.Api.create_guild_sticker/6","doc":"- `name`: Name of the sticker (2-30 characters)\n- `description`: Description of the sticker (2-100 characters)\n- `tags`: Autocomplete/suggestion tags for the sticker (max 200 characters)\n- `file`: A path to a file to upload or a map of `name` (file name) and `body` (file data).\n- `reason` (optional): audit log reason to attach to this event","ref":"Nostrum.Api.html#create_guild_sticker/6-parameters"},{"type":"function","title":"Returns - Nostrum.Api.create_guild_sticker/6","doc":"Returns a `t:Nostrum.Struct.Sticker.t/0` on success.","ref":"Nostrum.Api.html#create_guild_sticker/6-returns"},{"type":"function","title":"Nostrum.Api.create_interaction_response/2","doc":"Same as `create_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#create_interaction_response/2"},{"type":"function","title":"Nostrum.Api.create_interaction_response/3","doc":"Create a response to an interaction received from the gateway.","ref":"Nostrum.Api.html#create_interaction_response/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_interaction_response/3","doc":"- `id`: The interaction ID to which the response should be created.\n- `token`: The interaction token.\n- `response`: An [`InteractionResponse`](https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object)\n object. See the linked documentation.","ref":"Nostrum.Api.html#create_interaction_response/3-parameters"},{"type":"function","title":"Attachments - Nostrum.Api.create_interaction_response/3","doc":"To include attachments in the response, you can include a `:files` field in the response.\nThis field expects a list of attachments which can be in either of the following formats:\n- A path to the file to upload.\n- A map with the following fields:\n - `:body` The file contents.\n - `:name` The filename of the file.","ref":"Nostrum.Api.html#create_interaction_response/3-attachments"},{"type":"function","title":"Example - Nostrum.Api.create_interaction_response/3","doc":"```elixir\nresponse = %{\n type: 4,\n data: %{\n content: \"I copy and pasted this code.\"\n }\n}\nNostrum.Api.create_interaction_response(interaction, response)\n```\n\nAs an alternative to passing the interaction ID and token, the\noriginal `t:Nostrum.Struct.Interaction.t/0` can also be passed\ndirectly. See `create_interaction_response/2`.","ref":"Nostrum.Api.html#create_interaction_response/3-example"},{"type":"function","title":"Nostrum.Api.create_interaction_response!/2","doc":"Same as `create_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.create_interaction_response!/3","doc":"","ref":"Nostrum.Api.html#create_interaction_response!/3"},{"type":"function","title":"Nostrum.Api.create_message/2","doc":"Posts a message to a guild text or DM channel.\n\nThis endpoint requires the `VIEW_CHANNEL` and `SEND_MESSAGES` permissions. It\nmay situationally need the `SEND_MESSAGES_TTS` permission. It fires the\n`t:Nostrum.Consumer.message_create/0` event.\n\nIf `options` is a string, `options` will be used as the message's content.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_message/2"},{"type":"function","title":"Options - Nostrum.Api.create_message/2","doc":"* `:content` (string) - the message contents (up to 2000 characters)\n * `:nonce` (`t:Nostrum.Snowflake.t/0`) - a nonce that can be used for\n optimistic message sending\n * `:tts` (boolean) - true if this is a TTS message\n * `:file` (`t:Path.t/0` | map) - the path of the file being sent, or a map with the following keys\n if sending a binary from memory\n * `:name` (string) - the name of the file\n * `:body` (string) - binary you wish to send\n * `:files` - a list of files where each element is the same format as the `:file` option. If both\n `:file` and `:files` are specified, `:file` will be prepended to the `:files` list.\n * `:embeds` (`t:Nostrum.Struct.Embed.t/0`) - a list of embedded rich content\n * `:allowed_mentions` (`t:allowed_mentions/0`) - see the allowed mentions type documentation\n * `:message_reference` (`map`) - See \"Message references\" below\n * `:poll` (`t:Nostrum.Struct.Message.Poll.t/0`) - A poll object to send with the message\n\n At least one of the following is required: `:content`, `:file`, `:embeds`, `:poll`.","ref":"Nostrum.Api.html#create_message/2-options"},{"type":"function","title":"Message reference - Nostrum.Api.create_message/2","doc":"You can create a reply to another message on guilds using this option, given\nthat you have the ``VIEW_MESSAGE_HISTORY`` permission. To do so, include the\n``message_reference`` field in your call. The complete structure\ndocumentation can be found [on the Discord Developer\nPortal](https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure),\nbut simply passing ``message_id`` will suffice:\n\n```elixir\ndef my_command(msg) do\n # Reply to the author - ``msg`` is a ``Nostrum.Struct.Message``\n Nostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello\",\n message_reference: %{message_id: msg.id}\n )\nend\n```\n\nPassing a list will merge the settings provided","ref":"Nostrum.Api.html#create_message/2-message-reference"},{"type":"function","title":"Examples - Nostrum.Api.create_message/2","doc":"```elixir\nNostrum.Api.create_message(43189401384091, content: \"hello world!\")\n\nNostrum.Api.create_message(43189401384091, \"hello world!\")\n\nimport Nostrum.Struct.Embed\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"embed\")\n |> put_description(\"new desc\")\nNostrum.Api.create_message(43189401384091, embeds: [embed])\n\nNostrum.Api.create_message(43189401384091, file: \"/path/to/file.txt\")\n\nNostrum.Api.create_message(43189401384091, content: \"hello world!\", embeds: [embed], file: \"/path/to/file.txt\")\n\nNostrum.Api.create_message(43189401384091, content: \"Hello @everyone\", allowed_mentions: :none)\n```","ref":"Nostrum.Api.html#create_message/2-examples"},{"type":"function","title":"Nostrum.Api.create_message!/2","doc":"Same as `create_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_message!/2"},{"type":"function","title":"Nostrum.Api.create_reaction/3","doc":"Creates a reaction for a message.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`\npermissions. Additionally, if nobody else has reacted to the message with\nthe `emoji`, this endpoint requires the `ADD_REACTIONS` permission. It\nfires a `t:Nostrum.Consumer.message_reaction_add/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#create_reaction/3"},{"type":"function","title":"Examples - Nostrum.Api.create_reaction/3","doc":"```elixir\n# Using a Nostrum.Struct.Emoji.\nemoji = %Nostrum.Struct.Emoji{id: 43819043108, name: \"foxbot\"}\nNostrum.Api.create_reaction(123123123123, 321321321321, emoji)\n\n# Using a base 16 emoji string.\nNostrum.Api.create_reaction(123123123123, 321321321321, \"\\xF0\\x9F\\x98\\x81\")\n\n```\n\nFor other emoji string examples, see `t:Nostrum.Struct.Emoji.api_name/0`.","ref":"Nostrum.Api.html#create_reaction/3-examples"},{"type":"function","title":"Nostrum.Api.create_reaction!/3","doc":"Same as `create_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#create_reaction!/3"},{"type":"function","title":"Nostrum.Api.create_webhook/3","doc":"Creates a webhook.","ref":"Nostrum.Api.html#create_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.create_webhook/3","doc":"- `channel_id` - Id of the channel to send the message to.\n - `args` - Map with the following **required** keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#create_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_all_reactions/2","doc":"Deletes all reactions from a message.\n\nThis endpoint requires the `VIEW_CHANNEL`, `READ_MESSAGE_HISTORY`, and\n`MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove_all/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, return `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_all_reactions/2"},{"type":"function","title":"Nostrum.Api.delete_all_reactions!/2","doc":"Same as `delete_all_reactions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_all_reactions!/2"},{"type":"function","title":"Nostrum.Api.delete_channel/2","doc":"Deletes a channel.\n\nAn optional `reason` can be provided for the guild audit log.\n\nIf deleting a `t:Nostrum.Struct.Channel.guild_channel/0`, this endpoint requires\nthe `MANAGE_CHANNELS` permission. It fires a\n`t:Nostrum.Consumer.channel_delete/0`. If a `t:Nostrum.Struct.Channel.guild_category_channel/0`\nis deleted, then a `t:Nostrum.Consumer.channel_update/0` event will fire\nfor each channel under the category.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_channel/2"},{"type":"function","title":"Examples - Nostrum.Api.delete_channel/2","doc":"```elixir\nNostrum.Api.delete_channel(421533712753360896)\n{:ok, %Nostrum.Struct.Channel{id: 421533712753360896}}\n```","ref":"Nostrum.Api.html#delete_channel/2-examples"},{"type":"function","title":"Nostrum.Api.delete_channel!/2","doc":"Same as `delete_channel/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_channel!/2"},{"type":"function","title":"Nostrum.Api.delete_channel_permissions/3","doc":"Delete a channel permission for a user or role.\n\nRole or user overwrite to delete is specified by `channel_id` and `overwrite_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#delete_channel_permissions/3"},{"type":"function","title":"Nostrum.Api.delete_global_application_command/2","doc":"Delete an existing global application command.","ref":"Nostrum.Api.html#delete_global_application_command/2"},{"type":"function","title":"Parameters - Nostrum.Api.delete_global_application_command/2","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `command_id`: The current snowflake of the command.","ref":"Nostrum.Api.html#delete_global_application_command/2-parameters"},{"type":"function","title":"Nostrum.Api.delete_guild/1","doc":"Deletes a guild.\n\nThis endpoint requires that the current user is the owner of the guild.\nIt fires the `t:Nostrum.Consumer.guild_delete/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild/1"},{"type":"function","title":"Examples - Nostrum.Api.delete_guild/1","doc":"```elixir\nNostrum.Api.delete_guild(81384788765712384)\n{:ok}\n```","ref":"Nostrum.Api.html#delete_guild/1-examples"},{"type":"function","title":"Nostrum.Api.delete_guild!/1","doc":"Same as `delete_guild/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild!/1"},{"type":"function","title":"Nostrum.Api.delete_guild_application_command/3","doc":"Delete an existing guild application command.","ref":"Nostrum.Api.html#delete_guild_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.delete_guild_application_command/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: The guild on which the command exists.\n- `command_id`: The current snowflake of the command.","ref":"Nostrum.Api.html#delete_guild_application_command/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_guild_auto_moderation_rule/2","doc":"Delete an auto-moderation rule for a guild.","ref":"Nostrum.Api.html#delete_guild_auto_moderation_rule/2"},{"type":"function","title":"Nostrum.Api.delete_guild_emoji/3","doc":"Deletes the given emoji.\n\nAn optional `reason` can be provided for the audit log.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild_emoji/3"},{"type":"function","title":"Nostrum.Api.delete_guild_emoji!/3","doc":"Same as `delete_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild_emoji!/3"},{"type":"function","title":"Nostrum.Api.delete_guild_integrations/2","doc":"Deletes a guild integeration.\n\nIntegration to delete is specified by `guild_id` and `integeration_id`.","ref":"Nostrum.Api.html#delete_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.delete_guild_role/3","doc":"Deletes a role from a guild.\n\nAn optional `reason` can be specified for the audit log.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_delete/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_guild_role/3"},{"type":"function","title":"Examples - Nostrum.Api.delete_guild_role/3","doc":"```elixir\nNostrum.Api.delete_guild_role(41771983423143937, 392817238471936)\n```","ref":"Nostrum.Api.html#delete_guild_role/3-examples"},{"type":"function","title":"Nostrum.Api.delete_guild_role!/3","doc":"Same as `delete_guild_role/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_guild_role!/3"},{"type":"function","title":"Nostrum.Api.delete_guild_scheduled_event/2","doc":"Delete a scheduled event for a guild.","ref":"Nostrum.Api.html#delete_guild_scheduled_event/2"},{"type":"function","title":"Nostrum.Api.delete_guild_sticker/2","doc":"Delete a guild sticker with the specified ID.","ref":"Nostrum.Api.html#delete_guild_sticker/2"},{"type":"function","title":"Nostrum.Api.delete_interaction_followup_message/3","doc":"Delete a followup message for an interaction.","ref":"Nostrum.Api.html#delete_interaction_followup_message/3"},{"type":"function","title":"Parameters - Nostrum.Api.delete_interaction_followup_message/3","doc":"- `application_id`: Application ID for which to create the command.\n If not given, this will be fetched from `Me`.\n- `token`: Interaction token.\n- `message_id`: Followup message ID.","ref":"Nostrum.Api.html#delete_interaction_followup_message/3-parameters"},{"type":"function","title":"Nostrum.Api.delete_interaction_followup_message!/3","doc":"Same as `delete_interaction_followup_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_interaction_followup_message!/3"},{"type":"function","title":"Nostrum.Api.delete_interaction_response/1","doc":"Same as `delete_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#delete_interaction_response/1"},{"type":"function","title":"Nostrum.Api.delete_interaction_response/2","doc":"Deletes the original interaction response.","ref":"Nostrum.Api.html#delete_interaction_response/2"},{"type":"function","title":"Nostrum.Api.delete_interaction_response!/1","doc":"","ref":"Nostrum.Api.html#delete_interaction_response!/1"},{"type":"function","title":"Nostrum.Api.delete_interaction_response!/2","doc":"Same as `delete_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.delete_invite/1","doc":"Deletes an invite by its `invite_code`.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_invite/1"},{"type":"function","title":"Examples - Nostrum.Api.delete_invite/1","doc":"```elixir\nNostrum.Api.delete_invite(\"zsjUsC\")\n```","ref":"Nostrum.Api.html#delete_invite/1-examples"},{"type":"function","title":"Nostrum.Api.delete_invite!/1","doc":"Same as `delete_invite/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_invite!/1"},{"type":"function","title":"Nostrum.Api.delete_message/1","doc":"Same as `delete_message/2`, but takes a `Nostrum.Struct.Message` instead of a\n`channel_id` and `message_id`.","ref":"Nostrum.Api.html#delete_message/1"},{"type":"function","title":"Nostrum.Api.delete_message/2","doc":"Deletes a message.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'MANAGE_MESSAGES' permission. It\nfires the `MESSAGE_DELETE` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#delete_message/2"},{"type":"function","title":"Examples - Nostrum.Api.delete_message/2","doc":"```elixir\nNostrum.Api.delete_message(43189401384091, 43189401384091)\n```","ref":"Nostrum.Api.html#delete_message/2-examples"},{"type":"function","title":"Nostrum.Api.delete_message!/1","doc":"Same as `delete_message/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_message!/1"},{"type":"function","title":"Nostrum.Api.delete_message!/2","doc":"Same as `delete_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_message!/2"},{"type":"function","title":"Nostrum.Api.delete_own_reaction/3","doc":"Deletes a reaction the current user has made for the message.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`\npermissions. It fires a `t:Nostrum.Consumer.message_reaction_remove/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_own_reaction/3"},{"type":"function","title":"Nostrum.Api.delete_own_reaction!/3","doc":"Same as `delete_own_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_own_reaction!/3"},{"type":"function","title":"Nostrum.Api.delete_pinned_channel_message/2","doc":"Unpins a message in a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL', 'READ_MESSAGE_HISTORY', and\n'MANAGE_MESSAGES' permissions. It fires the\n`t:Nostrum.Consumer.message_update/0` and\n`t:Nostrum.Consumer.channel_pins_update/0` events.\n\nReturns `{:ok}` if successful. `error` otherwise.","ref":"Nostrum.Api.html#delete_pinned_channel_message/2"},{"type":"function","title":"Nostrum.Api.delete_pinned_channel_message!/2","doc":"Same as `delete_pinned_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_pinned_channel_message!/2"},{"type":"function","title":"Nostrum.Api.delete_reaction/3","doc":"Deletes all reactions of a given emoji from a message.\n\nThis endpoint requires the `MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove_emoji/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_reaction/3"},{"type":"function","title":"Nostrum.Api.delete_reaction!/3","doc":"Same as `delete_reaction/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_reaction!/3"},{"type":"function","title":"Nostrum.Api.delete_user_reaction/4","doc":"Deletes another user's reaction from a message.\n\nThis endpoint requires the `VIEW_CHANNEL`, `READ_MESSAGE_HISTORY`, and\n`MANAGE_MESSAGES` permissions. It fires a `t:Nostrum.Consumer.message_reaction_remove/0` event.\n\nIf successful, returns `{:ok}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#delete_user_reaction/4"},{"type":"function","title":"Nostrum.Api.delete_user_reaction!/4","doc":"Same as `delete_user_reaction/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#delete_user_reaction!/4"},{"type":"function","title":"Nostrum.Api.delete_webhook/2","doc":"Deletes a webhook.","ref":"Nostrum.Api.html#delete_webhook/2"},{"type":"function","title":"Parameters - Nostrum.Api.delete_webhook/2","doc":"- `webhook_id` - Id of webhook to delete.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#delete_webhook/2-parameters"},{"type":"function","title":"Nostrum.Api.edit_application_command_permissions/4","doc":"Edits command permissions for a specific command for your application in a guild. You can only add up to 10 permission overwrites for a command.","ref":"Nostrum.Api.html#edit_application_command_permissions/4"},{"type":"function","title":"Parameters - Nostrum.Api.edit_application_command_permissions/4","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.\n- `permissions`: List of [application command permissions](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure)","ref":"Nostrum.Api.html#edit_application_command_permissions/4-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_application_command_permissions/4","doc":"This method returns a guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#edit_application_command_permissions/4-return-value"},{"type":"function","title":"Nostrum.Api.edit_channel_permissions/4","doc":"Edit the permission overwrites for a user or role.\n\nRole or user to overwrite is specified by `overwrite_id`.\n\n`permission_info` is a map with the following keys:\n * `type` - Required; `member` if editing a user, `role` if editing a role.\n * `allow` - Bitwise value of allowed permissions.\n * `deny` - Bitwise value of denied permissions.\n * `type` - `member` if editing a user, `role` if editing a role.\n\nAn optional `reason` can be provided for the audit log.\n\n `allow` and `deny` are defaulted to `0`, meaning that even if you don't\n specify them, they will override their respective former values in an\n existing overwrite.","ref":"Nostrum.Api.html#edit_channel_permissions/4"},{"type":"function","title":"Nostrum.Api.edit_channel_permissions!/4","doc":"Same as `edit_channel_permissions/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_channel_permissions!/4"},{"type":"function","title":"Nostrum.Api.edit_global_application_command/3","doc":"Update an existing global application command.\n\nThe updated command will be available on all guilds in around an hour.","ref":"Nostrum.Api.html#edit_global_application_command/3"},{"type":"function","title":"Parameters - Nostrum.Api.edit_global_application_command/3","doc":"- `application_id`: Application ID for which to edit the command.\n If not given, this will be fetched from `Me`.\n- `command_id`: The current snowflake of the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#edit_global_application_command/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_global_application_command/3","doc":"The updated command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#edit-global-application-command","ref":"Nostrum.Api.html#edit_global_application_command/3-return-value"},{"type":"function","title":"Nostrum.Api.edit_guild_application_command/4","doc":"Update an existing guild application command.\n\nThe updated command will be available immediately.","ref":"Nostrum.Api.html#edit_guild_application_command/4"},{"type":"function","title":"Parameters - Nostrum.Api.edit_guild_application_command/4","doc":"- `application_id`: Application ID for which to edit the command.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild for which to update the command.\n- `command_id`: The current snowflake of the command.\n- `command`: Command configuration, see the linked API documentation for reference.","ref":"Nostrum.Api.html#edit_guild_application_command/4-parameters"},{"type":"function","title":"Return value - Nostrum.Api.edit_guild_application_command/4","doc":"The updated command. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#edit-guild-application-command","ref":"Nostrum.Api.html#edit_guild_application_command/4-return-value"},{"type":"function","title":"Nostrum.Api.edit_interaction_response/2","doc":"Same as `edit_interaction_response/3`, but directly takes the\n`t:Nostrum.Struct.Interaction.t/0` received from the gateway.","ref":"Nostrum.Api.html#edit_interaction_response/2"},{"type":"function","title":"Nostrum.Api.edit_interaction_response/3","doc":"Edits the original interaction response.\n\nFunctions the same as `edit_webhook_message/3`","ref":"Nostrum.Api.html#edit_interaction_response/3"},{"type":"function","title":"Nostrum.Api.edit_interaction_response!/2","doc":"Same as `edit_interaction_response/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_interaction_response!/2"},{"type":"function","title":"Nostrum.Api.edit_interaction_response!/3","doc":"Same as `edit_interaction_response/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_interaction_response!/3"},{"type":"function","title":"Nostrum.Api.edit_message/2","doc":"Same as `edit_message/3`, but takes a `Nostrum.Struct.Message` instead of a\n`channel_id` and `message_id`.","ref":"Nostrum.Api.html#edit_message/2"},{"type":"function","title":"Nostrum.Api.edit_message/3","doc":"Edits a previously sent message in a channel.\n\nThis endpoint requires the `VIEW_CHANNEL` permission. It fires the\n`t:Nostrum.Consumer.message_update/0` event.\n\nIf `options` is a string, `options` will be used as the message's content.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#edit_message/3"},{"type":"function","title":"Options - Nostrum.Api.edit_message/3","doc":"* `:content` (string) - the message contents (up to 2000 characters)\n* `:embeds` (`t:Nostrum.Struct.Embed.t/0`) - a list of embedded rich content\n* `:files` - a list of files where each element is the same format as the\n`:file` option. If both `:file` and `:files` are specified, `:file` will be\nprepended to the `:files` list. See `create_message/2` for more information.\n\nNote that if you edit a message with attachments, all attachments that should\nbe present after edit **must** be included in your request body. This\nincludes attachments that were sent in the original request.","ref":"Nostrum.Api.html#edit_message/3-options"},{"type":"function","title":"Examples - Nostrum.Api.edit_message/3","doc":"```elixir\nNostrum.Api.edit_message(43189401384091, 1894013840914098, content: \"hello world!\")\n\nNostrum.Api.edit_message(43189401384091, 1894013840914098, \"hello world!\")\n\nimport Nostrum.Struct.Embed\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"embed\")\n |> put_description(\"new desc\")\nNostrum.Api.edit_message(43189401384091, 1894013840914098, embeds: [embed])\n\nNostrum.Api.edit_message(43189401384091, 1894013840914098, content: \"hello world!\", embeds: [embed])\n```","ref":"Nostrum.Api.html#edit_message/3-examples"},{"type":"function","title":"Nostrum.Api.edit_message!/2","doc":"Same as `edit_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_message!/2"},{"type":"function","title":"Nostrum.Api.edit_message!/3","doc":"Same as `edit_message/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#edit_message!/3"},{"type":"function","title":"Nostrum.Api.edit_webhook_message/4","doc":"Edits a message previously created by the same webhook,\nargs are the same as `execute_webhook/3`,\nhowever all fields are optional.","ref":"Nostrum.Api.html#edit_webhook_message/4"},{"type":"function","title":"Nostrum.Api.execute_git_webhook/3","doc":"Executes a git webhook.","ref":"Nostrum.Api.html#execute_git_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.execute_git_webhook/3","doc":"- `webhook_id` - Id of the webhook to execute.\n - `webhook_token` - Token of the webhook to execute.","ref":"Nostrum.Api.html#execute_git_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.execute_slack_webhook/3","doc":"Executes a slack webhook.","ref":"Nostrum.Api.html#execute_slack_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.execute_slack_webhook/3","doc":"- `webhook_id` - Id of the webhook to execute.\n - `webhook_token` - Token of the webhook to execute.","ref":"Nostrum.Api.html#execute_slack_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.execute_webhook/4","doc":"Executes a webhook.","ref":"Nostrum.Api.html#execute_webhook/4"},{"type":"function","title":"Parameters - Nostrum.Api.execute_webhook/4","doc":"- `webhook_id` - Id of the webhook to execute.\n- `webhook_token` - Token of the webhook to execute.\n- `args` - Map with the following allowed keys:\n - `content` - Message content.\n - `files` - List of Files to send.\n - `embeds` - List of embeds to send.\n - `username` - Overrides the default name of the webhook.\n - `avatar_url` - Overrides the default avatar of the webhook.\n - `tts` - Whether the message should be read over text to speech.\n - `flags` - Bitwise flags.\n - `thread_id` - Send a message to the specified thread within the webhook's channel.\n - `allowed_mentions` - Mentions to allow in the webhook message\n- `wait` - Whether to return an error or not. Defaults to `false`.\n\n**Note**: If `wait` is `true`, this method will return a `Message.t()` on success.\n\nAt least one of `content`, `files` or `embeds` should be supplied in the `args` parameter.","ref":"Nostrum.Api.html#execute_webhook/4-parameters"},{"type":"function","title":"Nostrum.Api.expire_poll/2","doc":"Expire (close voting on) a poll before the scheduled end time.\n\nReturns the original message containing the poll.","ref":"Nostrum.Api.html#expire_poll/2"},{"type":"function","title":"Nostrum.Api.expire_poll!/2","doc":"Same as `expire_poll/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#expire_poll!/2"},{"type":"function","title":"Nostrum.Api.get_application_command_permissions/3","doc":"Fetches command permissions for a specific command for your application in a guild.","ref":"Nostrum.Api.html#get_application_command_permissions/3"},{"type":"function","title":"Parameters - Nostrum.Api.get_application_command_permissions/3","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.\n- `command_id`: Command ID to fetch permissions for.","ref":"Nostrum.Api.html#get_application_command_permissions/3-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_application_command_permissions/3","doc":"This method returns a single guild application command permission object, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#get_application_command_permissions/3-return-value"},{"type":"function","title":"Nostrum.Api.get_application_information/0","doc":"Gets the bot's OAuth2 application info.","ref":"Nostrum.Api.html#get_application_information/0"},{"type":"function","title":"Example - Nostrum.Api.get_application_information/0","doc":"```elixir\nNostrum.Api.get_application_information\n{:ok,\n%{\n bot_public: false,\n bot_require_code_grant: false,\n description: \"Test\",\n icon: nil,\n id: \"172150183260323840\",\n name: \"Baba O-Riley\",\n owner: %{\n avatar: nil,\n discriminator: \"0042\",\n id: \"172150183260323840\",\n username: \"i own a bot\"\n },\n}}\n```","ref":"Nostrum.Api.html#get_application_information/0-example"},{"type":"function","title":"Nostrum.Api.get_channel/1","doc":"Gets a channel.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel/1"},{"type":"function","title":"Examples - Nostrum.Api.get_channel/1","doc":"```elixir\nNostrum.Api.get_channel(381889573426429952)\n{:ok, %Nostrum.Struct.Channel{id: 381889573426429952}}\n```","ref":"Nostrum.Api.html#get_channel/1-examples"},{"type":"function","title":"Nostrum.Api.get_channel!/1","doc":"Same as `get_channel/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel!/1"},{"type":"function","title":"Nostrum.Api.get_channel_invites/1","doc":"Gets a list of invites for a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'MANAGE_CHANNELS' permissions.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_invites/1"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_invites/1","doc":"```elixir\nNostrum.Api.get_channel_invites(43189401384091)\n{:ok, [%Nostrum.Struct.Invite{} | _]}\n```","ref":"Nostrum.Api.html#get_channel_invites/1-examples"},{"type":"function","title":"Nostrum.Api.get_channel_invites!/1","doc":"Same as `get_channel_invites/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_invites!/1"},{"type":"function","title":"Nostrum.Api.get_channel_message/2","doc":"Retrieves a message from a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'READ_MESSAGE_HISTORY' permissions.\n\nIf successful, returns `{:ok, message}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_message/2"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_message/2","doc":"```elixir\nNostrum.Api.get_channel_message(43189401384091, 198238475613443)\n```","ref":"Nostrum.Api.html#get_channel_message/2-examples"},{"type":"function","title":"Nostrum.Api.get_channel_message!/2","doc":"Same as `get_channel_message/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_message!/2"},{"type":"function","title":"Nostrum.Api.get_channel_messages/3","doc":"Retrieves a channel's messages around a `locator` up to a `limit`.\n\nThis endpoint requires the 'VIEW_CHANNEL' permission. If the current user\nis missing the 'READ_MESSAGE_HISTORY' permission, then this function will\nreturn no messages.\n\nIf successful, returns `{:ok, messages}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_channel_messages/3"},{"type":"function","title":"Examples - Nostrum.Api.get_channel_messages/3","doc":"```elixir\nNostrum.Api.get_channel_messages(43189401384091, 5, {:before, 130230401384})\n```","ref":"Nostrum.Api.html#get_channel_messages/3-examples"},{"type":"function","title":"Nostrum.Api.get_channel_messages!/3","doc":"Same as `get_channel_messages/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_channel_messages!/3"},{"type":"function","title":"Nostrum.Api.get_channel_webhooks/1","doc":"Gets a list of webhooks for a channel.","ref":"Nostrum.Api.html#get_channel_webhooks/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_channel_webhooks/1","doc":"- `channel_id` - Channel to get webhooks for.","ref":"Nostrum.Api.html#get_channel_webhooks/1-parameters"},{"type":"function","title":"Nostrum.Api.get_current_user/0","doc":"Gets info on the current user.\n\nIf nostrum's caching is enabled, it is recommended to use `Me.get/0`\ninstead of this function. This is because sending out an API request is much slower\nthan pulling from our cache.\n\nIf the request is successful, this function returns `{:ok, user}`, where\n`user` is nostrum's `Nostrum.Struct.User`. Otherwise, returns `{:error, reason}`.","ref":"Nostrum.Api.html#get_current_user/0"},{"type":"function","title":"Nostrum.Api.get_current_user!/0","doc":"Same as `get_current_user/0`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_current_user!/0"},{"type":"function","title":"Nostrum.Api.get_current_user_guilds/1","doc":"Gets a list of guilds the user is currently in.\n\nThis endpoint requires the `guilds` OAuth2 scope.\n\nIf successful, returns `{:ok, guilds}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_current_user_guilds/1"},{"type":"function","title":"Options - Nostrum.Api.get_current_user_guilds/1","doc":"* `:before` (`t:Nostrum.Snowflake.t/0`) - get guilds before this\n guild ID\n * `:after` (`t:Nostrum.Snowflake.t/0`) - get guilds after this guild\n ID\n * `:limit` (integer) - max number of guilds to return (1-100)","ref":"Nostrum.Api.html#get_current_user_guilds/1-options"},{"type":"function","title":"Examples - Nostrum.Api.get_current_user_guilds/1","doc":"```elixir\niex> Nostrum.Api.get_current_user_guilds(limit: 1)\n{:ok, [%Nostrum.Struct.Guild{}]}\n```","ref":"Nostrum.Api.html#get_current_user_guilds/1-examples"},{"type":"function","title":"Nostrum.Api.get_current_user_guilds!/1","doc":"Same as `get_current_user_guilds/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_current_user_guilds!/1"},{"type":"function","title":"Nostrum.Api.get_global_application_commands/1","doc":"Fetch all global commands.","ref":"Nostrum.Api.html#get_global_application_commands/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_global_application_commands/1","doc":"- `application_id`: Application ID for which to search commands.\n If not given, this will be fetched from `Me`.","ref":"Nostrum.Api.html#get_global_application_commands/1-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_global_application_commands/1","doc":"A list of ``ApplicationCommand``s on success. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure","ref":"Nostrum.Api.html#get_global_application_commands/1-return-value"},{"type":"function","title":"Example - Nostrum.Api.get_global_application_commands/1","doc":"```elixir\niex> Nostrum.Api.get_global_application_commands\n{:ok,\n [\n %{\n application_id: \"455589479713865749\",\n description: \"ed, man! man, ed\",\n id: \"789841753196331029\",\n name: \"edit\"\n }\n ]}\n```","ref":"Nostrum.Api.html#get_global_application_commands/1-example"},{"type":"function","title":"Nostrum.Api.get_guild/1","doc":"Gets a guild.\n\nIf successful, returns `{:ok, guild}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild/1","doc":"```elixir\nNostrum.Api.get_guild(81384788765712384)\n{:ok, %Nostrum.Struct.Guild{id: 81384788765712384}}\n```","ref":"Nostrum.Api.html#get_guild/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild!/1","doc":"Same as `get_guild/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild!/1"},{"type":"function","title":"Nostrum.Api.get_guild_application_command_permissions/2","doc":"Fetches command permissions for all commands for your application in a guild.","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_application_command_permissions/2","doc":"- `application_id`: Application ID commands are registered under.\n If not given, this will be fetched from `Me`.\n- `guild_id`: Guild ID to fetch command permissions from.","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_guild_application_command_permissions/2","doc":"This method returns a list of guild application command permission objects, see all available values on the [Discord API docs](https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-guild-application-command-permissions-structure).","ref":"Nostrum.Api.html#get_guild_application_command_permissions/2-return-value"},{"type":"function","title":"Nostrum.Api.get_guild_application_commands/2","doc":"Fetch all guild application commands for the given guild.","ref":"Nostrum.Api.html#get_guild_application_commands/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_application_commands/2","doc":"- `application_id`: Application ID for which to fetch commands.\n If not given, this will be fetched from `Me`.\n- `guild_id`: The guild ID for which guild application commands\n should be requested.","ref":"Nostrum.Api.html#get_guild_application_commands/2-parameters"},{"type":"function","title":"Return value - Nostrum.Api.get_guild_application_commands/2","doc":"A list of ``ApplicationCommand``s on success. See the official reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure","ref":"Nostrum.Api.html#get_guild_application_commands/2-return-value"},{"type":"function","title":"Nostrum.Api.get_guild_audit_log/2","doc":"Get the `t:Nostrum.Struct.Guild.AuditLog.t/0` for the given `guild_id`.","ref":"Nostrum.Api.html#get_guild_audit_log/2"},{"type":"function","title":"Options - Nostrum.Api.get_guild_audit_log/2","doc":"* `:user_id` (`t:Nostrum.Struct.User.id/0`) - filter the log for a user ID\n * `:action_type` (`t:integer/0`) - filter the log by audit log type, see [Audit Log Events](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events)\n * `:before` (`t:Nostrum.Struct.Snowflake.t/0`) - filter the log before a certain entry ID\n * `:limit` (`t:pos_integer/0`) - how many entries are returned (default 50, minimum 1, maximum 100)","ref":"Nostrum.Api.html#get_guild_audit_log/2-options"},{"type":"function","title":"Nostrum.Api.get_guild_auto_moderation_rule/2","doc":"Get a single auto-moderation rule for a guild.","ref":"Nostrum.Api.html#get_guild_auto_moderation_rule/2"},{"type":"function","title":"Nostrum.Api.get_guild_auto_moderation_rules/1","doc":"Get a list of all auto-moderation rules for a guild.","ref":"Nostrum.Api.html#get_guild_auto_moderation_rules/1"},{"type":"function","title":"Nostrum.Api.get_guild_ban/2","doc":"Gets a ban object for the given user from a guild.","ref":"Nostrum.Api.html#get_guild_ban/2"},{"type":"function","title":"Nostrum.Api.get_guild_bans/1","doc":"Gets a list of users banned from a guild.\n\nGuild to get bans for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_guild_bans/1"},{"type":"function","title":"Nostrum.Api.get_guild_channels/1","doc":"Gets a list of guild channels.\n\nIf successful, returns `{:ok, channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_channels/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_channels/1","doc":"```elixir\nNostrum.Api.get_guild_channels(81384788765712384)\n{:ok, [%Nostrum.Struct.Channel{guild_id: 81384788765712384} | _]}\n```","ref":"Nostrum.Api.html#get_guild_channels/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_channels!/1","doc":"Same as `get_guild_channels/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_channels!/1"},{"type":"function","title":"Nostrum.Api.get_guild_emoji/2","doc":"Gets an emoji for the given guild and emoji ids.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_emoji/2"},{"type":"function","title":"Nostrum.Api.get_guild_emoji!/2","doc":"Same as `get_guild_emoji/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_emoji!/2"},{"type":"function","title":"Nostrum.Api.get_guild_integrations/1","doc":"Gets a list of guild integerations.\n\nGuild to get integrations for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_guild_integrations/1"},{"type":"function","title":"Nostrum.Api.get_guild_invites/1","doc":"Gets a list of invites for a guild.\n\nThis endpoint requires the `MANAGE_GUILD` permission.\n\nIf successful, returns `{:ok, invites}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_invites/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_invites/1","doc":"```elixir\nNostrum.Api.get_guild_invites(81384788765712384)\n{:ok, [%Nostrum.Struct.Invite{} | _]}\n```","ref":"Nostrum.Api.html#get_guild_invites/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_invites!/1","doc":"Same as `get_guild_invites/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_invites!/1"},{"type":"function","title":"Nostrum.Api.get_guild_member/2","doc":"Gets a guild member.\n\nIf successful, returns `{:ok, member}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_member/2"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_member/2","doc":"```elixir\nNostrum.Api.get_guild_member(4019283754613, 184937267485)\n```","ref":"Nostrum.Api.html#get_guild_member/2-examples"},{"type":"function","title":"Nostrum.Api.get_guild_member!/2","doc":"Same as `get_guild_member/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_member!/2"},{"type":"function","title":"Nostrum.Api.get_guild_prune_count/2","doc":"Gets the number of members that would be removed in a prune given `days`.\n\nThis endpoint requires the `KICK_MEMBERS` permission.\n\nIf successful, returns `{:ok, %{pruned: pruned}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_prune_count/2"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_prune_count/2","doc":"```elixir\nNostrum.Api.get_guild_prune_count(81384788765712384, 1)\n{:ok, %{pruned: 0}}\n```","ref":"Nostrum.Api.html#get_guild_prune_count/2-examples"},{"type":"function","title":"Nostrum.Api.get_guild_prune_count!/2","doc":"Same as `get_guild_prune_count/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_prune_count!/2"},{"type":"function","title":"Nostrum.Api.get_guild_roles/1","doc":"Gets a guild's roles.\n\nIf successful, returns `{:ok, roles}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_guild_roles/1"},{"type":"function","title":"Examples - Nostrum.Api.get_guild_roles/1","doc":"```elixir\nNostrum.Api.get_guild_roles(147362948571673)\n```","ref":"Nostrum.Api.html#get_guild_roles/1-examples"},{"type":"function","title":"Nostrum.Api.get_guild_roles!/1","doc":"Same as `get_guild_roles/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_guild_roles!/1"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_event/2","doc":"Get a scheduled event for a guild.","ref":"Nostrum.Api.html#get_guild_scheduled_event/2"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_event_users/3","doc":"Get a list of users who have subscribed to an event.","ref":"Nostrum.Api.html#get_guild_scheduled_event_users/3"},{"type":"function","title":"Options - Nostrum.Api.get_guild_scheduled_event_users/3","doc":"All are optional, with their default values listed.\n* `:limit` (integer) maximum number of users to return, defaults to `100`\n* `:with_member` (boolean) whether to include the member object for each user, defaults to `false`\n* `:before` (`t:Nostrum.Snowflake.t/0`) return only users before this user id, defaults to `nil`\n* `:after` (`t:Nostrum.Snowflake.t/0`) return only users after this user id, defaults to `nil`","ref":"Nostrum.Api.html#get_guild_scheduled_event_users/3-options"},{"type":"function","title":"Nostrum.Api.get_guild_scheduled_events/1","doc":"Get a list of scheduled events for a guild.","ref":"Nostrum.Api.html#get_guild_scheduled_events/1"},{"type":"function","title":"Nostrum.Api.get_guild_sticker/2","doc":"Return the specified sticker from the specified guild.\n\nReturns a `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#get_guild_sticker/2"},{"type":"function","title":"Nostrum.Api.get_guild_webhooks/1","doc":"Gets a list of webhooks for a guild.","ref":"Nostrum.Api.html#get_guild_webhooks/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_guild_webhooks/1","doc":"- `guild_id` - Guild to get webhooks for.","ref":"Nostrum.Api.html#get_guild_webhooks/1-parameters"},{"type":"function","title":"Nostrum.Api.get_guild_widget/1","doc":"Gets a guild embed.","ref":"Nostrum.Api.html#get_guild_widget/1"},{"type":"function","title":"Nostrum.Api.get_invite/2","doc":"Gets an invite by its `invite_code`.\n\nIf successful, returns `{:ok, invite}`. Otherwise, returns a\n`t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_invite/2"},{"type":"function","title":"Options - Nostrum.Api.get_invite/2","doc":"* `:with_counts` (boolean) - whether to include member count fields","ref":"Nostrum.Api.html#get_invite/2-options"},{"type":"function","title":"Examples - Nostrum.Api.get_invite/2","doc":"```elixir\nNostrum.Api.get_invite(\"zsjUsC\")\n\nNostrum.Api.get_invite(\"zsjUsC\", with_counts: true)\n```","ref":"Nostrum.Api.html#get_invite/2-examples"},{"type":"function","title":"Nostrum.Api.get_invite!/2","doc":"Same as `get_invite/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_invite!/2"},{"type":"function","title":"Nostrum.Api.get_original_interaction_response/1","doc":"Retrieves the original message of an interaction.","ref":"Nostrum.Api.html#get_original_interaction_response/1"},{"type":"function","title":"Nostrum.Api.get_pinned_messages/1","doc":"Retrieves all pinned messages from a channel.\n\nThis endpoint requires the 'VIEW_CHANNEL' and 'READ_MESSAGE_HISTORY' permissions.\n\nIf successful, returns `{:ok, messages}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_pinned_messages/1"},{"type":"function","title":"Examples - Nostrum.Api.get_pinned_messages/1","doc":"```elixir\nNostrum.Api.get_pinned_messages(43189401384091)\n```","ref":"Nostrum.Api.html#get_pinned_messages/1-examples"},{"type":"function","title":"Nostrum.Api.get_pinned_messages!/1","doc":"Same as `get_pinned_messages/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_pinned_messages!/1"},{"type":"function","title":"Nostrum.Api.get_poll_answer_voters/4","doc":"Get voters for the provided answer on the poll attached to the provided message.\n\nIf successful, returns `{:ok, users}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nThe optional `params` are `after`, the user ID to query after, absent by default,\nand `limit`, the max number of users to return, 1-100, 25 by default. Results are\nsorted by Discord user snowflake (ID) in ascending order.","ref":"Nostrum.Api.html#get_poll_answer_voters/4"},{"type":"function","title":"Nostrum.Api.get_poll_answer_voters!/4","doc":"Same as `get_poll_answer_voters/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_poll_answer_voters!/4"},{"type":"function","title":"Nostrum.Api.get_reactions/4","doc":"Gets all users who reacted with an emoji.\n\nThis endpoint requires the `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY` permissions.\n\nIf successful, returns `{:ok, users}`. Otherwise, returns `t:Nostrum.Api.error/0`.\n\nThe optional `params` are `after`, the user ID to query after, absent by default,\nand `limit`, the max number of users to return, 1-100, 25 by default.\n\nSee `create_reaction/3` for similar examples.","ref":"Nostrum.Api.html#get_reactions/4"},{"type":"function","title":"Nostrum.Api.get_reactions!/4","doc":"Same as `get_reactions/4`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_reactions!/4"},{"type":"function","title":"Nostrum.Api.get_sticker/1","doc":"Fetch a sticker with the provided ID.\n\nReturns a `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#get_sticker/1"},{"type":"function","title":"Nostrum.Api.get_sticker_packs/0","doc":"Get a list of available sticker packs.","ref":"Nostrum.Api.html#get_sticker_packs/0"},{"type":"function","title":"Nostrum.Api.get_thread_member/2","doc":"Returns a thread member object for the specified user if they are a member of the thread","ref":"Nostrum.Api.html#get_thread_member/2"},{"type":"function","title":"Nostrum.Api.get_thread_members/1","doc":"Returns a list of thread members for the specified thread.\n\nThis endpoint is restricted according to whether the `GUILD_MEMBERS` privileged intent is enabled.","ref":"Nostrum.Api.html#get_thread_members/1"},{"type":"function","title":"Nostrum.Api.get_user/1","doc":"Gets a user by its `t:Nostrum.Struct.User.id/0`.\n\nIf the request is successful, this function returns `{:ok, user}`, where\n`user` is a `Nostrum.Struct.User`. Otherwise, returns `{:error, reason}`.","ref":"Nostrum.Api.html#get_user/1"},{"type":"function","title":"Nostrum.Api.get_user!/1","doc":"Same as `get_user/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_user!/1"},{"type":"function","title":"Nostrum.Api.get_user_connections/0","doc":"Gets a list of user connections.","ref":"Nostrum.Api.html#get_user_connections/0"},{"type":"function","title":"Nostrum.Api.get_user_dms/0","doc":"Gets a list of our user's DM channels.\n\nIf successful, returns `{:ok, dm_channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#get_user_dms/0"},{"type":"function","title":"Examples - Nostrum.Api.get_user_dms/0","doc":"```elixir\nNostrum.Api.get_user_dms()\n{:ok, [%Nostrum.Struct.Channel{type: 1} | _]}\n```","ref":"Nostrum.Api.html#get_user_dms/0-examples"},{"type":"function","title":"Nostrum.Api.get_user_dms!/0","doc":"Same as `get_user_dms/0`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#get_user_dms!/0"},{"type":"function","title":"Nostrum.Api.get_voice_region/1","doc":"Gets a list of voice regions for the guild.\n\nGuild to get voice regions for is specified by `guild_id`.","ref":"Nostrum.Api.html#get_voice_region/1"},{"type":"function","title":"Nostrum.Api.get_webhook/1","doc":"Gets a webhook by id.","ref":"Nostrum.Api.html#get_webhook/1"},{"type":"function","title":"Parameters - Nostrum.Api.get_webhook/1","doc":"- `webhook_id` - Id of the webhook to get.","ref":"Nostrum.Api.html#get_webhook/1-parameters"},{"type":"function","title":"Nostrum.Api.get_webhook_message/2","doc":"Retrieves the original message of a webhook.","ref":"Nostrum.Api.html#get_webhook_message/2"},{"type":"function","title":"Nostrum.Api.get_webhook_with_token/2","doc":"Gets a webhook by id and token.\n\nThis method is exactly like `get_webhook/1` but does not require\nauthentication.","ref":"Nostrum.Api.html#get_webhook_with_token/2"},{"type":"function","title":"Parameters - Nostrum.Api.get_webhook_with_token/2","doc":"- `webhook_id` - Id of the webhook to get.\n - `webhook_token` - Token of the webhook to get.","ref":"Nostrum.Api.html#get_webhook_with_token/2-parameters"},{"type":"function","title":"Nostrum.Api.join_thread/1","doc":"Join an existing thread, requires that the thread is not archived.","ref":"Nostrum.Api.html#join_thread/1"},{"type":"function","title":"Nostrum.Api.leave_guild/1","doc":"Leaves a guild.\n\nGuild to leave is specified by `guild_id`.","ref":"Nostrum.Api.html#leave_guild/1"},{"type":"function","title":"Nostrum.Api.leave_thread/1","doc":"Leave a thread, requires that the thread is not archived.","ref":"Nostrum.Api.html#leave_thread/1"},{"type":"function","title":"Nostrum.Api.list_guild_emojis/1","doc":"Gets a list of emojis for a given guild.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission.\n\nIf successful, returns `{:ok, emojis}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#list_guild_emojis/1"},{"type":"function","title":"Nostrum.Api.list_guild_emojis!/1","doc":"Same as `list_guild_emojis/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#list_guild_emojis!/1"},{"type":"function","title":"Nostrum.Api.list_guild_members/2","doc":"Gets a list of a guild's members.\n\nIf successful, returns `{:ok, members}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#list_guild_members/2"},{"type":"function","title":"Options - Nostrum.Api.list_guild_members/2","doc":"* `:limit` (integer) - max number of members to return (1-1000) (default: 1)\n * `:after` (`t:Nostrum.Struct.User.id/0`) - the highest user id in the previous page (default: 0)","ref":"Nostrum.Api.html#list_guild_members/2-options"},{"type":"function","title":"Examples - Nostrum.Api.list_guild_members/2","doc":"```elixir\nNostrum.Api.list_guild_members(41771983423143937, limit: 1)\n```","ref":"Nostrum.Api.html#list_guild_members/2-examples"},{"type":"function","title":"Nostrum.Api.list_guild_members!/2","doc":"Same as `list_guild_members/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#list_guild_members!/2"},{"type":"function","title":"Nostrum.Api.list_guild_stickers/1","doc":"List all stickers in the provided guild.\n\nReturns a list of `t:Nostrum.Struct.Sticker.t/0`.","ref":"Nostrum.Api.html#list_guild_stickers/1"},{"type":"function","title":"Nostrum.Api.list_guild_threads/1","doc":"Return all active threads for the current guild.\n\nResponse body is a map with the following keys:\n- `threads`: A list of channel objects.\n- `members`: A list of `ThreadMember` objects, one for each returned thread the current user has joined.","ref":"Nostrum.Api.html#list_guild_threads/1"},{"type":"function","title":"Nostrum.Api.list_joined_private_archived_threads/2","doc":"Same as `list_public_archived_threads/2`, but only returns private threads that the current user has joined.","ref":"Nostrum.Api.html#list_joined_private_archived_threads/2"},{"type":"function","title":"Nostrum.Api.list_private_archived_threads/2","doc":"Same as `list_public_archived_threads/2`, but for private threads instead of public.","ref":"Nostrum.Api.html#list_private_archived_threads/2"},{"type":"function","title":"Nostrum.Api.list_public_archived_threads/2","doc":"Returns a list of archived threads for a given channel.\n\nThreads are sorted by the `archive_timestamp` field, in descending order.","ref":"Nostrum.Api.html#list_public_archived_threads/2"},{"type":"function","title":"Response body - Nostrum.Api.list_public_archived_threads/2","doc":"Response body is a map with the following keys:\n- `threads`: A list of channel objects.\n- `members`: A list of `ThreadMember` objects, one for each returned thread the current user has joined.\n- `has_more`: A boolean indicating whether there are more archived threads that can be fetched.","ref":"Nostrum.Api.html#list_public_archived_threads/2-response-body"},{"type":"function","title":"Options - Nostrum.Api.list_public_archived_threads/2","doc":"- `before`: Returns threads before this timestamp, can be either a `DateTime` or [ISO8601 timestamp](`DateTime.to_iso8601/3`).\n- `limit`: Optional maximum number of threads to return.","ref":"Nostrum.Api.html#list_public_archived_threads/2-options"},{"type":"function","title":"Nostrum.Api.list_voice_regions/0","doc":"Gets a list of voice regions.","ref":"Nostrum.Api.html#list_voice_regions/0"},{"type":"function","title":"Nostrum.Api.modify_channel/3","doc":"Modifies a channel's settings.\n\nAn optional `reason` can be given for the guild audit log.\n\nIf a `t:Nostrum.Struct.Channel.guild_channel/0` is being modified, this\nendpoint requires the `MANAGE_CHANNEL` permission. It fires a\n`t:Nostrum.Consumer.channel_update/0` event. If a\n`t:Nostrum.Struct.Channel.guild_category_channel/0` is being modified, then this\nendpoint fires multiple `t:Nostrum.Consumer.channel_update/0` events.\n\nIf successful, returns `{:ok, channel}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_channel/3"},{"type":"function","title":"Options - Nostrum.Api.modify_channel/3","doc":"* `:name` (string) - 2-100 character channel name\n * `:position` (integer) - the position of the channel in the left-hand listing\n * `:topic` (string) (`t:Nostrum.Struct.Channel.text_channel/0` only) -\n 0-1024 character channel topic\n * `:nsfw` (boolean) (`t:Nostrum.Struct.Channel.text_channel/0` only) -\n if the channel is nsfw\n * `:bitrate` (integer) (`t:Nostrum.Struct.Channel.voice_channel/0` only) -\n the bitrate (in bits) of the voice channel; 8000 to 96000 (128000 for VIP servers)\n * `:user_limit` (integer) (`t:Nostrum.Struct.Channel.voice_channel/0` only) -\n the user limit of the voice channel; 0 refers to no limit, 1 to 99 refers to a user limit\n * `:permission_overwrites` (list of `t:Nostrum.Struct.Overwrite.t/0` or equivalent map) -\n channel or category-specific permissions\n * `:parent_id` (`t:Nostrum.Struct.Channel.id/0`) (`t:Nostrum.Struct.Channel.guild_channel/0` only) -\n id of the new parent category for a channel","ref":"Nostrum.Api.html#modify_channel/3-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_channel/3","doc":"```elixir\nNostrum.Api.modify_channel(41771983423143933, name: \"elixir-nostrum\", topic: \"nostrum discussion\")\n{:ok, %Nostrum.Struct.Channel{id: 41771983423143933, name: \"elixir-nostrum\", topic: \"nostrum discussion\"}}\n\nNostrum.Api.modify_channel(41771983423143933)\n{:ok, %Nostrum.Struct.Channel{id: 41771983423143933}}\n```","ref":"Nostrum.Api.html#modify_channel/3-examples"},{"type":"function","title":"Nostrum.Api.modify_channel!/3","doc":"Same as `modify_channel/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_channel!/3"},{"type":"function","title":"Nostrum.Api.modify_current_user/1","doc":"Changes the username or avatar of the current user.","ref":"Nostrum.Api.html#modify_current_user/1"},{"type":"function","title":"Options - Nostrum.Api.modify_current_user/1","doc":"* `:username` (string) - new username\n * `:avatar` (string) - the user's avatar as [avatar data](https://discord.com/developers/docs/resources/user#avatar-data)","ref":"Nostrum.Api.html#modify_current_user/1-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_current_user/1","doc":"```elixir\nNostrum.Api.modify_current_user(avatar: \"data:image/jpeg;base64,YXl5IGJieSB1IGx1a2luIDQgc3VtIGZ1az8=\")\n```","ref":"Nostrum.Api.html#modify_current_user/1-examples"},{"type":"function","title":"Nostrum.Api.modify_current_user!/1","doc":"Same as `modify_current_user/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_current_user!/1"},{"type":"function","title":"Nostrum.Api.modify_current_user_nick/2","doc":"Modifies the nickname of the current user in a guild.\n\nIf successful, returns `{:ok, %{nick: nick}}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_current_user_nick/2"},{"type":"function","title":"Options - Nostrum.Api.modify_current_user_nick/2","doc":"* `:nick` (string) - value to set users nickname to","ref":"Nostrum.Api.html#modify_current_user_nick/2-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_current_user_nick/2","doc":"```elixir\nNostrum.Api.modify_current_user_nick(41771983423143937, nick: \"Nostrum\")\n{:ok, %{nick: \"Nostrum\"}}\n```","ref":"Nostrum.Api.html#modify_current_user_nick/2-examples"},{"type":"function","title":"Nostrum.Api.modify_current_user_nick!/2","doc":"Same as `modify_current_user_nick/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_current_user_nick!/2"},{"type":"function","title":"Nostrum.Api.modify_guild/3","doc":"Modifies a guild's settings.\n\nThis endpoint requires the `MANAGE_GUILD` permission. It fires the\n`t:Nostrum.Consumer.guild_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, guild}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild/3"},{"type":"function","title":"Options - Nostrum.Api.modify_guild/3","doc":"* `:name` (string) - guild name\n * `:region` (string) - guild voice region id\n * `:verification_level` (integer) - verification level\n * `:default_message_notifications` (integer) - default message\n notification level\n * `:explicit_content_filter` (integer) - explicit content filter level\n * `:afk_channel_id` (`t:Nostrum.Snowflake.t/0`) - id for afk channel\n * `:afk_timeout` (integer) - afk timeout in seconds\n * `:icon` (base64 data URI) - 128x128 jpeg image for the guild icon\n * `:owner_id` (`t:Nostrum.Snowflake.t/0`) - user id to transfer\n guild ownership to (must be owner)\n * `:splash` (base64 data URI) - 128x128 jpeg image for the guild splash\n (VIP only)\n * `:system_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the\n channel to which system messages are sent\n * `:rules_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the channel that\n is used for rules in public guilds\n * `:public_updates_channel_id` (`t:Nostrum.Snowflake.t/0`) - the id of the channel\n where admins and moderators receive notices from Discord in public guilds","ref":"Nostrum.Api.html#modify_guild/3-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild/3","doc":"```elixir\nNostrum.Api.modify_guild(451824027976073216, name: \"Nose Drum\")\n{:ok, %Nostrum.Struct.Guild{id: 451824027976073216, name: \"Nose Drum\", ...}}\n```","ref":"Nostrum.Api.html#modify_guild/3-examples"},{"type":"function","title":"Nostrum.Api.modify_guild!/2","doc":"Same as `modify_guild/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild!/2"},{"type":"function","title":"Nostrum.Api.modify_guild_auto_moderation_rule/3","doc":"Modify an auto-moderation rule for a guild.\n\nTakes the same options as `create_guild_auto_moderation_rule/2`, however all fields are optional.","ref":"Nostrum.Api.html#modify_guild_auto_moderation_rule/3"},{"type":"function","title":"Nostrum.Api.modify_guild_channel_positions/2","doc":"Reorders a guild's channels.\n\nThis endpoint requires the `MANAGE_CHANNELS` permission. It fires multiple\n`t:Nostrum.Consumer.channel_update/0` events.\n\nIf successful, returns `{:ok, channels}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`positions` is a list of maps that each map a channel id with a position.","ref":"Nostrum.Api.html#modify_guild_channel_positions/2"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_channel_positions/2","doc":"```elixir\nNostrum.Api.modify_guild_channel_positions(279093381723062272, [%{id: 351500354581692420, position: 2}])\n{:ok}\n```","ref":"Nostrum.Api.html#modify_guild_channel_positions/2-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_channel_positions!/2","doc":"Same as `modify_guild_channel_positions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_channel_positions!/2"},{"type":"function","title":"Nostrum.Api.modify_guild_emoji/4","doc":"Modify the given emoji.\n\nThis endpoint requires the `MANAGE_EMOJIS` permission. It fires a\n`t:Nostrum.Consumer.guild_emojis_update/0` event.\n\nAn optional `reason` can be provided for the audit log.\n\nIf successful, returns `{:ok, emoji}`. Otherwise, returns `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild_emoji/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_emoji/4","doc":"* `:name` (string) - name of the emoji\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - roles to which this emoji will be whitelisted","ref":"Nostrum.Api.html#modify_guild_emoji/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_emoji/4","doc":"```elixir\nNostrum.Api.modify_guild_emoji(43189401384091, 4314301984301, name: \"elixir\", roles: [])\n```","ref":"Nostrum.Api.html#modify_guild_emoji/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_emoji!/4","doc":"Same as `modify_guild_emoji/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_emoji!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_integrations/3","doc":"Changes the settings and behaviours for a guild integeration.\n\nIntegration to modify is specified by `guild_id` and `integeration_id`.\n\n`options` is a map with the following keys:\n * `expire_behavior` - Expiry behavior.\n * `expire_grace_period` - Period where the integration will ignore elapsed subs.\n * `enable_emoticons` - Whether emoticons should be synced.","ref":"Nostrum.Api.html#modify_guild_integrations/3"},{"type":"function","title":"Nostrum.Api.modify_guild_member/4","doc":"Modifies a guild member's attributes.\n\nThis endpoint fires the `t:Nostrum.Consumer.guild_member_update/0` event.\nIt situationally requires the `MANAGE_NICKNAMES`, `MANAGE_ROLES`,\n`MUTE_MEMBERS`, `DEAFEN_MEMBERS`, and `MOVE_MEMBERS` permissions.\n\nIf successful, returns `{:ok, member}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#modify_guild_member/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_member/4","doc":"* `:nick` (string) - value to set users nickname to\n * `:roles` (list of `t:Nostrum.Snowflake.t/0`) - array of role ids the member is assigned\n * `:mute` (boolean) - if the user is muted\n * `:deaf` (boolean) - if the user is deafened\n * `:channel_id` (`t:Nostrum.Snowflake.t/0`) - id of channel to move user to (if they are connected to voice)\n * `:communication_disabled_until` (`t:DateTime.t/0` or `nil`) - datetime to disable user communication (timeout) until, or `nil` to remove timeout.","ref":"Nostrum.Api.html#modify_guild_member/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_member/4","doc":"```elixir\nNostrum.Api.modify_guild_member(41771983423143937, 637162356451, nick: \"Nostrum\")\n{:ok, %Nostrum.Struct.Member{}}\n```","ref":"Nostrum.Api.html#modify_guild_member/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_member!/4","doc":"Same as `modify_guild_member/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_member!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_role/4","doc":"Modifies a guild role.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires a\n`t:Nostrum.Consumer.guild_role_update/0` event.\n\nAn optional `reason` can be specified for the audit log.\n\nIf successful, returns `{:ok, role}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#modify_guild_role/4"},{"type":"function","title":"Options - Nostrum.Api.modify_guild_role/4","doc":"* `:name` (string) - name of the role\n * `:permissions` (integer) - bitwise of the enabled/disabled permissions\n * `:color` (integer) - RGB color value (default: 0)\n * `:hoist` (boolean) - whether the role should be displayed separately in the sidebar\n * `:mentionable` (boolean) - whether the role should be mentionable","ref":"Nostrum.Api.html#modify_guild_role/4-options"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_role/4","doc":"```elixir\nNostrum.Api.modify_guild_role(41771983423143937, 392817238471936, hoist: false, name: \"foo-bar\")\n```","ref":"Nostrum.Api.html#modify_guild_role/4-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_role!/4","doc":"Same as `modify_guild_role/3`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_role!/4"},{"type":"function","title":"Nostrum.Api.modify_guild_role_positions/3","doc":"Reorders a guild's roles.\n\nThis endpoint requires the `MANAGE_ROLES` permission. It fires multiple\n`t:Nostrum.Consumer.guild_role_update/0` events.\n\nIf successful, returns `{:ok, roles}`. Otherwise, returns a `t:Nostrum.Api.error/0`.\n\n`positions` is a list of maps that each map a role id with a position.","ref":"Nostrum.Api.html#modify_guild_role_positions/3"},{"type":"function","title":"Examples - Nostrum.Api.modify_guild_role_positions/3","doc":"```elixir\nNostrum.Api.modify_guild_role_positions(41771983423143937, [%{id: 41771983423143936, position: 2}])\n```","ref":"Nostrum.Api.html#modify_guild_role_positions/3-examples"},{"type":"function","title":"Nostrum.Api.modify_guild_role_positions!/3","doc":"Same as `modify_guild_role_positions/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#modify_guild_role_positions!/3"},{"type":"function","title":"Nostrum.Api.modify_guild_scheduled_event/4","doc":"Modify a scheduled event for a guild.\n\nOptions are the same as for `create_guild_scheduled_event/2` except all fields are optional,\nwith the additional optional integer field `:status` which can be one of:\n\n * `1` - `SCHEDULED`\n * `2` - `ACTIVE`\n * `3` - `COMPLETED`\n * `4` - `CANCELLED`\n\nCopied from the official documentation:\n* If updating entity_type to `EXTERNAL`:\n * `channel_id` is required and must be set to null\n * `entity_metadata` with a `location` field must be provided\n * `scheduled_end_time` must be provided","ref":"Nostrum.Api.html#modify_guild_scheduled_event/4"},{"type":"function","title":"Nostrum.Api.modify_guild_sticker/3","doc":"Modify a guild sticker with the specified ID.\n\nPass in a map of properties to update, with any of the following keys:\n\n- `name`: Name of the sticker (2-30 characters)\n- `description`: Description of the sticker (2-100 characters)\n- `tags`: Autocomplete/suggestion tags for the sticker (max 200 characters)\n\nReturns an updated sticker on update completion.","ref":"Nostrum.Api.html#modify_guild_sticker/3"},{"type":"function","title":"Nostrum.Api.modify_guild_widget/2","doc":"Modifies a guild embed.","ref":"Nostrum.Api.html#modify_guild_widget/2"},{"type":"function","title":"Nostrum.Api.modify_webhook/3","doc":"Modifies a webhook.","ref":"Nostrum.Api.html#modify_webhook/3"},{"type":"function","title":"Parameters - Nostrum.Api.modify_webhook/3","doc":"- `webhook_id` - Id of the webhook to modify.\n - `args` - Map with the following *optional* keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#modify_webhook/3-parameters"},{"type":"function","title":"Nostrum.Api.modify_webhook_with_token/4","doc":"Modifies a webhook with a token.\n\nThis method is exactly like `modify_webhook/1` but does not require\nauthentication.","ref":"Nostrum.Api.html#modify_webhook_with_token/4"},{"type":"function","title":"Parameters - Nostrum.Api.modify_webhook_with_token/4","doc":"- `webhook_id` - Id of the webhook to modify.\n - `webhook_token` - Token of the webhook to get.\n - `args` - Map with the following *optional* keys:\n - `name` - Name of the webhook.\n - `avatar` - Base64 128x128 jpeg image for the default avatar.\n - `reason` - An optional reason for the guild audit log.","ref":"Nostrum.Api.html#modify_webhook_with_token/4-parameters"},{"type":"function","title":"Nostrum.Api.remove_guild_ban/3","doc":"Removes a ban for a user.\n\nUser to unban is specified by `guild_id` and `user_id`.\nAn optional `reason` can be specified for the audit log.","ref":"Nostrum.Api.html#remove_guild_ban/3"},{"type":"function","title":"Nostrum.Api.remove_guild_member/3","doc":"Removes a member from a guild.\n\nThis event requires the `KICK_MEMBERS` permission. It fires a\n`t:Nostrum.Consumer.guild_member_remove/0` event.\n\nAn optional reason can be provided for the audit log with `reason`.\n\nIf successful, returns `{:ok}`. Otherwise, returns a `t:Nostrum.Api.error/0`.","ref":"Nostrum.Api.html#remove_guild_member/3"},{"type":"function","title":"Examples - Nostrum.Api.remove_guild_member/3","doc":"```elixir\nNostrum.Api.remove_guild_member(1453827904102291, 18739485766253)\n{:ok}\n```","ref":"Nostrum.Api.html#remove_guild_member/3-examples"},{"type":"function","title":"Nostrum.Api.remove_guild_member!/3","doc":"Same as `remove_guild_member/2`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#remove_guild_member!/3"},{"type":"function","title":"Nostrum.Api.remove_guild_member_role/4","doc":"Removes a role from a member.\n\nRole to remove is specified by `role_id`.\nUser to remove role from is specified by `guild_id` and `user_id`.\nAn optional `reason` can be given for the audit log.","ref":"Nostrum.Api.html#remove_guild_member_role/4"},{"type":"function","title":"Nostrum.Api.remove_thread_member/2","doc":"Removes another user from a thread, requires that the thread is not archived.\n\nAlso requires the `MANAGE_THREADS` permission, or the creator of the thread if the thread is private.","ref":"Nostrum.Api.html#remove_thread_member/2"},{"type":"function","title":"Nostrum.Api.request/1","doc":"","ref":"Nostrum.Api.html#request/1"},{"type":"function","title":"Nostrum.Api.request/4","doc":"","ref":"Nostrum.Api.html#request/4"},{"type":"function","title":"Nostrum.Api.request_multipart/4","doc":"","ref":"Nostrum.Api.html#request_multipart/4"},{"type":"function","title":"Nostrum.Api.start_thread/3","doc":"Create a thread on a channel without an associated message.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread/3"},{"type":"function","title":"Options - Nostrum.Api.start_thread/3","doc":"- `name`: Name of the thread, max 100 characters.\n- `type`: Type of thread, can be either 11 (`GUILD_PUBLIC_THREAD`) or 12 (`GUILD_PRIVATE_THREAD`).\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `invitable`: whether non-moderators can add other non-moderators to a thread; only available when creating a private thread defaults to `false`.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.","ref":"Nostrum.Api.html#start_thread/3-options"},{"type":"function","title":"Nostrum.Api.start_thread_in_forum_channel/3","doc":"Create a new thread in a forum channel.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3"},{"type":"function","title":"Options - Nostrum.Api.start_thread_in_forum_channel/3","doc":"- `name`: Name of the thread, max 100 characters.\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.\n- `applied_tags`: An array of tag ids to apply to the thread.\n- `message`: The first message in the created thread.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3-options"},{"type":"function","title":"Thread Message Options - Nostrum.Api.start_thread_in_forum_channel/3","doc":"- `content`: The content of the message.\n- `embeds`: A list of embeds.\n- `allowed_mentions`: Allowed mentions object.\n- `components`: A list of components.\n- `sticker_ids`: A list of sticker ids.\n- `:files` - a list of files where each element is the same format as the `:file` option. If both\n `:file` and `:files` are specified, `:file` will be prepended to the `:files` list.\n\nAt least one of `content`, `embeds`, `sticker_ids`, or `files` must be specified.","ref":"Nostrum.Api.html#start_thread_in_forum_channel/3-thread-message-options"},{"type":"function","title":"Nostrum.Api.start_thread_with_message/4","doc":"Create a thread on a channel message.\n\nThe `thread_id` will be the same as the id of the message, as such no message can have more than one thread.\n\nIf successful, returns `{:ok, Channel}`. Otherwise returns a `t:Nostrum.Api.error/0`.\n\nAn optional `reason` argument can be given for the audit log.","ref":"Nostrum.Api.html#start_thread_with_message/4"},{"type":"function","title":"Options - Nostrum.Api.start_thread_with_message/4","doc":"- `name`: Name of the thread, max 100 characters.\n- `auto_archive_duration`: Duration in minutes to auto-archive the thread after it has been inactive, can be set to 60, 1440, 4320, or 10080.\n- `rate_limit_per_user`: Rate limit per user in seconds, can be set to any value in `0..21600`.","ref":"Nostrum.Api.html#start_thread_with_message/4-options"},{"type":"function","title":"Nostrum.Api.start_typing/1","doc":"Triggers the typing indicator.\n\nTriggers the typing indicator in the channel specified by `channel_id`.\nThe typing indicator lasts for about 8 seconds and then automatically stops.\n\nReturns `{:ok}` if successful. `error` otherwise.","ref":"Nostrum.Api.html#start_typing/1"},{"type":"function","title":"Nostrum.Api.start_typing!/1","doc":"Same as `start_typing/1`, but raises `Nostrum.Error.ApiError` in case of failure.","ref":"Nostrum.Api.html#start_typing!/1"},{"type":"function","title":"Nostrum.Api.sync_guild_integrations/2","doc":"Syncs a guild integration.\n\nIntegration to sync is specified by `guild_id` and `integeration_id`.","ref":"Nostrum.Api.html#sync_guild_integrations/2"},{"type":"function","title":"Nostrum.Api.update_shard_status/5","doc":"Updates the status of the bot for a certain shard.","ref":"Nostrum.Api.html#update_shard_status/5"},{"type":"function","title":"Parameters - Nostrum.Api.update_shard_status/5","doc":"- `pid` - Pid of the shard.\n - `status` - Status of the bot.\n - `game` - The 'playing' text of the bot. Empty will clear.\n - `type` - The type of status to show. 0 (Playing) | 1 (Streaming) | 2 (Listening) | 3 (Watching)\n - `stream` - URL of twitch.tv stream","ref":"Nostrum.Api.html#update_shard_status/5-parameters"},{"type":"function","title":"Nostrum.Api.update_status/4","doc":"Updates the status of the bot for all shards.\n\nSee `update_shard_status/5` for usage.","ref":"Nostrum.Api.html#update_status/4"},{"type":"function","title":"Nostrum.Api.update_voice_state/4","doc":"Joins, moves, or disconnects the bot from a voice channel.\n\nThe correct shard to send the update to will be inferred from the\n`guild_id`. If a corresponding `guild_id` is not found a cache error will be\nraised.\n\nTo disconnect from a channel, `channel_id` should be set to `nil`.","ref":"Nostrum.Api.html#update_voice_state/4"},{"type":"type","title":"Nostrum.Api.allowed_mention/0","doc":"Represents which mentions to allow in a message.\n\nThis can be sent on its own or in a list to allow multiple types of\nmentions in a message, see `t:allowed_mentions/0` for details.","ref":"Nostrum.Api.html#t:allowed_mention/0"},{"type":"type","title":"Nostrum.Api.allowed_mentions/0","doc":"Represents mentions to allow in a message.\n\nWith this option you can control when content from a message should trigger a ping.\nConsider using this option when you are going to display user generated content.","ref":"Nostrum.Api.html#t:allowed_mentions/0"},{"type":"type","title":"Allowed values - Nostrum.Api.allowed_mentions/0","doc":"* `:all` (default) - Ping everything as usual\n * `:none` - Nobody will be pinged\n * `:everyone` - Allows to ping @here and @everyone\n * `:users` - Allows to ping users\n * `:roles` - Allows to ping roles\n * `{:users, list}` - Allows to ping list of users. Can contain up to 100 ids of users.\n * `{:roles, list}` - Allows to ping list of roles. Can contain up to 100 ids of roles.\n * list - a list containing the values above.","ref":"Nostrum.Api.html#t:allowed_mentions/0-allowed-values"},{"type":"type","title":"Nostrum.Api.emoji/0","doc":"Represents an emoji for interacting with reaction endpoints.","ref":"Nostrum.Api.html#t:emoji/0"},{"type":"type","title":"Nostrum.Api.error/0","doc":"Represents a failed response from the API.\n\nThis occurs when `:gun` fails, or when the API doesn't respond with `200` or `204`.","ref":"Nostrum.Api.html#t:error/0"},{"type":"type","title":"Nostrum.Api.limit/0","doc":"Represents a limit used to retrieve messages.\n\nInteger number of messages, or :infinity to retrieve all messages.","ref":"Nostrum.Api.html#t:limit/0"},{"type":"type","title":"Nostrum.Api.locator/0","doc":"Represents a tuple used to locate messages.\n\nThe first element of the tuple is an atom.\nThe second element will be a message_id as an integer.\nThe tuple can also be empty to search from the most recent message in the channel","ref":"Nostrum.Api.html#t:locator/0"},{"type":"type","title":"Nostrum.Api.matrix/0","doc":"","ref":"Nostrum.Api.html#t:matrix/0"},{"type":"type","title":"Nostrum.Api.options/0","doc":"Represents optional parameters for Api functions.\n\nEach function has documentation regarding what parameters it\nsupports or needs.","ref":"Nostrum.Api.html#t:options/0"},{"type":"type","title":"Nostrum.Api.status/0","doc":"Represents different statuses the bot can have.\n\n - `:dnd` - Red circle.\n - `:idle` - Yellow circle.\n - `:online` - Green circle.\n - `:invisible` - The bot will appear offline.","ref":"Nostrum.Api.html#t:status/0"},{"type":"type","title":"Nostrum.Api.thread_with_message_params/0","doc":"","ref":"Nostrum.Api.html#t:thread_with_message_params/0"},{"type":"type","title":"Nostrum.Api.thread_without_message_params/0","doc":"","ref":"Nostrum.Api.html#t:thread_without_message_params/0"},{"type":"behaviour","title":"Nostrum.Consumer","doc":"Consumer process for gateway event handling.","ref":"Nostrum.Consumer.html"},{"type":"behaviour","title":"Consuming gateway events - Nostrum.Consumer","doc":"Events are first ingested by nostrum's cache. Afterwards, they are sent to\nany subscribed consumers via `Nostrum.ConsumerGroup`.\n\nBy default, nostrum will start a process for each event. This gives us free\nparallelism and isolation. You therefore do not need to start more than one\nconsumer in your supervision tree. If you want to override this behaviour,\nimplement the `handle_info/2` function in your consumer. For reference, this\nis the default implementation:\n\n```elixir\n def handle_info({:event, event}, state) do\n Task.start(fn ->\n try do\n __MODULE__.handle_event(event)\n rescue\n e ->\n Logger.error(\"Error in event handler: #{Exception.format_error(e, __STACKTRACE__)}\")\n end\n end)\n\n {:noreply, state}\n end\n```","ref":"Nostrum.Consumer.html#module-consuming-gateway-events"},{"type":"behaviour","title":"Running multiple consumers - Nostrum.Consumer","doc":"**Every process that is in a `Nostrum.ConsumerGroup` receives every event**:\nit is therefore not recommended to create multiple consumers if a single one\ncould accomplish the job.","ref":"Nostrum.Consumer.html#module-running-multiple-consumers"},{"type":"behaviour","title":"Example consumer - Nostrum.Consumer","doc":"An example consumer could look as follows:\n\n```elixir\n# Sourced from examples/event_consumer.ex\ndefmodule ExampleSupervisor do\n use Supervisor\n\n def start_link(args) do\n Supervisor.start_link(__MODULE__, args, name: __MODULE__)\n end\n\n @impl true\n def init(_init_arg) do\n children = [ExampleConsumer]\n\n Supervisor.init(children, strategy: :one_for_one)\n end\nend\n\ndefmodule ExampleConsumer do\n use Nostrum.Consumer\n\n alias Nostrum.Api\n\n def handle_event({:MESSAGE_CREATE, msg, _ws_state}) do\n case msg.content do\n \"!sleep\" ->\n Api.create_message(msg.channel_id, \"Going to sleep...\")\n # This won't stop other events from being handled.\n Process.sleep(3000)\n\n \"!ping\" ->\n Api.create_message(msg.channel_id, \"pyongyang!\")\n\n \"!raise\" ->\n # This won't crash the entire Consumer.\n raise \"No problems here!\"\n\n _ ->\n :ignore\n end\n end\nend\n\n```\n\n> ### `use Nostrum.Consumer` {: .info}\n>\n> Using `Nostrum.Consumer` will:\n>\n> - `use GenServer` (as the consumer is built on `GenServer`)\n> - set the behaviour to `Nostrum.Consumer`\n> - define `child_spec/1`, `start_link/1` and `init/1` for the `GenServer` to\n> automatically join the `Nostrum.ConsumerGroup` on boot\n> - define `handle_info/2` to automatically dispatch any events to your\n> `c:handle_event/1` via a `Task`\n> - inject a default `handle_event/1` clause to ignore any unhandled events.","ref":"Nostrum.Consumer.html#module-example-consumer"},{"type":"callback","title":"Nostrum.Consumer.handle_event/1","doc":"Callback used to handle events.","ref":"Nostrum.Consumer.html#c:handle_event/1"},{"type":"callback","title":"Event - Nostrum.Consumer.handle_event/1","doc":"`event` is a tuple describing the event. The tuple will include information in\nthe following format:\n```elixir\n{event_name, {event_payload(s)}, WSState.t}\n```\n\nFor example, a message create will look like this\n```elixir\n{:MESSAGE_CREATE, Nostrum.Struct.Message.t, WSState.t}\n```\n\nIn some cases there will be multiple payloads when something is updated, so as\nto include the new and the old versions. In the event of there being two payloads,\nthe old payload will always be first, followed by the new payload.\n```elixir\n{:USER_UPDATE, {old_user :: Nostrum.Struct.User.t, new_user :: Nostrum.Struct.User.t}, WSState.t()}\n```\n\nFor a full listing of events, please see `t:Nostrum.Consumer.event/0`.","ref":"Nostrum.Consumer.html#c:handle_event/1-event"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_create/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_create/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_delete/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_execute/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_execute/0"},{"type":"type","title":"Nostrum.Consumer.auto_moderation_rule_update/0","doc":"","ref":"Nostrum.Consumer.html#t:auto_moderation_rule_update/0"},{"type":"type","title":"Nostrum.Consumer.channel_create/0","doc":"Dispatched when a channel is created.\n\nStarting from [API and Gateway V8](https://discord.com/developers/docs/change-log#api-and-gateway-v8),\nthis will never be sent for a DM.","ref":"Nostrum.Consumer.html#t:channel_create/0"},{"type":"type","title":"Nostrum.Consumer.channel_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_delete/0"},{"type":"type","title":"Nostrum.Consumer.channel_pins_ack/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_pins_ack/0"},{"type":"type","title":"Nostrum.Consumer.channel_pins_update/0","doc":"","ref":"Nostrum.Consumer.html#t:channel_pins_update/0"},{"type":"type","title":"Nostrum.Consumer.channel_update/0","doc":"Dispatched when a channel is updated.\n\n`old_channel` will be `nil` when the pre-update channel could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:channel_update/0"},{"type":"type","title":"Nostrum.Consumer.event/0","doc":"","ref":"Nostrum.Consumer.html#t:event/0"},{"type":"type","title":"Nostrum.Consumer.guild_audit_log_entry_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_audit_log_entry_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_available/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_available/0"},{"type":"type","title":"Nostrum.Consumer.guild_ban_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_ban_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_ban_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_ban_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_emojis_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_emojis_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_integrations_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_integrations_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_member_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_remove/0","doc":"Dispatched when somebody leaves a guild.\n\nIn case the guild member intent is enabled but not the guild intent,\nnostrum may not cache the actual guild, and thus be unable to provide\nfull information about members leaving guilds. In that case, this event\nreceives the guild ID and a partial member object with the leaving user as\nprovided by Discord, but no information about the user's state on the guild.","ref":"Nostrum.Consumer.html#t:guild_member_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_member_update/0","doc":"Dispatched when a guild member is updated.\n\n`old_member` will be `nil` when the pre-update member could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:guild_member_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_members_chunk/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_members_chunk/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_role_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_role_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_role_update/0","doc":"Dispatched when a role on a guild is updated.\n\n`old_role` will be `nil` when the pre-update role could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:guild_role_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_create/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_create/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_delete/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_user_add/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_user_add/0"},{"type":"type","title":"Nostrum.Consumer.guild_scheduled_event_user_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_scheduled_event_user_remove/0"},{"type":"type","title":"Nostrum.Consumer.guild_stickers_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_stickers_update/0"},{"type":"type","title":"Nostrum.Consumer.guild_unavailable/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_unavailable/0"},{"type":"type","title":"Nostrum.Consumer.guild_update/0","doc":"","ref":"Nostrum.Consumer.html#t:guild_update/0"},{"type":"type","title":"Nostrum.Consumer.integration_create/0","doc":"","ref":"Nostrum.Consumer.html#t:integration_create/0"},{"type":"type","title":"Nostrum.Consumer.integration_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:integration_delete/0"},{"type":"type","title":"Nostrum.Consumer.integration_update/0","doc":"Different from `t:guild_integrations_update/0` in that more than only the `guild_id` is provided","ref":"Nostrum.Consumer.html#t:integration_update/0"},{"type":"type","title":"Nostrum.Consumer.interaction_create/0","doc":"","ref":"Nostrum.Consumer.html#t:interaction_create/0"},{"type":"type","title":"Nostrum.Consumer.message_ack/0","doc":"","ref":"Nostrum.Consumer.html#t:message_ack/0"},{"type":"type","title":"Nostrum.Consumer.message_create/0","doc":"","ref":"Nostrum.Consumer.html#t:message_create/0"},{"type":"type","title":"Nostrum.Consumer.message_delete/0","doc":"","ref":"Nostrum.Consumer.html#t:message_delete/0"},{"type":"type","title":"Nostrum.Consumer.message_delete_bulk/0","doc":"","ref":"Nostrum.Consumer.html#t:message_delete_bulk/0"},{"type":"type","title":"Nostrum.Consumer.message_poll_vote_add/0","doc":"Dispatched when a user adds a vote to a poll.","ref":"Nostrum.Consumer.html#t:message_poll_vote_add/0"},{"type":"type","title":"Nostrum.Consumer.message_poll_vote_remove/0","doc":"Dispatched when a user removes a vote from a poll.","ref":"Nostrum.Consumer.html#t:message_poll_vote_remove/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_add/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_add/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove_all/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove_all/0"},{"type":"type","title":"Nostrum.Consumer.message_reaction_remove_emoji/0","doc":"","ref":"Nostrum.Consumer.html#t:message_reaction_remove_emoji/0"},{"type":"type","title":"Nostrum.Consumer.message_update/0","doc":"","ref":"Nostrum.Consumer.html#t:message_update/0"},{"type":"type","title":"Nostrum.Consumer.presence_update/0","doc":"Dispatched when a user's presence is updated.\n\n`old_presence` will be `nil` when the pre-update presence could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:presence_update/0"},{"type":"type","title":"Nostrum.Consumer.ready/0","doc":"","ref":"Nostrum.Consumer.html#t:ready/0"},{"type":"type","title":"Nostrum.Consumer.resumed/0","doc":"","ref":"Nostrum.Consumer.html#t:resumed/0"},{"type":"type","title":"Nostrum.Consumer.thread_create/0","doc":"Dispatched when a thread is created or when added to a private thread","ref":"Nostrum.Consumer.html#t:thread_create/0"},{"type":"type","title":"Nostrum.Consumer.thread_delete/0","doc":"Dispatched when a thread is deleted, if the thread was cached, contains the original thread, otherwise contains `:noop`","ref":"Nostrum.Consumer.html#t:thread_delete/0"},{"type":"type","title":"Nostrum.Consumer.thread_list_sync/0","doc":"Dispatched when gaining access to a channel","ref":"Nostrum.Consumer.html#t:thread_list_sync/0"},{"type":"type","title":"Nostrum.Consumer.thread_member_update/0","doc":"Dispatched when a `ThreadMember` for the current user is updated","ref":"Nostrum.Consumer.html#t:thread_member_update/0"},{"type":"type","title":"Nostrum.Consumer.thread_members_update/0","doc":"Dispatched when member(s) are added or removed from a thread","ref":"Nostrum.Consumer.html#t:thread_members_update/0"},{"type":"type","title":"Nostrum.Consumer.thread_update/0","doc":"","ref":"Nostrum.Consumer.html#t:thread_update/0"},{"type":"type","title":"Nostrum.Consumer.typing_start/0","doc":"","ref":"Nostrum.Consumer.html#t:typing_start/0"},{"type":"type","title":"Nostrum.Consumer.user_settings_update/0","doc":"","ref":"Nostrum.Consumer.html#t:user_settings_update/0"},{"type":"type","title":"Nostrum.Consumer.user_update/0","doc":"Dispatched when a user is updated.\n\n`old_user` will be `nil` when the pre-update user could not be fetched from the cache.","ref":"Nostrum.Consumer.html#t:user_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_incoming_packet/0","doc":"Dispatched when async listening is enabled and another user is actively speaking\n\nThe second tuple element is an `t:Nostrum.Voice.rtp_opus/0`, which is a tuple with\nRTP header information and an opus packet. While someone is actively talking, you can\nexpect about 50 events per second per speaking user.\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.\nThat struct contains a `t:Nostrum.Struct.VoiceWSState.ssrc_map/0` that can determine the speaking user based\non the SSRC.","ref":"Nostrum.Consumer.html#t:voice_incoming_packet/0"},{"type":"type","title":"Nostrum.Consumer.voice_ready/0","doc":"Dispatched when the bot is ready to begin sending audio after joining a voice channel\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.","ref":"Nostrum.Consumer.html#t:voice_ready/0"},{"type":"type","title":"Nostrum.Consumer.voice_server_update/0","doc":"","ref":"Nostrum.Consumer.html#t:voice_server_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_speaking_update/0","doc":"Dispatched when the bot starts or stops speaking\n\nNote that the third tuple element is of type `t:Nostrum.Struct.VoiceWSState.t/0` instead of `t:Nostrum.Struct.WSState.t/0`.","ref":"Nostrum.Consumer.html#t:voice_speaking_update/0"},{"type":"type","title":"Nostrum.Consumer.voice_state_update/0","doc":"","ref":"Nostrum.Consumer.html#t:voice_state_update/0"},{"type":"type","title":"Nostrum.Consumer.webhooks_update/0","doc":"","ref":"Nostrum.Consumer.html#t:webhooks_update/0"},{"type":"module","title":"Nostrum.ConsumerGroup","doc":"Registers consumers and handles event dispatch.","ref":"Nostrum.ConsumerGroup.html"},{"type":"function","title":"Nostrum.ConsumerGroup.child_spec/1","doc":"","ref":"Nostrum.ConsumerGroup.html#child_spec/1"},{"type":"function","title":"Nostrum.ConsumerGroup.demonitor/1","doc":"Stop monitoring the given reference.","ref":"Nostrum.ConsumerGroup.html#demonitor/1"},{"type":"function","title":"Nostrum.ConsumerGroup.dispatch/1","doc":"Dispatch the given event(s) to all consumers.\n\nThis is called by nostrum internally, you likely won't need to call this\nmanually.","ref":"Nostrum.ConsumerGroup.html#dispatch/1"},{"type":"function","title":"Nostrum.ConsumerGroup.join/0","doc":"Equivalent to `ConsumerGroup.join(self())`. See `join/1`.","ref":"Nostrum.ConsumerGroup.html#join/0"},{"type":"function","title":"Nostrum.ConsumerGroup.join/1","doc":"Join the given process to the consumers.\n\nIf no process is given, joins the current process to the consumers. This can\nbe used for subscribing to gateway events and awaiting them inline.\n\nAfter the process has joined, it will receive any events sent by nostrum's\ngateway dispatch. These events are sent as messages `{:event,\nt:Consumer.Event.t/0}`. The given `pid` is automatically unsubscribed when it\nterminates.\n\nNote that there is currently no filtering done. If the gateway sends a lot of\nmessages and the event subscriber does not terminate swiftly, its message\nqueue will keep growing.","ref":"Nostrum.ConsumerGroup.html#join/1"},{"type":"function","title":"Example - Nostrum.ConsumerGroup.join/1","doc":"The following example illustrates how to use this to implement inline event\nawaiting:\n\n```elixir\ndefmodule MyBot.Command\n alias Nostrum.Api\n alias Nostrum.ConsumerGroup\n alias Nostrum.Struct.Message\n alias Nostrum.Struct.User\n\n def command(%Message{author: %User{id: author_id}}) do\n Api.create_message!(msg, \"Reply 'y' in 5 seconds to confirm ordering a large burger menu.\")\n ConsumerGroup.join()\n receive do\n {:event, {:MESSAGE_CREATE, %Message{author: %User{id: author_id}, content: \"y\"}, _}} ->\n Api.create_message!(msg, \"The large burger menu is coming.\")\n after\n 5_000 ->\n Api.create_message!(msg, \"Too slow!\")\n end\n end\nend\n```","ref":"Nostrum.ConsumerGroup.html#join/1-example"},{"type":"function","title":"Nostrum.ConsumerGroup.monitor/0","doc":"Monitor the consumer group for changes.\n\nReturn the initial state of the group on first call. Further updates are\ndelivered as messages to the calling process, see `:pg.monitor/2` for\ndetails. The returned `t:reference/0` must be saved for later calls to\n`demonitor/1`.","ref":"Nostrum.ConsumerGroup.html#monitor/0"},{"type":"function","title":"Nostrum.ConsumerGroup.start_link/1","doc":"","ref":"Nostrum.ConsumerGroup.html#start_link/1"},{"type":"module","title":"Nostrum.Permission","doc":"Functions that work on permissions.\n\nSome functions return a list of permissions. You can use enumerable functions\nto work with permissions:\n\n```elixir\nalias Nostrum.Cache.GuildCache\nalias Nostrum.Struct.Guild.Member\n\nguild = GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nmember_perms = Member.guild_permissions(member, guild)\n\nif :administrator in member_perms do\n IO.puts(\"This user has the administrator permission.\")\nend\n```","ref":"Nostrum.Permission.html"},{"type":"function","title":"Nostrum.Permission.all/0","doc":"Returns a list of all permissions.","ref":"Nostrum.Permission.html#all/0"},{"type":"function","title":"Nostrum.Permission.from_bit/1","doc":"Converts the given bit to a permission.\n\nThis function returns `:error` if `bit` does not map to a permission.","ref":"Nostrum.Permission.html#from_bit/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bit/1","doc":"```elixir\niex> Nostrum.Permission.from_bit(0x04000000)\n{:ok, :change_nickname}\n\niex> Nostrum.Permission.from_bit(0)\n:error\n```","ref":"Nostrum.Permission.html#from_bit/1-examples"},{"type":"function","title":"Nostrum.Permission.from_bit!/1","doc":"Same as `from_bit/1`, but raises `ArgumentError` in case of failure.","ref":"Nostrum.Permission.html#from_bit!/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bit!/1","doc":"```elixir\niex> Nostrum.Permission.from_bit!(0x04000000)\n:change_nickname\n\niex> Nostrum.Permission.from_bit!(0)\n** (ArgumentError) expected a valid bit, got: `0`\n```","ref":"Nostrum.Permission.html#from_bit!/1-examples"},{"type":"function","title":"Nostrum.Permission.from_bitset/1","doc":"Converts the given bitset to a list of permissions.\n\nIf invalid bits are given they will be omitted from the results.","ref":"Nostrum.Permission.html#from_bitset/1"},{"type":"function","title":"Examples - Nostrum.Permission.from_bitset/1","doc":"```elixir\niex> Nostrum.Permission.from_bitset(0x08000002)\n[:manage_nicknames, :kick_members]\n\niex> Nostrum.Permission.from_bitset(0x4000000000000)\n[]\n```","ref":"Nostrum.Permission.html#from_bitset/1-examples"},{"type":"macro","title":"Nostrum.Permission.is_permission/1","doc":"Returns `true` if `term` is a permission; otherwise returns `false`.","ref":"Nostrum.Permission.html#is_permission/1"},{"type":"macro","title":"Examples - Nostrum.Permission.is_permission/1","doc":"```elixir\niex> Nostrum.Permission.is_permission(:administrator)\ntrue\n\niex> Nostrum.Permission.is_permission(:not_a_permission)\nfalse\n```","ref":"Nostrum.Permission.html#is_permission/1-examples"},{"type":"function","title":"Nostrum.Permission.to_bit/1","doc":"Converts the given permission to a bit.","ref":"Nostrum.Permission.html#to_bit/1"},{"type":"function","title":"Examples - Nostrum.Permission.to_bit/1","doc":"```elixir\niex> Nostrum.Permission.to_bit(:administrator)\n8\n```","ref":"Nostrum.Permission.html#to_bit/1-examples"},{"type":"function","title":"Nostrum.Permission.to_bitset/1","doc":"Converts the given enumerable of permissions to a bitset.","ref":"Nostrum.Permission.html#to_bitset/1"},{"type":"function","title":"Examples - Nostrum.Permission.to_bitset/1","doc":"```elixir\niex> Nostrum.Permission.to_bitset([:administrator, :create_instant_invite])\n9\n```","ref":"Nostrum.Permission.html#to_bitset/1-examples"},{"type":"type","title":"Nostrum.Permission.bit/0","doc":"Represents a single permission as a bitvalue.","ref":"Nostrum.Permission.html#t:bit/0"},{"type":"type","title":"Nostrum.Permission.bitset/0","doc":"Represents a set of permissions as a bitvalue.","ref":"Nostrum.Permission.html#t:bitset/0"},{"type":"type","title":"Nostrum.Permission.general_permission/0","doc":"","ref":"Nostrum.Permission.html#t:general_permission/0"},{"type":"type","title":"Nostrum.Permission.t/0","doc":"","ref":"Nostrum.Permission.html#t:t/0"},{"type":"type","title":"Nostrum.Permission.text_permission/0","doc":"","ref":"Nostrum.Permission.html#t:text_permission/0"},{"type":"type","title":"Nostrum.Permission.voice_permission/0","doc":"","ref":"Nostrum.Permission.html#t:voice_permission/0"},{"type":"module","title":"Nostrum.Voice","doc":"Interface for playing and listening to audio through Discord's voice channels.\n\n# Using Discord Voice Channels\nTo play sound in Discord with Nostrum, you'll need `ffmpeg` to be installed.\nIf you don't have the executable `ffmpeg` in the path, the absolute path may\nbe configured through config keys `:nostrum, :ffmpeg`. If you don't want to use\nffmpeg, read on to the next section.\n\nA bot may be connected to at most one voice channel per guild. For this reason,\nmost of the functions in this module take a guild id, and the resulting action\nwill be performed in the given guild's voice channel that the bot is connected to.\n\nThe primary Discord gateway responsible for all text based communication relies on\none websocket connection per shard, where small bots typically only have one shard.\nThe Discord voice gateways work by establishing a websocket connection per guild/channel.\nAfter some handshaking on this connection, audio data can be sent over UDP/RTP. Behind\nthe scenes the voice websocket connections are implemented nearly the same way the main\nshard websocket connections are, and require no developer intervention.\n\nIn addition to playing audio, listening to incoming audio is supported through the\nfunctions `listen/3` and `start_listen_async/1`.","ref":"Nostrum.Voice.html"},{"type":"module","title":"Voice Without FFmpeg - Nostrum.Voice","doc":"If you wish to BYOE (Bring Your Own Encoder), there are a few options.\n - Use `:raw` as `type` for `play/4`\n - Provide the complete list of opus frames as the input\n - Use `:raw_s` as `type` for `play/4`\n - Provide a stateful enumerable of opus frames as input (think GenServer wrapped in `Stream.unfold/2`)\n - Use lower level functions to send opus frames at your leisure\n - Send packets on your own time using `send_frames/2`","ref":"Nostrum.Voice.html#module-voice-without-ffmpeg"},{"type":"function","title":"Nostrum.Voice.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Voice.html#child_spec/1"},{"type":"function","title":"Nostrum.Voice.connect_to_gateway/1","doc":"Low-level. Manually connect to voice websockets gateway.\n\nThis function should only be called if config option `:voice_auto_connect` is set to `false`.\nBy default Nostrum will automatically create a voice gateway when joining a channel.","ref":"Nostrum.Voice.html#connect_to_gateway/1"},{"type":"function","title":"Nostrum.Voice.create_ogg_bitstream/1","doc":"Create a complete Ogg logical bitstream from a list of Opus packets.\n\nThis function takes a list of opus packets and returns a list of Ogg\nencapsulated Opus pages for a single Ogg logical bitstream.\n\nIt is highly recommended to learn about the Ogg container format to\nunderstand how to use the data.\n\nTo get started, assuming you have a list of evenly temporally spaced\nand consecutive opus packets from a single source that you want written\nto a file, you can run the following:\n\n```elixir\nbitstream =\n opus_packets\n |> create_ogg_bitstream()\n |> :binary.list_to_bin()\n\nFile.write!(\"my_recording.ogg\", bitstream)\n```\n\nWhen creating a logical bitstream, ensure that the packets are all from a single SSRC.\nWhen listening in a channel with multiple speakers, you should be storing the received\npackets in unique buckets for each SSRC so that the multiple audio sources don't become\njumbled. A single logical bitstream should represent audio data from a single speaker.\nAn Ogg physical bitstream (e.g. a file) may be composed of multiple interleaved Ogg\nlogical bitstreams as each logical bitstream and its constituent pages contain a unique\nand randomly generated bitstream serial number, but this is a story for another time.\n\nAssuming you have a list of `t:rtp_opus/0` packets that are not separated by ssrc, you\nmay do the following:\n\n```elixir\njumbled_packets\n|> Stream.filter(fn {{_seq, _time, ssrc}, _opus} -> ssrc == particular_ssrc end)\n|> Enum.map(fn {{_seq, _time, _ssrc}, opus} -> opus end)\n|> create_ogg_bitstream()\n```","ref":"Nostrum.Voice.html#create_ogg_bitstream/1"},{"type":"function","title":"Nostrum.Voice.extract_opus_packet/1","doc":"Extract the opus packet from the RTP packet received from Discord.\n\nIncoming voice RTP packets contain a fixed length RTP header and an optional\nRTP header extension, which must be stripped to retrieve the underlying opus packet.","ref":"Nostrum.Voice.html#extract_opus_packet/1"},{"type":"function","title":"Nostrum.Voice.get_channel_id/1","doc":"Gets the id of the voice channel that the bot is connected to.","ref":"Nostrum.Voice.html#get_channel_id/1"},{"type":"function","title":"Parameters - Nostrum.Voice.get_channel_id/1","doc":"- `guild_id` - ID of guild that the resultant channel belongs to.\n\nReturns the `channel_id` for the channel the bot is connected to, otherwise `nil`.","ref":"Nostrum.Voice.html#get_channel_id/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.get_channel_id/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.get_channel(123456789)\n420691337\n\niex> Nostrum.Voice.leave_channel(123456789)\n\niex> Nostrum.Voice.get_channel(123456789)\nnil\n```","ref":"Nostrum.Voice.html#get_channel_id/1-examples"},{"type":"function","title":"Nostrum.Voice.get_current_url/1","doc":"Gets the current URL being played.\n\nIf `play/4` was invoked with type `:url`, `:ytdl`, or `:stream`, this function will return\nthe URL given as input last time it was called.\n\nIf `play/4` was invoked with type `:pipe`, `:raw`, or `:raw_s`, this will return `nil`\nas the input is raw audio data, not be a readable URL string.","ref":"Nostrum.Voice.html#get_current_url/1"},{"type":"function","title":"Nostrum.Voice.get_ssrc_map/1","doc":"Gets a map of RTP SSRC to user id.\n\nWithin a voice channel, an SSRC (synchronization source) will uniquely map to a\nuser id of a user who is speaking.\n\nIf listening to incoming voice packets asynchronously, this function will not be\nneeded as the `t:Nostrum.Struct.VoiceWSState.ssrc_map/0` will be available with every event.\nIf listening with `listen/3`, this function may be used. It is recommended to\ncache the result of this function and only call it again when you encounter an\nSSRC that is not present in the cached result. This is to reduce excess load on the\nvoice websocket and voice state processes.","ref":"Nostrum.Voice.html#get_ssrc_map/1"},{"type":"function","title":"Nostrum.Voice.join_channel/5","doc":"Joins or moves the bot to a voice channel.\n\nThis function calls `Nostrum.Api.update_voice_state/4`.\n\nThe fifth argument `persist` defaults to `true`. When true, if calling `join_channel/5`\nwhile already in a different channel in the same guild, the audio source will be persisted\nin the new channel. If the audio is actively playing at the time of changing channels,\nit will resume playing automatically upon joining. If there is an active audio source\nthat has been paused before changing channels, the audio will be able to be resumed manually if\n`resume/1` is called.\n\nIf `persist` is set to false, the audio source will be destroyed before changing channels.\nThe same effect is achieved by calling `stop/1` or `leave_channel/1` before `join_channel/5`","ref":"Nostrum.Voice.html#join_channel/5"},{"type":"function","title":"Nostrum.Voice.leave_channel/1","doc":"Leaves the voice channel of the given guild id.\n\nThis function is equivalent to calling `Nostrum.Api.update_voice_state(guild_id, nil)`.","ref":"Nostrum.Voice.html#leave_channel/1"},{"type":"function","title":"Nostrum.Voice.listen/3","doc":"Listen for incoming voice RTP packets.","ref":"Nostrum.Voice.html#listen/3"},{"type":"function","title":"Parameters - Nostrum.Voice.listen/3","doc":"- `guild_id` - ID of guild that the bot is listening to.\n - `num_packets` - Number of packets to wait for.\n - `raw_rtp` - Whether to return raw RTP packets. Defaults to `false`.\n\nReturns a list of tuples of type `t:rtp_opus/0`.\n\nThe inner tuple contains fields from the RTP header and can be matched against\nto retrieve information about the packet such as the SSRC, which identifies the source.\nNote that RTP timestamps are completely unrelated to Unix timestamps.\n\nIf `raw_rtp` is set to `true`, a list of raw RTP packets is returned instead.\nTo extract an opus packet from an RTP packet, see `extract_opus_packet/1`.\n\nThis function will block until the specified number of packets is received.","ref":"Nostrum.Voice.html#listen/3-parameters"},{"type":"function","title":"Nostrum.Voice.pad_opus/1","doc":"Pad discontinuous chunks of opus audio with silence.\n\nThis function takes a list of `t:rtp_opus/0`, which is a tuple containing RTP bits and\nopus audio data. It returns a list of opus audio packets. The reason the input has to be in\nthe `t:rtp_opus/0` tuple format returned by `listen/3` and async listen events is that the\nRTP packet header contains info on the relative timestamps of incoming packets; the opus\npackets themselves don't contain information relating to timing.\n\nThe Discord client will continue to internally increment the `t:rtp_timestamp()` when the\nuser is not speaking such that the duration of pauses can be determined from the RTP packets.\nBots will typically not behave this way, so if you call this function on audio produced by\na bot it is very likely that no silence will be inserted.\n\nThe use case of this function is as follows:\nConsider a user speaks for two seconds, pauses for ten seconds, then speaks for another two\nseconds. During the pause, no RTP packets will be received, so if you create a bitstream from\nit, the resulting audio will be both two-second speaking segments consecutively without the\nlong pause in the middle. If you wish to preserve the timing of the speaking and include the\npause, calling this function will interleave the appropriate amount of opus silence packets\nto maintain temporal fidelity.\n\nNote that the Discord client currently sends about 10 silence packets (200 ms) each time it\ndetects end of speech, so creating a bitstream without first padding your audio with this\nfunction will maintain short silences between speech segments.\n\n*This function should only be called on a collection of RTP packets from a single SSRC*","ref":"Nostrum.Voice.html#pad_opus/1"},{"type":"function","title":"Nostrum.Voice.pause/1","doc":"Pauses the current sound being played in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#pause/1"},{"type":"function","title":"Parameters - Nostrum.Voice.pause/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be paused in.\n\nReturns `{:error, reason}` if unable to pause or no sound is playing, else `:ok`.\n\nThis function is similar to `stop/1`, except that the sound may be\nresumed after being paused.","ref":"Nostrum.Voice.html#pause/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.pause/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/files/twelve_hour_loop_of_waterfall_sounds.mp3\")\n\niex> Nostrum.Voice.pause(123456789)\n```","ref":"Nostrum.Voice.html#pause/1-examples"},{"type":"function","title":"Nostrum.Voice.play/4","doc":"Plays sound in the voice channel the bot is in.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#play/4"},{"type":"function","title":"Parameters - Nostrum.Voice.play/4","doc":"- `guild_id` - ID of guild whose voice channel the sound will be played in.\n - `input` - Audio to be played, `t:play_input/0`. Input type determined by `type` parameter.\n - `type` - Type of input, `t:play_type/0` (defaults to `:url`).\n - `:url` Input will be [any url that `ffmpeg` can read](https://www.ffmpeg.org/ffmpeg-protocols.html).\n - `:pipe` Input will be data that is piped to stdin of `ffmpeg`.\n - `:ytdl` Input will be url for `youtube-dl`, which gets automatically piped to `ffmpeg`.\n - `:stream` Input will be livestream url for `streamlink`, which gets automatically piped to `ffmpeg`.\n - `:raw` Input will be an enumerable of raw opus packets. This bypasses `ffmpeg` and all options.\n - `:raw_s` Same as `:raw` but input must be stateful, i.e. calling `Enum.take/2` on `input` is not idempotent.\n - `options` - See options section below.\n\n\nReturns `{:error, reason}` if unable to play or a sound is playing, else `:ok`.","ref":"Nostrum.Voice.html#play/4-parameters"},{"type":"function","title":"Options - Nostrum.Voice.play/4","doc":"- `:start_pos` (string) - The start position of the audio to be played. Defaults to beginning.\n - `:duration` (string) - The duration to of the audio to be played. Defaults to entire duration.\n - `:realtime` (boolean) - Make ffmpeg process the input in realtime instead of as fast as possible. Defaults to true.\n - `:volume` (number) - The output volume of the audio. Default volume is 1.0.\n - `:filter` (string) - Filter(s) to be applied to the audio. No filters applied by default.\n\n The values of `:start_pos` and `:duration` can be [any time duration that ffmpeg can read](https://ffmpeg.org/ffmpeg-utils.html#Time-duration).\n The `:filter` can be used multiple times in a single call (see examples).\n The values of `:filter` can be [any audio filters that ffmpeg can read](https://ffmpeg.org/ffmpeg-filters.html#Audio-Filters).\n Filters will be applied in order and can be as complex as you want. The world is your oyster!\n\n Note that using the `:volume` option is shortcut for the \"volume\" filter, and will be added to the end of the filter chain, acting as a master volume.\n Volume values between `0.0` and `1.0` act as standard operating range where `0` is off and `1` is max.\n Values greater than `1.0` will add saturation and distortion to the audio.\n Negative values act the same as their position but reverse the polarity of the waveform.\n\n Having all the ffmpeg audio filters available is *extremely powerful* so it may be worth learning some of them for your use cases.\n If you use any filters to *increase* the playback speed of your audio, it's recommended to set the `:realtime` option to `false`\n because realtime processing is relative to the original playback speed.","ref":"Nostrum.Voice.html#play/4-options"},{"type":"function","title":"Examples - Nostrum.Voice.play/4","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/music/FavoriteSong.mp3\", :url)\n\niex> Nostrum.Voice.play(123456789, \"~/music/NotFavoriteButStillGoodSong.mp3\", :url, volume: 0.5)\n\niex> Nostrum.Voice.play(123456789, \"~/music/ThisWillBeHeavilyDistorted.mp3\", :url, volume: 1000)\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> raw_data = File.read!(\"~/music/sound_effect.wav\")\n\niex> Nostrum.Voice.play(123456789, raw_data, :pipe)\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://www.youtube.com/watch?v=b4RJ-QGOtw4\", :ytdl,\n...> realtime: true, start_pos: \"0:17\", duration: \"30\")\n\niex> Nostrum.Voice.play(123456789, \"https://www.youtube.com/watch?v=0ngcL_5ekXo\", :ytdl,\n...> filter: \"lowpass=f=1200\", filter: \"highpass=f=300\", filter: \"asetrate=44100*0.5\")\n```\n```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://www.twitch.tv/pestily\", :stream)\n\niex> Nostrum.Voice.play(123456789, \"https://youtu.be/LN4r-K8ZP5Q\", :stream)\n```","ref":"Nostrum.Voice.html#play/4-examples"},{"type":"function","title":"Nostrum.Voice.playing?/1","doc":"Checks if the bot is playing sound in a voice channel.","ref":"Nostrum.Voice.html#playing?/1"},{"type":"function","title":"Parameters - Nostrum.Voice.playing?/1","doc":"- `guild_id` - ID of guild to check if audio being played.\n\nReturns `true` if the bot is currently being played in a voice channel, otherwise `false`.","ref":"Nostrum.Voice.html#playing?/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.playing?/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"https://a-real-site.biz/RickRoll.m4a\")\n\niex> Nostrum.Voice.playing?(123456789)\ntrue\n\niex> Nostrum.Voice.pause(123456789)\n\niex> Nostrum.Voice.playing?(123456789)\nfalse\n```","ref":"Nostrum.Voice.html#playing?/1-examples"},{"type":"function","title":"Nostrum.Voice.ready?/1","doc":"Checks if the connection is up and ready to play audio.","ref":"Nostrum.Voice.html#ready?/1"},{"type":"function","title":"Parameters - Nostrum.Voice.ready?/1","doc":"- `guild_id` - ID of guild to check if voice connection is up.\n\nReturns `true` if the bot is connected to a voice channel, otherwise `false`.\n\nThis function does not check if audio is already playing. For that, use `playing?/1`.","ref":"Nostrum.Voice.html#ready?/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.ready?/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.ready?(123456789)\ntrue\n\niex> Nostrum.Voice.leave_channel(123456789)\n\niex> Nostrum.Voice.ready?(123456789)\nfalse\n```","ref":"Nostrum.Voice.html#ready?/1-examples"},{"type":"function","title":"Nostrum.Voice.resume/1","doc":"Resumes playing the current paused sound in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#resume/1"},{"type":"function","title":"Parameters - Nostrum.Voice.resume/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be resumed in.\n\nReturns `{:error, reason}` if unable to resume or no sound has been paused, otherwise returns `:ok`.\n\nThis function is used to resume a sound that had previously been paused.","ref":"Nostrum.Voice.html#resume/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.resume/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"~/stuff/Toto - Africa (Bass Boosted)\")\n\niex> Nostrum.Voice.pause(123456789)\n\niex> Nostrum.Voice.resume(123456789)\n```","ref":"Nostrum.Voice.html#resume/1-examples"},{"type":"function","title":"Nostrum.Voice.send_frames/2","doc":"Low-level. Send pre-encoded audio packets directly.\n\nSpeaking should be set to true via `Nostrum.Voice.set_is_speaking/2` before sending frames.\n\nOpus frames will be encrypted and prefixed with the appropriate RTP header and sent immediately.\nThe length of `frames` depends on how often you wish to send a sequence of frames.\nA single frame contains 20ms of audio. Sending more than 50 frames (1 second of audio)\nin a single function call may result in inconsistent playback rates.\n\n`Nostrum.Voice.playing?/1` will not return accurate values when using `send_frames/2`\ninstead of `Nostrum.Voice.play/4`","ref":"Nostrum.Voice.html#send_frames/2"},{"type":"function","title":"Nostrum.Voice.set_is_speaking/2","doc":"Low-level. Set speaking flag in voice channel.\n\nThis function does not need to be called unless you are sending audio frames\ndirectly using `Nostrum.Voice.send_frames/2`.","ref":"Nostrum.Voice.html#set_is_speaking/2"},{"type":"function","title":"Nostrum.Voice.start_listen_async/1","doc":"Start asynchronously receiving events for incoming RTP packets for an active voice session.\n\nThis is an alternative to the blocking `listen/3`. Events will be generated asynchronously\nwhen a user is speaking. See `t:Nostrum.Consumer.voice_incoming_packet/0` for more info.","ref":"Nostrum.Voice.html#start_listen_async/1"},{"type":"function","title":"Nostrum.Voice.stop/1","doc":"Stops the current sound being played in a voice channel.\n\nThe bot must be connected to a voice channel in the guild specified.","ref":"Nostrum.Voice.html#stop/1"},{"type":"function","title":"Parameters - Nostrum.Voice.stop/1","doc":"- `guild_id` - ID of guild whose voice channel the sound will be stopped in.\n\nReturns `{:error, reason}` if unable to stop or no sound is playing, else `:ok`.\n\nIf a sound has finished playing, this function does not need to be called to start\nplaying another sound.","ref":"Nostrum.Voice.html#stop/1-parameters"},{"type":"function","title":"Examples - Nostrum.Voice.stop/1","doc":"```elixir\niex> Nostrum.Voice.join_channel(123456789, 420691337)\n\niex> Nostrum.Voice.play(123456789, \"http://brandthill.com/files/weird_dubstep_noises.mp3\")\n\niex> Nostrum.Voice.stop(123456789)\n```","ref":"Nostrum.Voice.html#stop/1-examples"},{"type":"function","title":"Nostrum.Voice.stop_listen_async/1","doc":"Stop asynchronously receiving events for incoming RTP packets for an active voice session.","ref":"Nostrum.Voice.html#stop_listen_async/1"},{"type":"type","title":"Nostrum.Voice.opus_packet/0","doc":"Opus packet","ref":"Nostrum.Voice.html#t:opus_packet/0"},{"type":"type","title":"Nostrum.Voice.play_input/0","doc":"The play input\n\nThe input given to `play/4`, either a compatible URL or binary audio data.\nSee `play/4` for more information.","ref":"Nostrum.Voice.html#t:play_input/0"},{"type":"type","title":"Nostrum.Voice.play_type/0","doc":"The type of play input\n\nThe type given to `play/4` determines how the input parameter is interpreted.\nSee `play/4` for more information.","ref":"Nostrum.Voice.html#t:play_type/0"},{"type":"type","title":"Nostrum.Voice.rtp_opus/0","doc":"Tuple with RTP header elements and opus packet","ref":"Nostrum.Voice.html#t:rtp_opus/0"},{"type":"type","title":"Nostrum.Voice.rtp_sequence/0","doc":"RTP sequence","ref":"Nostrum.Voice.html#t:rtp_sequence/0"},{"type":"type","title":"Nostrum.Voice.rtp_ssrc/0","doc":"RTP SSRC","ref":"Nostrum.Voice.html#t:rtp_ssrc/0"},{"type":"type","title":"Nostrum.Voice.rtp_timestamp/0","doc":"RTP timestamp","ref":"Nostrum.Voice.html#t:rtp_timestamp/0"},{"type":"module","title":"Nostrum.Voice.Crypto.Aes","doc":"Handles encryption and decryption of outgoing and incoming voice data when an AES encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Aes.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Aes","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Aes.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Aes","doc":"AES is fully supported by the erlang `:crypto` module, so this module\njust provides a convenient wrapper around it for encryption and decryption.","ref":"Nostrum.Voice.Crypto.Aes.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Aes","doc":"Internally the functions `:crypto.crypto_one_time_aead/6` and `:crypto.crypto_one_time_aead/7` are\ncalled with the cipher argument set to `:aes_256_gcm`. Because these functions are implemented as\nNIFs with OpenSSL bindings, they faster than anything written in pure erlang/elixir.\n\nBecause the crypto function returns a tuple with the cipher text and tag (MAC) separately, the return\nvalue is an iolist with them in the order that Discord expects. This is done to reduce binary copies\nas the functions ingesting the encrypted messages all support iodata.\n\nReaders are encouraged to read more about the [erlang crypto module](https://www.erlang.org/doc/man/crypto).","ref":"Nostrum.Voice.Crypto.Aes.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Aes","doc":"AES is a well-established cipher and many modern CPUs have AES instruction sets to accelerate\nAES operations. While the Salsa20 and ChaCha20 stream ciphers are typically faster with pure\nsoftware implementations, hardware acceleration will typically give AES the leg up for performance.","ref":"Nostrum.Voice.Crypto.Aes.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Aes.decrypt/5","doc":"","ref":"Nostrum.Voice.Crypto.Aes.html#decrypt/5"},{"type":"function","title":"Nostrum.Voice.Crypto.Aes.encrypt/4","doc":"","ref":"Nostrum.Voice.Crypto.Aes.html#encrypt/4"},{"type":"module","title":"Nostrum.Voice.Crypto.Chacha","doc":"Handles encryption and decryption of outgoing and incoming voice data when a ChaCha encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Chacha.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Chacha","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Chacha","doc":"Erlang's `:crypto` module supports the chacha20_poly1305 AEAD stream cipher.\nAnalogously to Salsa20 and XSalsa20, XChaCha20 is a way to use 192-bit nonces\nwith ChaCha20 by hashing the key and part of the extended nonce to generate a\nsub-key, which is used as the input key for ChaCha20.\n\nTo leverage the crypto module, we had to implement the HChaCha20 hash function\nin elixir to then pass the resulting sub-key to the `crypto_one_time_aead`.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Chacha","doc":"The HChaCha20 function takes the first 16-bytes of the extended 24-byte XChaCha20 nonce,\nexpands the key and the 16-byte nonce slice into a block in place of the block count and\nusual smaller nonce. That block has 20 rounds of mutation, and instead of summing the block\nwith its starting state as is done with keystream generation, 8 of the 16 bytes are taken\nand used as the sub-key, which is the input key for the standard chacha20 cipher.\n\nEven though we've implemented the bulk of what's needed to generate chacha20 key streams\nfor encryption and decryption, we're only using this module to generate the inputs to\nuse the :crypto module's chacha20_poly1305 functionality in the capacity of xchacha20\nas is required by Discord with that encryption mode selected.\n\nThis is all in service of leveraging the performance benefits of the the NIF crypto\nfunctions, which are necessarily going to be more performant than anything implemented\nin pure elixir/erlang like the `:kcl` package.\n\n*ChaCha20 is a variant of the Salsa20 cipher. I will discuss in greater detail the implementation\nin the `Nostrum.Voice.Crypto.Salsa` module, where much is applicable here.*\n\nReferences for Salsa family of ciphers\n- https://cr.yp.to/snuffle/spec.pdf\n- https://cr.yp.to/chacha/chacha-20080128.pdf\n- https://cr.yp.to/snuffle/xsalsa-20110204.pdf\n- https://datatracker.ietf.org/doc/html/rfc7539\n- https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha","ref":"Nostrum.Voice.Crypto.Chacha.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Chacha","doc":"After the XChaCha20 sub-key is generated in elixir, the crypto NIF function performs the\nheavy lifting. If your bot is running on a machine without AES hardware acceleration, you\nmay find that using the chacha encryption mode yields better performance.","ref":"Nostrum.Voice.Crypto.Chacha.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Chacha.decrypt/5","doc":"","ref":"Nostrum.Voice.Crypto.Chacha.html#decrypt/5"},{"type":"function","title":"Nostrum.Voice.Crypto.Chacha.encrypt/4","doc":"","ref":"Nostrum.Voice.Crypto.Chacha.html#encrypt/4"},{"type":"module","title":"Nostrum.Voice.Crypto.Salsa","doc":"Handles encryption and decryption of outgoing and incoming voice data when a ChaCha encryption mode is selected\n\n>","ref":"Nostrum.Voice.Crypto.Salsa.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Voice.Crypto.Salsa","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and curious cryptographic cats.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-internal-module-info"},{"type":"module","title":"Purpose - Nostrum.Voice.Crypto.Salsa","doc":"To support xsalsa20_poly1305 without a NIF, we have to implement the\nSalsa20 cipher and HSalsa20 hash function to use 192-bit nonces in the capacity\nof XSalsa20.\n\nAlong with leveraging the :crypto module to perform the poly1305 MAC function\nand xor'ing arbitrary-length binaries, by being more thoughtful and explicit\nwith our implementation, we should be able to eek out better performance\nthan the `:kcl` package provides.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-purpose"},{"type":"module","title":"Implementation - Nostrum.Voice.Crypto.Salsa","doc":"The `:kcl` package is an impressive pure-elixir NaCl/libsodium compatible library\nthat Nostrum previously used for voice encryption. For our usage with Discord voice,\nwe only need the ability to encrypt and decrypt with 32-byte keys using 24-byte\nXSalsa20 nonces.\n\nSome of the key differences in our implementation compared to Kcl\n- Heavy use of explicit binary pattern matching instead of more traditional implicit enumeration\n- Intermediate block state stored in a 16-element tuple that is mutated during the 20-round hot loop instead of lists\n- Minimized the number binary copies, returning iolists when appropriate, instead of concatenating binaries\n- XOR whole keystream and message blocks instead of XOR'ing one byte at a time\n- Poly1305 MAC handled by crypto module instead of implemented in elixir\n- Only support 32-byte keys and 24-byte nonces (XSalsa20) instead of full NaCl/libsodium\n\nAdditionally there appears to be a bug in how the 16-byte block count is serialized during key expansion:\nIt's supposed to be little endian, and it happens to be for blocks 0-255, but for larger block counts,\nKcl may become incompatible with NaCl/libsodium-type libraries. For Discord's use case of encrypting short\n20 millisecond compressed audio packets, block counts were well-below this suspected problem threshold.\n\nThe cipher functions were implemented in the order they're defined in the original Salsa specification,\nand though it's using a lot of explicit binary pattern matching, it turned out to be quite legible.\nIn a single statement of binary pattern matching, the 512-bit initial block state is cast into 16\nlittle-endian 32-bit words. Standard elixir patterns might have you iterate through the binary until the\nend was reached, but matching and casting all sixteen block elements in a single statement then returning\na tuple is explicit, clear, and simple to understand when referenced against the spec.\n\nReaders interested in cryptography are encouraged to read more about the Salsa20/ChaCha20 ciphers.\n\nReferences for Salsa family of ciphers\n- https://cr.yp.to/snuffle/spec.pdf\n- https://cr.yp.to/chacha/chacha-20080128.pdf\n- https://cr.yp.to/snuffle/xsalsa-20110204.pdf\n- https://datatracker.ietf.org/doc/html/rfc7539\n- https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha","ref":"Nostrum.Voice.Crypto.Salsa.html#module-implementation"},{"type":"module","title":"Performance considerations - Nostrum.Voice.Crypto.Salsa","doc":"The entire keystream generation and xor'ing the message with the stream is done in elixir,\nonly performing the Poly1305 MAC function through the crypto module. Although it was implemented\nas thoughtfully and explicitly as possible with memory usage and performance in mind, using any\nof the Salsa modes will likely be less performant than ChaCha or AES.","ref":"Nostrum.Voice.Crypto.Salsa.html#module-performance-considerations"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.block_binary_to_tuple/1","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#block_binary_to_tuple/1"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.decrypt/3","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#decrypt/3"},{"type":"function","title":"Nostrum.Voice.Crypto.Salsa.encrypt/3","doc":"","ref":"Nostrum.Voice.Crypto.Salsa.html#encrypt/3"},{"type":"module","title":"Nostrum.Cache.CacheSupervisor","doc":"Supervises caches for nostrum structures.\n\nSee the documentation for the relevant submodules for details:\n\n- `Nostrum.Cache.GuildCache`\n- `Nostrum.Cache.Me`\n- `Nostrum.Cache.MemberCache`\n- `Nostrum.Cache.PresenceCache`\n- `Nostrum.Cache.UserCache`","ref":"Nostrum.Cache.CacheSupervisor.html"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.CacheSupervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.init/1","doc":"","ref":"Nostrum.Cache.CacheSupervisor.html#init/1"},{"type":"function","title":"Nostrum.Cache.CacheSupervisor.start_link/1","doc":"","ref":"Nostrum.Cache.CacheSupervisor.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Cache.ChannelGuildMapping","doc":"Cache behaviour & dispatcher for mapping channel IDs to their respective guilds.","ref":"Nostrum.Cache.ChannelGuildMapping.html"},{"type":"behaviour","title":"Purpose - Nostrum.Cache.ChannelGuildMapping","doc":"While retrieving the channels on a specific guild is trivial as they are\nstored on the guild, retrieving the guild a given channel belongs to is not\npossible with the regular data mode of channels. This module allows to\nretrieve guilds associated with a channel via `get/1`.","ref":"Nostrum.Cache.ChannelGuildMapping.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Cache.ChannelGuildMapping","doc":"By default, nostrum will use `Elixir.Nostrum.Cache.ChannelGuildMapping.ETS` to store the\nmapping. To override this, set the `[:caches, :channel_guild_mapping]`\nsetting on nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n caches: %{\n channel_guild_mapping: MyBot.Nostrum.Cache.ChannelGuildMapping\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Cache.ChannelGuildMapping.html#module-configuration"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.create/2","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#create/2"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.delete/1","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#delete/1"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.get/1","doc":"","ref":"Nostrum.Cache.ChannelGuildMapping.html#get/1"},{"type":"callback","title":"Nostrum.Cache.ChannelGuildMapping.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.html#c:get/1"},{"type":"behaviour","title":"Nostrum.Cache.GuildCache","doc":"Cache behaviour & dispatcher for guilds.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.GuildCache.ETS will be used for caching guilds.\nYou can override this in the `:caches` option of the `:nostrum` application\nby setting the `:guilds` field to a different module implementing the\n`Nostrum.Cache.GuildCache` behaviour. Any module below\n`Nostrum.Cache.GuildCache` can be used as a cache.","ref":"Nostrum.Cache.GuildCache.html"},{"type":"behaviour","title":"Writing your own guild cache - Nostrum.Cache.GuildCache","doc":"As with the other caches, the guild cache API consists of three parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api`\ninstead.\n\n- functions for read operations, almost exclusively called by the end user\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement all callbacks in this module (except for\n`c:wrap_query/1`, since it is optional) for nostrum to work with your custom\ncache.\n\nThe \"upstream data\" wording in this module references the fact that the\ndata that the guild cache (and other caches) retrieves represents the raw\ndata we receive from the upstream connection, no attempt is made by nostrum\nto sanitize the data before it enters the cache. Caching implementations\nneed to cast the data to the resulting type themselves. A possible future\nimprovement would be moving the data casting into this module before the\nbacking cache implementation is called.","ref":"Nostrum.Cache.GuildCache.html#module-writing-your-own-guild-cache"},{"type":"function","title":"Nostrum.Cache.GuildCache.all/0","doc":"Returns an enumerable that yields all guilds in the cache.\n\nYou must wrap calls to this function in `wrap_query/1`.","ref":"Nostrum.Cache.GuildCache.html#all/0"},{"type":"callback","title":"Nostrum.Cache.GuildCache.all/0","doc":"Return an enumerable for all guilds in the cache.","ref":"Nostrum.Cache.GuildCache.html#c:all/0"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_create/2","doc":"Create a channel for the guild from upstream data.\n\nReturn the adapted `t:Nostrum.Struct.Channel.t/0` structure.","ref":"Nostrum.Cache.GuildCache.html#c:channel_create/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_delete/2","doc":"Delete the given channel from the guild.\n\nIf the channel was cached, return the original channel. Return `:noop`\notherwise.","ref":"Nostrum.Cache.GuildCache.html#c:channel_delete/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.channel_update/2","doc":"Update the given channel on the given guild from upstream data.\n\nReturn the original channel before the update if known, and the updated\nchannel.","ref":"Nostrum.Cache.GuildCache.html#c:channel_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.GuildCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.create/1","doc":"Create a guild in the cache.","ref":"Nostrum.Cache.GuildCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.delete/1","doc":"Delete a guild from the cache.\n\nReturn the old guild if it was cached, or `nil` otherwise.","ref":"Nostrum.Cache.GuildCache.html#c:delete/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.emoji_update/2","doc":"Update the emoji list of the given guild from upstream data.\n\nDiscord sends us the complete emoji list on an update, which is passed here.\n\nReturn the old list of emojis before the update, and the updated list of\nemojis.","ref":"Nostrum.Cache.GuildCache.html#c:emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.fold/3","doc":"Fold (reduce) over all guilds in the cache.","ref":"Nostrum.Cache.GuildCache.html#fold/3"},{"type":"function","title":"Parameters - Nostrum.Cache.GuildCache.fold/3","doc":"- `acc`: The initial accumulator. Also returned if no guilds are cached.\n- `reducer`: Called for every guild in the result. Takes a pair in the form\n`(guild, acc)`, and must return the updated accumulator.\n- `cache` (optional): The cache to use. nostrum will use the cache configured\nat compile time by default.","ref":"Nostrum.Cache.GuildCache.html#fold/3-parameters"},{"type":"function","title":"Nostrum.Cache.GuildCache.get/1","doc":"Retrieves a single `Nostrum.Struct.Guild` from the cache via its `id`.\n\nReturns `{:error, :not_found}` if no result was found.","ref":"Nostrum.Cache.GuildCache.html#get/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.get/1","doc":"Retrieves a single `Nostrum.Struct.Guild` from the cache via its `id`.\n\nReturns `{:error, :not_found}` if no result was found.","ref":"Nostrum.Cache.GuildCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.get!/1","doc":"Same as `get/1`, but raises `Nostrum.Error.CacheError` in case of failure.","ref":"Nostrum.Cache.GuildCache.html#get!/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.member_count_down/1","doc":"Decrement the member count for this guild by one.","ref":"Nostrum.Cache.GuildCache.html#c:member_count_down/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.member_count_up/1","doc":"Increment the member count for this guild by one.","ref":"Nostrum.Cache.GuildCache.html#c:member_count_up/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_create/2","doc":"Create a role on the given guild from upstream data.\n\nReturn the casted role.","ref":"Nostrum.Cache.GuildCache.html#c:role_create/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_delete/2","doc":"Delete the given role on the given guild.\n\nReturn the guild and the old role if it was cached, or `:noop` otherwise.","ref":"Nostrum.Cache.GuildCache.html#c:role_delete/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.role_update/2","doc":"Update a role on the given guild from upstream data.\n\nReturn the old role before the update and the updated role.","ref":"Nostrum.Cache.GuildCache.html#c:role_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.stickers_update/2","doc":"Update the sticker list of the given guild from upstream data.\n\nDiscord sends us a complete list of stickers on an update, which is passed here.\n\nReturn the old list of stickers before the update, and the updated list of stickers.","ref":"Nostrum.Cache.GuildCache.html#c:stickers_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.update/1","doc":"Update a guild from upstream data.\n\nReturn the original guild before the update (if it was cached) and the\nupdated guild.","ref":"Nostrum.Cache.GuildCache.html#c:update/1"},{"type":"callback","title":"Nostrum.Cache.GuildCache.voice_state_update/2","doc":"Update the voice state of the given guild from upstream data.\n\nNote that it is recommended to drop the `:member` / `\"member\"` keys of\nthe supplied upstream data, as these would otherwise duplicate the data\nthat is being kept in the guild cache already.\n\nReturn the guild ID and the updated voice states of the guild.","ref":"Nostrum.Cache.GuildCache.html#c:voice_state_update/2"},{"type":"callback","title":"Nostrum.Cache.GuildCache.wrap_query/1","doc":"A function that should wrap any queries.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.GuildCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.GuildCache.html#wrap_query/2"},{"type":"module","title":"Nostrum.Cache.Me","doc":"Simple cache that stores information for the current user.","ref":"Nostrum.Cache.Me.html"},{"type":"function","title":"Nostrum.Cache.Me.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.Me.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.Me.get/0","doc":"Returns the current user's state.","ref":"Nostrum.Cache.Me.html#get/0"},{"type":"function","title":"Nostrum.Cache.Me.start_link/1","doc":"","ref":"Nostrum.Cache.Me.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Cache.MemberCache","doc":"Cache behaviour & dispatcher for guild members.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.MemberCache.ETS will be used for caching\nmembers. You can override this in the `:caches` option of the `:nostrum`\napplication by setting the `:members` field to a different module\nimplementing the behaviour defined by this module.\n\nThe user-facing functions of this module can be called with a custom cache as\nthe final argument. This is mainly useful if you want to test the cache: by\ndefault, nostrum will use Elixir.Nostrum.Cache.MemberCache.ETS.","ref":"Nostrum.Cache.MemberCache.html"},{"type":"callback","title":"Nostrum.Cache.MemberCache.bulk_create/2","doc":"Bulk create multiple members in the cache from upstream data.\n\nReturn value is unused, as we currently do not dispatch a gateway for this.","ref":"Nostrum.Cache.MemberCache.html#c:bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.by_guild/1","doc":"","ref":"Nostrum.Cache.MemberCache.html#by_guild/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.by_guild/1","doc":"Yield an enumerable of members associated with the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#c:by_guild/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.by_user/1","doc":"","ref":"Nostrum.Cache.MemberCache.html#by_user/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.by_user/1","doc":"Yield an enumerable of `{guild_id, member}` pairs associated with the given user ID.\n\nSince nostrum does not know when it can stop streaming you results, you have\nto wrap calls to this function in `wrap_query/1`.","ref":"Nostrum.Cache.MemberCache.html#c:by_user/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.MemberCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.MemberCache.create/2","doc":"Add the member for the given guild from upstream data.\n\nReturn the casted member structure.","ref":"Nostrum.Cache.MemberCache.html#c:create/2"},{"type":"callback","title":"Nostrum.Cache.MemberCache.delete/2","doc":"Remove the given user for the given guild.\n\nReturn the guild ID and old member if the member was cached. Otherwise,\nreturn `:noop`.","ref":"Nostrum.Cache.MemberCache.html#c:delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold/4","doc":"Fold (reduce) over members for the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#fold/4"},{"type":"function","title":"Parameters - Nostrum.Cache.MemberCache.fold/4","doc":"- `acc`: The initial accumulator. Also returned if no guild members were found.\n- `guild_id`: The guild for which to reduce members.\n- `member_reducer`: Called for every element in the result. Takes a pair\nin the form `(member, acc)`, and must return the updated accumulator.","ref":"Nostrum.Cache.MemberCache.html#fold/4-parameters"},{"type":"function","title":"Return value - Nostrum.Cache.MemberCache.fold/4","doc":"Returns the resulting accumulator via `fun`. Returns `acc` unchanged if no\nresults were found.","ref":"Nostrum.Cache.MemberCache.html#fold/4-return-value"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold/4","doc":"Fails when `by_guild/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold_by_user/4","doc":"Reduce over all members cached for the given user ID.\n\nThe members will be returned alongside their guild ID as a pair in the\nformat `{guild_id, member}`.","ref":"Nostrum.Cache.MemberCache.html#fold_by_user/4"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold_by_user/4","doc":"Fails when `by_user/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold_by_user/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Calls `fun` on each member and its user on the given guild ID, with the given\naccumulator.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4"},{"type":"function","title":"Parameters - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"- `acc` (`term()`): The initial accumulator. Also returned if no guild\nmembers were found.\n- `guild_id` (`t:Nostrum.Struct.Guild.id/0`): The guild for which to reduce members.\n- `fun` (`function()`): Called for every element in the result. Takes a pair\nin the form `({member, user}, acc)`, and must return the updated accumulator.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-parameters"},{"type":"function","title":"Return value - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Returns the resulting accumulator via `fun`. Returns `acc` unchanged if no\nresults were found.\n\nIf the user for a guild member is not found, the member _and_ user won't be\npresent in the result. Barring a bug in nostrum's caching, this should never\nhappen in practice.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-return-value"},{"type":"function","title":"Raises - Nostrum.Cache.MemberCache.fold_with_users/4","doc":"Fails when `by_guild/1` of the selected cache returns an error.","ref":"Nostrum.Cache.MemberCache.html#fold_with_users/4-raises"},{"type":"function","title":"Nostrum.Cache.MemberCache.get/2","doc":"Get a single member on the given guild ID.","ref":"Nostrum.Cache.MemberCache.html#get/2"},{"type":"callback","title":"Nostrum.Cache.MemberCache.get/2","doc":"Retrieve a member from the cache by guild and user ID.","ref":"Nostrum.Cache.MemberCache.html#c:get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.get_with_user/3","doc":"Return a member together with its user via the user cache.","ref":"Nostrum.Cache.MemberCache.html#get_with_user/3"},{"type":"callback","title":"Nostrum.Cache.MemberCache.update/2","doc":"Update the given member for the given guild from upstream data.\n\nReturn the guild ID that was updated, the old cached member (if the member\nwas known to the cache), and the updated member.","ref":"Nostrum.Cache.MemberCache.html#c:update/2"},{"type":"callback","title":"Note regarding intents - Nostrum.Cache.MemberCache.update/2","doc":"Even if the required intents to receive `GUILD_MEMBER_UPDATE` events are\ndisabled to a point where we do not receive guild creation events, it is\nstill possible to receive the event for our own user. An example of this can\nbe found in [issue\n#293](https://github.com/Kraigie/nostrum/issues/293). Note that the issue\npredates the modern nostrum caching infrastructure.","ref":"Nostrum.Cache.MemberCache.html#c:update/2-note-regarding-intents"},{"type":"callback","title":"Nostrum.Cache.MemberCache.wrap_query/1","doc":"A function that should wrap any long-running query operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.MemberCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.MemberCache.html#wrap_query/2"},{"type":"behaviour","title":"Nostrum.Cache.MessageCache","doc":"Cache behaviour & dispatcher for Discord messages.\n\nBy default, Elixir.Nostrum.Cache.MessageCache.Noop will be used for caching\nmessages. You can override this in the `:caches` option of the `nostrum`\napplication by setting the `:messages` field to a different module, or\nto the tuple `{module, config}` where `module` is the module to use and\n`config` is any compile-time configuration to pass to the module.\n\nUnlike the other caches, the default is a no-op cache, as messages take\nup a lot of memory and most bots do not need messages to be cached.\nIf you would like to cache messages, you can change the cache implementation\nto one of the provided modules under `Nostrum.Cache.MessageCache`\nor write your own.","ref":"Nostrum.Cache.MessageCache.html"},{"type":"behaviour","title":"Writing your own message cache - Nostrum.Cache.MessageCache","doc":"As with the other caches, the message cache API consists of two parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api` instead.\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement both of them for nostrum to work with your custom\ncache.","ref":"Nostrum.Cache.MessageCache.html#module-writing-your-own-message-cache"},{"type":"callback","title":"Nostrum.Cache.MessageCache.bulk_delete/2","doc":"Deletes multiple messages from the cache, any message IDs given\nwill always be for the same channel.\n\nReturns a list of the deleted messages.\nNote that if a message was not found in the cache, it will\nnot be included in the returned list.","ref":"Nostrum.Cache.MessageCache.html#c:bulk_delete/2"},{"type":"callback","title":"Nostrum.Cache.MessageCache.channel_delete/1","doc":"Called when a channel is deleted.\n\nAny messages in the cache for the channel should be removed.","ref":"Nostrum.Cache.MessageCache.html#c:channel_delete/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.child_spec/1","doc":"Retrieve the child spec for starting the cache under a supervisor.\n\nThis callback is optional, and if not implemented, the cache will not be\nstarted under a supervisor.","ref":"Nostrum.Cache.MessageCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.create/1","doc":"Creates a message in the cache.\n\nThe argument given is the raw message payload from Discord's gateway.","ref":"Nostrum.Cache.MessageCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.delete/2","doc":"Deletes a message from the cache.\n\nExpects the deleted message to be returned if it was found.","ref":"Nostrum.Cache.MessageCache.html#c:delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.get/1","doc":"Retrieve a message from the cache by channel and message id.","ref":"Nostrum.Cache.MessageCache.html#get/1"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get/1","doc":"Retrieve a single `Nostrum.Struct.Message` from the cache by its ID.","ref":"Nostrum.Cache.MessageCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#get_by_author/3"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_author/3"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_channel/3","doc":"Retrieves a list of messages from the cache with a given channel ID,\nafter a given date, and before a given date.\n\nIntegers should be treated as snowflakes, and the atom `:infinity` when given\nas a before date should be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_channel/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.html#get_by_channel_and_author/4"},{"type":"callback","title":"Nostrum.Cache.MessageCache.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.html#c:get_by_channel_and_author/4"},{"type":"callback","title":"Nostrum.Cache.MessageCache.update/1","doc":"Updates a message in the cache.\n\nThe argument given is the raw message payload from Discord's gateway,\nand the return value is a tuple of the updated message and the old message if\nit was found in the cache, otherwise `nil`.","ref":"Nostrum.Cache.MessageCache.html#c:update/1"},{"type":"type","title":"Nostrum.Cache.MessageCache.timestamp_like/0","doc":"Used to constrain the return values of functions that can return\na list of messages from the cache.","ref":"Nostrum.Cache.MessageCache.html#t:timestamp_like/0"},{"type":"behaviour","title":"Nostrum.Cache.PresenceCache","doc":"Cache behaviour & dispatcher for Discord presences.\n\nBy default, `Elixir.Nostrum.Cache.PresenceCache.ETS` will be use for caching\npresences. You can override this in the `:caches` option of the `nostrum`\napplication by setting the `:presences` fields to a different module\nimplementing the `Nostrum.Cache.PresenceCache` behaviour. Any module below\n`Nostrum.Cache.PresenceCache` implements this behaviour and can be used as a\ncache.","ref":"Nostrum.Cache.PresenceCache.html"},{"type":"behaviour","title":"Writing your own presence cache - Nostrum.Cache.PresenceCache","doc":"As with the other caches, the presence cache API consists of two parts:\n\n- The functions that nostrum calls, such as `c:create/1` or `c:update/1`.\nThese **do not create any objects in the Discord API**, they are purely\ncreated to update the cached data from data that Discord sends us. If you\nwant to create objects on Discord, use the functions exposed by `Nostrum.Api`\ninstead.\n\n- the QLC query handle for read operations, `c:query_handle/0`, and\n\n- the `c:child_spec/1` callback for starting the cache under a supervisor.\n\nYou need to implement both of them for nostrum to work with your custom\ncache.","ref":"Nostrum.Cache.PresenceCache.html#module-writing-your-own-presence-cache"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.bulk_create/2","doc":"Bulk create multiple presences for the given guild in the cache.","ref":"Nostrum.Cache.PresenceCache.html#c:bulk_create/2"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.PresenceCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.create/1","doc":"Create a presence in the cache.","ref":"Nostrum.Cache.PresenceCache.html#c:create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.get/2","doc":"Retrieves a presence for a user from the cache by guild and id.\n\nIf successful, returns `{:ok, presence}`. Otherwise returns `{:error, reason}`.","ref":"Nostrum.Cache.PresenceCache.html#get/2"},{"type":"function","title":"Example - Nostrum.Cache.PresenceCache.get/2","doc":"```elixir\ncase Nostrum.Cache.PresenceCache.get(111133335555, 222244446666) do\n {:ok, presence} ->\n \"They're #{presence.status}\"\n {:error, _reason} ->\n \"They're dead Jim\"\nend\n```","ref":"Nostrum.Cache.PresenceCache.html#get/2-example"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.get/2","doc":"","ref":"Nostrum.Cache.PresenceCache.html#c:get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.get!/3","doc":"Same as `get/1`, but raise `Nostrum.Error.CacheError` in case of a failure.","ref":"Nostrum.Cache.PresenceCache.html#get!/3"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.update/1","doc":"Update the given presence in the cache from upstream data.","ref":"Nostrum.Cache.PresenceCache.html#c:update/1"},{"type":"callback","title":"Return value - Nostrum.Cache.PresenceCache.update/1","doc":"Return the guild ID along with the old presence (if it was cached, otherwise\n`nil`) and the updated presence structure. If the `:activities` or `:status`\nfields of the presence did not change, return `:noop`.","ref":"Nostrum.Cache.PresenceCache.html#c:update/1-return-value"},{"type":"callback","title":"Nostrum.Cache.PresenceCache.wrap_query/1","doc":"A function that should wrap any `:qlc` operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.PresenceCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.PresenceCache.html#wrap_query/2"},{"type":"opaque","title":"Nostrum.Cache.PresenceCache.presence/0","doc":"Represents a presence as received from Discord.\nSee [Presence Update](https://discord.com/developers/docs/topics/gateway#presence-update).","ref":"Nostrum.Cache.PresenceCache.html#t:presence/0"},{"type":"behaviour","title":"Nostrum.Cache.UserCache","doc":"Cache behaviour & dispatcher for users.\n\nYou can call the functions provided by this module independent of which cache\nis configured, and it will dispatch to the configured cache implementation.\n\nBy default, Elixir.Nostrum.Cache.UserCache.ETS will be used for caching users.\nYou can override this in the `:caches` option of the `:nostrum` application\nby setting the `:users` field to a different module implementing the behaviour\ndefined by this module.\n\nSee the documentation for the `Nostrum.Cache.GuildCache` module for more details.","ref":"Nostrum.Cache.UserCache.html"},{"type":"callback","title":"Nostrum.Cache.UserCache.bulk_create/1","doc":"Bulk add multiple users to the cache at once.\n\nReturns `:ok`.","ref":"Nostrum.Cache.UserCache.html#c:bulk_create/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Cache.UserCache.html#c:child_spec/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.create/1","doc":"Add a new user to the cache based on the Discord Gateway payload.\n\nReturns a `t:Nostrum.Struct.User.t/0` struct representing the created user.","ref":"Nostrum.Cache.UserCache.html#c:create/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.delete/1","doc":"Delete a user by ID.\n\nReturns the deleted user if present in the cache, or\n`:noop` if the user was not cached.","ref":"Nostrum.Cache.UserCache.html#c:delete/1"},{"type":"function","title":"Nostrum.Cache.UserCache.get/1","doc":"Retrieve a user from the cache by ID.","ref":"Nostrum.Cache.UserCache.html#get/1"},{"type":"function","title":"Example - Nostrum.Cache.UserCache.get/1","doc":"```elixir\ncase Nostrum.Cache.UserCache.get(1111222233334444) do\n {:ok, user} ->\n \"We found \" <> user.username\n {:error, _reason} ->\n \"No es bueno\"\nend\n```","ref":"Nostrum.Cache.UserCache.html#get/1-example"},{"type":"callback","title":"Nostrum.Cache.UserCache.get/1","doc":"Retrieve a user from the cache by id.","ref":"Nostrum.Cache.UserCache.html#c:get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.get!/1","doc":"Same as `get/1`, but raises `Nostrum.Error.CacheError` in case of a failure.","ref":"Nostrum.Cache.UserCache.html#get!/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.update/1","doc":"Update a user in the cache based on payload sent via the Gateway.\n\nReturns `:noop` if the user has not been updated in the cache, or\n`{old_user, new_user}` is the user has been written to the cache.","ref":"Nostrum.Cache.UserCache.html#c:update/1"},{"type":"callback","title":"Nostrum.Cache.UserCache.wrap_query/1","doc":"A function that should wrap any `:qlc` operations.\n\nIf you implement a cache that is backed by a database and want to perform\ncleanup and teardown actions such as opening and closing connections,\nmanaging transactions and so on, you want to implement this function. Nostrum\nwill then effectively call `wrap_query(fn -> ... end)`.\n\nIf your cache does not need any wrapping, you can omit this.","ref":"Nostrum.Cache.UserCache.html#c:wrap_query/1"},{"type":"function","title":"Nostrum.Cache.UserCache.wrap_query/2","doc":"Call `c:wrap_query/1` on the given cache, if implemented.\n\nIf no cache is given, calls out to the default cache.","ref":"Nostrum.Cache.UserCache.html#wrap_query/2"},{"type":"module","title":"Nostrum.Struct.ApplicationCommand","doc":"Typespecs for creating Application Commands\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands","ref":"Nostrum.Struct.ApplicationCommand.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_edit_map/0","doc":"When editing an existing application command, only the following fields may be updated,\nmissing fields will remain unchanged.","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_edit_map/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_map/0","doc":"This defines the map for creating an application command.\n\n`:default_permission` is for if the command is enabled for all users by default\n\nFor more information see [the official documentation](https://discord.com/developers/docs/interactions/application-commands)","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_map/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_permission_type/0","doc":"- `1` for `ROLE`\n- `2` for `USER`\n- `3` for `CHANNEL`\n\nYou can use one of the `Nostrum.Constants.ApplicationCommandPermissionType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_permission_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.application_command_permissions/0","doc":"For editing the permissions for an application command\n - `:id` is the id of the role or user\n - `:type` is the type of the id, either `role` or `user`\n - `:allow` is whether the role or user should be allowed to use the command","ref":"Nostrum.Struct.ApplicationCommand.html#t:application_command_permissions/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_choice/0","doc":"If you specify choices for a command those become the only valid options for the user to select from.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_choice/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_description/0","doc":"The description of the command, subcommand, or command_option.\nFor `CHAT_INPUT` commands, it must be between 1 and 100 characters in length.\nFor `USER` and `MESSAGE` commands it must be an empty string.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_description/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_name/0","doc":"The name of the command, subcommand, or command_option.\nIt must be between 1 and 32 characters in length and match the following regex: `^[w-]{1,32}$`.\nOnly `USER` and `MESSAGE` commands may include uppercase letters and spaces.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_option/0","doc":"This defines a command's parameters. Only valid for `CHAT_INPUT` commands.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option/0"},{"type":"type","title":"Notes - Nostrum.Struct.ApplicationCommand.command_option/0","doc":"- required parameters on a command must precede optional ones\n - for subcommands and subcommand groups, `:options` are its parameters\n - `:options` and `:choices` are mutually exclusive\n - `:autocomplete` must not be set to true if `:choices` is present\n - if `:type` is 7 then `:channel_types` can be a list of allowed [channel types](https://discord.com/developers/docs/resources/channel#channel-object-channel-types)","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option/0-notes"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_option_type/0","doc":"Indicates what type of argument the command expects.\n\n- `1` for `SUB_COMMAND`\n- `2` for `SUB_COMMAND_GROUP`\n- `3` for `​STRING`\n- `4` for `​INTEGER` *Note*: due to API limitations they can only be between -2^53 and 2^53\n- `5` for `BOOLEAN`\n- `6` for `USER`\n- `7` for `CHANNEL`\n- `8` for `ROLE`\n- `9` for `MENTIONABLE` *Note*: Includes users and roles\n- `10` for `NUMBER` *Note*: This has the same limitations as `​INTEGER`\n\nYou may use one of the `Nostrum.Constants.ApplicationCommandOptionType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_option_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommand.command_type/0","doc":"The type of application command you wish to create\n- `1` for `CHAT_INPUT`, regular slash commands (default)\n- `2` for `USER`, right-click menu commands on a specific user\n- `3` for `MESSAGE`, right-click menu commands on a specific message\n\nYou may use one of the `Nostrum.Constants.ApplicationCommandType` methods.","ref":"Nostrum.Struct.ApplicationCommand.html#t:command_type/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionData","doc":"Struct for interaction data.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.component_type/0","doc":"For components, the ``type`` of the component","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:component_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.components/0","doc":"For Modal Sumbit interactions, this will contain the values the user submitted.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.custom_id/0","doc":"For components, the ``custom_id`` of the component","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.id/0","doc":"ID of the invoked command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.interaction_type/0","doc":"The type of application command invoked.\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:interaction_type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.name/0","doc":"Name of the invoked command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.options/0","doc":"Parameters and values supplied by the user, if applicable","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.resolved/0","doc":"Converted users & roles & channels","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:resolved/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.select_values/0","doc":"For select menu components, this will be a list of the values the user selected.","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:select_values/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.t/0","doc":"Command interaction data for slash commands.\n\nUsed as part of `t:Nostrum.Struct.Interaction.t/0`.\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionData.target_id/0","doc":"ID of the user or message targeted by a context menu command","ref":"Nostrum.Struct.ApplicationCommandInteractionData.html#t:target_id/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption","doc":"Struct for command invocation arguments.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.focused/0","doc":"Whether this parameter is focused for `autocomplete` interactions.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:focused/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.name/0","doc":"Parameter name","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.options/0","doc":"Parameter options for subcommands.\n\nMutually exclusive with `value`.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.t/0","doc":"Command interaction data struct","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.type/0","doc":"The application command option type.\n\nSee https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type\nfor more details.\n\nYou can use one of the `Nostrum.Constants.ApplicationCommandOptionType` methods.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption.value/0","doc":"Parameter value.\n\nThe type of this depends on the `t:type/0`:\n\n- For `t:type/0` of `3`, this will be a `t:String.t/0`.\n- For `t:type/0` of `4`, this will be a `t:integer/0`.\n- For `t:type/0` of `5`, this will be a `t:boolean/0`.\n- For `t:type/0` of `6`, this will be a `t:Nostrum.Struct.User.id/0`. The\n corresponding guild member _and_ user can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `7`, this will be a `t:Nostrum.Struct.Channel.id/0`. The\n corresponding channel can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `8`, this will be a `t:Nostrum.Struct.Guild.Role.id/0`. The\n corresponding role can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `9`, this will be a `t:Nostrum.Struct.User.id/0` or `t:Nostrum.Struct.Guild.Role.id/0`. The\n corresponding user or role can be looked up in\n `t:Nostrum.Struct.ApplicationCommandInteractionData.resolved/0`.\n- For `t:type/0` of `10`, this will be a `t:number/0`.\n\nMutually exclusive with `options`. If `options` is not `nil`, this will be `nil`.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataOption.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","doc":"Converted interaction payload.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.attachments/0","doc":"Attachments sent along with the interaction.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:attachments/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.channels/0","doc":"IDs and corresponding partial channels.\n\nThe channels in this map *only* have the following keys set:\n\n- ``id``\n- ``name``\n- ``type``\n- ``permissions``","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:channels/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.members/0","doc":"IDs and corresponding partial members.\n\nThese members are *missing* values on the following fields:\n\n- ``user``\n- ``deaf``\n- ``mute``\n\nThe corresponding user data can be looked up in ``users``. For members that\nare part of this map, data for the corresponding user will always be included.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:members/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.messages/0","doc":"The IDs and corresponding messages.","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:messages/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.roles/0","doc":"IDs and corresponding roles","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.t/0","doc":"Resolved interaction data","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.users/0","doc":"IDs and corresponding users","ref":"Nostrum.Struct.ApplicationCommandInteractionDataResolved.html#t:users/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule","doc":"Struct representing an auto-moderation rule.","ref":"Nostrum.Struct.AutoModerationRule.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.actions/0","doc":"A list of Actions which will be performed when the rule is triggered.","ref":"Nostrum.Struct.AutoModerationRule.html#t:actions/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.creator_id/0","doc":"The id of the user who created the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:creator_id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.enabled/0","doc":"If the rule is enabled or not.","ref":"Nostrum.Struct.AutoModerationRule.html#t:enabled/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.event_type/0","doc":"Indicates in what event context a rule should be checked\n\n| value | type | description\n| ---- | ---- | -----------\n|`1` | `MESSAGE_SEND` | when a member sends or edits a message in a guild","ref":"Nostrum.Struct.AutoModerationRule.html#t:event_type/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.exempt_channels/0","doc":"A list of channels that are exempt from the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:exempt_channels/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.exempt_roles/0","doc":"A list of roles that are exempt from the rule.","ref":"Nostrum.Struct.AutoModerationRule.html#t:exempt_roles/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.guild_id/0","doc":"The id of the guild the rule belongs to","ref":"Nostrum.Struct.AutoModerationRule.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.id/0","doc":"The id of the auto-moderation rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.name/0","doc":"The name of the rule","ref":"Nostrum.Struct.AutoModerationRule.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.preset_values/0","doc":"Values which represent the different presets defined by Discord\n\n| value | type | description\n| ---- | ---- | -----------\n|`1` | `PROFANITY` | Words which may be considered profane\n| `2` | `HARMFUL_LINK` | Words that refer to sexually explicit behavior or activity\n| `3` | `SLURS` | Personal insults or words that may be considered hate speech","ref":"Nostrum.Struct.AutoModerationRule.html#t:preset_values/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.t/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.trigger_metadata/0","doc":"Additional data used to determine if the rule should triggered.\n\nThe `t:trigger_type/0` field will determine which of the following fields are present.\n\n| key | associated `trigger_type`\n| ---- | -----------\n| `keywords` | `​KEYWORD`\n| `preset` | `KEYWORD_PRESET`","ref":"Nostrum.Struct.AutoModerationRule.html#t:trigger_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.trigger_type/0","doc":"Characters the type of content which triggered the rule\n\n| value | type | max per guild | description\n| ---- | ---- | ----- | -----------\n|`1` | `​KEYWORD` | 3 | check if content contains words from a user defined list of keywords\n| `2` | `HARMFUL_LINK` | 1 | check if the content contains any harmful links\n| `3` | `SPAM` | 1 | check if the content represents generic spam\n| `4` | `KEYWORD_PRESET `| 1 | check if the content contains a list of discord defined keywords\n\nnote: `HARMFUL_LINK` and `SPAM` are not yet offically released at the time of this writing.","ref":"Nostrum.Struct.AutoModerationRule.html#t:trigger_type/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.Action","doc":"Defines an action to be taken when a rule is triggered.","ref":"Nostrum.Struct.AutoModerationRule.Action.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.action_type/0","doc":"The type of action to be taken.\n\n| value | action | description\n| ---- | ---- | -----------\n|`1` | `BLOCK_MESSAGE` | Blocks the message from being created\n| `2` | `SEND_ALERT_MESSAGE` | Logs the content of the message in the specified channel\n| `3` | `TIMEOUT` | timeout a user for a specified duration","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:action_type/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.metadata/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.Action.t/0","doc":"","ref":"Nostrum.Struct.AutoModerationRule.Action.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata","doc":"Struct representing any additional data used when an action is taken.","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.send_alert_message_metadata/0","doc":"The id of the channel to send an alert message to.","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:send_alert_message_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.t/0","doc":"The type of metadata present depends on the action type.\n\n| value | type\n| ---- | ----\n| `channel_id` | `SEND_ALERT_MESSAGE`\n| `duration_seconds` | `TIMEOUT`","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata.timeout_metadata/0","doc":"The number of seconds to timeout the user for,\nhas a maximum of 2419200 seconds (4 weeks).","ref":"Nostrum.Struct.AutoModerationRule.ActionMetadata.html#t:timeout_metadata/0"},{"type":"module","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","doc":"Struct representing the metadata of a trigger.","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.keyword_metadata/0","doc":"Contains the list of keywords to that will trigger the rule.","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:keyword_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.preset_value_metadata/0","doc":"A list of Values which represent the different presets defined by Discord\n\n| value | type | description\n| ---- | ---- | -----------\n| `1` | `PROFANITY` | Words which may be considered profane\n| `2` | `HARMFUL_LINK` | Words that refer to sexually explicit behavior or activity\n| `3` | `SLURS` | Personal insults or words that may be considered hate speech","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:preset_value_metadata/0"},{"type":"type","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.t/0","doc":"Additional data used to determine if the rule should triggered.\n\nThe `t:Nostrum.Struct.AutoModerationRule.trigger_type/0` of the parent struct determine which of the following fields are not `nil`.\n\n| key | associated `trigger_type`\n| ---- | -----------\n| `keywords` | `​KEYWORD`\n| `preset` | `KEYWORD_PRESET`","ref":"Nostrum.Struct.AutoModerationRule.TriggerMetadata.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Channel","doc":"Struct and helper functions for working with channels.","ref":"Nostrum.Struct.Channel.html"},{"type":"module","title":"Channel Struct - Nostrum.Struct.Channel","doc":"The channel struct is used by Nostrum to represent a _Discord Channel Object_. More information can be found on the [Discord API Channel Documentation](https://discord.com/developers/docs/resources/channel#channels-resource).\n\nThe struct can have one of several forms depending on the type of channel. You can read more about the individual channel types [below](#module-channel-types).\n\nA typical channel would appear as:\n\n```elixir\n%Nostrum.Struct.Channel{\n guild_id: 766435015768539156,\n id: 827333533688397865,\n name: \"announcements\",\n nsfw: false,\n permission_overwrites: [],\n position: 1,\n type: 5,\n}\n```\n\nThe channel struct implements `String.Chars` protocol through the `mention/1` function. This example uses our channel from the previous code block.\n\n```elixir\nchannel |> to_string()\n\"<#766435015768539156>\"\n```","ref":"Nostrum.Struct.Channel.html#module-channel-struct"},{"type":"module","title":"Channel Caching - Nostrum.Struct.Channel","doc":"Channels are cached within the guild object they are a member of. To fetch a cached channel you should use the `Nostrum.Cache.ChannelGuildMapping` cache to map a cache to a guild ID.\n\nOnce you have a guild ID, you can use the `Nostrum.Cache.GuildCache` to fetch the guild and all channels, then use the `t:Nostrum.Struct.Guild.channels/0` field to find the channel.\n\n> #### Note on DM Channels {: .tip}\n>\n> The `Nostrum.Cache.ChannelGuildMapping` by design only caches a mapping of channels to their respective guilds, and the stored channel object sits within the `Nostrum.Cache.GuildCache`.\n>\n> Due to how Direct Message channels work (no `CHANNEL_CREATE` events, not sent in any gateway events, etc.), we make no attempt to store direct message channels within any of the\n> built-in Nostrum caching adapters.\n>\n> If you wish to implement this functionality yourself, you will have to fetch the channel details from the API by looking at the `channel_id` field of received message objects,\n> you can then store these details in your own choice of caching system (ETS, Mnesia, etc.).","ref":"Nostrum.Struct.Channel.html#module-channel-caching"},{"type":"module","title":"Example - Nostrum.Struct.Channel","doc":"```elixir\n> guild_id = Nostrum.Cache.ChannelGuildMapping.get(1229955694258684005)\n1226944827137069107\n> {:ok, guild} = Nostrum.Cache.GuildCache.get(guild_id)\n{:ok,\n %Nostrum.Struct.Guild{\n id: 1226944827137069107,\n name: \"Craig Cat Zone\",\n ...\n}}\n> guild.channels[channel_id].name\n\"cat-general\"\n```","ref":"Nostrum.Struct.Channel.html#module-example"},{"type":"module","title":"Helper Functions - Nostrum.Struct.Channel","doc":"This module contains two functions for assisting with channel structs. `mention/1` to convert the channel into a mention as a string, and `link/1` to convert the channel into a hyperlink as a string. Further details and examples are detailed in the [Functions section of this module.](#functions)","ref":"Nostrum.Struct.Channel.html#module-helper-functions"},{"type":"module","title":"Api Functions - Nostrum.Struct.Channel","doc":"The Nostrum Api contains numerous functions related to channels. Notable functions relating to channels are shown below.\n\n- `Nostrum.Api.create_guild_channel/2`\n- `Nostrum.Api.get_channel/1`\n- `Nostrum.Api.modify_channel/3`\n- `Nostrum.Api.delete_channel/2`\n- `Nostrum.Api.add_pinned_channel_message/2`\n- `Nostrum.Api.create_channel_invite/3`\n- `Nostrum.Api.get_guild_channels/1`\n- `Nostrum.Api.modify_guild_channel_positions/2`\n\n> Note: This is not an exhaustive list, for full details please see the `Nostrum.Api` module documentation.","ref":"Nostrum.Struct.Channel.html#module-api-functions"},{"type":"module","title":"Channel Types - Nostrum.Struct.Channel","doc":"Channels take the shape of various types depending on their use and not all fields are always used. The currently implemented channel types are detailed below. The type of channel is determined by the `:type` field.\n\nThis diagram represents the regular channel types `0`, `2`, `5` and `13`.\n\n ![Discord Channels](./assets/channel_types.png)\n\n The currently implemented channel types are:\n\n| |Channel Type | |\n|---- |-------------------- |--------------------------------------------------------------- |\n|`0` |[`GUILD_TEXT`](`t:guild_text_channel/0`) |_A text channel within a server_ |\n|`1` |[`DM`](`t:dm_channel/0`) |_A direct message between users_ |\n|`2` |[`GUILD_VOICE`](`t:guild_voice_channel/0`) |_A voice channel within a server_ |\n|`3` |[`GROUP_DM`](`t:group_dm_channel/0`) |_A direct message between multiple users_ |\n|`4` |[`GUILD_CATEGORY`](`t:guild_category_channel/0`) |_A category that contains up to 50 channels_ |\n|`5` |[`GUILD_NEWS`](`t:guild_news_channel/0`) |_A channel that users can follow and crosspost_ |\n|`6` |[`GUILD_STORE`](`t:guild_store_channel/0`) |_A channel to sell games on Discord_ |\n|`10` |[`GUILD_NEWS_THREAD`](`t:guild_news_thread_channel/0`) |_A temporary sub-channel within a news channel_ |\n|`11` |[`GUILD_PUBLIC_THREAD`](`t:guild_public_thread_channel/0`) |_A temporary sub-channel within a text channel_ |\n|`12` |[`GUILD_PRIVATE_THREAD`](`t:guild_private_thread_channel/0`) |_A temporary private sub-channel within a text channel_ |\n|`13` |[`GUILD_STAGE_VOICE`](`t:guild_stage_voice_channel/0`) |_A voice channel for hosting events with an audience_ |\n|`15` |[`GUILD_FORUM`](`t:guild_forum_channel/0`) |_A channel that can only contain threads |\n\nYou can use one of the `Nostrum.Constants.ChannelType` methods.\n\nMore information about _Discord Channel Types_ can be found on the [Discord API Channel Type Documentation](https://discord.com/developers/docs/resources/channel#channel-object-channel-types).","ref":"Nostrum.Struct.Channel.html#module-channel-types"},{"type":"function","title":"Nostrum.Struct.Channel.mention/1","doc":"Convert a channel into a mention.\n\nHandles the conversion of a `Nostrum.Struct.Channel` into the required format to _mention_ the channel within a message. Mentioning the channel will provide a clickable link to take the user to the channel.","ref":"Nostrum.Struct.Channel.html#mention/1"},{"type":"function","title":"Parameters - Nostrum.Struct.Channel.mention/1","doc":"- channel: `t:Nostrum.Struct.Channel.t/0`","ref":"Nostrum.Struct.Channel.html#mention/1-parameters"},{"type":"function","title":"Examples - Nostrum.Struct.Channel.mention/1","doc":"```elixir\nchannel\n|> Nostrum.Struct.Channel.mention()\n\"<#381889573426429952>\"\n\n```","ref":"Nostrum.Struct.Channel.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Channel.application_id/0","doc":"The id of the application that created a group direct message or thread.\n\nThis applies to bot created channels.","ref":"Nostrum.Struct.Channel.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.applied_tags/0","doc":"","ref":"Nostrum.Struct.Channel.html#t:applied_tags/0"},{"type":"type","title":"Nostrum.Struct.Channel.archive_timestamp/0","doc":"When the thread was archived.","ref":"Nostrum.Struct.Channel.html#t:archive_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.archived/0","doc":"The threads archived status.","ref":"Nostrum.Struct.Channel.html#t:archived/0"},{"type":"type","title":"Nostrum.Struct.Channel.auto_archive_duration/0","doc":"Archive duration for the thread in minutes.\n\n- 60, 1 hour\n- 1440, 24 hours\n- 4320, 3 days\n- 10080, 7 days","ref":"Nostrum.Struct.Channel.html#t:auto_archive_duration/0"},{"type":"type","title":"Nostrum.Struct.Channel.bitrate/0","doc":"The bitate of the voice channel.","ref":"Nostrum.Struct.Channel.html#t:bitrate/0"},{"type":"type","title":"Nostrum.Struct.Channel.channel_mention/0","doc":"A partial channel object representing a channel mention.\n\nMore information about the _Discord Channel Mention Object_ can be found at the [Discord API Channel Mention Object\nDocumentation](https://discord.com/developers/docs/resources/channel#channel-mention-object).","ref":"Nostrum.Struct.Channel.html#t:channel_mention/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_auto_archive_duration/0","doc":"Default duration for newly created threads in minutes.\n\n- 60, 1 hour\n- 1440, 24 hours\n- 4320, 3 days\n- 10080, 7 days","ref":"Nostrum.Struct.Channel.html#t:default_auto_archive_duration/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_reaction_emoji/0","doc":"An object that specifies the emoji to use as the default way to react to a forum post.\n\n`:emoji_id` and `:emoji_name` are mutually exclusive","ref":"Nostrum.Struct.Channel.html#t:default_reaction_emoji/0"},{"type":"type","title":"Nostrum.Struct.Channel.default_thread_rate_limit_per_user/0","doc":"The `:rate_limit_per_user` which will be applied to threads created in the channel, in seconds.","ref":"Nostrum.Struct.Channel.html#t:default_thread_rate_limit_per_user/0"},{"type":"type","title":"Nostrum.Struct.Channel.dm_channel/0","doc":"Type 1 partial channel object representing a direct message.","ref":"Nostrum.Struct.Channel.html#t:dm_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.flags/0","doc":"User thread settings, currently only used for notifications.","ref":"Nostrum.Struct.Channel.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Channel.forum_tag/0","doc":"A map representing a tag for use in forum channels.\n\n`:moderated` indicates whether the tag can only be added or removed by moderators.\n`:emoji_id` and `:emoji_name` are mutually exclusive and indicate the emoji used to represent the tag.","ref":"Nostrum.Struct.Channel.html#t:forum_tag/0"},{"type":"type","title":"Nostrum.Struct.Channel.group_dm_channel/0","doc":"Type 3 partial channel object representing a group direct message.","ref":"Nostrum.Struct.Channel.html#t:group_dm_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_category_channel/0","doc":"Type 4 partial channel object representing a channel category.\n\n> Note: Other channels `parent_id` field refers to this type of object.","ref":"Nostrum.Struct.Channel.html#t:guild_category_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_channel/0","doc":"Guild channel types","ref":"Nostrum.Struct.Channel.html#t:guild_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_forum_channel/0","doc":"Type 15 a guild forum channel.","ref":"Nostrum.Struct.Channel.html#t:guild_forum_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_id/0","doc":"The id of the guild the channel is located in.","ref":"Nostrum.Struct.Channel.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_news_channel/0","doc":"Type 5 partial channel object representing a news channel.","ref":"Nostrum.Struct.Channel.html#t:guild_news_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_news_thread_channel/0","doc":"Type 10 partial channel object representing a news thread.","ref":"Nostrum.Struct.Channel.html#t:guild_news_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_private_thread_channel/0","doc":"Type 12 partial channel object representing a private thread.","ref":"Nostrum.Struct.Channel.html#t:guild_private_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_public_thread_channel/0","doc":"Type 11 partial channel object representing a standard thread.","ref":"Nostrum.Struct.Channel.html#t:guild_public_thread_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_stage_voice_channel/0","doc":"Type 13 channel object representing a stage channel.","ref":"Nostrum.Struct.Channel.html#t:guild_stage_voice_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_store_channel/0","doc":"Type 6 partial channel object representing a store channel.","ref":"Nostrum.Struct.Channel.html#t:guild_store_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_text_channel/0","doc":"Type 0 partial channel object representing a text channel within a guild.","ref":"Nostrum.Struct.Channel.html#t:guild_text_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.guild_voice_channel/0","doc":"Type 2 partial channel object representing an audio channel within a guild.","ref":"Nostrum.Struct.Channel.html#t:guild_voice_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.icon/0","doc":"The hash of the channels icon.","ref":"Nostrum.Struct.Channel.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Channel.id/0","doc":"The id of the channel object.","ref":"Nostrum.Struct.Channel.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Channel.join_timestamp/0","doc":"When the user joined the thread.","ref":"Nostrum.Struct.Channel.html#t:join_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.last_message_id/0","doc":"The id of the last message sent in the channel.\n\nFor `GUILD_FORUM` channels, this is the last thread created in the channel.","ref":"Nostrum.Struct.Channel.html#t:last_message_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.last_pin_timestamp/0","doc":"Timestamp for the last pinned message.","ref":"Nostrum.Struct.Channel.html#t:last_pin_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Channel.locked/0","doc":"The threads locked status.","ref":"Nostrum.Struct.Channel.html#t:locked/0"},{"type":"type","title":"Nostrum.Struct.Channel.member/0","doc":"Present when the bot joins a thread.\n\nNote: This is omitted on threads that the bot can immediately access on `:GUILD_CREATE` events received.","ref":"Nostrum.Struct.Channel.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Channel.member_count/0","doc":"Approximate count of members in a thread, capped at 50.","ref":"Nostrum.Struct.Channel.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Channel.message_count/0","doc":"Approximate count of messages in a thread, capped at 50.","ref":"Nostrum.Struct.Channel.html#t:message_count/0"},{"type":"type","title":"Nostrum.Struct.Channel.name/0","doc":"The name of the channel.","ref":"Nostrum.Struct.Channel.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Channel.newly_created/0","doc":"Included only in the `THREAD_CREATE` event.","ref":"Nostrum.Struct.Channel.html#t:newly_created/0"},{"type":"type","title":"Nostrum.Struct.Channel.nsfw/0","doc":"Whether the NSFW setting is enabled for this channel.","ref":"Nostrum.Struct.Channel.html#t:nsfw/0"},{"type":"type","title":"Nostrum.Struct.Channel.owner_id/0","doc":"The id of the user of a group direct message or thread.\n\nThis applies to user created channels.","ref":"Nostrum.Struct.Channel.html#t:owner_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.parent_id/0","doc":"The id of the parent channel that this channel is located under.\n\nFor threads, that is the channel that contains the thread. For regular channels, it is the category that the channel is located under.","ref":"Nostrum.Struct.Channel.html#t:parent_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.permission_overwrites/0","doc":"A list of permission overwrites applied to the channel.","ref":"Nostrum.Struct.Channel.html#t:permission_overwrites/0"},{"type":"type","title":"Nostrum.Struct.Channel.permissions/0","doc":"Computed permissions of the invoking user.\n\nPermissions for the invoking user in the channel, including overwrites, only included when part of the resolved data received on a slash command interaction","ref":"Nostrum.Struct.Channel.html#t:permissions/0"},{"type":"type","title":"Nostrum.Struct.Channel.position/0","doc":"The position of the channel in the sidebar of the guild.","ref":"Nostrum.Struct.Channel.html#t:position/0"},{"type":"type","title":"Nostrum.Struct.Channel.rate_limit_per_user/0","doc":"The users rate limit.\n\nAmount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission manage_messages or manage_channel, are unaffected","ref":"Nostrum.Struct.Channel.html#t:rate_limit_per_user/0"},{"type":"type","title":"Nostrum.Struct.Channel.recipients/0","doc":"A list of users in a group DM.","ref":"Nostrum.Struct.Channel.html#t:recipients/0"},{"type":"type","title":"Nostrum.Struct.Channel.rtc_region/0","doc":"Region id for the channel.\n\nMore information about _region ids_ can be found on the [Discord API Voice Region Object Documentation](https://discord.com/developers/docs/resources/voice#voice-region-object).","ref":"Nostrum.Struct.Channel.html#t:rtc_region/0"},{"type":"type","title":"Nostrum.Struct.Channel.t/0","doc":"All valid channel types.","ref":"Nostrum.Struct.Channel.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Channel.text_channel/0","doc":"All valid text channels.","ref":"Nostrum.Struct.Channel.html#t:text_channel/0"},{"type":"type","title":"Nostrum.Struct.Channel.thread_metadata/0","doc":"Thread-specific fields not needed by other channels.","ref":"Nostrum.Struct.Channel.html#t:thread_metadata/0"},{"type":"type","title":"Nostrum.Struct.Channel.topic/0","doc":"The topic of the channel.","ref":"Nostrum.Struct.Channel.html#t:topic/0"},{"type":"type","title":"Nostrum.Struct.Channel.type/0","doc":"The type of channel.\n\nMore information about _Discord Channel Types_ can be found under the [`types`](#module-channel-types) on the [Discord API Channel Type Documentation](https://discord.com/developers/docs/resources/channel#channel-object-channel-types).","ref":"Nostrum.Struct.Channel.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Channel.user_id/0","doc":"User id of the threads creator.","ref":"Nostrum.Struct.Channel.html#t:user_id/0"},{"type":"type","title":"Nostrum.Struct.Channel.user_limit/0","doc":"The user limit of a voice channel.","ref":"Nostrum.Struct.Channel.html#t:user_limit/0"},{"type":"type","title":"Nostrum.Struct.Channel.video_quality_mode/0","doc":"The video quality mode of the channel.\n\nMore information about _video quality modes_ can be found on the [Discord API Video Quality Mode Documentation](https://discord.com/developers/docs/resources/channel#channel-object-video-quality-modes).","ref":"Nostrum.Struct.Channel.html#t:video_quality_mode/0"},{"type":"type","title":"Nostrum.Struct.Channel.voice_channel/0","doc":"A `Nostrum.Struct.Channel` that represents a voice channel","ref":"Nostrum.Struct.Channel.html#t:voice_channel/0"},{"type":"behaviour","title":"Nostrum.Struct.Component","doc":"Components are a framework for adding interactive elements to the messages your app or bot sends. They're accessible, customizable, and easy to use. There are several different types of components; this documentation will outline the basics of this new framework and each example.\n\n> Components have been broken out into individual modules for easy distinction between them and to separate helper functions and individual type checking between component types - especially as more components are added by Discord.\n\nEach of the components are provided all of the valid types through this module to avoid repetition and allow new components to be added quicker and easier.","ref":"Nostrum.Struct.Component.html"},{"type":"behaviour","title":"Action Row - Nostrum.Struct.Component","doc":"An Action Row is a non-interactive container component for other types of components. It has a `type: 1` and a sub-array of `components` of other types.\n\n- You can have up to 5 Action Rows per message\n- An Action Row cannot contain another Action Row\n- An Action Row containing buttons cannot also contain a select menu","ref":"Nostrum.Struct.Component.html#module-action-row"},{"type":"behaviour","title":"Buttons - Nostrum.Struct.Component","doc":"Buttons are interactive components that render on messages. They have a `type: 2`, They can be clicked by users. Buttons in Nostrum are further separated into two types, detailed below. Only the [Interaction Button](#module-interaction-buttons-non-link-buttons) will fire a `Nostrum.Struct.Interaction` when pressed.\n\n![Discord Buttons](./assets/buttons.png)\n\n- Buttons must exist inside an Action Row\n- An Action Row can contain up to 5 buttons\n- An Action Row containing buttons cannot also contain a select menu\n\nFor more information check out the [Discord API Button Styles](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles) for more information.","ref":"Nostrum.Struct.Component.html#module-buttons"},{"type":"behaviour","title":"Link Buttons - Nostrum.Struct.Component","doc":"- Link buttons **do not** send an `interaction` to your app when clicked\n- Link buttons **must** have a `url`, and **cannot** have a `custom_id`\n- Link buttons will **always** use `style: 5`\n\n#### Link `style: 5`\n![Link Button](./assets/secondary_button.png)","ref":"Nostrum.Struct.Component.html#module-link-buttons"},{"type":"behaviour","title":"Interaction Buttons ( Non-link Buttons ) - Nostrum.Struct.Component","doc":"> Discord calls these buttons \"Non-link Buttons\" due to the fact that they do not contain a url. However it would be more accurate to call them an \"Interaction Button\" as they **do** fire an interaction when clicked which is far more useful for your applications interactivity. As such they are referred to as \"Interaction Button\" throughout the rest of this module.\n\n- Interaction buttons **must** have a `custom_id`, and **cannot** have a `url`\n- Can have one of the below `:style` applied.\n\n#### Primary `style: 1`\n![Primary](./assets/primary_button.png)\n\n#### Secondary `style: 2`\n![Secondary](./assets/secondary_button.png)\n\n#### Success `style: 3`\n![Success](./assets/success_button.png)\n\n#### Danger `style: 4`\n![Danger (1)](./assets/danger_button.png)","ref":"Nostrum.Struct.Component.html#module-interaction-buttons-non-link-buttons"},{"type":"behaviour","title":"🐼 ~~Emoji Buttons~~ - Nostrum.Struct.Component","doc":"> Note: The discord documentation and marketing material in relation to buttons indicates that there are three kinds of buttons: 🐼 **Emoji Buttons**, **Link Buttons** & **Non-Link Buttons**. When in fact all buttons can contain an emoji. Because of this reason 🐼 **Emoji Buttons** are not included as a separate type. Emojis will be instead handled by the two included ( superior ) button types.\n\n![emoji buttons in action](./assets/emoji_button.png)\n\n> The field requirements are already becoming convoluted especially considering everything so far is all still a \"Component\". Using the sub types and helper functions will ensure all of the rules are followed when creating components.","ref":"Nostrum.Struct.Component.html#module-emoji-buttons"},{"type":"behaviour","title":"Select Menu - Nostrum.Struct.Component","doc":"Select menus are another interactive component that renders on messages. On desktop, clicking on a select menu opens a dropdown-style UI; on mobile, tapping a select menu opens up a half-sheet with the options.\n\n![Discord Selects](./assets/select_menu.png)\n\nSelect menus support single-select and multi-select behavior, meaning you can prompt a user to choose just one item from a list, or multiple. When a user finishes making their choice by clicking out of the dropdown or closing the half-sheet, your app will receive an interaction.\n- Select menus **must** be sent inside an Action Row\n- An Action Row can contain **only one** select menu\n- An Action Row containing a select menu **cannot** also contain buttons","ref":"Nostrum.Struct.Component.html#module-select-menu"},{"type":"behaviour","title":"Text Input - Nostrum.Struct.Component","doc":"Text inputs are an interactive component that render on modals. They can be used to collect short-form or long-form text.\n- Text inputs **must** be sent inside an Action Row\n- An Action Row can contain **only one** text input\n- An Action Row containing a text input **cannot** also contain buttons or a select menu\n\nCan be used to collect short-form or long-form text.\n- For short-form text, use `style: 1`\n- For long-form text, use `style: 2`\n\nText inputs are only allowed to be sent as part of an Interaction response that opens a MODAL.","ref":"Nostrum.Struct.Component.html#module-text-input"},{"type":"callback","title":"Nostrum.Struct.Component.new/1","doc":"Create a component from the given keyword list of options\n\n> Note: While using this function directly, you are not guaranteed to produce a valid component and it is the responsibility of the user to ensure they are passing a valid combination of component attributes. eg. if you pass a button component both a `custom_id`, and a `url`, the component is invalid as only one of these fields is allowed.","ref":"Nostrum.Struct.Component.html#c:new/1"},{"type":"function","title":"Nostrum.Struct.Component.to_struct/1","doc":"","ref":"Nostrum.Struct.Component.html#to_struct/1"},{"type":"callback","title":"Nostrum.Struct.Component.update/2","doc":"Updates a component with the parameters provided.\n\n> Note: While using this function directly, you are not guaranteed to produce a valid component and it is the responsibility of the user to ensure they are passing a valid combination of component attributes. eg. if you pass a button component both a `custom_id`, and a `url`, the component is invalid as only one of these fields is allowed.","ref":"Nostrum.Struct.Component.html#c:update/2"},{"type":"type","title":"Nostrum.Struct.Component.channel_types/0","doc":"","ref":"Nostrum.Struct.Component.html#t:channel_types/0"},{"type":"type","title":"Nostrum.Struct.Component.components/0","doc":"A list of components to place inside an action row.\n\nDue to constraints of action rows, this can either be a list of up to five buttons, a single select menu, or a single text input.\n\nValid for [Action Row](#module-action-row).","ref":"Nostrum.Struct.Component.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Component.custom_id/0","doc":"Used to identify the component when the interaction is sent to you from the user.\n\nValid for [Interaction Buttons](#module-interaction-button), [Select Menus](#module-select-menu), and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.Component.default_values/0","doc":"","ref":"Nostrum.Struct.Component.html#t:default_values/0"},{"type":"type","title":"Nostrum.Struct.Component.disabled/0","doc":"Indicates if the component is disabled or not.\n\nValid for [Buttons](#module-buttons) & [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:disabled/0"},{"type":"type","title":"Nostrum.Struct.Component.emoji/0","doc":"A partial emoji to display on the object.\n\nValid for [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Component.label/0","doc":"A string that appears on the button, max 80 characters.\n\nValid for [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Component.max_length/0","doc":"The maximum length of the text input. Minimum value 1, max 4000.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:max_length/0"},{"type":"type","title":"Nostrum.Struct.Component.max_values/0","doc":"The maximum number of permitted selections. Minimum value 0, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:max_values/0"},{"type":"type","title":"Nostrum.Struct.Component.min_length/0","doc":"The minimum length of the text input. Minimum value 0, max 4000.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:min_length/0"},{"type":"type","title":"Nostrum.Struct.Component.min_values/0","doc":"The minimum number of permitted selections. Minimum value 0, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:min_values/0"},{"type":"type","title":"Nostrum.Struct.Component.options/0","doc":"A list of options for select menus, max 25.\n\nValid for [Select Menus](#module-select-menu).","ref":"Nostrum.Struct.Component.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.Component.placeholder/0","doc":"Placeholder text if nothing is selected, max 100 characters\n\nValid for [Select Menus](#module-select-menu) and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:placeholder/0"},{"type":"type","title":"Nostrum.Struct.Component.required/0","doc":"Indicates if the text input is required.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:required/0"},{"type":"type","title":"Nostrum.Struct.Component.style/0","doc":"Indicates the style.\n\nYou can use one of the `Nostrum.Constants.ButtonStyle` methods.\n\nValid for Valid for [Interaction Buttons](#module-interaction-button) and [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:style/0"},{"type":"type","title":"Nostrum.Struct.Component.t/0","doc":"The currently valid component types.","ref":"Nostrum.Struct.Component.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.type/0","doc":"The type of component.\n\nValid for All Types.\n\n| | Component Types |\n|------|-----|\n| `1` | Action Row |\n| `2` | Button |\n| `3` | SelectMenu |\n| `4` | TextInput |\n\nYou can use one of the `Nostrum.Constants.ComponentType` methods.\n\nCheck out the [Discord API Message Component Types](https://discord.com/developers/docs/interactions/message-components#component-object-component-types) for more information.","ref":"Nostrum.Struct.Component.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Component.url/0","doc":"A url for link buttons.\n\nValid for: [Buttons](#module-buttons)","ref":"Nostrum.Struct.Component.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Component.value/0","doc":"A pre-filled value for the text input, max 4000 characters.\n\nValid for [Text Input](#module-text-input).","ref":"Nostrum.Struct.Component.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Component.ActionRow","doc":"Action Rows.","ref":"Nostrum.Struct.Component.ActionRow.html"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.action_row/1","doc":"Create an empty action row.\n\nOptions can be passed as a keyword list. The only supported option is a list of inner components","ref":"Nostrum.Struct.Component.ActionRow.html#action_row/1"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.append/2","doc":"Appends a button to the action row.\n\nReturns the action row unchanged if there are already 5 buttons or if the action row contains a select menu or text input.","ref":"Nostrum.Struct.Component.ActionRow.html#append/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.append_lazy/2","doc":"Lazily appends a button to the action row.\n\nIf there are already 5 buttons, the first one will be dropped.","ref":"Nostrum.Struct.Component.ActionRow.html#append_lazy/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.flatten/1","doc":"","ref":"Nostrum.Struct.Component.ActionRow.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.put/2","doc":"Puts the given component into the action row, any existing components are discarded.","ref":"Nostrum.Struct.Component.ActionRow.html#put/2"},{"type":"function","title":"Nostrum.Struct.Component.ActionRow.put_new/2","doc":"Puts the components into the action row unless a list of inner components already exists.","ref":"Nostrum.Struct.Component.ActionRow.html#put_new/2"},{"type":"type","title":"Nostrum.Struct.Component.ActionRow.t/0","doc":"","ref":"Nostrum.Struct.Component.ActionRow.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.Button","doc":"Helpers for dealing with Button Components","ref":"Nostrum.Struct.Component.Button.html"},{"type":"function","title":"Nostrum.Struct.Component.Button.button/1","doc":"Create a button.\n\nThis function provides direct access to the `new/1` callback.\n\n> Note: While using this function directly you are **not** guaranteed to return a valid button, providing a valid combination of options becomes the responsibility of the reader. It is instead recommended to use the helper functions provided below.","ref":"Nostrum.Struct.Component.Button.html#button/1"},{"type":"function","title":"Nostrum.Struct.Component.Button.disable/2","doc":"Disables the button when `disabled` is true. Enables it otherwise.","ref":"Nostrum.Struct.Component.Button.html#disable/2"},{"type":"function","title":"Nostrum.Struct.Component.Button.flatten/1","doc":"","ref":"Nostrum.Struct.Component.Button.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.Button.interaction_button/3","doc":"Create an interaction button.\n\nRead more about interaction buttons in the `Nostrum.Struct.Component` documentation.","ref":"Nostrum.Struct.Component.Button.html#interaction_button/3"},{"type":"function","title":"Nostrum.Struct.Component.Button.link_button/3","doc":"Create a link button.\n\nRead more about link buttons in the `Nostrum.Struct.Component` documentation.","ref":"Nostrum.Struct.Component.Button.html#link_button/3"},{"type":"function","title":"Nostrum.Struct.Component.Button.put_style/2","doc":"Changes the style of the button.","ref":"Nostrum.Struct.Component.Button.html#put_style/2"},{"type":"function","title":"Nostrum.Struct.Component.Button.toggle/1","doc":"Toggle the buttons disabled state.","ref":"Nostrum.Struct.Component.Button.html#toggle/1"},{"type":"type","title":"Nostrum.Struct.Component.Button.interaction_button/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:interaction_button/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.link_button/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:link_button/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.opt/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.opts/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.Button.t/0","doc":"","ref":"Nostrum.Struct.Component.Button.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.ChannelSelect","doc":"Channel Select","ref":"Nostrum.Struct.Component.ChannelSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.ChannelSelect.channel_select/2","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#channel_select/2"},{"type":"function","title":"Nostrum.Struct.Component.ChannelSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#flatten/1"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.ChannelSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.ChannelSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.DefaultValue","doc":"Default Value","ref":"Nostrum.Struct.Component.DefaultValue.html"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.id/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.t/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.DefaultValue.type/0","doc":"","ref":"Nostrum.Struct.Component.DefaultValue.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Component.MentionableSelect","doc":"Mentionable Select","ref":"Nostrum.Struct.Component.MentionableSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.MentionableSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.MentionableSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.MentionableSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.MentionableSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.Option","doc":"Component Options","ref":"Nostrum.Struct.Component.Option.html"},{"type":"type","title":"Nostrum.Struct.Component.Option.default/0","doc":"If this option is selected by default.","ref":"Nostrum.Struct.Component.Option.html#t:default/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.description/0","doc":"An optional description of the option. Max length is 100 characters.","ref":"Nostrum.Struct.Component.Option.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.emoji/0","doc":"","ref":"Nostrum.Struct.Component.Option.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.label/0","doc":"The user-facing name of the option.","ref":"Nostrum.Struct.Component.Option.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.t/0","doc":"","ref":"Nostrum.Struct.Component.Option.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Component.Option.value/0","doc":"The developer defined value of the option.","ref":"Nostrum.Struct.Component.Option.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Component.RoleSelect","doc":"Role Select","ref":"Nostrum.Struct.Component.RoleSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.RoleSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.RoleSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.RoleSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.RoleSelect.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.SelectMenu","doc":"Select Menu","ref":"Nostrum.Struct.Component.SelectMenu.html"},{"type":"function","title":"Nostrum.Struct.Component.SelectMenu.flatten/1","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"Creates a select menu that can be used inside an action row.\n\nOptions can be passed as a keyword list.","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2"},{"type":"function","title":"Parameters - Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"- `custom_id` - lower case string, used for matching against when your application receives an interaction.","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2-parameters"},{"type":"function","title":"Options - Nostrum.Struct.Component.SelectMenu.select_menu/2","doc":"- `disabled` - If the select should be disabled\n- `options` - A list of options for the select menu, see `Nostrum.Struct.Component.Option`\n- `placeholder` - Value to be shown before anything is selected\n- `min_values` - minimum number of values the user must select, between 0 and 25, default is 1\n- `max_values` - maximum number of values the user must select, between 0 and 25, default is 1","ref":"Nostrum.Struct.Component.SelectMenu.html#select_menu/2-options"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.opt/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.opts/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.SelectMenu.t/0","doc":"","ref":"Nostrum.Struct.Component.SelectMenu.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.TextInput","doc":"Text Input.","ref":"Nostrum.Struct.Component.TextInput.html"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.flatten/1","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.put_style/2","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#put_style/2"},{"type":"function","title":"Nostrum.Struct.Component.TextInput.text_input/3","doc":"Create a text input component.","ref":"Nostrum.Struct.Component.TextInput.html#text_input/3"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.opt/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.opts/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.TextInput.t/0","doc":"","ref":"Nostrum.Struct.Component.TextInput.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Component.UserSelect","doc":"User Select","ref":"Nostrum.Struct.Component.UserSelect.html"},{"type":"function","title":"Nostrum.Struct.Component.UserSelect.flatten/1","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#flatten/1"},{"type":"function","title":"Nostrum.Struct.Component.UserSelect.mentionable_select/2","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#mentionable_select/2"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.opt/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:opt/0"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.opts/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:opts/0"},{"type":"type","title":"Nostrum.Struct.Component.UserSelect.t/0","doc":"","ref":"Nostrum.Struct.Component.UserSelect.html#t:t/0"},{"type":"behaviour","title":"Nostrum.Struct.Embed","doc":"Functions that work on Discord embeds.","ref":"Nostrum.Struct.Embed.html"},{"type":"behaviour","title":"Building Embeds - Nostrum.Struct.Embed","doc":"`Nostrum.Struct.Embed`s can be built using this module's builder functions\nor standard `Map` syntax:\n\n```elixir\niex> import Nostrum.Struct.Embed\n...> embed =\n...> %Nostrum.Struct.Embed{}\n...> |> put_title(\"craig\")\n...> |> put_description(\"nostrum\")\n...> |> put_url(\"https://google.com/\")\n...> |> put_timestamp(\"2016-05-05T21:04:13.203Z\")\n...> |> put_color(431_948)\n...> |> put_field(\"Field 1\", \"Test\")\n...> |> put_field(\"Field 2\", \"More test\", true)\n...> embed\n%Nostrum.Struct.Embed{\n title: \"craig\",\n description: \"nostrum\",\n url: \"https://google.com/\",\n timestamp: \"2016-05-05T21:04:13.203Z\",\n color: 431_948,\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n}\n```","ref":"Nostrum.Struct.Embed.html#module-building-embeds"},{"type":"behaviour","title":"Using structs - Nostrum.Struct.Embed","doc":"You can also create `Nostrum.Struct.Embed`s from structs, by using the\n`Nostrum.Struct.Embed` module. Here's how the example above could be build using structs\n\n```elixir\n defmodule MyApp.MyStruct do\n use Nostrum.Struct.Embed\n\n defstruct []\n\n def title(_), do: \"craig\"\n def description(_), do: \"nostrum\"\n def url(_), do: \"https://google.com/\"\n def timestamp(_), do: \"2016-05-05T21:04:13.203Z\"\n def color(_), do: 431_948\n\n def fields(_) do\n [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n end\n end\n\niex> Nostrum.Struct.Embed.from(%MyApp.MyStruct{})\n%Nostrum.Struct.Embed{\n title: \"craig\",\n description: \"nostrum\",\n url: \"https://google.com/\",\n timestamp: \"2016-05-05T21:04:13.203Z\",\n color: 431_948,\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"Field 1\", value: \"Test\"},\n %Nostrum.Struct.Embed.Field{name: \"Field 2\", value: \"More test\", inline: true}\n ]\n}\n```\nSee this modules callbacks for a list of all the functions that can be implemented.\n\nThe implementation of these callbacks is optional. Not implemented functions will simply\nbe ignored.","ref":"Nostrum.Struct.Embed.html#module-using-structs"},{"type":"callback","title":"Nostrum.Struct.Embed.author/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:author/1"},{"type":"callback","title":"Nostrum.Struct.Embed.color/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:color/1"},{"type":"callback","title":"Nostrum.Struct.Embed.description/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:description/1"},{"type":"callback","title":"Nostrum.Struct.Embed.fields/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:fields/1"},{"type":"callback","title":"Nostrum.Struct.Embed.footer/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:footer/1"},{"type":"function","title":"Nostrum.Struct.Embed.from/1","doc":"Create an embed from a struct that implements the `Nostrum.Struct.Embed` behaviour","ref":"Nostrum.Struct.Embed.html#from/1"},{"type":"callback","title":"Nostrum.Struct.Embed.image/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:image/1"},{"type":"function","title":"Nostrum.Struct.Embed.put_author/4","doc":"Puts a `Nostrum.Struct.Embed.Author` under `:author` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_author/4"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_author/4","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_author(embed, \"skippi\", \"https://github.com/skippi\", nil)\n%Nostrum.Struct.Embed{\n author: %Nostrum.Struct.Embed.Author{\n name: \"skippi\",\n url: \"https://github.com/skippi\",\n icon_url: nil\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_author/4-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_color/2","doc":"Puts the given `value` under `:color` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_color/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_color/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_color(embed, 431948)\n%Nostrum.Struct.Embed{color: 431948}\n```","ref":"Nostrum.Struct.Embed.html#put_color/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_description/2","doc":"Puts the given `value` under `:description` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_description/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_description/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_description(embed, \"An elixir library for the discord API.\")\n%Nostrum.Struct.Embed{description: \"An elixir library for the discord API.\"}\n```","ref":"Nostrum.Struct.Embed.html#put_description/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_field/4","doc":"Adds a `Nostrum.Struct.Embed.Field` under `:fields` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_field/4"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_field/4","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_field(embed, \"First User\", \"b1nzy\")\n%Nostrum.Struct.Embed{\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"}\n ]\n}\n\niex> embed = %Nostrum.Struct.Embed{\n...> fields: [\n...> %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"}\n...> ]\n...> }\n...> Nostrum.Struct.Embed.put_field(embed, \"Second User\", \"Danny\")\n%Nostrum.Struct.Embed{\n fields: [\n %Nostrum.Struct.Embed.Field{name: \"First User\", value: \"b1nzy\"},\n %Nostrum.Struct.Embed.Field{name: \"Second User\", value: \"Danny\"}\n ]\n}\n```","ref":"Nostrum.Struct.Embed.html#put_field/4-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_footer/3","doc":"Puts a `Nostrum.Struct.Embed.Footer` under `:footer` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_footer/3"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_footer/3","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_footer(embed, \"Discord API\", nil)\n%Nostrum.Struct.Embed{\n footer: %Nostrum.Struct.Embed.Footer{\n text: \"Discord API\",\n icon_url: nil\n }\n}\n\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_footer(embed, \"nostrum footer\", \"https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg\")\n%Nostrum.Struct.Embed{\n footer: %Nostrum.Struct.Embed.Footer{\n text: \"nostrum footer\",\n icon_url: \"https://discord.com/assets/53ef346458017da2062aca5c7955946b.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_footer/3-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_image/2","doc":"Puts a `Nostrum.Struct.Embed.Image` under `:image` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_image/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_image/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_image(embed, \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\")\n%Nostrum.Struct.Embed{\n image: %Nostrum.Struct.Embed.Image{\n url: \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_image/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_thumbnail/2","doc":"Puts a `Nostrum.Struct.Embed.Thumbnail` under `:thumbnail` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_thumbnail/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_thumbnail/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_thumbnail(embed, \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\")\n%Nostrum.Struct.Embed{\n thumbnail: %Nostrum.Struct.Embed.Thumbnail{\n url: \"https://discord.com/assets/af92e60c16b7019f34a467383b31490a.svg\"\n }\n}\n```","ref":"Nostrum.Struct.Embed.html#put_thumbnail/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_timestamp/2","doc":"Puts the given `value` under `:timestamp` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_timestamp/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_timestamp/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_timestamp(embed, \"2018-04-21T17:33:51.893000Z\")\n%Nostrum.Struct.Embed{timestamp: \"2018-04-21T17:33:51.893000Z\"}\n```","ref":"Nostrum.Struct.Embed.html#put_timestamp/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_title/2","doc":"Puts the given `value` under `:title` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_title/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_title/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_title(embed, \"nostrum\")\n%Nostrum.Struct.Embed{title: \"nostrum\"}\n```","ref":"Nostrum.Struct.Embed.html#put_title/2-examples"},{"type":"function","title":"Nostrum.Struct.Embed.put_url/2","doc":"Puts the given `value` under `:url` in `embed`.","ref":"Nostrum.Struct.Embed.html#put_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Embed.put_url/2","doc":"```elixir\niex> embed = %Nostrum.Struct.Embed{}\n...> Nostrum.Struct.Embed.put_url(embed, \"https://github.com/Kraigie/nostrum\")\n%Nostrum.Struct.Embed{url: \"https://github.com/Kraigie/nostrum\"}\n```","ref":"Nostrum.Struct.Embed.html#put_url/2-examples"},{"type":"callback","title":"Nostrum.Struct.Embed.thumbnail/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:thumbnail/1"},{"type":"callback","title":"Nostrum.Struct.Embed.timestamp/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:timestamp/1"},{"type":"callback","title":"Nostrum.Struct.Embed.title/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:title/1"},{"type":"callback","title":"Nostrum.Struct.Embed.url/1","doc":"","ref":"Nostrum.Struct.Embed.html#c:url/1"},{"type":"type","title":"Nostrum.Struct.Embed.author/0","doc":"Author information","ref":"Nostrum.Struct.Embed.html#t:author/0"},{"type":"type","title":"Nostrum.Struct.Embed.color/0","doc":"Color code of the embed","ref":"Nostrum.Struct.Embed.html#t:color/0"},{"type":"type","title":"Nostrum.Struct.Embed.description/0","doc":"Description of the embed","ref":"Nostrum.Struct.Embed.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Embed.fields/0","doc":"Fields information","ref":"Nostrum.Struct.Embed.html#t:fields/0"},{"type":"type","title":"Nostrum.Struct.Embed.footer/0","doc":"Footer information","ref":"Nostrum.Struct.Embed.html#t:footer/0"},{"type":"type","title":"Nostrum.Struct.Embed.image/0","doc":"Image information","ref":"Nostrum.Struct.Embed.html#t:image/0"},{"type":"type","title":"Nostrum.Struct.Embed.provider/0","doc":"Provider information","ref":"Nostrum.Struct.Embed.html#t:provider/0"},{"type":"type","title":"Nostrum.Struct.Embed.t/0","doc":"","ref":"Nostrum.Struct.Embed.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.thumbnail/0","doc":"Thumbnail information","ref":"Nostrum.Struct.Embed.html#t:thumbnail/0"},{"type":"type","title":"Nostrum.Struct.Embed.timestamp/0","doc":"Timestamp of embed content","ref":"Nostrum.Struct.Embed.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Embed.title/0","doc":"Title of the embed","ref":"Nostrum.Struct.Embed.html#t:title/0"},{"type":"type","title":"Nostrum.Struct.Embed.type/0","doc":"Type of the embed","ref":"Nostrum.Struct.Embed.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Embed.url/0","doc":"Url of the embed","ref":"Nostrum.Struct.Embed.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.video/0","doc":"Video information","ref":"Nostrum.Struct.Embed.html#t:video/0"},{"type":"module","title":"Nostrum.Struct.Embed.Author","doc":"Struct representing a Discord embed author.","ref":"Nostrum.Struct.Embed.Author.html"},{"type":"type","title":"Nostrum.Struct.Embed.Author.icon_url/0","doc":"URL of the author icon","ref":"Nostrum.Struct.Embed.Author.html#t:icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.name/0","doc":"Name of the author","ref":"Nostrum.Struct.Embed.Author.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.proxy_icon_url/0","doc":"Proxied URL of author icon","ref":"Nostrum.Struct.Embed.Author.html#t:proxy_icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.t/0","doc":"","ref":"Nostrum.Struct.Embed.Author.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Author.url/0","doc":"URL of the author","ref":"Nostrum.Struct.Embed.Author.html#t:url/0"},{"type":"module","title":"Nostrum.Struct.Embed.Field","doc":"Struct representing a Discord embed field.","ref":"Nostrum.Struct.Embed.Field.html"},{"type":"type","title":"Nostrum.Struct.Embed.Field.inline/0","doc":"Whether the field should display as inline","ref":"Nostrum.Struct.Embed.Field.html#t:inline/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.name/0","doc":"Name of the field","ref":"Nostrum.Struct.Embed.Field.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.t/0","doc":"","ref":"Nostrum.Struct.Embed.Field.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Field.value/0","doc":"Value of the field","ref":"Nostrum.Struct.Embed.Field.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Embed.Footer","doc":"Struct representing a Discord embed footer.","ref":"Nostrum.Struct.Embed.Footer.html"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.icon_url/0","doc":"URL of footer icon","ref":"Nostrum.Struct.Embed.Footer.html#t:icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.proxy_icon_url/0","doc":"Proxied URL of footer icon","ref":"Nostrum.Struct.Embed.Footer.html#t:proxy_icon_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.t/0","doc":"","ref":"Nostrum.Struct.Embed.Footer.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Footer.text/0","doc":"Footer text","ref":"Nostrum.Struct.Embed.Footer.html#t:text/0"},{"type":"module","title":"Nostrum.Struct.Embed.Image","doc":"Struct representing a Discord embed image.","ref":"Nostrum.Struct.Embed.Image.html"},{"type":"type","title":"Nostrum.Struct.Embed.Image.height/0","doc":"Height of the image","ref":"Nostrum.Struct.Embed.Image.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.proxy_url/0","doc":"URL of image icon","ref":"Nostrum.Struct.Embed.Image.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.t/0","doc":"","ref":"Nostrum.Struct.Embed.Image.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.url/0","doc":"Image text","ref":"Nostrum.Struct.Embed.Image.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Image.width/0","doc":"Width of the image","ref":"Nostrum.Struct.Embed.Image.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Embed.Provider","doc":"Struct representing a Discord embed provider.","ref":"Nostrum.Struct.Embed.Provider.html"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.name/0","doc":"Name of the provider","ref":"Nostrum.Struct.Embed.Provider.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.t/0","doc":"","ref":"Nostrum.Struct.Embed.Provider.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Provider.url/0","doc":"URL of provider","ref":"Nostrum.Struct.Embed.Provider.html#t:url/0"},{"type":"module","title":"Nostrum.Struct.Embed.Thumbnail","doc":"Struct representing a Discord embed thumbnail.","ref":"Nostrum.Struct.Embed.Thumbnail.html"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.height/0","doc":"Height of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.proxy_url/0","doc":"URL of thumbnail icon","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.t/0","doc":"","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.url/0","doc":"Source URL of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Thumbnail.width/0","doc":"Width of the thumbnail","ref":"Nostrum.Struct.Embed.Thumbnail.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Embed.Video","doc":"Struct representing a Discord embed video.","ref":"Nostrum.Struct.Embed.Video.html"},{"type":"type","title":"Nostrum.Struct.Embed.Video.height/0","doc":"Height of the video","ref":"Nostrum.Struct.Embed.Video.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.t/0","doc":"","ref":"Nostrum.Struct.Embed.Video.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.url/0","doc":"Source URL of the video","ref":"Nostrum.Struct.Embed.Video.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Embed.Video.width/0","doc":"Width of the video","ref":"Nostrum.Struct.Embed.Video.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Emoji","doc":"Struct representing a Discord emoji.","ref":"Nostrum.Struct.Emoji.html"},{"type":"module","title":"Mentioning Emojis in Messages - Nostrum.Struct.Emoji","doc":"A `Nostrum.Struct.Emoji` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nemoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: \"foxbot\"}\nNostrum.Api.create_message!(184046599834435585, \"#{emoji}\")\n%Nostrum.Struct.Message{content: \"<:foxbot:437093487582642177>\"}\n\nemoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Emoji.mention(emoji)}\")\n%Nostrum.Struct.Message{content: \"<:tealixir:436885297037312001>\"}\n```","ref":"Nostrum.Struct.Emoji.html#module-mentioning-emojis-in-messages"},{"type":"module","title":"Using Emojis in the Api - Nostrum.Struct.Emoji","doc":"A `Nostrum.Struct.Emoji` can be used in `Nostrum.Api` by using its api name\nor the struct itself.\n\n```elixir\nemoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\nNostrum.Api.create_reaction(381889573426429952, 436247584349356032, Nostrum.Struct.Emoji.api_name(emoji))\n{:ok}\n\nemoji = %Nostrum.Struct.Emoji{id: 436189601820966923, name: \"elixir\"}\nNostrum.Api.create_reaction(381889573426429952, 436247584349356032, emoji)\n{:ok}\n```\n\nSee `t:Nostrum.Struct.Emoji.api_name/0` for more information.","ref":"Nostrum.Struct.Emoji.html#module-using-emojis-in-the-api"},{"type":"function","title":"Nostrum.Struct.Emoji.api_name/1","doc":"Formats an emoji struct into its `t:Nostrum.Struct.Emoji.api_name/0`.","ref":"Nostrum.Struct.Emoji.html#api_name/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.api_name/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{name: \"Γ¡É\"}\n...> Nostrum.Struct.Emoji.api_name(emoji)\n\"Γ¡É\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 437093487582642177, name: \"foxbot\"}\n...> Nostrum.Struct.Emoji.api_name(emoji)\n\"foxbot:437093487582642177\"\n```","ref":"Nostrum.Struct.Emoji.html#api_name/1-examples"},{"type":"function","title":"Nostrum.Struct.Emoji.image_url/1","doc":"Returns the url of a custom emoji's image. If the emoji is not a custom one,\nreturns `nil`.","ref":"Nostrum.Struct.Emoji.html#image_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.image_url/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{id: 450225070569291776}\niex> Nostrum.Struct.Emoji.image_url(emoji)\n\"https://cdn.discordapp.com/emojis/450225070569291776.png\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 406140226998894614, animated: true}\niex> Nostrum.Struct.Emoji.image_url(emoji)\n\"https://cdn.discordapp.com/emojis/406140226998894614.gif\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: nil, name: \"Γ¡É\"}\niex> Nostrum.Struct.Emoji.image_url(emoji)\nnil\n```","ref":"Nostrum.Struct.Emoji.html#image_url/1-examples"},{"type":"function","title":"Nostrum.Struct.Emoji.mention/1","doc":"Formats an `Nostrum.Struct.Emoji` into a mention.","ref":"Nostrum.Struct.Emoji.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Emoji.mention/1","doc":"```elixir\niex> emoji = %Nostrum.Struct.Emoji{name: \"≡ƒæì\"}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\"≡ƒæì\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 436885297037312001, name: \"tealixir\"}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\"<:tealixir:436885297037312001>\"\n\niex> emoji = %Nostrum.Struct.Emoji{id: 437016804309860372, name: \"blobseizure\", animated: true}\n...> Nostrum.Struct.Emoji.mention(emoji)\n\" \"\n```","ref":"Nostrum.Struct.Emoji.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Emoji.animated/0","doc":"Whether this emoji is animated","ref":"Nostrum.Struct.Emoji.html#t:animated/0"},{"type":"type","title":"Nostrum.Struct.Emoji.api_name/0","doc":"Emoji string to be used with the Discord API.\n\nSome API endpoints take an `emoji`. If it is a custom emoji, it must be\nstructured as `\"id:name\"`. If it is an unicode emoji, it can be structured\nas any of the following:\n\n * `\"name\"`\n * A base 16 unicode emoji string.\n\n`api_name/1` is a convenience function that returns a `Nostrum.Struct.Emoji`'s\napi name.","ref":"Nostrum.Struct.Emoji.html#t:api_name/0"},{"type":"type","title":"Examples - Nostrum.Struct.Emoji.api_name/0","doc":"```elixir\n# Custom Emojis\n\"nostrum:431890438091489\"\n\n# Unicode Emojis\n\"≡ƒæì\"\n\"\\xF0\\x9F\\x98\\x81\"\n\"\\u2b50\"\n```","ref":"Nostrum.Struct.Emoji.html#t:api_name/0-examples"},{"type":"type","title":"Nostrum.Struct.Emoji.id/0","doc":"Id of the emoji","ref":"Nostrum.Struct.Emoji.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Emoji.managed/0","doc":"Whether this emoji is managed","ref":"Nostrum.Struct.Emoji.html#t:managed/0"},{"type":"type","title":"Nostrum.Struct.Emoji.name/0","doc":"Name of the emoji","ref":"Nostrum.Struct.Emoji.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Emoji.require_colons/0","doc":"Whether this emoji must be wrapped in colons","ref":"Nostrum.Struct.Emoji.html#t:require_colons/0"},{"type":"type","title":"Nostrum.Struct.Emoji.roles/0","doc":"Roles this emoji is whitelisted to","ref":"Nostrum.Struct.Emoji.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Emoji.t/0","doc":"","ref":"Nostrum.Struct.Emoji.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Emoji.user/0","doc":"User that created this emoji","ref":"Nostrum.Struct.Emoji.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild","doc":"Struct representing a Discord guild.","ref":"Nostrum.Struct.Guild.html"},{"type":"function","title":"Nostrum.Struct.Guild.banner_url/2","doc":"Returns the URL of the guild's banner, or `nil` if no guild banner has been set.\n\nSupported image formats are PNG, GIF, JPEG and WebP.","ref":"Nostrum.Struct.Guild.html#banner_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.banner_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{banner: \"656477617264736e6f7764656e\",\n...> id: 112233445566778899}\niex> Nostrum.Struct.Guild.banner_url(guild)\n\"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.webp\"\niex> Nostrum.Struct.Guild.banner_url(guild, \"png\")\n\"https://cdn.discordapp.com/banners/112233445566778899/656477617264736e6f7764656e.png\"\n```","ref":"Nostrum.Struct.Guild.html#banner_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.discovery_splash_url/2","doc":"Returns the URL of the guild's discovery splash, or `nil` if no discovery splash.\n\nSupported image formats are PNG, JPEG and WebP.","ref":"Nostrum.Struct.Guild.html#discovery_splash_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.discovery_splash_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{discovery_splash: \"656477617264736e6f7764656e\",\n...> id: 112233445566778899}\niex> Nostrum.Struct.Guild.discovery_splash_url(guild)\n\"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.webp\"\niex> Nostrum.Struct.Guild.discovery_splash_url(guild, \"png\")\n\"https://cdn.discordapp.com/discovery-splashes/112233445566778899/656477617264736e6f7764656e.png\"\n```","ref":"Nostrum.Struct.Guild.html#discovery_splash_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.icon_url/2","doc":"Returns the URL of a guild's icon, or `nil` if there is no icon.\n\nSupported image formats are PNG, JPEG, and WebP.","ref":"Nostrum.Struct.Guild.html#icon_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.icon_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{icon: \"86e39f7ae3307e811784e2ffd11a7310\",\n...> id: 41771983423143937}\niex> Nostrum.Struct.Guild.icon_url(guild)\n\"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp\"\niex> Nostrum.Struct.Guild.icon_url(guild, \"png\")\n\"https://cdn.discordapp.com/icons/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png\"\n\niex> guild = %Nostrum.Struct.Guild{icon: nil}\niex> Nostrum.Struct.Guild.icon_url(guild)\nnil\n```","ref":"Nostrum.Struct.Guild.html#icon_url/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.splash_url/2","doc":"Returns the URL of a guild's splash, or `nil` if there is no splash.\n\nSupported image formats are PNG, JPEG, and WebP.","ref":"Nostrum.Struct.Guild.html#splash_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.splash_url/2","doc":"```elixir\niex> guild = %Nostrum.Struct.Guild{splash: \"86e39f7ae3307e811784e2ffd11a7310\",\n...> id: 41771983423143937}\niex> Nostrum.Struct.Guild.splash_url(guild)\n\"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.webp\"\niex> Nostrum.Struct.Guild.splash_url(guild, \"png\")\n\"https://cdn.discordapp.com/splashes/41771983423143937/86e39f7ae3307e811784e2ffd11a7310.png\"\n\niex> guild = %Nostrum.Struct.Guild{splash: nil}\niex> Nostrum.Struct.Guild.splash_url(guild)\nnil\n```","ref":"Nostrum.Struct.Guild.html#splash_url/2-examples"},{"type":"type","title":"Nostrum.Struct.Guild.afk_channel_id/0","doc":"The id of the guild's afk channel","ref":"Nostrum.Struct.Guild.html#t:afk_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.afk_timeout/0","doc":"The time someone must be afk before being moved","ref":"Nostrum.Struct.Guild.html#t:afk_timeout/0"},{"type":"type","title":"Nostrum.Struct.Guild.application_id/0","doc":"Application id of the guild creator if it is bot created.","ref":"Nostrum.Struct.Guild.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.available_guild/0","doc":"A `Nostrum.Struct.Guild` that is fully available.","ref":"Nostrum.Struct.Guild.html#t:available_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.banner/0","doc":"Banner hash for the guild, if prefixed with `a_` an animated GIF is available.","ref":"Nostrum.Struct.Guild.html#t:banner/0"},{"type":"type","title":"Nostrum.Struct.Guild.channels/0","doc":"List of channels","ref":"Nostrum.Struct.Guild.html#t:channels/0"},{"type":"type","title":"Nostrum.Struct.Guild.default_message_notifications/0","doc":"Default message notifications level.","ref":"Nostrum.Struct.Guild.html#t:default_message_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.description/0","doc":"User-set description of the guild","ref":"Nostrum.Struct.Guild.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.discovery_splash/0","doc":"Hash of the Discovery splash screen","ref":"Nostrum.Struct.Guild.html#t:discovery_splash/0"},{"type":"type","title":"Nostrum.Struct.Guild.emojis/0","doc":"List of emojis","ref":"Nostrum.Struct.Guild.html#t:emojis/0"},{"type":"type","title":"Nostrum.Struct.Guild.explicit_content_filter/0","doc":"Explicit content filter level.","ref":"Nostrum.Struct.Guild.html#t:explicit_content_filter/0"},{"type":"type","title":"Nostrum.Struct.Guild.features/0","doc":"List of guild features","ref":"Nostrum.Struct.Guild.html#t:features/0"},{"type":"type","title":"Nostrum.Struct.Guild.guild_scheduled_events/0","doc":"List of scheduled events","ref":"Nostrum.Struct.Guild.html#t:guild_scheduled_events/0"},{"type":"type","title":"Nostrum.Struct.Guild.icon/0","doc":"The hash of the guild's icon","ref":"Nostrum.Struct.Guild.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.id/0","doc":"The guild's id","ref":"Nostrum.Struct.Guild.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.joined_at/0","doc":"Date the bot user joined the guild","ref":"Nostrum.Struct.Guild.html#t:joined_at/0"},{"type":"type","title":"Nostrum.Struct.Guild.large/0","doc":"Whether the guild is considered 'large'","ref":"Nostrum.Struct.Guild.html#t:large/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_members/0","doc":"Maximum members for the guild","ref":"Nostrum.Struct.Guild.html#t:max_members/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_presences/0","doc":"Maximum number of presences for the guild.\n\nThis will be unset for most guilds, except for in Discord's terms, the\n\"largest of guilds\", where the field will be set to the maximum number of\nonline (gateway connected) members.","ref":"Nostrum.Struct.Guild.html#t:max_presences/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_stage_video_channel_users/0","doc":"The maximum amount of users in a stage video channel","ref":"Nostrum.Struct.Guild.html#t:max_stage_video_channel_users/0"},{"type":"type","title":"Nostrum.Struct.Guild.max_video_channel_users/0","doc":"The maximum amount of users in a video channel","ref":"Nostrum.Struct.Guild.html#t:max_video_channel_users/0"},{"type":"type","title":"Nostrum.Struct.Guild.member_count/0","doc":"Total number of members in the guild","ref":"Nostrum.Struct.Guild.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Guild.mfa_level/0","doc":"Required MFA level of the guild","ref":"Nostrum.Struct.Guild.html#t:mfa_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.name/0","doc":"The name of the guild.","ref":"Nostrum.Struct.Guild.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.nsfw_level/0","doc":"NSFW level for the guild, unrated guilds have `:default`","ref":"Nostrum.Struct.Guild.html#t:nsfw_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.owner_id/0","doc":"The id of the guild owner","ref":"Nostrum.Struct.Guild.html#t:owner_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.preferred_locale/0","doc":"Preferred locale for the guild, set by the user","ref":"Nostrum.Struct.Guild.html#t:preferred_locale/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_progress_bar_enabled/0","doc":"Whether the guild has the boost progress bar enabled","ref":"Nostrum.Struct.Guild.html#t:premium_progress_bar_enabled/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_subscription_count/0","doc":"Number of boosts received by the guild","ref":"Nostrum.Struct.Guild.html#t:premium_subscription_count/0"},{"type":"type","title":"Nostrum.Struct.Guild.premium_tier/0","doc":"Premium tier of the guild (0-3)","ref":"Nostrum.Struct.Guild.html#t:premium_tier/0"},{"type":"type","title":"Nostrum.Struct.Guild.public_updates_channel_id/0","doc":"The id of the channel where admins and moderators receive notices from Discord. This\nis only available to guilds that contain ``PUBLIC`` in `t:features/0`.","ref":"Nostrum.Struct.Guild.html#t:public_updates_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.region/0","doc":"The id of the voice region","ref":"Nostrum.Struct.Guild.html#t:region/0"},{"type":"type","title":"Nostrum.Struct.Guild.rest_guild/0","doc":"A `Nostrum.Struct.Guild` that is sent on guild-specific rest endpoints.","ref":"Nostrum.Struct.Guild.html#t:rest_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.roles/0","doc":"List of roles","ref":"Nostrum.Struct.Guild.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Guild.rules_channel_id/0","doc":"The id of the channel that is used for rules. This is only available to guilds that\ncontain ``PUBLIC`` in `t:features/0`.","ref":"Nostrum.Struct.Guild.html#t:rules_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.safety_alerts_channel_id/0","doc":"The id of the channel where admins and moderators of Community guilds receive safety alerts from Discord","ref":"Nostrum.Struct.Guild.html#t:safety_alerts_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.splash/0","doc":"The hash of the guild's splash","ref":"Nostrum.Struct.Guild.html#t:splash/0"},{"type":"type","title":"Nostrum.Struct.Guild.stickers/0","doc":"Custom stickers registered to the guild","ref":"Nostrum.Struct.Guild.html#t:stickers/0"},{"type":"type","title":"Nostrum.Struct.Guild.system_channel_flags/0","doc":"Bitset representing the system channel flags\n\nSee `Nostrum.Struct.Guild.SystemChannelFlags` for more information on the flag\ncontents as well as methods to parse and create your own values for this\nfield.","ref":"Nostrum.Struct.Guild.html#t:system_channel_flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.system_channel_id/0","doc":"The id of the channel to which system messages are sent.","ref":"Nostrum.Struct.Guild.html#t:system_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.t/0","doc":"","ref":"Nostrum.Struct.Guild.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.threads/0","doc":"All active threads in the guild that the current user has permission to view","ref":"Nostrum.Struct.Guild.html#t:threads/0"},{"type":"type","title":"Nostrum.Struct.Guild.unavailable/0","doc":"Whether the guild is available","ref":"Nostrum.Struct.Guild.html#t:unavailable/0"},{"type":"type","title":"Nostrum.Struct.Guild.unavailable_guild/0","doc":"A `Nostrum.Struct.Guild` that is unavailable.","ref":"Nostrum.Struct.Guild.html#t:unavailable_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.user_guild/0","doc":"A `Nostrum.Struct.Guild` that is sent on user-specific rest endpoints.","ref":"Nostrum.Struct.Guild.html#t:user_guild/0"},{"type":"type","title":"Nostrum.Struct.Guild.vanity_url_code/0","doc":"Guild invite vanity URL","ref":"Nostrum.Struct.Guild.html#t:vanity_url_code/0"},{"type":"type","title":"Nostrum.Struct.Guild.verification_level/0","doc":"The level of verification","ref":"Nostrum.Struct.Guild.html#t:verification_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.voice_states/0","doc":"List of voice states as maps","ref":"Nostrum.Struct.Guild.html#t:voice_states/0"},{"type":"type","title":"Nostrum.Struct.Guild.welcome_screen/0","doc":"The welcome screen of a Community guild, shown to new members, returned in an Invite's guild object","ref":"Nostrum.Struct.Guild.html#t:welcome_screen/0"},{"type":"type","title":"Nostrum.Struct.Guild.widget_channel_id/0","doc":"The channel id for the server widget.","ref":"Nostrum.Struct.Guild.html#t:widget_channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.widget_enabled/0","doc":"Whether or not the server widget is enabled.","ref":"Nostrum.Struct.Guild.html#t:widget_enabled/0"},{"type":"module","title":"Nostrum.Struct.Guild.AuditLog","doc":"Represents a guild's audit log.","ref":"Nostrum.Struct.Guild.AuditLog.html"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.entries/0","doc":"Entries of this guild's audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:entries/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.t/0","doc":"","ref":"Nostrum.Struct.Guild.AuditLog.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.users/0","doc":"Users found in the audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:users/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLog.webhooks/0","doc":"Webhooks found in the audit log","ref":"Nostrum.Struct.Guild.AuditLog.html#t:webhooks/0"},{"type":"module","title":"Nostrum.Struct.Guild.AuditLogEntry","doc":"Represents a single entry in the guild's audit log.","ref":"Nostrum.Struct.Guild.AuditLogEntry.html"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.action_type/0","doc":"An audit log event identifier. See [Audit log events](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:action_type/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.changes/0","doc":"Individual changes of this audit log entry.\nChange keys are documented [here](https://discord.com/developers/docs/resources/audit-log#audit-log-change-object-audit-log-change-key)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:changes/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.id/0","doc":"The ID of this entry","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.options/0","doc":"[Optional audit entry info](https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-optional-audit-entry-info)","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:options/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.reason/0","doc":"The reason for this change, if applicable","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:reason/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.t/0","doc":"","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.target_id/0","doc":"The ID of the affected entity","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:target_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.AuditLogEntry.user_id/0","doc":"The user who made the changes","ref":"Nostrum.Struct.Guild.AuditLogEntry.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Guild.Ban","doc":"Represents a guild ban.","ref":"Nostrum.Struct.Guild.Ban.html"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.reason/0","doc":"The reason for the ban","ref":"Nostrum.Struct.Guild.Ban.html#t:reason/0"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.t/0","doc":"","ref":"Nostrum.Struct.Guild.Ban.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Ban.user/0","doc":"The banned user","ref":"Nostrum.Struct.Guild.Ban.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration","doc":"Struct representing a Discord guild integration.\n\nThe struct defined here only has the fields provided for Discord Bot\nintegrations available. If you use Nostrum in a non-bot application, feel\nfree to open an issue to add it.","ref":"Nostrum.Struct.Guild.Integration.html"},{"type":"module","title":"References - Nostrum.Struct.Guild.Integration","doc":"- https://discord.com/developers/docs/resources/guild#integration-object","ref":"Nostrum.Struct.Guild.Integration.html#module-references"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.account/0","doc":"The integration account.","ref":"Nostrum.Struct.Guild.Integration.html#t:account/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.application/0","doc":"The bot/OAuth2 application for discord integrations","ref":"Nostrum.Struct.Guild.Integration.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.enabled/0","doc":"Whether this integration is enabled","ref":"Nostrum.Struct.Guild.Integration.html#t:enabled/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.guild_id/0","doc":"The id of the guild this integration is for.\n\nOnly included when the Integration is sent via the gateway.","ref":"Nostrum.Struct.Guild.Integration.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.id/0","doc":"Snowflake ID of the integration","ref":"Nostrum.Struct.Guild.Integration.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.name/0","doc":"Name of the integration","ref":"Nostrum.Struct.Guild.Integration.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.t/0","doc":"Represents a Guild integration","ref":"Nostrum.Struct.Guild.Integration.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.type/0","doc":"Integration type (Twitch, YouTube or Discord)","ref":"Nostrum.Struct.Guild.Integration.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration.Account","doc":"Struct representing a Discord guild's integration account.","ref":"Nostrum.Struct.Guild.Integration.Account.html"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.id/0","doc":"The id of the account","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.name/0","doc":"The name of the account","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Account.t/0","doc":"","ref":"Nostrum.Struct.Guild.Integration.Account.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Integration.Application","doc":"Struct representing a Discord Guild Integration Application.","ref":"Nostrum.Struct.Guild.Integration.Application.html"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.bot/0","doc":"The bot associated with the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:bot/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.description/0","doc":"The description of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.icon/0","doc":"The icon hash of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.id/0","doc":"The id of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.name/0","doc":"The name of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.summary/0","doc":"The summary of the application.","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:summary/0"},{"type":"type","title":"Nostrum.Struct.Guild.Integration.Application.t/0","doc":"","ref":"Nostrum.Struct.Guild.Integration.Application.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Member","doc":"Struct representing a Discord guild member.\n\nA `Nostrum.Struct.Guild.Member` stores a `Nostrum.Struct.User`'s properties\npertaining to a specific `Nostrum.Struct.Guild`.","ref":"Nostrum.Struct.Guild.Member.html"},{"type":"module","title":"Mentioning Members in Messages - Nostrum.Struct.Guild.Member","doc":"A `Nostrum.Struct.Guild.Member` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nmember = %Nostrum.Struct.Guild.Member{user_id: 120571255635181568}\nNostrum.Api.create_message!(184046599834435585, \"#{member}\")\n%Nostrum.Struct.Message{content: \"<@120571255635181568>\"}\n\nmember = %Nostrum.Struct.Guild.Member{user_id: 89918932789497856}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Guild.Member.mention(member)}\")\n%Nostrum.Struct.Message{content: \"<@89918932789497856>\"}\n```","ref":"Nostrum.Struct.Guild.Member.html#module-mentioning-members-in-messages"},{"type":"function","title":"Nostrum.Struct.Guild.Member.avatar_url/3","doc":"Returns a guild-specific avatar URL for a `Nostrum.Struct.Guild.Member`.\n\nSupported formats are `png` (default), `jpg`, `webp` and `gif`.\n\nAs mentioned in the avatar hash typedoc, if the avatar hash begins with `a_`, the\navatar is animated and can be returned as a gif.","ref":"Nostrum.Struct.Guild.Member.html#avatar_url/3"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.avatar_url/3","doc":"```elixir\niex> member = %Nostrum.Struct.Guild.Member{\n...> user_id: 165023948638126080,\n...> avatar: \"4c8319db8ea745275a1399f8f8aa74ab\"\n...> }\niex> guild_id = 1226944827137069107\niex> Nostrum.Struct.Guild.Member.avatar_url(member, guild_id)\n\"https://cdn.discordapp.com/guilds/1226944827137069107/users/165023948638126080/avatars/4c8319db8ea745275a1399f8f8aa74ab.png\"\n```","ref":"Nostrum.Struct.Guild.Member.html#avatar_url/3-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.guild_channel_permissions/3","doc":"Returns a member's permissions in a guild channel, based on its `Nostrum.Struct.Overwrite`s.","ref":"Nostrum.Struct.Guild.Member.html#guild_channel_permissions/3"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.guild_channel_permissions/3","doc":"```elixir\nguild = Nostrum.Cache.GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nchannel_id = 381889573426429952\nNostrum.Struct.Guild.Member.guild_channel_permissions(member, guild, channel_id)\n#=> [:manage_messages]\n```","ref":"Nostrum.Struct.Guild.Member.html#guild_channel_permissions/3-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.guild_permissions/2","doc":"Returns a member's guild permissions.","ref":"Nostrum.Struct.Guild.Member.html#guild_permissions/2"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.guild_permissions/2","doc":"```elixir\nguild = Nostrum.Cache.GuildCache.get!(279093381723062272)\nmember = Map.get(guild.members, 177888205536886784)\nNostrum.Struct.Guild.Member.guild_permissions(member, guild)\n#=> [:administrator]\n```","ref":"Nostrum.Struct.Guild.Member.html#guild_permissions/2-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.mention/1","doc":"Formats a `Nostrum.Struct.Guild.Member` into a mention.","ref":"Nostrum.Struct.Guild.Member.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.mention/1","doc":"```elixir\niex> member = %Nostrum.Struct.Guild.Member{user_id: 177888205536886784}\n...> Nostrum.Struct.Guild.Member.mention(member)\n\"<@177888205536886784>\"\n```","ref":"Nostrum.Struct.Guild.Member.html#mention/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.top_role/2","doc":"Return the topmost role of the given member on the given guild.\n\nThe topmost role is determined via `t:Nostrum.Struct.Guild.Role.position`.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2"},{"type":"function","title":"Parameters - Nostrum.Struct.Guild.Member.top_role/2","doc":"- `member`: The member whose top role to return.\n- `guild`: The guild which the member belongs to.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2-parameters"},{"type":"function","title":"Return value - Nostrum.Struct.Guild.Member.top_role/2","doc":"The topmost role of the member on the given guild, if the member has roles\nassigned. Otherwise, `nil` is returned.","ref":"Nostrum.Struct.Guild.Member.html#top_role/2-return-value"},{"type":"type","title":"Nostrum.Struct.Guild.Member.avatar/0","doc":"Avatar hash of the custom avatar set by the user in the guild.\n\nIf animated, this is prefixed with `a_`.\n\nYou can use `avatar_url/3` to fetch a full-formed URL of this asset.","ref":"Nostrum.Struct.Guild.Member.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.communication_disabled_until/0","doc":"Current timeout status of the member.\n\nIf member is currently timed out this will be a `t:DateTime.t/0` of the\nunmute time, it will be `nil` or a date in the past if the member is not\ncurrently timed out.","ref":"Nostrum.Struct.Guild.Member.html#t:communication_disabled_until/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.deaf/0","doc":"Whether the member is deafened.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:deaf/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.flags/0","doc":"Guild member flags represented as a bitset.\n\nLook at the `Nostrum.Struct.Guild.Member.Flags` module for guidance parsing this value.","ref":"Nostrum.Struct.Guild.Member.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.joined_at/0","doc":"Date the member joined the guild, as a unix timestamp.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:joined_at/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.mute/0","doc":"Whether the member is muted.\nIf you dont request offline guild members this field will be `nil` for any members that come online.","ref":"Nostrum.Struct.Guild.Member.html#t:mute/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.nick/0","doc":"The nickname of the member","ref":"Nostrum.Struct.Guild.Member.html#t:nick/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.pending/0","doc":"Current guild member gate status. `false` if user has yet to pass the membership screening\nconfiguration for the guild, `true` if the member has passed.","ref":"Nostrum.Struct.Guild.Member.html#t:pending/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.premium_since/0","doc":"Current guild booster status of the member.\n\nIf member is currently boosting a guild this will be a `t:DateTime.t/0` since\nthe start of the boosting, it will be `nil` if the member is not currently\nboosting the guild.","ref":"Nostrum.Struct.Guild.Member.html#t:premium_since/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.roles/0","doc":"A list of role ids","ref":"Nostrum.Struct.Guild.Member.html#t:roles/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.t/0","doc":"","ref":"Nostrum.Struct.Guild.Member.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.user_id/0","doc":"The user ID.\n\nThis field can be `nil` if the Member struct came as a partial Member object\nincluded in a message received from a guild channel. To retrieve the user\nobject, use `Nostrum.Cache.UserCache`.","ref":"Nostrum.Struct.Guild.Member.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Guild.Member.Flags","doc":"Struct representing the flags a guild member can have.","ref":"Nostrum.Struct.Guild.Member.Flags.html"},{"type":"function","title":"Nostrum.Struct.Guild.Member.Flags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API, normally from `t:Nostrum.Struct.Guild.Member.flags/0`.","ref":"Nostrum.Struct.Guild.Member.Flags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.Flags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.Guild.Member.Flags.from_integer(9)\n%Nostrum.Struct.Guild.Member.Flags{\n did_rejoin: true,\n completed_onboarding: false,\n bypasses_verification: false,\n started_onboarding: true\n}\n```","ref":"Nostrum.Struct.Guild.Member.Flags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.Member.Flags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.Guild.Member.Flags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Member.Flags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.Guild.Member.Flags{\n...> did_rejoin: true,\n...> completed_onboarding: false,\n...> bypasses_verification: false,\n...> started_onboarding: true\n...> }\niex> Nostrum.Struct.Guild.Member.Flags.to_integer(my_flags)\n9\n```","ref":"Nostrum.Struct.Guild.Member.Flags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.bypasses_verification/0","doc":"Member is exempt from guild verification requirements","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:bypasses_verification/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.completed_onboarding/0","doc":"Member has completed onboarding","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:completed_onboarding/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.did_rejoin/0","doc":"Member has left and rejoined the guild","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:did_rejoin/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.flags/0","doc":"","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.started_onboarding/0","doc":"Member has started onboarding","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:started_onboarding/0"},{"type":"type","title":"Nostrum.Struct.Guild.Member.Flags.t/0","doc":"","ref":"Nostrum.Struct.Guild.Member.Flags.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.Role","doc":"Struct representing a Discord role.","ref":"Nostrum.Struct.Guild.Role.html"},{"type":"module","title":"Mentioning Roles in Messages - Nostrum.Struct.Guild.Role","doc":"A `Nostrum.Struct.Guild.Role` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nrole = %Nostrum.Struct.Guild.Role{id: 431886897539973131}\nNostrum.Api.create_message!(184046599834435585, \"#{role}\")\n%Nostrum.Struct.Message{}\n\nrole = %Nostrum.Struct.Guild.Role{id: 431884023535632398}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.Guild.Role.mention(role)}\")\n%Nostrum.Struct.Message{}\n```","ref":"Nostrum.Struct.Guild.Role.html#module-mentioning-roles-in-messages"},{"type":"function","title":"Nostrum.Struct.Guild.Role.mention/1","doc":"Formats an `Nostrum.Struct.Role` into a mention.","ref":"Nostrum.Struct.Guild.Role.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.Role.mention/1","doc":"```elixir\niex> role = %Nostrum.Struct.Guild.Role{id: 431886639627763722}\n...> Nostrum.Struct.Guild.Role.mention(role)\n\"<@&431886639627763722>\"\n```","ref":"Nostrum.Struct.Guild.Role.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.Role.color/0","doc":"The hexadecimal color code","ref":"Nostrum.Struct.Guild.Role.html#t:color/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.hoist/0","doc":"Whether the role is pinned in the user listing","ref":"Nostrum.Struct.Guild.Role.html#t:hoist/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.icon/0","doc":"The hash of the role icon","ref":"Nostrum.Struct.Guild.Role.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.id/0","doc":"The id of the role","ref":"Nostrum.Struct.Guild.Role.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.managed/0","doc":"Whether the role is managed by an integration","ref":"Nostrum.Struct.Guild.Role.html#t:managed/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.mentionable/0","doc":"Whether the role is mentionable","ref":"Nostrum.Struct.Guild.Role.html#t:mentionable/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.name/0","doc":"The name of the role","ref":"Nostrum.Struct.Guild.Role.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.permissions/0","doc":"The permission bit set","ref":"Nostrum.Struct.Guild.Role.html#t:permissions/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.position/0","doc":"The position of the role","ref":"Nostrum.Struct.Guild.Role.html#t:position/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.t/0","doc":"","ref":"Nostrum.Struct.Guild.Role.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.Role.unicode_emoji/0","doc":"The standard unicode character emoji icon for the role","ref":"Nostrum.Struct.Guild.Role.html#t:unicode_emoji/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent","doc":"Struct representing a scheduled event in a guild.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html"},{"type":"function","title":"Nostrum.Struct.Guild.ScheduledEvent.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.channel_id/0","doc":"The id of the channel the scheduled event is in.\nWill be `nil` if `entity_type` is `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.creator/0","doc":"The user who created the scheduled event. Only present when retrieving the event from the API.\n\nnote: This will be `nil` for events created before October 25th, 2021.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:creator/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.creator_id/0","doc":"The id of the user who created the scheduled event.\n\nnote: This will be `nil` only for events created before October 25th, 2021.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:creator_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.description/0","doc":"The description of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_id/0","doc":"the id of an entity associated with a guild scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_metadata/0","doc":"Holds additional metadata associated with a scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_metadata/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.entity_type/0","doc":"The type of entity the scheduled event is for.\n\n`1` - `STAGE_INSTANCE`\n`2` - `VOICE`\n`3` - `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:entity_type/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.guild_id/0","doc":"The id of the guild the scheduled event is in.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.name/0","doc":"The name of the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.privacy_level/0","doc":"The privacy level of the scheduled event.\nAt the time of writing, this is always `2` for `GUILD_ONLY`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:privacy_level/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.scheduled_end_time/0","doc":"The time the scheduled event ends as an ISO8601 timestamp.\nOnly required if `entity_type` is `EXTERNAL`","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:scheduled_end_time/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.scheduled_start_time/0","doc":"The time the scheduled event starts.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:scheduled_start_time/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.status/0","doc":"The status of the scheduled event.\n\n`1` - `SCHEDULED`\n`2` - `ACTIVE`\n`3` - `COMPLETED`\n`4` - `CANCELLED`\n\nnote: Once status is set to Completed or Cancelled it can no longer be updated.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:status/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.user_count/0","doc":"The number of users who have subscribed to the scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.html#t:user_count/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","doc":"Struct representing any additional metadata associated with a Guild Event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.location/0","doc":"The location of the event, 1-100 characters.\n\nRequired for events with `entity_type` of `EXTERNAL`.","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html#t:location/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.ScheduledEvent.User","doc":"Struct representing a user in a guild's scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html"},{"type":"function","title":"Nostrum.Struct.Guild.ScheduledEvent.User.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.event_id/0","doc":"The ID of the guild scheduled event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:event_id/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.member/0","doc":"The guild member for the event","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.t/0","doc":"","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.ScheduledEvent.User.user/0","doc":"The user which is subscribed to the event.","ref":"Nostrum.Struct.Guild.ScheduledEvent.User.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Guild.SystemChannelFlags","doc":"Struct representing the flags on a guild's system channel","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html"},{"type":"function","title":"Nostrum.Struct.Guild.SystemChannelFlags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API, normally from `t:Nostrum.Struct.Guild.Member.flags/0`.","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.SystemChannelFlags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.Guild.SystemChannelFlags.from_integer(3)\n%Nostrum.Struct.Guild.SystemChannelFlags{\n suppress_guild_reminder_notifications: false,\n suppress_join_notification_replies: false,\n suppress_join_notifications: true,\n suppress_premium_subscriptions: true,\n suppress_role_subscription_purchase_notification_replies: false,\n suppress_role_subscription_purchase_notifications: false\n}\n```","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.Guild.SystemChannelFlags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.Guild.SystemChannelFlags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.Guild.SystemChannelFlags{\n...> suppress_join_notifications: true,\n...> suppress_join_notification_replies: true\n...> }\niex> Nostrum.Struct.Guild.SystemChannelFlags.to_integer(my_flags)\n9\n```","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.flags/0","doc":"","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_guild_reminder_notifications/0","doc":"Suppress server setup tips","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_guild_reminder_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_join_notification_replies/0","doc":"Hide member join sticker reply buttons","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_join_notification_replies/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_join_notifications/0","doc":"Suppress member join notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_join_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_premium_subscriptions/0","doc":"Suppress server boost notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_premium_subscriptions/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_role_subscription_purchase_notifications/0","doc":"Suppress role subscription purchase and renewal notifications","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_role_subscription_purchase_notifications/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.suppress_role_subscription_purchase_notifications_replies/0","doc":"Hide role subscription sticker reply buttons","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:suppress_role_subscription_purchase_notifications_replies/0"},{"type":"type","title":"Nostrum.Struct.Guild.SystemChannelFlags.t/0","doc":"","ref":"Nostrum.Struct.Guild.SystemChannelFlags.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Guild.UnavailableGuild","doc":"Struct representing an unavailable Discord guild.","ref":"Nostrum.Struct.Guild.UnavailableGuild.html"},{"type":"function","title":"Nostrum.Struct.Guild.UnavailableGuild.to_struct/1","doc":"","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#to_struct/1"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.id/0","doc":"The guild's id","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.t/0","doc":"","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Guild.UnavailableGuild.unavailable/0","doc":"Whether the guild is available","ref":"Nostrum.Struct.Guild.UnavailableGuild.html#t:unavailable/0"},{"type":"module","title":"Nostrum.Struct.Interaction","doc":"Application command and Component invocation struct.","ref":"Nostrum.Struct.Interaction.html"},{"type":"type","title":"Nostrum.Struct.Interaction.application_id/0","doc":"ID of the application that this interaction is for\n\nWill be `nil` if the interaction was part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.channel/0","doc":"PartialChannel object for the channel where the command was invoked\n\nAt the time of writing, only the fields `:type` and `:id` are guaranteed to be present.","ref":"Nostrum.Struct.Interaction.html#t:channel/0"},{"type":"type","title":"Nostrum.Struct.Interaction.channel_id/0","doc":"ID of the channel where the command was invoked","ref":"Nostrum.Struct.Interaction.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.data/0","doc":"Invocation data.\n\nOnly present for *ApplicationCommand* and *MessageComponent* interactions, that is, `type=2` or `type=3`.","ref":"Nostrum.Struct.Interaction.html#t:data/0"},{"type":"type","title":"Nostrum.Struct.Interaction.guild_id/0","doc":"ID of the guild where the command was invoked","ref":"Nostrum.Struct.Interaction.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.guild_locale/0","doc":"The guild's preferred locale, if invoked in a guild.","ref":"Nostrum.Struct.Interaction.html#t:guild_locale/0"},{"type":"type","title":"Nostrum.Struct.Interaction.id/0","doc":"Interaction identifier","ref":"Nostrum.Struct.Interaction.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Interaction.locale/0","doc":"The selected langauge of the invoking user.\n\nAvailable on all interaction types except for *PING*","ref":"Nostrum.Struct.Interaction.html#t:locale/0"},{"type":"type","title":"Nostrum.Struct.Interaction.member/0","doc":"Member information about the invoker, if invoked on a guild","ref":"Nostrum.Struct.Interaction.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Interaction.message/0","doc":"For components, the message they were attached to","ref":"Nostrum.Struct.Interaction.html#t:message/0"},{"type":"type","title":"Nostrum.Struct.Interaction.t/0","doc":"A command invocation for Application Commands or Components.\n\nOfficial reference:\nhttps://discord.com/developers/docs/interactions/application-commands","ref":"Nostrum.Struct.Interaction.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Interaction.token/0","doc":"Continuation token for responses\n\nWill be `nil` if this interaction is part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:token/0"},{"type":"type","title":"Nostrum.Struct.Interaction.type/0","doc":"Interaction kind.\n\n- `1` for *Ping*\n- `2` for *ApplicationCommand*\n- `3` for *MessageComponent*\n- `4` for *ApplicationCommandAutocomplete*\n- `5` for *ModalSubmit*","ref":"Nostrum.Struct.Interaction.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Interaction.user/0","doc":"User object for the invoking user, will be a copy of `member.user` if invoked in a guild","ref":"Nostrum.Struct.Interaction.html#t:user/0"},{"type":"type","title":"Nostrum.Struct.Interaction.version/0","doc":"Version identifier, always `1`\n\nWill be `nil` if this interaction is part of a message struct.","ref":"Nostrum.Struct.Interaction.html#t:version/0"},{"type":"module","title":"Nostrum.Struct.Invite","doc":"Struct representing a Discord invite.","ref":"Nostrum.Struct.Invite.html"},{"type":"type","title":"Nostrum.Struct.Invite.approximate_member_count/0","doc":"Approximate total member count of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:approximate_member_count/0"},{"type":"type","title":"Nostrum.Struct.Invite.approximate_presence_count/0","doc":"Approximate online member count of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:approximate_presence_count/0"},{"type":"type","title":"Nostrum.Struct.Invite.channel/0","doc":"The channel this invite is for.","ref":"Nostrum.Struct.Invite.html#t:channel/0"},{"type":"type","title":"Nostrum.Struct.Invite.code/0","doc":"The invite code (unique ID).","ref":"Nostrum.Struct.Invite.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Invite.created_at/0","doc":"When this invite was created.","ref":"Nostrum.Struct.Invite.html#t:created_at/0"},{"type":"type","title":"Nostrum.Struct.Invite.detailed_invite/0","doc":"An invite with metadata.","ref":"Nostrum.Struct.Invite.html#t:detailed_invite/0"},{"type":"type","title":"Nostrum.Struct.Invite.guild/0","doc":"Partially populated guild struct of the guild this invite is for.","ref":"Nostrum.Struct.Invite.html#t:guild/0"},{"type":"type","title":"Nostrum.Struct.Invite.inviter/0","doc":"The user who created this invite.","ref":"Nostrum.Struct.Invite.html#t:inviter/0"},{"type":"type","title":"Nostrum.Struct.Invite.max_age/0","doc":"Duration (in seconds) after which the invite expires.","ref":"Nostrum.Struct.Invite.html#t:max_age/0"},{"type":"type","title":"Nostrum.Struct.Invite.max_uses/0","doc":"Max number of times this invite can be used.","ref":"Nostrum.Struct.Invite.html#t:max_uses/0"},{"type":"type","title":"Nostrum.Struct.Invite.simple_invite/0","doc":"An invite without metadata.","ref":"Nostrum.Struct.Invite.html#t:simple_invite/0"},{"type":"type","title":"Nostrum.Struct.Invite.t/0","doc":"","ref":"Nostrum.Struct.Invite.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Invite.target_user/0","doc":"Partially populated user struct of the target user for this invite.","ref":"Nostrum.Struct.Invite.html#t:target_user/0"},{"type":"type","title":"Nostrum.Struct.Invite.target_user_type/0","doc":"The type of user target for this invite.","ref":"Nostrum.Struct.Invite.html#t:target_user_type/0"},{"type":"type","title":"Nostrum.Struct.Invite.temporary/0","doc":"Whether this invite only grants temporary membership.","ref":"Nostrum.Struct.Invite.html#t:temporary/0"},{"type":"type","title":"Nostrum.Struct.Invite.uses/0","doc":"Number of times this invite has been used.","ref":"Nostrum.Struct.Invite.html#t:uses/0"},{"type":"module","title":"Nostrum.Struct.Message","doc":"A `Nostrum.Struct.Message` represents a message.\n\nMore information can be found on the\n[Discord API Message Object Documentation](https://discord.com/developers/docs/resources/channel#message-object).","ref":"Nostrum.Struct.Message.html"},{"type":"function","title":"Nostrum.Struct.Message.to_url/1","doc":"Takes the message and produces a URL that, when clicked from the user client, will\njump them to that message, assuming they have access to the message and the message\nis valid.","ref":"Nostrum.Struct.Message.html#to_url/1"},{"type":"type","title":"Nostrum.Struct.Message.activity/0","doc":"The activity of the message. Sent with Rich Presence-related chat embeds","ref":"Nostrum.Struct.Message.html#t:activity/0"},{"type":"type","title":"Nostrum.Struct.Message.application/0","doc":"The application of the message. Sent with Rich Presence-related chat embeds","ref":"Nostrum.Struct.Message.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Message.application_id/0","doc":"if the message is a response to an interaction, this is the ID of the interaction's application","ref":"Nostrum.Struct.Message.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Message.attachments/0","doc":"List of attached files in the message","ref":"Nostrum.Struct.Message.html#t:attachments/0"},{"type":"type","title":"Nostrum.Struct.Message.author/0","doc":"The user struct of the author","ref":"Nostrum.Struct.Message.html#t:author/0"},{"type":"type","title":"Nostrum.Struct.Message.channel_id/0","doc":"The id of the channel","ref":"Nostrum.Struct.Message.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Message.components/0","doc":"List of Message Components","ref":"Nostrum.Struct.Message.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Message.content/0","doc":"The content of the message","ref":"Nostrum.Struct.Message.html#t:content/0"},{"type":"type","title":"Nostrum.Struct.Message.edited_timestamp/0","doc":"When the message was edited","ref":"Nostrum.Struct.Message.html#t:edited_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Message.embeds/0","doc":"List of embedded content in the message","ref":"Nostrum.Struct.Message.html#t:embeds/0"},{"type":"type","title":"Nostrum.Struct.Message.guild_id/0","doc":"The id of the guild","ref":"Nostrum.Struct.Message.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Message.id/0","doc":"The id of the message","ref":"Nostrum.Struct.Message.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.interaction/0","doc":"Message interaction object","ref":"Nostrum.Struct.Message.html#t:interaction/0"},{"type":"type","title":"Nostrum.Struct.Message.member/0","doc":"Partial Guild Member object received with the Message Create event if message came from a guild channel","ref":"Nostrum.Struct.Message.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_channels/0","doc":"List of channels mentioned in the message\n\n[Discord API Channel Mention Object Documentation](https://discord.com/developers/docs/resources/channel#channel-mention-object-channel-mention-structure)","ref":"Nostrum.Struct.Message.html#t:mention_channels/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_everyone/0","doc":"Whether this message mentions everyone","ref":"Nostrum.Struct.Message.html#t:mention_everyone/0"},{"type":"type","title":"Nostrum.Struct.Message.mention_roles/0","doc":"List of roles ids mentioned in the message","ref":"Nostrum.Struct.Message.html#t:mention_roles/0"},{"type":"type","title":"Nostrum.Struct.Message.mentions/0","doc":"List of users mentioned in the message","ref":"Nostrum.Struct.Message.html#t:mentions/0"},{"type":"type","title":"Nostrum.Struct.Message.message_reference/0","doc":"Reference data sent with crossposted messages and replies.\n\nFor `THREAD_STARTER_MESSAGE` messages, this field points to the message that the thread was started from.","ref":"Nostrum.Struct.Message.html#t:message_reference/0"},{"type":"type","title":"Nostrum.Struct.Message.nonce/0","doc":"Validates if a message was sent","ref":"Nostrum.Struct.Message.html#t:nonce/0"},{"type":"type","title":"Nostrum.Struct.Message.pinned/0","doc":"Whether this message is pinned","ref":"Nostrum.Struct.Message.html#t:pinned/0"},{"type":"type","title":"Nostrum.Struct.Message.poll/0","doc":"The poll object attached to the message","ref":"Nostrum.Struct.Message.html#t:poll/0"},{"type":"type","title":"Nostrum.Struct.Message.reactions/0","doc":"Reactions to the message.","ref":"Nostrum.Struct.Message.html#t:reactions/0"},{"type":"type","title":"Nostrum.Struct.Message.referenced_message/0","doc":"The message associated with the `:message_reference`\n\nThis field is only returned for messages with a `type: 19` (Reply). If the message is a reply but the`:referenced_message` field is not present, the backend did not attempt to fetch the message that was being replied to,so its state is unknown. If the field exists but is `nil`, the referenced message was deleted.","ref":"Nostrum.Struct.Message.html#t:referenced_message/0"},{"type":"type","title":"Nostrum.Struct.Message.sticker_items/0","doc":"Array of Message Sticker Item Objects","ref":"Nostrum.Struct.Message.html#t:sticker_items/0"},{"type":"type","title":"Nostrum.Struct.Message.t/0","doc":"","ref":"Nostrum.Struct.Message.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.thread/0","doc":"The thread that was started from this message, includes a thread member object","ref":"Nostrum.Struct.Message.html#t:thread/0"},{"type":"type","title":"Nostrum.Struct.Message.timestamp/0","doc":"When the message was sent","ref":"Nostrum.Struct.Message.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Message.tts/0","doc":"Whether this was a TTS message","ref":"Nostrum.Struct.Message.html#t:tts/0"},{"type":"type","title":"Nostrum.Struct.Message.type/0","doc":"[Discord API Message Object Type Documentation](https://discord.com/developers/docs/resources/channel#message-object-message-types)\n\n- `0` - `DEFAULT`\n- `1` - `RECIPIENT_ADD`\n- `2` - `RECIPIENT_REMOVE`\n- `3` - `CALL`\n- `4` - `CHANNEL_NAME_CHANGE`\n- `5` - `CHANNEL_ICON_CHANGE`\n- `6` - `CHANNEL_PINNED_MESSAGE`\n- `7` - `GUILD_MEMBER_JOIN`\n- `8` - `USER_PREMIUM_GUILD_SUBSCRIPTION`\n- `9` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1`\n- `10` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2`\n- `11` - `USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3`\n- `12` - `CHANNEL_FOLLOW_ADD`\n- `14` - `GUILD_DISCOVERY_DISQUALIFIED`\n- `15` - `GUILD_DISCOVERY_REQUALIFIED`\n- `16` - `GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING`\n- `17` - `GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING`\n- `18` - `THREAD_CREATED`\n- `19` - `REPLY`\n- `20` - `APPLICATION_COMMAND`\n- `21` - `THREAD_STARTER_MESSAGE`\n- `22` - `GUILD_INVITE_REMINDER`","ref":"Nostrum.Struct.Message.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Message.webhook_id/0","doc":"If the message is generated by a webhook, this is the webhook's id","ref":"Nostrum.Struct.Message.html#t:webhook_id/0"},{"type":"module","title":"Nostrum.Struct.Message.Activity","doc":"Struct representing a Discord message activity.","ref":"Nostrum.Struct.Message.Activity.html"},{"type":"type","title":"Nostrum.Struct.Message.Activity.party_id/0","doc":"The party id from a [rich presence event](https://discord.com/developers/docs/rich-presence/how-to).","ref":"Nostrum.Struct.Message.Activity.html#t:party_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Activity.t/0","doc":"","ref":"Nostrum.Struct.Message.Activity.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Activity.type/0","doc":"[Type of message activity](https://discord.com/developers/docs/resources/channel#message-object-message-activity-types).","ref":"Nostrum.Struct.Message.Activity.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Message.Application","doc":"Struct representing a Discord message application.","ref":"Nostrum.Struct.Message.Application.html"},{"type":"type","title":"Nostrum.Struct.Message.Application.cover_image/0","doc":"Id of the embed's image asset","ref":"Nostrum.Struct.Message.Application.html#t:cover_image/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.description/0","doc":"Application's description","ref":"Nostrum.Struct.Message.Application.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.icon/0","doc":"Id of the application's icon","ref":"Nostrum.Struct.Message.Application.html#t:icon/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.id/0","doc":"Id of the application","ref":"Nostrum.Struct.Message.Application.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.name/0","doc":"Name of the application","ref":"Nostrum.Struct.Message.Application.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Message.Application.t/0","doc":"","ref":"Nostrum.Struct.Message.Application.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Attachment","doc":"Struct representing a Discord message attachment.","ref":"Nostrum.Struct.Message.Attachment.html"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.filename/0","doc":"Name of attached file","ref":"Nostrum.Struct.Message.Attachment.html#t:filename/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.height/0","doc":"Height of the file (if image)","ref":"Nostrum.Struct.Message.Attachment.html#t:height/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.id/0","doc":"Attachment id","ref":"Nostrum.Struct.Message.Attachment.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.proxy_url/0","doc":"Proxy url of the file","ref":"Nostrum.Struct.Message.Attachment.html#t:proxy_url/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.size/0","doc":"Size of the file in bytes","ref":"Nostrum.Struct.Message.Attachment.html#t:size/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.t/0","doc":"","ref":"Nostrum.Struct.Message.Attachment.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.url/0","doc":"Source url of the file","ref":"Nostrum.Struct.Message.Attachment.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Message.Attachment.width/0","doc":"Width of the file (if image)","ref":"Nostrum.Struct.Message.Attachment.html#t:width/0"},{"type":"module","title":"Nostrum.Struct.Message.Component","doc":"A component attached to a message.\n\nNote that the fields present depend on the `t:type/0` of the component object.\n\nSee the [Discord API Component Object\nDocumentation](https://discord.com/developers/docs/interactions/message-components#component-object)\nfor more information.","ref":"Nostrum.Struct.Message.Component.html"},{"type":"type","title":"Nostrum.Struct.Message.Component.components/0","doc":"Child components for action rows.\n\nOnly present for action rows.","ref":"Nostrum.Struct.Message.Component.html#t:components/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.custom_id/0","doc":"A developer-defined identifier for the component.\n\nMaximum of 100 characters. Only present for buttons and select menus.","ref":"Nostrum.Struct.Message.Component.html#t:custom_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.disabled/0","doc":"Whether the component is disabled.\n\nOnly present for buttons and select menus.","ref":"Nostrum.Struct.Message.Component.html#t:disabled/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.emoji/0","doc":"Partial emoji of the button.\n\nOnly present for buttons. The following fields are set:\n\n- ``name``\n- ``id``\n- ``animated``","ref":"Nostrum.Struct.Message.Component.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.label/0","doc":"Text that appears on the button, or above the text input.\n\nMaximum of 80 characters. Only present for buttons and text input.","ref":"Nostrum.Struct.Message.Component.html#t:label/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.max_length/0","doc":"Maximum length of the input text.\n\nDefaults to ``1``. Maximum of ``4000``. Only present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:max_length/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.max_values/0","doc":"Maximum number of items that must be chosen.\n\nDefaults to ``1``. Maximum of ``25``. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:max_values/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.min_length/0","doc":"Minimum length of the input text.\n\nDefaults to ``0``. Maximum of ``4000``. Only present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:min_length/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.min_values/0","doc":"Minimum number of items that must be chosen.\n\nDefaults to ``1``. Minimum of ``0``. Maximum of ``25``. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:min_values/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.options/0","doc":"Choices of the select menu.\n\nMaximum of 25 options. Only present for select menus.","ref":"Nostrum.Struct.Message.Component.html#t:options/0"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.options/0","doc":"See [Discord Developer Portal: Select Option\nStructure](https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-option-structure).","ref":"Nostrum.Struct.Message.Component.html#t:options/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.placeholder/0","doc":"Custom placeholder text if nothing is selected.\n\nMaximum of 100 characters. Only present for select menus and text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:placeholder/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.required/0","doc":"Whether the component is required to be filled, defaults to `false`.\n\nOnly present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:required/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.style/0","doc":"An integer representing the style of the button or text input.\n\nOnly present for buttons and text input.","ref":"Nostrum.Struct.Message.Component.html#t:style/0"},{"type":"type","title":"Values (Button) - Nostrum.Struct.Message.Component.style/0","doc":"- ``1``: Primary - blurple, ``custom_id`` required.\n- ``2``: Secondary - grey, ``custom_id`` required.\n- ``3``: Success - green, ``custom_id`` required.\n- ``4``: Danger - red, ``custom_id`` required.\n- ``5``: Link - grey, ``url`` required, navigates to the URL.","ref":"Nostrum.Struct.Message.Component.html#t:style/0-values-button"},{"type":"type","title":"Values (Text Input) - Nostrum.Struct.Message.Component.style/0","doc":"- ``1``: Short - A single line text input.\n- ``2``: Paragraph - A multi-line text input.","ref":"Nostrum.Struct.Message.Component.html#t:style/0-values-text-input"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.style/0","doc":"See [Discord Developer Portal: Button\nStyles](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles).","ref":"Nostrum.Struct.Message.Component.html#t:style/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.t/0","doc":"Represents a message component.","ref":"Nostrum.Struct.Message.Component.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.type/0","doc":"Component type.\n\nThis field is always set.","ref":"Nostrum.Struct.Message.Component.html#t:type/0"},{"type":"type","title":"Values - Nostrum.Struct.Message.Component.type/0","doc":"- ``1``: Action Row - A container for other components.\n- ``2``: Button - A button object.\n- ``3``: Select Menu - A select menu for picking from choices.\n- ``4``: Text Input - A text input field.","ref":"Nostrum.Struct.Message.Component.html#t:type/0-values"},{"type":"type","title":"References - Nostrum.Struct.Message.Component.type/0","doc":"See [Discord Developer Portal: Component\nTypes](https://discord.com/developers/docs/interactions/message-components#component-object-component-types).","ref":"Nostrum.Struct.Message.Component.html#t:type/0-references"},{"type":"type","title":"Nostrum.Struct.Message.Component.url/0","doc":"URL for link-style buttons.\n\nOnly present for buttons.","ref":"Nostrum.Struct.Message.Component.html#t:url/0"},{"type":"type","title":"Nostrum.Struct.Message.Component.value/0","doc":"The current value of the component.\n\nWhen creating a new component, this will be its pre-filled value if present.\nOnly present for text inputs.","ref":"Nostrum.Struct.Message.Component.html#t:value/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll","doc":"Struct representing a poll in a Discord chat.\n\nThere are various helper methods on this structure to create new poll, see `create_poll/2` and `put_answer/2` & `put_answer/3` for code samples.","ref":"Nostrum.Struct.Message.Poll.html"},{"type":"function","title":"Nostrum.Struct.Message.Poll.create_poll/2","doc":"Create a new poll struct.\n\nUse `Nostrum.Api.create_message` to send it once you've populated it.\n\nAccepts a `question_text` parameter which is the string to use as the poll title.\n\nKeyword arguments:\n- `duration`: duration (in hours) the poll should be open for\n- `allow_multiselect`: whether users should be able to select multiple answers\n\nYou can also pass an `answers` key with answers, though `put_answer/2` and `put_answer/3` are advised.","ref":"Nostrum.Struct.Message.Poll.html#create_poll/2"},{"type":"function","title":"Examples - Nostrum.Struct.Message.Poll.create_poll/2","doc":"```elixir\npoll = Poll.create_poll(\"Do you enjoy pineapple on pizza?\", duration: 2, allow_multiselect: false)\n |> Poll.put_answer(\"Yes!\", default_emoji: \"\\u2705\") # check mark emoji\n |> Poll.put_answer(\"No!\", default_emoji: \"\\u274C\") # cross emoji\n\nApi.create_message(channel_id, poll: poll)\n```","ref":"Nostrum.Struct.Message.Poll.html#create_poll/2-examples"},{"type":"function","title":"Nostrum.Struct.Message.Poll.put_answer/2","doc":"Add an answer to the provided poll.\n\nSee `create_poll/2` for a code sample of this function.\n\nTakes a required \"answer\" text field, as well as either of the optional arguments:\n- `custom_emoji`: An integer representing the snowflake of an emoji to display with the option\n- `default_emoji`: A default platform emoji represented as a unicode character","ref":"Nostrum.Struct.Message.Poll.html#put_answer/2"},{"type":"function","title":"Nostrum.Struct.Message.Poll.put_answer/3","doc":"","ref":"Nostrum.Struct.Message.Poll.html#put_answer/3"},{"type":"type","title":"Nostrum.Struct.Message.Poll.allow_multiselect/0","doc":"Whether the poll allows selection of multiple answers","ref":"Nostrum.Struct.Message.Poll.html#t:allow_multiselect/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.answers/0","doc":"List of potential answers for the poll","ref":"Nostrum.Struct.Message.Poll.html#t:answers/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.duration/0","doc":"Duration of poll in hours","ref":"Nostrum.Struct.Message.Poll.html#t:duration/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.expiry/0","doc":"Expiry time of the poll","ref":"Nostrum.Struct.Message.Poll.html#t:expiry/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.layout_type/0","doc":"Layout type for the poll, currently only 1 (`DEFAULT`) is supported here.\n\nIf set to `nil`, the value will default to `1` at the Discord API.","ref":"Nostrum.Struct.Message.Poll.html#t:layout_type/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.question/0","doc":"Question for the poll","ref":"Nostrum.Struct.Message.Poll.html#t:question/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.results/0","doc":"Result counts of a poll that has been voted on.\n\nThis field is only present for poll objects received over the gateway or Discord API.\n\nAs mentioned in the `Nostrum.Struct.Message.Poll.Results` documentation, if an answer has not been voted on it\nwill not be in this object.","ref":"Nostrum.Struct.Message.Poll.html#t:results/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.Answer","doc":"A struct representing a poll answer.","ref":"Nostrum.Struct.Message.Poll.Answer.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.answer_id/0","doc":"ID of the answer, this is only sent *from* the gateway, you do not need to send this to the gateway.","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:answer_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.poll_media/0","doc":"Object representing how the answer is displayed visually, with the text and optional emojis.","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:poll_media/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Answer.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.Answer.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.MediaObject","doc":"A struct representing a media item of a poll (e.g. a question or answer)","ref":"Nostrum.Struct.Message.Poll.MediaObject.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.emoji/0","doc":"A partial emoji (only supported for answers).\n\nFor a custom emoji, only the `id` field needs to be sent, for a default emoji, only the\n`name` field needs to be sent (with the Unicode emoji).","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.MediaObject.text/0","doc":"Text of the poll media object, either the question or answer text.","ref":"Nostrum.Struct.Message.Poll.MediaObject.html#t:text/0"},{"type":"module","title":"Nostrum.Struct.Message.Poll.Results","doc":"A struct representing the results of a poll.","ref":"Nostrum.Struct.Message.Poll.Results.html"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.answer_counts/0","doc":"A list of objects representing the counts for each of the potential answers in the poll.\n\nThe `id` property of each item corresponds to the `answer_id`\nof the poll answers. If an option is not present in this list, then\nthere were no votes for that answer.","ref":"Nostrum.Struct.Message.Poll.Results.html#t:answer_counts/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.is_finalized/0","doc":"A flag on whether the poll has finished counting.\n\nIf this is set to true, the counts are guaranteed to be accurate from Discord.","ref":"Nostrum.Struct.Message.Poll.Results.html#t:is_finalized/0"},{"type":"type","title":"Nostrum.Struct.Message.Poll.Results.t/0","doc":"","ref":"Nostrum.Struct.Message.Poll.Results.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Reaction","doc":"Struct representing a Discord message reaction.","ref":"Nostrum.Struct.Message.Reaction.html"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.count/0","doc":"Times this emoji has been used to react","ref":"Nostrum.Struct.Message.Reaction.html#t:count/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.emoji/0","doc":"Emoji information","ref":"Nostrum.Struct.Message.Reaction.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.me/0","doc":"Whether the current user is the one who reacted","ref":"Nostrum.Struct.Message.Reaction.html#t:me/0"},{"type":"type","title":"Nostrum.Struct.Message.Reaction.t/0","doc":"","ref":"Nostrum.Struct.Message.Reaction.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Message.Reference","doc":"Struct representing a discord message reference.","ref":"Nostrum.Struct.Message.Reference.html"},{"type":"type","title":"Nostrum.Struct.Message.Reference.channel_id/0","doc":"Id of the originating message's channel","ref":"Nostrum.Struct.Message.Reference.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.guild_id/0","doc":"Id of the originating message's guild","ref":"Nostrum.Struct.Message.Reference.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.message_id/0","doc":"Id of the originating message","ref":"Nostrum.Struct.Message.Reference.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Message.Reference.t/0","doc":"","ref":"Nostrum.Struct.Message.Reference.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Overwrite","doc":"Struct representing a Discord overwrite.","ref":"Nostrum.Struct.Overwrite.html"},{"type":"type","title":"Nostrum.Struct.Overwrite.allow/0","doc":"Permission bit set","ref":"Nostrum.Struct.Overwrite.html#t:allow/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.deny/0","doc":"Permission bit set","ref":"Nostrum.Struct.Overwrite.html#t:deny/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.id/0","doc":"Role or User id","ref":"Nostrum.Struct.Overwrite.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.t/0","doc":"","ref":"Nostrum.Struct.Overwrite.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Overwrite.type/0","doc":"Either ``0`` (role) or ``1`` (member)","ref":"Nostrum.Struct.Overwrite.html#t:type/0"},{"type":"module","title":"Nostrum.Struct.Sticker","doc":"A `Nostrum.Struct.Sticker` represents a sticker that can be sent inside a\n`Nostrum.Struct.Message`.","ref":"Nostrum.Struct.Sticker.html"},{"type":"function","title":"Nostrum.Struct.Sticker.cdn_url/1","doc":"Fetch a CDN URL for the sticker object.\n\n`:png` and `:apng` stickers will return a `.png` URL, `:gif` will return a\n`.gif` URL and `:lottie` will return a `.json` URL.","ref":"Nostrum.Struct.Sticker.html#cdn_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Sticker.cdn_url/1","doc":"```elixir\niex> sticker = %Nostrum.Struct.Sticker{format_type: :gif, id: 112233445566778899}\niex> Nostrum.Struct.Sticker.cdn_url sticker\n\"https://media.discordapp.net/stickers/112233445566778899.gif\"\n```\n\n```elixir\niex> sticker = %Nostrum.Struct.Sticker{format_type: :apng, id: 998877665544332211}\niex> Nostrum.Struct.Sticker.cdn_url sticker\n\"https://cdn.discordapp.com/stickers/998877665544332211.png\"\n```","ref":"Nostrum.Struct.Sticker.html#cdn_url/1-examples"},{"type":"type","title":"Nostrum.Struct.Sticker.available/0","doc":"Whether this guild sticker can be used.\n\nMay be false due to loss of Server Boosts","ref":"Nostrum.Struct.Sticker.html#t:available/0"},{"type":"type","title":"Nostrum.Struct.Sticker.description/0","doc":"Description of the sticker","ref":"Nostrum.Struct.Sticker.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Sticker.format_type/0","doc":"Format of the sticker.\n\nThis field is used to determine the return URL in `cdn_url/1`.","ref":"Nostrum.Struct.Sticker.html#t:format_type/0"},{"type":"type","title":"Nostrum.Struct.Sticker.guild_id/0","doc":"ID of the guild that owns this sticker.\n\n`nil` if the sticker is a built-in (type `:standard`) sticker.","ref":"Nostrum.Struct.Sticker.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.id/0","doc":"ID of the sticker","ref":"Nostrum.Struct.Sticker.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.name/0","doc":"Name of the sticker","ref":"Nostrum.Struct.Sticker.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Sticker.pack_id/0","doc":"ID of the pack the sticker is from","ref":"Nostrum.Struct.Sticker.html#t:pack_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.sort_value/0","doc":"The sticker's sort order within its pack.\n\nSometimes provided for stickers with type `:standard` that are in a pack.","ref":"Nostrum.Struct.Sticker.html#t:sort_value/0"},{"type":"type","title":"Nostrum.Struct.Sticker.t/0","doc":"","ref":"Nostrum.Struct.Sticker.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Sticker.tags/0","doc":"Tags used by the Discord client to auto-complete a sticker.\n\nFor default sticker packs, this is a comma-separated list. For guild stickers,\nthis is the name of the unicode emoji associated by the sticker creator with\nthe sticker.\n\nThis is technically a free-text field so consistency in formatting is not guaranteed.","ref":"Nostrum.Struct.Sticker.html#t:tags/0"},{"type":"type","title":"Nostrum.Struct.Sticker.type/0","doc":"Whether the sticker is a standard (platform made) sticker or a custom guild sticker.","ref":"Nostrum.Struct.Sticker.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Sticker.user/0","doc":"User that uploaded the guild sticker.\n\n`nil` if the sticker is a built-in (type `:standard`) sticker.","ref":"Nostrum.Struct.Sticker.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Sticker.Pack","doc":"Represents a platform-curated sticker pack on Discord","ref":"Nostrum.Struct.Sticker.Pack.html"},{"type":"function","title":"Nostrum.Struct.Sticker.Pack.banner_url/1","doc":"Return the banner pack URL for a given sticker pack.\n\nThis is a marketing banner provided by Discord for their platform curated sticker packs.","ref":"Nostrum.Struct.Sticker.Pack.html#banner_url/1"},{"type":"function","title":"Examples - Nostrum.Struct.Sticker.Pack.banner_url/1","doc":"```elixir\niex> pack = %Nostrum.Struct.Sticker.Pack{banner_asset_id: 112233445566778899}\niex> Nostrum.Struct.Sticker.Pack.banner_url pack\n\"https://cdn.discordapp.com/app-assets/710982414301790216/store/112233445566778899.png\"\n```","ref":"Nostrum.Struct.Sticker.Pack.html#banner_url/1-examples"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.banner_asset_id/0","doc":"Asset ID of the banner for this sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:banner_asset_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.cover_sticker_id/0","doc":"ID of a sticker contained within the pack that should be the cover.","ref":"Nostrum.Struct.Sticker.Pack.html#t:cover_sticker_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.description/0","doc":"Marketing description of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:description/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.id/0","doc":"ID of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.name/0","doc":"Name of the pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.sku_id/0","doc":"SKU ID of the sticker pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:sku_id/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.stickers/0","doc":"A list of stickers contained within the pack.","ref":"Nostrum.Struct.Sticker.Pack.html#t:stickers/0"},{"type":"type","title":"Nostrum.Struct.Sticker.Pack.t/0","doc":"","ref":"Nostrum.Struct.Sticker.Pack.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.ThreadMember","doc":"Struct representing a thread member object","ref":"Nostrum.Struct.ThreadMember.html"},{"type":"type","title":"Nostrum.Struct.ThreadMember.flags/0","doc":"Any user-thread settings","ref":"Nostrum.Struct.ThreadMember.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.guild_id/0","doc":"The id of the guild the thread is in.\n\nOnly present within `THREAD_MEMBER_UPDATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.id/0","doc":"The id of the thread, omitted within `GUILD_CREATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.join_timestamp/0","doc":"The timestamp of when the user last joined the thread","ref":"Nostrum.Struct.ThreadMember.html#t:join_timestamp/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.t/0","doc":"","ref":"Nostrum.Struct.ThreadMember.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.ThreadMember.user_id/0","doc":"The id of the user, omitted within `GUILD_CREATE` events","ref":"Nostrum.Struct.ThreadMember.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.User","doc":"Struct representing a Discord user.","ref":"Nostrum.Struct.User.html"},{"type":"module","title":"Mentioning Users in Messages - Nostrum.Struct.User","doc":"A `Nostrum.Struct.User` can be mentioned in message content using the `String.Chars`\nprotocol or `mention/1`.\n\n```elixir\nuser = %Nostrum.Struct.User{id: 120571255635181568}\nNostrum.Api.create_message!(184046599834435585, \"#{user}\")\n%Nostrum.Struct.Message{content: \"<@120571255635181568>\"}\n\nuser = %Nostrum.Struct.User{id: 89918932789497856}\nNostrum.Api.create_message!(280085880452939778, \"#{Nostrum.Struct.User.mention(user)}\")\n%Nostrum.Struct.Message{content: \"<@89918932789497856>\"}\n```","ref":"Nostrum.Struct.User.html#module-mentioning-users-in-messages"},{"type":"module","title":"User vs. Member - Nostrum.Struct.User","doc":"A `user` contains only general information about that user such as a `username` and an `avatar`.\nA `member` has everything that a `user` has, but also additional information on a per guild basis. This includes things like a `nickname` and a list of `roles`.","ref":"Nostrum.Struct.User.html#module-user-vs-member"},{"type":"function","title":"Nostrum.Struct.User.avatar_url/2","doc":"Returns the URL of a user's display avatar.\n\nIf `:avatar` is `nil`, the default avatar url is returned.\n\nSupported image formats are PNG, JPEG, WebP, and GIF.","ref":"Nostrum.Struct.User.html#avatar_url/2"},{"type":"function","title":"Examples - Nostrum.Struct.User.avatar_url/2","doc":"```elixir\niex> user = %Nostrum.Struct.User{avatar: \"8342729096ea3675442027381ff50dfe\",\n...> id: 80351110224678912}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.webp\"\niex> Nostrum.Struct.User.avatar_url(user, \"png\")\n\"https://cdn.discordapp.com/avatars/80351110224678912/8342729096ea3675442027381ff50dfe.png\"\n\niex> user = %Nostrum.Struct.User{avatar: nil,\n...> id: 80351110224678912,\n...> discriminator: \"0\"}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/embed/avatars/5.png\"\n\niex> user = %Nostrum.Struct.User{avatar: nil,\n...> discriminator: \"1337\"}\niex> Nostrum.Struct.User.avatar_url(user)\n\"https://cdn.discordapp.com/embed/avatars/2.png\"\n```","ref":"Nostrum.Struct.User.html#avatar_url/2-examples"},{"type":"function","title":"Nostrum.Struct.User.full_name/1","doc":"Returns a user's `:global_name` if present, otherwise returns their\n`:username` and `:discriminator` separated by a hashtag.","ref":"Nostrum.Struct.User.html#full_name/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.full_name/1","doc":"```elixir\niex> user = %Nostrum.Struct.User{global_name: \"TheRealJason\",\n...> username: \"therealjason\",\n...> discriminator: \"0\"}\niex> Nostrum.Struct.User.full_name(user)\n\"TheRealJason\"\n```\n\n```elixir\niex> user = %Nostrum.Struct.User{username: \"b1nzy\",\n...> discriminator: \"0852\"}\niex> Nostrum.Struct.User.full_name(user)\n\"b1nzy#0852\"\n```","ref":"Nostrum.Struct.User.html#full_name/1-examples"},{"type":"function","title":"Nostrum.Struct.User.mention/1","doc":"Formats an `Nostrum.Struct.User` into a mention.","ref":"Nostrum.Struct.User.html#mention/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.mention/1","doc":"```elixir\niex> user = %Nostrum.Struct.User{id: 177888205536886784}\n...> Nostrum.Struct.User.mention(user)\n\"<@177888205536886784>\"\n```","ref":"Nostrum.Struct.User.html#mention/1-examples"},{"type":"type","title":"Nostrum.Struct.User.avatar/0","doc":"User's avatar hash","ref":"Nostrum.Struct.User.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.User.bot/0","doc":"Whether the user is a bot","ref":"Nostrum.Struct.User.html#t:bot/0"},{"type":"type","title":"Nostrum.Struct.User.discriminator/0","doc":"The user's 4--digit discord-tag","ref":"Nostrum.Struct.User.html#t:discriminator/0"},{"type":"type","title":"Nostrum.Struct.User.global_name/0","doc":"The user's display name, if it is set","ref":"Nostrum.Struct.User.html#t:global_name/0"},{"type":"type","title":"Nostrum.Struct.User.id/0","doc":"The user's id","ref":"Nostrum.Struct.User.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.User.public_flags/0","doc":"The user's public flags, as a bitset.\n\nTo parse these, use `Nostrum.Struct.User.Flags.from_integer/1`.","ref":"Nostrum.Struct.User.html#t:public_flags/0"},{"type":"type","title":"Nostrum.Struct.User.t/0","doc":"","ref":"Nostrum.Struct.User.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.User.username/0","doc":"The user's username","ref":"Nostrum.Struct.User.html#t:username/0"},{"type":"module","title":"Nostrum.Struct.User.Connection","doc":"Struct representing a Discord User's connections","ref":"Nostrum.Struct.User.Connection.html"},{"type":"module","title":"Nostrum.Struct.User.Flags","doc":"Struct representing the flags a user account can have","ref":"Nostrum.Struct.User.Flags.html"},{"type":"function","title":"Nostrum.Struct.User.Flags.from_integer/1","doc":"Constructs a flag struct based on an integer from the Discord API (either public_flags or flags).","ref":"Nostrum.Struct.User.Flags.html#from_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.Flags.from_integer/1","doc":"```elixir\niex> Nostrum.Struct.User.Flags.from_integer(131842)\n%Nostrum.Struct.User.Flags{\n bug_hunter_level_1: false,\n bug_hunter_level_2: false,\n early_supporter: true,\n hypesquad_balance: true,\n hypesquad_bravery: false,\n hypesquad_brilliance: false,\n hypesquad_events: false,\n partner: true,\n staff: false,\n system: false,\n team_user: false,\n verified_bot: false,\n verified_developer: true\n}\n```","ref":"Nostrum.Struct.User.Flags.html#from_integer/1-examples"},{"type":"function","title":"Nostrum.Struct.User.Flags.to_integer/1","doc":"Convert a flag struct to an integer value.","ref":"Nostrum.Struct.User.Flags.html#to_integer/1"},{"type":"function","title":"Examples - Nostrum.Struct.User.Flags.to_integer/1","doc":"```elixir\niex> my_flags = %Nostrum.Struct.User.Flags{\n...> bug_hunter_level_1: false,\n...> bug_hunter_level_2: false,\n...> early_supporter: true,\n...> hypesquad_balance: true,\n...> hypesquad_bravery: false,\n...> hypesquad_brilliance: false,\n...> hypesquad_events: false,\n...> partner: true,\n...> staff: false,\n...> system: false,\n...> team_user: false,\n...> verified_bot: false,\n...> verified_developer: true\n...> }\niex> Nostrum.Struct.User.Flags.to_integer(my_flags)\n131842\n```","ref":"Nostrum.Struct.User.Flags.html#to_integer/1-examples"},{"type":"type","title":"Nostrum.Struct.User.Flags.bug_hunter_level_1/0","doc":"Bug Hunter (Level 1)","ref":"Nostrum.Struct.User.Flags.html#t:bug_hunter_level_1/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.bug_hunter_level_2/0","doc":"Bug Hunter (Level 2)","ref":"Nostrum.Struct.User.Flags.html#t:bug_hunter_level_2/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.early_supporter/0","doc":"Early Supporter","ref":"Nostrum.Struct.User.Flags.html#t:early_supporter/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.flags/0","doc":"","ref":"Nostrum.Struct.User.Flags.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_balance/0","doc":"HypeSquad Balance","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_balance/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_bravery/0","doc":"HypeSquad Bravery","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_bravery/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_brilliance/0","doc":"HypeSquad Brilliance","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_brilliance/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.hypesquad_events/0","doc":"HypeSquad Events","ref":"Nostrum.Struct.User.Flags.html#t:hypesquad_events/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.partner/0","doc":"Discord Partner","ref":"Nostrum.Struct.User.Flags.html#t:partner/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.raw_flags/0","doc":"Raw user flags as sent by the Discord API","ref":"Nostrum.Struct.User.Flags.html#t:raw_flags/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.staff/0","doc":"Discord Employee","ref":"Nostrum.Struct.User.Flags.html#t:staff/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.system/0","doc":"System user","ref":"Nostrum.Struct.User.Flags.html#t:system/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.t/0","doc":"","ref":"Nostrum.Struct.User.Flags.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.team_user/0","doc":"Team User","ref":"Nostrum.Struct.User.Flags.html#t:team_user/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.verified_bot/0","doc":"Verified bot","ref":"Nostrum.Struct.User.Flags.html#t:verified_bot/0"},{"type":"type","title":"Nostrum.Struct.User.Flags.verified_developer/0","doc":"Verified developer","ref":"Nostrum.Struct.User.Flags.html#t:verified_developer/0"},{"type":"module","title":"Nostrum.Struct.VoiceRegion","doc":"Struct representing a Discord voice region.","ref":"Nostrum.Struct.VoiceRegion.html"},{"type":"type","title":"Nostrum.Struct.VoiceRegion.t/0","doc":"","ref":"Nostrum.Struct.VoiceRegion.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.VoiceWSState","doc":"Struct representing the current Voice WS state.","ref":"Nostrum.Struct.VoiceWSState.html"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.channel_id/0","doc":"The channel id that this voice websocket state applies to","ref":"Nostrum.Struct.VoiceWSState.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.conn/0","doc":"PID of the `:gun` worker connected to the websocket","ref":"Nostrum.Struct.VoiceWSState.html#t:conn/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.conn_pid/0","doc":"PID of the connection process","ref":"Nostrum.Struct.VoiceWSState.html#t:conn_pid/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.encryption_mode/0","doc":"Encryption mode selected for voice channel","ref":"Nostrum.Struct.VoiceWSState.html#t:encryption_mode/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.gateway/0","doc":"Gateway URL","ref":"Nostrum.Struct.VoiceWSState.html#t:gateway/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.guild_id/0","doc":"The guild id that this voice websocket state applies to","ref":"Nostrum.Struct.VoiceWSState.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_ack/0","doc":"Whether or not the last heartbeat sent was ACK'd","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_interval/0","doc":"Interval at which heartbeats are sent","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_interval/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.heartbeat_ref/0","doc":"Time ref for the heartbeat","ref":"Nostrum.Struct.VoiceWSState.html#t:heartbeat_ref/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.identified/0","doc":"Whether the session has been identified","ref":"Nostrum.Struct.VoiceWSState.html#t:identified/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.last_heartbeat_ack/0","doc":"The time the last heartbeat was acknowledged, will be nil if a heartbeat\nhasn't been ACK'd yet","ref":"Nostrum.Struct.VoiceWSState.html#t:last_heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.last_heartbeat_send/0","doc":"The time the last heartbeat was sent, if a heartbeat hasn't been sent it\nwill be the time the websocket process was started","ref":"Nostrum.Struct.VoiceWSState.html#t:last_heartbeat_send/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.secret_key/0","doc":"The secret key for audio encryption","ref":"Nostrum.Struct.VoiceWSState.html#t:secret_key/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.seq/0","doc":"Sequence number for buffering server-sent events","ref":"Nostrum.Struct.VoiceWSState.html#t:seq/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.session/0","doc":"The session id","ref":"Nostrum.Struct.VoiceWSState.html#t:session/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.ssrc_map/0","doc":"A mapping of RTP SSRC (synchronization source) to user id\n\nThis map can be used to identify the user who generated the incoming\naudio data when an RTP packet is received.","ref":"Nostrum.Struct.VoiceWSState.html#t:ssrc_map/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.stream/0","doc":"Stream reference for `:gun`","ref":"Nostrum.Struct.VoiceWSState.html#t:stream/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.t/0","doc":"","ref":"Nostrum.Struct.VoiceWSState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.VoiceWSState.token/0","doc":"The session token","ref":"Nostrum.Struct.VoiceWSState.html#t:token/0"},{"type":"module","title":"Nostrum.Struct.WSState","doc":"Struct representing the current WS state.","ref":"Nostrum.Struct.WSState.html"},{"type":"type","title":"Nostrum.Struct.WSState.compress_ctx/0","doc":"Reference to the current compression context","ref":"Nostrum.Struct.WSState.html#t:compress_ctx/0"},{"type":"type","title":"Nostrum.Struct.WSState.conn/0","doc":"PID of the `:gun` worker connected to the websocket","ref":"Nostrum.Struct.WSState.html#t:conn/0"},{"type":"type","title":"Nostrum.Struct.WSState.conn_pid/0","doc":"PID of the connection process","ref":"Nostrum.Struct.WSState.html#t:conn_pid/0"},{"type":"type","title":"Nostrum.Struct.WSState.gateway/0","doc":"Gateway URL","ref":"Nostrum.Struct.WSState.html#t:gateway/0"},{"type":"type","title":"Nostrum.Struct.WSState.heartbeat_ack/0","doc":"Whether or not the last hearbeat sent was ACK'd","ref":"Nostrum.Struct.WSState.html#t:heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.WSState.heartbeat_interval/0","doc":"Interval at which heartbeats are sent","ref":"Nostrum.Struct.WSState.html#t:heartbeat_interval/0"},{"type":"type","title":"Nostrum.Struct.WSState.last_heartbeat_ack/0","doc":"The time the last heartbeat was acknowledged, will be nil if a heartbeat\nhasn't been ACK'd yet","ref":"Nostrum.Struct.WSState.html#t:last_heartbeat_ack/0"},{"type":"type","title":"Nostrum.Struct.WSState.last_heartbeat_send/0","doc":"The time the last heartbeat was sent, if a heartbeat hasn't been sent it\nwill be the time the websocket process was started","ref":"Nostrum.Struct.WSState.html#t:last_heartbeat_send/0"},{"type":"type","title":"Nostrum.Struct.WSState.resume_gateway/0","doc":"Gateway URL to use for resuming.","ref":"Nostrum.Struct.WSState.html#t:resume_gateway/0"},{"type":"type","title":"Nostrum.Struct.WSState.seq/0","doc":"The sequence number of the last event","ref":"Nostrum.Struct.WSState.html#t:seq/0"},{"type":"type","title":"Nostrum.Struct.WSState.session/0","doc":"The session id","ref":"Nostrum.Struct.WSState.html#t:session/0"},{"type":"type","title":"Nostrum.Struct.WSState.shard_num/0","doc":"The shard number","ref":"Nostrum.Struct.WSState.html#t:shard_num/0"},{"type":"type","title":"Nostrum.Struct.WSState.stream/0","doc":"Stream reference for `:gun`","ref":"Nostrum.Struct.WSState.html#t:stream/0"},{"type":"type","title":"Nostrum.Struct.WSState.t/0","doc":"","ref":"Nostrum.Struct.WSState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.WSState.total_shards/0","doc":"The highest shard number for this bot.\n\nThis may not be started locally, it is just used by nostrum to inform the\ngateway which events we are interested in.","ref":"Nostrum.Struct.WSState.html#t:total_shards/0"},{"type":"module","title":"Nostrum.Struct.Webhook","doc":"Struct representing a Discord webhook.","ref":"Nostrum.Struct.Webhook.html"},{"type":"type","title":"Nostrum.Struct.Webhook.avatar/0","doc":"Default avatar of the webhook","ref":"Nostrum.Struct.Webhook.html#t:avatar/0"},{"type":"type","title":"Nostrum.Struct.Webhook.channel_id/0","doc":"Channel the webhook is for","ref":"Nostrum.Struct.Webhook.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.guild_id/0","doc":"Guild the webhook is for","ref":"Nostrum.Struct.Webhook.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.id/0","doc":"Id of the webhook","ref":"Nostrum.Struct.Webhook.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Webhook.name/0","doc":"Default name of the webhook","ref":"Nostrum.Struct.Webhook.html#t:name/0"},{"type":"type","title":"Nostrum.Struct.Webhook.t/0","doc":"","ref":"Nostrum.Struct.Webhook.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Webhook.token/0","doc":"Secure token of the webhook","ref":"Nostrum.Struct.Webhook.html#t:token/0"},{"type":"type","title":"Nostrum.Struct.Webhook.user/0","doc":"User who created the webhook","ref":"Nostrum.Struct.Webhook.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.AutoModerationRuleExecute","doc":"Sent when an auto-moderation rule executes.\n(e.g. message is blocked).","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.action/0","doc":"The action that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:action/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.alert_system_message_id/0","doc":"The id of any system message that was generated as a result of the action\n\nnote: will not exist if the event does not correspond to an action that generates a system message","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:alert_system_message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.channel_id/0","doc":"The id of the channel in which the content was posted\n\nnote: this field may not exist if the content was blocked from being created","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.content/0","doc":"The content of the message which triggered the rule","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:content/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.guild_id/0","doc":"The id of the guild in which the action was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.matched_content/0","doc":"The substring which matched the content","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:matched_content/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.matched_keyword/0","doc":"The keyword that was matched in the content","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:matched_keyword/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.message_id/0","doc":"The id of the message which was posted\n\nnote: this field will not exist if the content was blocked from being created","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.rule_id/0","doc":"The id of the rule that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:rule_id/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.rule_trigger_type/0","doc":"The type of the rule that was executed","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:rule_trigger_type/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.t/0","doc":"","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.AutoModerationRuleExecute.user_id/0","doc":"The id of the user which generated the content which triggered the rule","ref":"Nostrum.Struct.Event.AutoModerationRuleExecute.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.ChannelPinsUpdate","doc":"Represents an update to channel pins.","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.channel_id/0","doc":"The ID of the channel","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.guild_id/0","doc":"The ID of the guild, if the pin update was on a guild","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.last_pin_timestamp/0","doc":"The time at which the most recent pinned message was pinned","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:last_pin_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.ChannelPinsUpdate.t/0","doc":"Event sent when a message is pinned or unpinned in a text channel","ref":"Nostrum.Struct.Event.ChannelPinsUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildBanAdd","doc":"Sent when a user is banned from a guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.guild_id/0","doc":"ID of the guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.t/0","doc":"Event sent when a user is banned from a guild","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanAdd.user/0","doc":"Banned user","ref":"Nostrum.Struct.Event.GuildBanAdd.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildBanRemove","doc":"Sent when a user is unbanned from a guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.guild_id/0","doc":"ID of the guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.t/0","doc":"Event sent when a user is unbanned from a guild","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildBanRemove.user/0","doc":"Unbanned user","ref":"Nostrum.Struct.Event.GuildBanRemove.html#t:user/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildIntegrationDelete","doc":"Event fired when a guild integration is deleted.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.application_id/0","doc":"id of the bot/OAuth2 application for this discord integration","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:application_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.guild_id/0","doc":"The id of the guild the integration is in.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.id/0","doc":"The id of the deleted integration.","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildIntegrationDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate","doc":"Sent when a guild integration is updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate.guild_id/0","doc":"ID of the guild whose integrations were updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate.t/0","doc":"Event sent when a guild integration is updated","ref":"Nostrum.Struct.Event.GuildIntegrationsUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","doc":"Struct representing a guild scheduled event user add event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.guild_id/0","doc":"The id of the guild the event is scheduled for.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.guild_scheduled_event_id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:guild_scheduled_event_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.user_id/0","doc":"The id of the user that subscribed to the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserAdd.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","doc":"Struct representing a guild scheduled event user remove event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.guild_id/0","doc":"The id of the guild the event is scheduled for.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.guild_scheduled_event_id/0","doc":"The id of the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:guild_scheduled_event_id/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.t/0","doc":"","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.user_id/0","doc":"The id of the user that unsubscribed to the scheduled event.","ref":"Nostrum.Struct.Event.GuildScheduledEventUserRemove.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.InviteCreate","doc":"Struct representing an Invite Create event","ref":"Nostrum.Struct.Event.InviteCreate.html"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.channel_id/0","doc":"Channel id of the channel this invite is for.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.code/0","doc":"The unique invite code.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.created_at/0","doc":"The time at which the invite was created.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:created_at/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.guild_id/0","doc":"Guild id of the guild this invite is for.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.inviter/0","doc":"The user that created the invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:inviter/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.max_age/0","doc":"Duration (in seconds) after which the invite expires.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:max_age/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.max_uses/0","doc":"Max number of times this invite can be used.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:max_uses/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.t/0","doc":"","ref":"Nostrum.Struct.Event.InviteCreate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.target_user/0","doc":"Partially populated user struct of the target user for this invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:target_user/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.target_user_type/0","doc":"The type of user target for this invite.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:target_user_type/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.temporary/0","doc":"Whether this invite only grants temporary membership.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:temporary/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteCreate.uses/0","doc":"Number of times this invite has been used.","ref":"Nostrum.Struct.Event.InviteCreate.html#t:uses/0"},{"type":"module","title":"Nostrum.Struct.Event.InviteDelete","doc":"Struct representing an Invite Delete event","ref":"Nostrum.Struct.Event.InviteDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.channel_id/0","doc":"Channel id of the channel this invite is for.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.code/0","doc":"The unique invite code.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:code/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.guild_id/0","doc":"Guild id of the guild this invite is for.","ref":"Nostrum.Struct.Event.InviteDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.InviteDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.InviteDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageDelete","doc":"Struct representing a Message Delete event","ref":"Nostrum.Struct.Event.MessageDelete.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.channel_id/0","doc":"Channel id of the deleted message","ref":"Nostrum.Struct.Event.MessageDelete.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.deleted_message/0","doc":"The deleted message, if it was found\nin the message cache.","ref":"Nostrum.Struct.Event.MessageDelete.html#t:deleted_message/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.guild_id/0","doc":"Guild id of the deleted message\n\n`nil` if a non-guild message was deleted.","ref":"Nostrum.Struct.Event.MessageDelete.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.id/0","doc":"Id of the deleted message","ref":"Nostrum.Struct.Event.MessageDelete.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDelete.t/0","doc":"","ref":"Nostrum.Struct.Event.MessageDelete.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageDeleteBulk","doc":"Struct representing a Message Delete Bulk event","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.channel_id/0","doc":"Channel id of the deleted message","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.deleted_messages/0","doc":"The deleted messages, if any were not found\nin the message cache they will only have the id and channel_id set.","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:deleted_messages/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.guild_id/0","doc":"Guild id of the deleted message\n\n`nil` if a non-guild message was deleted.","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.ids/0","doc":"Ids of the deleted messages","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:ids/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageDeleteBulk.t/0","doc":"","ref":"Nostrum.Struct.Event.MessageDeleteBulk.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionAdd","doc":"Sent when a user adds a reaction to a message","ref":"Nostrum.Struct.Event.MessageReactionAdd.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.channel_id/0","doc":"Channel in which the reaction was added","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.emoji/0","doc":"The (partial) emoji used to react","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.guild_id/0","doc":"Guild ID in which the reaction was added, if applicable","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.member/0","doc":"The member who reacted, if this happened on a guild","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.message_id/0","doc":"Message to which the reaction was added","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.t/0","doc":"Event sent when a user adds a reaction to a message","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionAdd.user_id/0","doc":"ID of the user who added the reaction","ref":"Nostrum.Struct.Event.MessageReactionAdd.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemove","doc":"Sent when a user removes a reaction from a message","ref":"Nostrum.Struct.Event.MessageReactionRemove.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.channel_id/0","doc":"ID of the channel in which the reaction was created","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.emoji/0","doc":"Partial emoji object that was removed","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.guild_id/0","doc":"ID of the guild on which the message lives, if applicable","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.message_id/0","doc":"ID of the message to which the reaction was attached","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.t/0","doc":"Event sent when a user removes a reaction from a message","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemove.user_id/0","doc":"Author of the reaction","ref":"Nostrum.Struct.Event.MessageReactionRemove.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemoveAll","doc":"Sent when a user explicitly removes all reactions from a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.channel_id/0","doc":"ID of the channel in which the message resides.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.guild_id/0","doc":"ID of the guild for the message, if applicable.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.message_id/0","doc":"ID of the message from which all reactions were removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveAll.t/0","doc":"Event sent when a user explicitly removes all reactions from a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveAll.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","doc":"Sent when a bot removes all instances of a given emoji from the reactions of a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.channel_id/0","doc":"Channel in which the message resides.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.emoji/0","doc":"The (partial) emoji that was removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:emoji/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.guild_id/0","doc":"Guild on which the message resides, if applicable.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.message_id/0","doc":"Message from which the emoji was removed.","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.t/0","doc":"Event sent when a bot removes all instances of a given emoji from the reactions of a message","ref":"Nostrum.Struct.Event.MessageReactionRemoveEmoji.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.PartialApplication","doc":"Sent on `READY`","ref":"Nostrum.Struct.Event.PartialApplication.html"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.flags/0","doc":"Public flags of the application.\n\nSee https://discord.com/developers/docs/resources/application#application-object-application-flags","ref":"Nostrum.Struct.Event.PartialApplication.html#t:flags/0"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.id/0","doc":"ID of the application","ref":"Nostrum.Struct.Event.PartialApplication.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.PartialApplication.t/0","doc":"Event sent as part of the `READY` payload.","ref":"Nostrum.Struct.Event.PartialApplication.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.PollVoteChange","doc":"Represents an addition or removal of a vote from a Discord poll.\n\nFor polls where multiple answers were selected, one of these events will be fired for each vote.","ref":"Nostrum.Struct.Event.PollVoteChange.html"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.answer_id/0","doc":"ID corresponding to the answer_id in the `t:Nostrum.Struct.Message.Poll.answers/0` list","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:answer_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.channel_id/0","doc":"ID of the channel the vote took place in","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.guild_id/0","doc":"ID of the guild the poll is in (unless it is a private channel)","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.message_id/0","doc":"ID of the message the poll was attached to","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:message_id/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.t/0","doc":"Event representing a addition or removal of a vote from a poll","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.type/0","doc":"Whether the vote was an addition or removal for a vote of the option","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:type/0"},{"type":"type","title":"Nostrum.Struct.Event.PollVoteChange.user_id/0","doc":"ID of the user that has voted","ref":"Nostrum.Struct.Event.PollVoteChange.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.Ready","doc":"Sent after initial handshake with the gateway","ref":"Nostrum.Struct.Event.Ready.html"},{"type":"type","title":"Nostrum.Struct.Event.Ready.application/0","doc":"Partial application object with `id` and `flags`","ref":"Nostrum.Struct.Event.Ready.html#t:application/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.guilds/0","doc":"The guilds that the bot user is in","ref":"Nostrum.Struct.Event.Ready.html#t:guilds/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.resume_gateway_url/0","doc":"Similar to `t:session_id/0`, this is the URL that Discord has requested\nreconnection attempts to be made against.\n\nNostrum stores and handles this for you, this value is provided for\ndebugging purposes.","ref":"Nostrum.Struct.Event.Ready.html#t:resume_gateway_url/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.session_id/0","doc":"Used for resuming connections.\n\nIf you are wondering whether you need to use this, you probably don't.\nNostrum handles reconnections for you.","ref":"Nostrum.Struct.Event.Ready.html#t:session_id/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.shard/0","doc":"A pair of two integers ``{shard_id, num_shards}``.\n\nFor more information, see\nhttps://discord.com/developers/docs/topics/gateway#sharding.","ref":"Nostrum.Struct.Event.Ready.html#t:shard/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.t/0","doc":"Event sent after initial handshake with the gateway","ref":"Nostrum.Struct.Event.Ready.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.user/0","doc":"Information about the bot user","ref":"Nostrum.Struct.Event.Ready.html#t:user/0"},{"type":"type","title":"Nostrum.Struct.Event.Ready.v/0","doc":"Gateway version.\nSee https://discord.com/developers/docs/topics/gateway#gateways-gateway-versions","ref":"Nostrum.Struct.Event.Ready.html#t:v/0"},{"type":"module","title":"Nostrum.Struct.Event.SpeakingUpdate","doc":"Struct representing a Nostrum-generated Speaking Update event\n\nNostrum will generate this event when the bot starts or stops playing audio.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.channel_id/0","doc":"Id of the channel this speaking update is occurring in.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.current_url/0","doc":"Current URL being played if a readable format.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:current_url/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.guild_id/0","doc":"Id of the guild this speaking update is occurring in.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.speaking/0","doc":"Boolean representing if bot has started or stopped speaking.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:speaking/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.t/0","doc":"","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.SpeakingUpdate.timed_out/0","doc":"Boolean representing if speaking update was caused by an audio timeout.","ref":"Nostrum.Struct.Event.SpeakingUpdate.html#t:timed_out/0"},{"type":"module","title":"Nostrum.Struct.Event.ThreadListSync","doc":"Struct representing a Thread List Sync event.\n\nThis event is sent when the user gains access to a channel.","ref":"Nostrum.Struct.Event.ThreadListSync.html"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.channel_ids/0","doc":"The parent channel ids whose threads are being synced.\nIf omitted, all threads were synced for the entire guild.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:channel_ids/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.guid_id/0","doc":"The id of the guild.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:guid_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.members/0","doc":"All thread member objects from the synced threads for the current user,\nindicating which threads the user has been added to.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:members/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.t/0","doc":"","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadListSync.threads/0","doc":"All active threads in the given channels that the user can access.","ref":"Nostrum.Struct.Event.ThreadListSync.html#t:threads/0"},{"type":"module","title":"Nostrum.Struct.Event.ThreadMembersUpdate","doc":"Struct representing a thread members update event.\n\nThis event is sent whenever a user is added or removed from a thread.\n\nIf the current user does not have the `GUILD_MEMBERS` intent,\nthis event will only be sent when the current user is added to or removed from a thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.added_members/0","doc":"The members that were added to the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:added_members/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.guild_id/0","doc":"The id of the guild the thread is in.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.id/0","doc":"The id of the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:id/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.member_count/0","doc":"The approximate number of members in the thread.\n\nThis number is capped at 50, though there can be more members in the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:member_count/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.removed_member_ids/0","doc":"The ids of the members that were removed from the thread.","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:removed_member_ids/0"},{"type":"type","title":"Nostrum.Struct.Event.ThreadMembersUpdate.t/0","doc":"","ref":"Nostrum.Struct.Event.ThreadMembersUpdate.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.TypingStart","doc":"Sent when a user starts typing in a channel","ref":"Nostrum.Struct.Event.TypingStart.html"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.channel_id/0","doc":"Channel in which the user started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.guild_id/0","doc":"ID of the guild where the user started typing, if applicable","ref":"Nostrum.Struct.Event.TypingStart.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.member/0","doc":"The member who started typing if this happened in a guild","ref":"Nostrum.Struct.Event.TypingStart.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.t/0","doc":"Event sent when a user starts typing in a channel","ref":"Nostrum.Struct.Event.TypingStart.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.timestamp/0","doc":"When the user started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.TypingStart.user_id/0","doc":"ID of the user who started typing","ref":"Nostrum.Struct.Event.TypingStart.html#t:user_id/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceReady","doc":"Struct representing a Nostrum-generated Voice Ready event\n\nNostrum will generate this event when the bot joins a voice channel\nand is ready to play audio.\n\nListening to this event may be used for bots that begin playing audio\ndirectly after joining a voice channel as an alternative to waiting\nuntil `Nostrum.Voice.ready?/1` returns `true`.","ref":"Nostrum.Struct.Event.VoiceReady.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.channel_id/0","doc":"Id of the channel that voice is ready in.","ref":"Nostrum.Struct.Event.VoiceReady.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.guild_id/0","doc":"Id of the guild that voice is ready in.","ref":"Nostrum.Struct.Event.VoiceReady.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceReady.t/0","doc":"","ref":"Nostrum.Struct.Event.VoiceReady.html#t:t/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceServerUpdate","doc":"Sent when a guild's voice server is updated","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.endpoint/0","doc":"The voice server host","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:endpoint/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.guild_id/0","doc":"Guild this voice server update is for","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.t/0","doc":"Event sent when a guild's voice server is updated","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceServerUpdate.token/0","doc":"Voice connection token","ref":"Nostrum.Struct.Event.VoiceServerUpdate.html#t:token/0"},{"type":"module","title":"Nostrum.Struct.Event.VoiceState","doc":"Represents a user's voice connection status","ref":"Nostrum.Struct.Event.VoiceState.html"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.channel_id/0","doc":"Channel ID this voice state is for","ref":"Nostrum.Struct.Event.VoiceState.html#t:channel_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.deaf/0","doc":"Whether this user is deafened by the server","ref":"Nostrum.Struct.Event.VoiceState.html#t:deaf/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.guild_id/0","doc":"Guild ID this voice state is for, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:guild_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.member/0","doc":"Guild member this voice state is for, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:member/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.mute/0","doc":"Whether this user is muteened by the server","ref":"Nostrum.Struct.Event.VoiceState.html#t:mute/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.request_to_speak_timestamp/0","doc":"Time at which the user requested to speak, if applicable","ref":"Nostrum.Struct.Event.VoiceState.html#t:request_to_speak_timestamp/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_deaf/0","doc":"Whether this user is locally deafened","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_deaf/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_mute/0","doc":"Whether this user is locally muted","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_mute/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_stream/0","doc":"Whether the user is streaming using \"Go Live\"","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_stream/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.self_video/0","doc":"Whether this user's camera is enabled","ref":"Nostrum.Struct.Event.VoiceState.html#t:self_video/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.session_id/0","doc":"Session ID for this voice state","ref":"Nostrum.Struct.Event.VoiceState.html#t:session_id/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.suppress/0","doc":"Whether this user is muted by the current user","ref":"Nostrum.Struct.Event.VoiceState.html#t:suppress/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.t/0","doc":"Event sent when a user's voice status is updated","ref":"Nostrum.Struct.Event.VoiceState.html#t:t/0"},{"type":"type","title":"Nostrum.Struct.Event.VoiceState.user_id/0","doc":"User this voice state is for","ref":"Nostrum.Struct.Event.VoiceState.html#t:user_id/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandOptionType","doc":"Defines available types used for defining application command option types for passed options\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-type","ref":"Nostrum.Constants.ApplicationCommandOptionType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.attachment/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#attachment/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.boolean/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#boolean/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.channel/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#channel/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.integer/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#integer/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.mentionable/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#mentionable/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.number/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#number/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.role/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#role/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.string/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#string/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.sub_command/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#sub_command/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.sub_command_group/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#sub_command_group/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandOptionType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandOptionType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandPermissionType","doc":"Defines available types for application command permissions\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permission-type","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.channel/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#channel/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.role/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#role/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandPermissionType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandPermissionType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ApplicationCommandType","doc":"Defines available types used for selecting application command types\nFor more info please refer to https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types","ref":"Nostrum.Constants.ApplicationCommandType.html"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.chat_input/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#chat_input/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.message/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#message/0"},{"type":"function","title":"Nostrum.Constants.ApplicationCommandType.user/0","doc":"","ref":"Nostrum.Constants.ApplicationCommandType.html#user/0"},{"type":"module","title":"Nostrum.Constants.ButtonStyle","doc":"Defines available styles for button message components\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#button-object-button-styles","ref":"Nostrum.Constants.ButtonStyle.html"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.danger/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#danger/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.link/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#link/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.primary/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#primary/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.secondary/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#secondary/0"},{"type":"function","title":"Nostrum.Constants.ButtonStyle.success/0","doc":"","ref":"Nostrum.Constants.ButtonStyle.html#success/0"},{"type":"module","title":"Nostrum.Constants.ChannelType","doc":"Defines available types for channels\nFor more info please refer to https://discord.com/developers/docs/resources/channel#channel-object-channel-types","ref":"Nostrum.Constants.ChannelType.html"},{"type":"function","title":"Nostrum.Constants.ChannelType.announcement_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#announcement_thread/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.dm/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#dm/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.group_db/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#group_db/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_announcement/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_announcement/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_category/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_category/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_directory/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_directory/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_forum/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_forum/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_text/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_text/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.guild_voice/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#guild_voice/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.private_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#private_thread/0"},{"type":"function","title":"Nostrum.Constants.ChannelType.public_thread/0","doc":"","ref":"Nostrum.Constants.ChannelType.html#public_thread/0"},{"type":"module","title":"Nostrum.Constants.ComponentType","doc":"Defines available types for message components\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#component-object-component-types","ref":"Nostrum.Constants.ComponentType.html"},{"type":"function","title":"Nostrum.Constants.ComponentType.action_row/0","doc":"Container for other components","ref":"Nostrum.Constants.ComponentType.html#action_row/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.button/0","doc":"Button object","ref":"Nostrum.Constants.ComponentType.html#button/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.channel_select/0","doc":"Select menu for channels","ref":"Nostrum.Constants.ComponentType.html#channel_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.mentionable_select/0","doc":"Select menu for mentionables (users and roles)","ref":"Nostrum.Constants.ComponentType.html#mentionable_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.role_select/0","doc":"Select menu for roles","ref":"Nostrum.Constants.ComponentType.html#role_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.string_select/0","doc":"Select menu for picking from defined text options","ref":"Nostrum.Constants.ComponentType.html#string_select/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.text_input/0","doc":"Text input object","ref":"Nostrum.Constants.ComponentType.html#text_input/0"},{"type":"function","title":"Nostrum.Constants.ComponentType.user_select/0","doc":"Select menu for users","ref":"Nostrum.Constants.ComponentType.html#user_select/0"},{"type":"module","title":"Nostrum.Constants.InteractionCallbackType","doc":"Defines available types for interaction callbacks\nFor more info please refer to https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-type","ref":"Nostrum.Constants.InteractionCallbackType.html"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.application_command_autocomplete_result/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#application_command_autocomplete_result/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.channel_message_with_source/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#channel_message_with_source/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.deferred_channel_message_with_source/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#deferred_channel_message_with_source/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.deferred_update_message/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#deferred_update_message/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.modal/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#modal/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.pong/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#pong/0"},{"type":"function","title":"Nostrum.Constants.InteractionCallbackType.update_message/0","doc":"","ref":"Nostrum.Constants.InteractionCallbackType.html#update_message/0"},{"type":"module","title":"Nostrum.Constants.InteractionType","doc":"Defines available types for interactions\nFor more info please refer to https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type","ref":"Nostrum.Constants.InteractionType.html"},{"type":"function","title":"Nostrum.Constants.InteractionType.application_command/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#application_command/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.application_command_autocomplete/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#application_command_autocomplete/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.message_component/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#message_component/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.modal_submit/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#modal_submit/0"},{"type":"function","title":"Nostrum.Constants.InteractionType.ping/0","doc":"","ref":"Nostrum.Constants.InteractionType.html#ping/0"},{"type":"module","title":"Nostrum.Constants.TextInputStyle","doc":"Defines available styles for modal text inputs\nFor more info please refer to https://discord.com/developers/docs/interactions/message-components#text-inputs-text-input-styles","ref":"Nostrum.Constants.TextInputStyle.html"},{"type":"function","title":"Nostrum.Constants.TextInputStyle.paragraph/0","doc":"","ref":"Nostrum.Constants.TextInputStyle.html#paragraph/0"},{"type":"function","title":"Nostrum.Constants.TextInputStyle.short/0","doc":"","ref":"Nostrum.Constants.TextInputStyle.html#short/0"},{"type":"module","title":"Nostrum.Constants.WebhookType","doc":"Defines available types for channels\nFor more info please refer to https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types","ref":"Nostrum.Constants.WebhookType.html"},{"type":"function","title":"Nostrum.Constants.WebhookType.application/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#application/0"},{"type":"function","title":"Nostrum.Constants.WebhookType.channel_follower/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#channel_follower/0"},{"type":"function","title":"Nostrum.Constants.WebhookType.incoming/0","doc":"","ref":"Nostrum.Constants.WebhookType.html#incoming/0"},{"type":"module","title":"Nostrum.Snowflake","doc":"Functions that work on Snowflakes.","ref":"Nostrum.Snowflake.html"},{"type":"function","title":"Nostrum.Snowflake.cast/1","doc":"Attempts to convert a term into a snowflake.","ref":"Nostrum.Snowflake.html#cast/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.cast/1","doc":"```elixir\niex> Nostrum.Snowflake.cast(200317799350927360)\n{:ok, 200317799350927360}\n\niex> Nostrum.Snowflake.cast(\"200317799350927360\")\n{:ok, 200317799350927360}\n\niex> Nostrum.Snowflake.cast(nil)\n{:ok, nil}\n\niex> Nostrum.Snowflake.cast(true)\n:error\n\niex> Nostrum.Snowflake.cast(-1)\n:error\n```","ref":"Nostrum.Snowflake.html#cast/1-examples"},{"type":"function","title":"Nostrum.Snowflake.cast!/1","doc":"Same as `cast/1`, except it raises an `ArgumentError` on failure.","ref":"Nostrum.Snowflake.html#cast!/1"},{"type":"function","title":"Nostrum.Snowflake.creation_time/1","doc":"Returns the creation time of the snowflake.","ref":"Nostrum.Snowflake.html#creation_time/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.creation_time/1","doc":"```elixir\niex> Nostrum.Snowflake.creation_time(177888205536886784)\n~U[2016-05-05 21:04:13.203Z]\n```","ref":"Nostrum.Snowflake.html#creation_time/1-examples"},{"type":"function","title":"Nostrum.Snowflake.dump/1","doc":"Convert a snowflake into its external representation.","ref":"Nostrum.Snowflake.html#dump/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.dump/1","doc":"```elixir\niex> Nostrum.Snowflake.dump(109112383011581952)\n\"109112383011581952\"\n```","ref":"Nostrum.Snowflake.html#dump/1-examples"},{"type":"function","title":"Nostrum.Snowflake.from_datetime/1","doc":"Converts the given `datetime` into a snowflake.\n\nIf `datetime` occurred before the discord epoch, the function will return\n`:error`.\n\nThe converted snowflake's last 22 bits will be zeroed out due to missing data.","ref":"Nostrum.Snowflake.html#from_datetime/1"},{"type":"function","title":"Examples - Nostrum.Snowflake.from_datetime/1","doc":"```elixir\niex> {:ok, dt, _} = DateTime.from_iso8601(\"2016-05-05T21:04:13.203Z\")\niex> Nostrum.Snowflake.from_datetime(dt)\n{:ok, 177888205536755712}\n\niex> {:ok, dt, _} = DateTime.from_iso8601(\"1998-12-25T00:00:00.000Z\")\niex> Nostrum.Snowflake.from_datetime(dt)\n:error\n```","ref":"Nostrum.Snowflake.html#from_datetime/1-examples"},{"type":"function","title":"Nostrum.Snowflake.from_datetime!/1","doc":"Same as `from_datetime/1`, except it raises an `ArgumentError` on failure.","ref":"Nostrum.Snowflake.html#from_datetime!/1"},{"type":"macro","title":"Nostrum.Snowflake.is_snowflake/1","doc":"Returns `true` if `term` is a snowflake; otherwise returns `false`.","ref":"Nostrum.Snowflake.html#is_snowflake/1"},{"type":"macro","title":"Examples - Nostrum.Snowflake.is_snowflake/1","doc":"```elixir\niex> Nostrum.Snowflake.is_snowflake(89918932789497856)\ntrue\n\niex> Nostrum.Snowflake.is_snowflake(-1)\nfalse\n\niex> Nostrum.Snowflake.is_snowflake(0xFFFFFFFFFFFFFFFF + 1)\nfalse\n\niex> Nostrum.Snowflake.is_snowflake(\"117789813427535878\")\nfalse\n```","ref":"Nostrum.Snowflake.html#is_snowflake/1-examples"},{"type":"type","title":"Nostrum.Snowflake.external_snowflake/0","doc":"The type that represents snowflakes in JSON.\n\nIn JSON, Snowflakes are typically represented as strings due\nto some languages not being able to represent such a large number.","ref":"Nostrum.Snowflake.html#t:external_snowflake/0"},{"type":"type","title":"Nostrum.Snowflake.t/0","doc":"The snowflake type.\n\nSnowflakes are 64-bit unsigned integers used to represent discord\nobject ids.","ref":"Nostrum.Snowflake.html#t:t/0"},{"type":"module","title":"Nostrum.Token","doc":"A helper module for verifying the Discord bot token.\n\nThe token can be generated in the \"Bot\" tab of your Application the [Discord Developer Portal](https://discord.com/developers/applications) and\ncan be configured in your config file.\n\n```elixir\nconfig :nostrum,\n token: \"666\" # The token of your bot as a string\n```","ref":"Nostrum.Token.html"},{"type":"function","title":"Nostrum.Token.check_token!/0","doc":"Checks if the Discord bot token has the correct format.\n\nWe check if the token is a binary followed by splitting it into 3 parts separated by a dot `\".\"`.\nThe first part is the Base64 encoded user_id which we decode and parse into as integer.\nThe second part is an encoded timestamp, and the last part an arbitrary cryptographic signature.\n\nRaises on failure.","ref":"Nostrum.Token.html#check_token!/0"},{"type":"function","title":"Examples - Nostrum.Token.check_token!/0","doc":"iex> token = \"OTY4NTU2MzQ4MzkwMzkxODU5.G49NjP.pD8PLpKp-Xx8sr-8m1DCxSPTJZdcpcJZOExc1c\"\n iex> Nostrum.Token.check_token!(token)\n :ok\n\n iex> token = \"ODY4MDcxODUzMDMyMzU3OTc4.YPqU6Q.jNJcq1daGG3otexX3c1LcxCpgpQ\"\n iex> Nostrum.Token.check_token!(token)\n :ok","ref":"Nostrum.Token.html#check_token!/0-examples"},{"type":"function","title":"Nostrum.Token.check_token!/1","doc":"","ref":"Nostrum.Token.html#check_token!/1"},{"type":"module","title":"Nostrum.Util","doc":"Utility functions","ref":"Nostrum.Util.html"},{"type":"function","title":"Nostrum.Util.enum_to_struct/2","doc":"","ref":"Nostrum.Util.html#enum_to_struct/2"},{"type":"function","title":"Nostrum.Util.gateway/0","doc":"Returns the gateway url and shard count for current websocket connections.\n\nIf by chance no gateway connection has been made, will fetch the url to use and store it\nfor future use.","ref":"Nostrum.Util.html#gateway/0"},{"type":"function","title":"Nostrum.Util.get_all_shard_latencies/0","doc":"Gets the latencies of all shard connections.\n\nCalls `get_shard_latency/1` on all shards and returns a map whose keys are\nshard nums and whose values are latencies in milliseconds.","ref":"Nostrum.Util.html#get_all_shard_latencies/0"},{"type":"function","title":"Nostrum.Util.get_shard_latency/1","doc":"Gets the latency of the shard connection from a `Nostrum.Struct.WSState.t()` struct.\n\nReturns the latency in milliseconds as an integer, returning nil if unknown.","ref":"Nostrum.Util.html#get_shard_latency/1"},{"type":"function","title":"Nostrum.Util.map_update_if_present/3","doc":"Updates a map with a new value if the key is present.\nOtherwise, returns the map unchanged.","ref":"Nostrum.Util.html#map_update_if_present/3"},{"type":"function","title":"Nostrum.Util.maybe_to_atom/1","doc":"Attempts to convert a string to an atom.\n\nBinary `token`s that consist of digits are assumed to be snowflakes, and will\nbe parsed as such.\n\nSome maps sent from Discord are integer-indexed, for these we just return the integer\nprovided.\n\nIf atom does not currently exist, will warn that we're doing an unsafe conversion.","ref":"Nostrum.Util.html#maybe_to_atom/1"},{"type":"function","title":"Nostrum.Util.maybe_to_datetime/1","doc":"Converts possibly nil ISO8601 timestamp to a `DateTime`.\n\nIf a `DateTime` is provided, return it as-is.","ref":"Nostrum.Util.html#maybe_to_datetime/1"},{"type":"function","title":"Nostrum.Util.maybe_to_unixtime/1","doc":"Converts possibly nil ISO8601 timestamp to unix time.","ref":"Nostrum.Util.html#maybe_to_unixtime/1"},{"type":"function","title":"Nostrum.Util.now/0","doc":"Returns the number of milliseconds since unix epoch.","ref":"Nostrum.Util.html#now/0"},{"type":"function","title":"Nostrum.Util.now_iso/0","doc":"Returns the current date as an ISO formatted string.","ref":"Nostrum.Util.html#now_iso/0"},{"type":"function","title":"Nostrum.Util.num_shards/0","doc":"Returns the total amount of shards as per the configuration.","ref":"Nostrum.Util.html#num_shards/0"},{"type":"function","title":"Return value - Nostrum.Util.num_shards/0","doc":"- If you specified your shards as `:auto`, the return value will be the\nrecommended number of shards as given by the gateway.\n\n- If you explicitly specified your shard numbers as an integer, it will be\nthe given number.\n\n- If you specified your shards in the form `{lowest, highest, total}` to\nstart a specific range of the total shards you want to start, this will be\nthe `total` value.\n\nShould Discord not supply us with any shard information, this will return\n`1`.\n\nNote that this is not the number of currently active shards, but the number\nof shards specified in your config.","ref":"Nostrum.Util.html#num_shards/0-return-value"},{"type":"function","title":"Nostrum.Util.safe_atom_map/1","doc":"Converts a map into an atom-keyed map.\n\nGiven a map with variable type keys, returns the same map with all keys as `atoms`.\nTo support maps keyed with integers (such as in Discord's interaction data),\nbinaries that appear to be integers will be parsed as such.\n\nThis function will attempt to convert keys to an existing atom, and if that fails will default to\ncreating a new atom while displaying a warning. The idea here is that we should be able to see\nif any results from Discord are giving variable keys. Since we *will* define all\ntypes of objects returned by Discord, the amount of new atoms created *SHOULD* be 0. 👀","ref":"Nostrum.Util.html#safe_atom_map/1"},{"type":"function","title":"Nostrum.Util.timestamp_like_to_snowflake/1","doc":"Helper function for converting a DateTime to a Snowflake.\nWhile allowing Snowflakes to be returned as-is and `:infinity`\nis also passed through as-is since it's used as a special value\nby some cache lookup functions to indicate no upper bound.","ref":"Nostrum.Util.html#timestamp_like_to_snowflake/1"},{"type":"function","title":"Nostrum.Util.unused_atoms/0","doc":"Since we're being sacrilegious and converting strings to atoms from the WS, there will be some\natoms that we see that aren't defined in any Discord structs. This method mainly serves as a\nmeans to define those atoms once so the user isn't warned about them in the\n`Nostrum.Util.maybe_to_atom/1` function when they are in fact harmless.\n\nThe function is public to prevent it from being optimized out at compile time.","ref":"Nostrum.Util.html#unused_atoms/0"},{"type":"function","title":"Nostrum.Util.usec_now/0","doc":"Returns the number of microseconds since unix epoch.","ref":"Nostrum.Util.html#usec_now/0"},{"type":"behaviour","title":"Nostrum.Store.GuildShardMapping","doc":"Behaviour & dispatcher for storing guild to shard mappings.","ref":"Nostrum.Store.GuildShardMapping.html"},{"type":"behaviour","title":"Purpose - Nostrum.Store.GuildShardMapping","doc":"When nostrum needs to run API calls over the gateway and multiple shards are\nused, it needs to determine which shard process will run the request. This\nmodule stores a mapping of guild IDs to their respective shard numbers. It is\nunlikely you need to use this module directly yourself.","ref":"Nostrum.Store.GuildShardMapping.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Store.GuildShardMapping","doc":"By default, nostrum will use `Elixir.Nostrum.Store.GuildShardMapping.ETS` to store the\nmapping. To override this, set the `[:stores, :guild_shard_mapping]` setting\non nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n stores: %{\n guild_shard_mapping: MyBot.Nostrum.Store.GuildShardMapping\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Store.GuildShardMapping.html#module-configuration"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Store.GuildShardMapping.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.create/2","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#create/2"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.html#c:create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.delete/1","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#delete/1"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.html#c:delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.get/1","doc":"","ref":"Nostrum.Store.GuildShardMapping.html#get/1"},{"type":"callback","title":"Nostrum.Store.GuildShardMapping.get/1","doc":"Retrieve the shard number for the given guild ID.\n\nReturns `nil` if no associated shard number was found.","ref":"Nostrum.Store.GuildShardMapping.html#c:get/1"},{"type":"module","title":"Nostrum.Store.Supervisor","doc":"Supervises processes managing nostrum's internal state.\n\nPlease see the following modules for more details:\n- `Nostrum.Store.GuildShardMapping`\n- `Nostrum.Store.UnavailableGuild`","ref":"Nostrum.Store.Supervisor.html"},{"type":"function","title":"Nostrum.Store.Supervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.Supervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.Supervisor.init/1","doc":"","ref":"Nostrum.Store.Supervisor.html#init/1"},{"type":"function","title":"Nostrum.Store.Supervisor.start_link/1","doc":"","ref":"Nostrum.Store.Supervisor.html#start_link/1"},{"type":"behaviour","title":"Nostrum.Store.UnavailableGuild","doc":"Behaviour & dispatcher for storing unavailable guilds.","ref":"Nostrum.Store.UnavailableGuild.html"},{"type":"behaviour","title":"Purpose - Nostrum.Store.UnavailableGuild","doc":"The `GUILD_CREATE` gateway event on its own provides no means to determine\nwhether the guild we receive is a guild that the bot joined, or a guild that\nhas just become available over the gateway. To work around this, this store\nkeeps track of unavailable guilds we received to determine whether a guild\nsent over this event is unavailable or new. It is therefore unlikely this\nmodule needs to be used outside of nostrum.","ref":"Nostrum.Store.UnavailableGuild.html#module-purpose"},{"type":"behaviour","title":"Configuration - Nostrum.Store.UnavailableGuild","doc":"By default, nostrum will use `Elixir.Nostrum.Store.UnavailableGuild.ETS` to store\nunavailable guilds. To override this, set the `[:stores,\n:unavailable_guilds]` setting on nostrum's application configuration:\n\n```elixir\nconfig :nostrum,\n stores: %{\n unavailable_guilds: MyBot.Nostrum.Store.UnavailableGuild\n }\n```\n\nThis setting must be set at compile time.","ref":"Nostrum.Store.UnavailableGuild.html#module-configuration"},{"type":"behaviour","title":"Implementation - Nostrum.Store.UnavailableGuild","doc":"If implementing your own unavailable guild store, in addition to the\ncallbacks of this module, you must also provide the function `child_spec/1`.\nThe recommended approach is to spawn a `Supervisor` to manage your store.","ref":"Nostrum.Store.UnavailableGuild.html#module-implementation"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.child_spec/1","doc":"Retrieve the child specification for starting this mapping under a supervisor.","ref":"Nostrum.Store.UnavailableGuild.html#c:child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.create/1","doc":"","ref":"Nostrum.Store.UnavailableGuild.html#create/1"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.create/1","doc":"Mark the given guild as unavailable.","ref":"Nostrum.Store.UnavailableGuild.html#c:create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.is?/1","doc":"","ref":"Nostrum.Store.UnavailableGuild.html#is?/1"},{"type":"callback","title":"Nostrum.Store.UnavailableGuild.is?/1","doc":"Return whether the guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.html#c:is?/1"},{"type":"module","title":"Nostrum.Cache.MessageCache.Mnesia","doc":"An Mnesia-based cache for messages.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.\n\n\nBy default, the cache will store up to `10_000` messages,\nand will evict the `100` oldest messages when the limit is reached.\n\nThe reason for the eviction count is that with mnesia it is more efficient to\nfind X oldest records and delete them all at once than to find the oldest\nrecord and delete it each time a new record is added.\n\nThe Mnesia cache supports the following configuration options:\n- `size_limit`: The maximum number of messages to store in the cache.\ndefault: `10_000`\n- `eviction_count`: The number of messages to evict when the cache is full.\ndefault: `100`\n- `table_name`: The name of the Mnesia table to use for the cache.\ndefault: `:nostrum_messages`\n- `compressed`: Whether to use compressed in memory storage for the table.\ndefault: `false`\n- `type`: Sets the type of Mnesia table created to cache messages.\nCan be either `:set` or `:ordered_set`, by choosing `:ordered_set` the\neviction of the oldest messages will be more efficient, however it means\nthat the table cannot be changed to only store its contents on disk later.\ndefault: `:ordered_set`\n\nTo change this configuration, you can add the following to your\n`config.exs`:\n\n```elixir\nconfig :nostrum,\n caches: %{\n messages: {Nostrum.Cache.MessageCache.Mnesia,\n size_limit: 1000, eviction_count: 50,\n table_name: :my_custom_messages_table_name,\n compressed: true, type: :set}\n }\n```\n\nYou can also change the table name used by the cache by setting the\n`table_name` field in the configuration for the `messages` cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.bulk_delete/2","doc":"Removes and returns a list of messages from the cache.\nMessages not found in the cache will not be included in the returned list.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#bulk_delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.channel_delete/1","doc":"Removes all messages for a channel which was deleted.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#channel_delete/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.create/1","doc":"Adds a message to the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.delete/2","doc":"Removes a message from the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get/1","doc":"Retrieve a single message from the cache by id.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_author/3","doc":"Retrieve a list of messages from the cache with a given author ID,\noptionally after a given date, and before a given date.\n\nIntegers are treated as snowflakes, and the atom `:infinity` when given\nas a before date will be treated as the maximum possible date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_author/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_channel/3","doc":"Retrieve a list of messages from the cache with a given channel ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_channel/3"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.get_by_channel_and_author/4","doc":"Retrieve a list of messages from the cache with a given channel ID and author ID,\noptionally after a given date, and before a given date.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#get_by_channel_and_author/4"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.query_handle/0","doc":"Return a QLC query handle for the cache for read operations.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#query_handle/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.MessageCache.Mnesia.update/1","doc":"Updates a message in the cache.","ref":"Nostrum.Cache.MessageCache.Mnesia.html#update/1"},{"type":"module","title":"Nostrum.Cache.MessageCache.Noop","doc":"A no-op message cache.\n\nThis cache does not store any messages and always returns `{:error, :not_found}`\nfor any operation.","ref":"Nostrum.Cache.MessageCache.Noop.html"},{"type":"function","title":"Nostrum.Cache.MessageCache.Noop.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MessageCache.Noop.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MessageCache.Noop.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MessageCache.Noop.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.ETS","doc":"Maps channels to guilds via `:ets`.\n\nPlease use the function `table/0` for retrieving a reference to the table\nused by nostrum.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.ETS.table/0","doc":"Retrieve the table used by this module.","ref":"Nostrum.Cache.ChannelGuildMapping.ETS.html#table/0"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia","doc":"An Mnesia-based mapping between channel and guild IDs.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.create/2","doc":"Create a mapping of the given channel to the given guild.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.delete/1","doc":"Remove any mapping associated with the given channel.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.get/1","doc":"Retrieve the guild ID for the given channel ID, if present.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.table/0","doc":"Retrieve the table used by this module.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.ChannelGuildMapping.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Cache.ChannelGuildMapping.NoOp","doc":"NoOp implementation for the Channel Guild map","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.ChannelGuildMapping.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.ChannelGuildMapping.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.GuildCache.ETS","doc":"An ETS-based cache for guilds.\n\nThe supervisor defined by this module will set up the ETS table associated\nwith it.\n\nThe default table name under which guilds are cached is `nostrum_guilds`.\nIn addition to the cache behaviour implementations provided by this module,\nyou can also call regular ETS table methods on it, such as `:ets.info`.\n\nNote that users should not call the functions not related to this specific\nimplementation of the cache directly. Instead, call the functions of\n`Nostrum.Cache.GuildCache` directly, which will dispatch to the configured\ncache.","ref":"Nostrum.Cache.GuildCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_create/2","doc":"Create the given channel for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_delete/2","doc":"Delete the channel from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.channel_update/2","doc":"Update the channel on the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#channel_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.create/1","doc":"Create the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.delete/1","doc":"Delete the given guild from the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.emoji_update/2","doc":"Update the emoji list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.get/1","doc":"Get a guild from the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.GuildCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.member_count_down/1","doc":"Decrement the guild member count by one.","ref":"Nostrum.Cache.GuildCache.ETS.html#member_count_down/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.member_count_up/1","doc":"Increment the guild member count by one.","ref":"Nostrum.Cache.GuildCache.ETS.html#member_count_up/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_create/2","doc":"Create the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_delete/2","doc":"Delete the given role from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.role_update/2","doc":"Update the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#role_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.stickers_update/2","doc":"Update the sticker list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#stickers_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.tabname/0","doc":"Retrieve the ETS table name used for the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#tabname/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.update/1","doc":"Update the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#update/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.ETS.voice_state_update/2","doc":"Update guild voice states with the given voice state in the cache.","ref":"Nostrum.Cache.GuildCache.ETS.html#voice_state_update/2"},{"type":"module","title":"Nostrum.Cache.GuildCache.Mnesia","doc":"An Mnesia-based cache for guilds.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.GuildCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_create/2","doc":"Create the given channel for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_delete/2","doc":"Delete the channel from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.channel_update/2","doc":"Update the channel on the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#channel_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.create/1","doc":"Create a guild from upstream data.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.delete/1","doc":"Remove the given guild from the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.emoji_update/2","doc":"Update the emoji list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#emoji_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.get/1","doc":"Get a guild from the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.member_count_down/1","doc":"Decrement the guild member count by one.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#member_count_down/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.member_count_up/1","doc":"Increment the guild member count by one.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#member_count_up/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_create/2","doc":"Create the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_create/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_delete/2","doc":"Delete the given role from the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_delete/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.role_update/2","doc":"Update the given role in the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#role_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.stickers_update/2","doc":"Update the sticker list for the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#stickers_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.update/1","doc":"Update the given guild in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.voice_state_update/2","doc":"Update guild voice states with the given voice state in the cache.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#voice_state_update/2"},{"type":"function","title":"Nostrum.Cache.GuildCache.Mnesia.wrap_query/1","doc":"Wrap queries in a transaction.","ref":"Nostrum.Cache.GuildCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.GuildCache.NoOp","doc":"A cache module that does nothing.\n\nUseful for bots that don't need to cache guilds.","ref":"Nostrum.Cache.GuildCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.GuildCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.init/1","doc":"Start up the cache supervisor.","ref":"Nostrum.Cache.GuildCache.NoOp.html#init/1"},{"type":"function","title":"Nostrum.Cache.GuildCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.GuildCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.MemberCache.ETS","doc":"An ETS-based cache for members.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.MemberCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.bulk_create/2","doc":"Bulk create a chunk of members for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.create/2","doc":"Add the given member to the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.delete/2","doc":"Remove the given member from the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.get/2","doc":"Retrieve the member for the given guild and user in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.MemberCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.update/2","doc":"Update the given member for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.ETS.html#update/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.ETS.wrap_query/1","doc":"Wrap long-running queries operations.","ref":"Nostrum.Cache.MemberCache.ETS.html#wrap_query/1"},{"type":"function","title":"Safety {: .note} - Nostrum.Cache.MemberCache.ETS.wrap_query/1","doc":"Any operations are surrounded by `:ets.safe_fixtable`. It is therefore\nrecommended to finish your read quickly.","ref":"Nostrum.Cache.MemberCache.ETS.html#wrap_query/1-safety-note"},{"type":"module","title":"Nostrum.Cache.MemberCache.Mnesia","doc":"An Mnesia-based cache for guild members.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.MemberCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.bulk_create/2","doc":"Bulk create a chunk of members for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.create/2","doc":"Add the given member to the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.delete/2","doc":"Remove the given member from the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#delete/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.get/2","doc":"Retrieve the member for the given guild and user in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#get/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.update/2","doc":"Update the given member for the given guild in the cache.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#update/2"},{"type":"function","title":"Nostrum.Cache.MemberCache.Mnesia.wrap_query/1","doc":"Wrap long-running queries in a transaction.","ref":"Nostrum.Cache.MemberCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.MemberCache.NoOp","doc":"A NoOp implementation for the MemberCache\n\nThis cache does nothing, enable it if you dont need to cache members","ref":"Nostrum.Cache.MemberCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.MemberCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.MemberCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.MemberCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.MemberCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.ETS","doc":"ETS-based cache for user presences.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.PresenceCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.bulk_create/2","doc":"Bulk create multiple presences in the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.create/1","doc":"Add the given presence data to the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.get/2","doc":"Retrieve a presence from the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.init/1","doc":"Set up the cache's ETS table.","ref":"Nostrum.Cache.PresenceCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.ETS.update/1","doc":"Update the given presence data in the cache.","ref":"Nostrum.Cache.PresenceCache.ETS.html#update/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.Mnesia","doc":"An Mnesia-based cache for presences.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.bulk_create/2","doc":"Bulk create a chunk of presences for the given guild in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#bulk_create/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.create/1","doc":"Add the given presence to the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.get/2","doc":"Retrieve a presence from the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#get/2"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.table/0","doc":"Retrieve the table name used by the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.update/1","doc":"Update the given presence in the cache.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.Mnesia.wrap_query/1","doc":"Wrap query operations in a transaction.","ref":"Nostrum.Cache.PresenceCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.PresenceCache.NoOp","doc":"A cache module that does not cache anything.\n\nUseful for bots that do not need presence caching.","ref":"Nostrum.Cache.PresenceCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.init/1","doc":"Start up the cache supervisor.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#init/1"},{"type":"function","title":"Nostrum.Cache.PresenceCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.PresenceCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Cache.UserCache.ETS","doc":"An ETS-based cache for users.\n\nIf you need to get the table reference for the table used by this module,\nplease use the `table/0` function.","ref":"Nostrum.Cache.UserCache.ETS.html"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.bulk_create/1","doc":"Bulk create a list of users from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#bulk_create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.create/1","doc":"Create a user from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.get/1","doc":"Retrieve a user from the cache.","ref":"Nostrum.Cache.UserCache.ETS.html#get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.init/1","doc":"Set up the ETS table.","ref":"Nostrum.Cache.UserCache.ETS.html#init/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.table/0","doc":"Retrieve the ETS table reference used for the cache.","ref":"Nostrum.Cache.UserCache.ETS.html#table/0"},{"type":"function","title":"Nostrum.Cache.UserCache.ETS.update/1","doc":"Update a user from upstream data.","ref":"Nostrum.Cache.UserCache.ETS.html#update/1"},{"type":"module","title":"Nostrum.Cache.UserCache.Mnesia","doc":"An Mnesia-based cache for users.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Cache.UserCache.Mnesia.html"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.bulk_create/1","doc":"Bulk create a chunk of users in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#bulk_create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.clear/0","doc":"Clear any objects in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#clear/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.create/1","doc":"Create a user from upstream data.","ref":"Nostrum.Cache.UserCache.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.delete/1","doc":"Remove the given user from cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.get/1","doc":"Retrieve a user from the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.init/1","doc":"Set up the cache's Mnesia table.","ref":"Nostrum.Cache.UserCache.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.teardown/0","doc":"Drop the table used for caching.","ref":"Nostrum.Cache.UserCache.Mnesia.html#teardown/0"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.update/1","doc":"Update a User if it exists in the cache.","ref":"Nostrum.Cache.UserCache.Mnesia.html#update/1"},{"type":"function","title":"Nostrum.Cache.UserCache.Mnesia.wrap_query/1","doc":"Wrap QLC operations in a transaction.","ref":"Nostrum.Cache.UserCache.Mnesia.html#wrap_query/1"},{"type":"module","title":"Nostrum.Cache.UserCache.NoOp","doc":"A NoOp implementation for the UserCache\n\nThis cache does nothing, enable it if you dont need to cache users","ref":"Nostrum.Cache.UserCache.NoOp.html"},{"type":"function","title":"Nostrum.Cache.UserCache.NoOp.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Cache.UserCache.NoOp.html#child_spec/1"},{"type":"function","title":"Nostrum.Cache.UserCache.NoOp.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Cache.UserCache.NoOp.html#start_link/1"},{"type":"module","title":"Nostrum.Store.GuildShardMapping.ETS","doc":"Maintains a mapping of guild IDs to their shard numbers using `:ets`.\n\nIf programmatic access to the ETS table is needed, please use the `table/0`\nfunction.\n\nPlease do not use this module directly, apart from special functions such as\n`table/0`. Use `Nostrum.Store.GuildShardMapping` to call the configured\nmapping instead.","ref":"Nostrum.Store.GuildShardMapping.ETS.html"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.get/1","doc":"Get the shard number for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#get/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.init/1","doc":"Set up the store's ETS table.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#init/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.ETS.table/0","doc":"Retrieve the ETS table reference used for the store.","ref":"Nostrum.Store.GuildShardMapping.ETS.html#table/0"},{"type":"module","title":"Nostrum.Store.GuildShardMapping.Mnesia","doc":"Maintains a mapping of guild IDs to their shard numbers using Mnesia.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.create/2","doc":"Create a new mapping for the given guild ID to the given shard ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#create/2"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.delete/1","doc":"Delete any stored mapping for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#delete/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.get/1","doc":"Get the shard number for the given guild ID.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#get/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.init/1","doc":"Set up the store's Mnesia table.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the store.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Store.GuildShardMapping.Mnesia.teardown/0","doc":"Drop the table used for the store.","ref":"Nostrum.Store.GuildShardMapping.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Store.UnavailableGuild.ETS","doc":"Stores guilds that are currently unavailable using `:ets`.\n\nIf programmatic access to the ETS table is needed, please use the `table/0`\nfunction.\n\nPlease do not use this module directly, apart from special functions such as\n`tabname/0`. Use `Nostrum.Store.UnavailableGuild` to call the configured\nmapping instead.","ref":"Nostrum.Store.UnavailableGuild.ETS.html"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.create/1","doc":"Create the given guild as an unavailable guild.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.init/1","doc":"Set up the store's ETS table.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#init/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.is?/1","doc":"Return whether the given guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#is?/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#start_link/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.ETS.table/0","doc":"Retrieve the ETS table reference used for the store.","ref":"Nostrum.Store.UnavailableGuild.ETS.html#table/0"},{"type":"module","title":"Nostrum.Store.UnavailableGuild.Mnesia","doc":"Keeps track of unavailable guilds.\n\nPlease note that this module is only compiled if Mnesia is available on\nyour system. See the Mnesia section of the [State](functionality/state.md)\ndocumentation for more information.\n\nTo retrieve the table name used by this cache, use `table/0`.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#child_spec/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.create/1","doc":"Create the given guild as an unavailable guild.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#create/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.init/1","doc":"Set up the store's Mnesia table.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#init/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.is?/1","doc":"Return whether the given guild is unavailable.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#is?/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.start_link/1","doc":"Start the supervisor.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#start_link/1"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.table/0","doc":"Retrieve the Mnesia table name used for the store.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#table/0"},{"type":"function","title":"Nostrum.Store.UnavailableGuild.Mnesia.teardown/0","doc":"Drop the table used for the store.","ref":"Nostrum.Store.UnavailableGuild.Mnesia.html#teardown/0"},{"type":"module","title":"Nostrum.Api.Ratelimiter","doc":"Handles REST calls to the Discord API while respecting ratelimits.","ref":"Nostrum.Api.Ratelimiter.html"},{"type":"module","title":"Purpose - Nostrum.Api.Ratelimiter","doc":"Discord's API returns information about ratelimits that we must respect. This\nmodule performs serialization of these requests through a single process,\nthus preventing concurrency issues from arising if two processes make a\nremote API call at the same time.\n\n\n>","ref":"Nostrum.Api.Ratelimiter.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Api.Ratelimiter","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Api.Ratelimiter.html#module-internal-module-info"},{"type":"module","title":"Asynchronous requests - Nostrum.Api.Ratelimiter","doc":"The ratelimiter is fully asynchronous internally. In theory, it also supports\nqueueing requests in an asynchronous manner. However, support for this is\ncurrently not implemented in `Nostrum.Api`.\n\nIf you want to make one or multiple asynchronous requests manually, you can\nuse the following pattern:\n\n```elixir\nreq = :gen_statem.send_request(Nostrum.Api.Ratelimiter, {:queue, request})\n# ...\nresponse = :gen_statem.receive_response(req, timeout)\n```\n\nwhere `request` is a map describing the request to run - see `Nostrum.Api`\nfor more information. You can also send multiple requests at the same time\nand wait for their response: see `:gen_statem.reqids_add/3` and\n`:gen_statem.wait_response/3` for more information.","ref":"Nostrum.Api.Ratelimiter.html#module-asynchronous-requests"},{"type":"module","title":"Multi-node - Nostrum.Api.Ratelimiter","doc":"nostrum will transparently distribute client requests across all ratelimiter\nclusters running in the cluster. This allows us to account for per-route\nratelimits whilst still distributing work across cluster nodes. **Note that\nthe API enforces a global user ratelimit across all requests**, which we\ncannot account for using this method.","ref":"Nostrum.Api.Ratelimiter.html#module-multi-node"},{"type":"module","title":"Inner workings - Nostrum.Api.Ratelimiter","doc":"When a client process wants to perform some request on the Discord API, it\nsends a request to the `:gen_statem` behind this module to ask it to `:queue`\nthe incoming request.","ref":"Nostrum.Api.Ratelimiter.html#module-inner-workings"},{"type":"module","title":"Connection setup - Nostrum.Api.Ratelimiter","doc":"If the state machine is not connected to the HTTP endpoint, it will\ntransition to the `:connecting` state and try to open the connection. If this\nsucceeds, it transitions to the `:connected` state.","ref":"Nostrum.Api.Ratelimiter.html#module-connection-setup"},{"type":"module","title":"Queueing requests - Nostrum.Api.Ratelimiter","doc":"The state machine associates a `t::queue.queue/1` of `t:queued_request/0` to\neach individual bucket, together with an internal count of remaining calls.\nWhen queueing requests, the following cases occur:\n\n- If there are no remaining calls in the bot's global ratelimit bucket or\nthere are no remaining calls in the bucket, the request is put into the\nbucket's queue.\n\n- If there is an `:initial` running request to the bucket, the request is put\ninto the bucket's queue.\n\n- If there are more than 0 remaining calls on both the request-specific\nbucket and the global bucket, the request is started right away. This allows\nnostrum to dispatch multiple requests to the same endpoint as soon as\npossible as long as calls remain.\n\n- If no ratelimit information is known for the bucket and remaining calls on\nthe global bucket, the request is sent out as the \"pioneer\" request that will\nretrieve how many calls we have for this bucket (`:initial`, see above).\n\n- If none of the above is true, a new queue is created and the pending\nrqeuest marked as the `:initial` request. It will be run as soon as the bot's\nglobal limit limit expires.\n\nThe request starting function, `:next`, will start new requests from the\nqueue as long as more calls are possible in the timeframe. Any requests are\nthen started asynchronously. Bookkeeping is set up to associate the resulting\n`t::gun.stream_ref/0` with the original client along with its request and the\nratelimiter bucket.\n\nResults from the HTTP connection are delivered non-blocking: simple responses\nwith purely status codes and no body (code `204`) will be sent in a single\nmessage, other requests will be sent to us incrementally. To finally deliver\nthe full response body to the client with the final package, an internal\nbuffer of the body is kept. A possible future optimization could be having a\nway for `:gun` to only send the ratelimiter state machine the initial\n`:gun_response` and forward any item of the body directly to the client.\n\nWhen the headers for a request have been received, the ratelimiter parses the\nratelimit information and starts off an internal timer expiring when the\nratelimits expire. It will also reschedule calls with the `:next` internal\nevent for as many remaining calls as it knows about. Once the timer expires\nfor the current bucket, two cases can happen:\n\n- The queue has items: Schedule all items and repeat this later.\n\n- The queue is empty: Delete the queue and remaining calls from the\noutstanding buckets.\n\nIn practice, this means that we never store more information than we need,\nand removes the previous regular bucket sweeping functionality that the\nratelimit buckets required.\n\n**Global ratelimits** (note this is a distinct ratelimit from the bot's\n\"global\", per-user ratelimit) are handled with the special `global_limit`\nstate. This state is entered for exactly the the `X-Ratelimit-Reset-After`\ntime provided in the global ratelimit response. This state does nothing apart\nfrom postponing any events it receives and returning to the previous state\n(`:connected`) once the global timeout is gone. Requests that failed because\nof the global ratelimit are requeued after returning back into the regular\nstate: a warning is logged to inform you of this.","ref":"Nostrum.Api.Ratelimiter.html#module-queueing-requests"},{"type":"module","title":"Failure modes - Nostrum.Api.Ratelimiter","doc":"#### HTTP connection death\n\nIf the HTTP connection dies, the ratelimiter will inform each affected client\nby replying with `{:error, {:connection_died, reason}}`, where `reason` is\nthe reason as provided by the `:gun_down` event. It will then transition to\n`:disconnected` state. If no requests were running at time the connection was\nshut down - for instance, because we simply reached the maximum idle time on\nthe HTTP/2 connection - we will simply move on.\n\n#### Upstream errors\n\nThe ratelimiter works by queueing requests aggressively as soon as it has\nratelimit information to do so. If no ratelimit information is available, for\ninstance, because Discord returned us a 502 status code, the ratelimiter will\nnot automatically kick the queue to start further running requests.\n\n#### Other internal issues\n\nAny other internal problems that are not handled appropriately in the\nratelimiter will crash it, effectively resulting in the complete loss of any\nqueued requests.","ref":"Nostrum.Api.Ratelimiter.html#module-failure-modes"},{"type":"module","title":"Implementation benefits & drawbacks - Nostrum.Api.Ratelimiter","doc":"#### A history of ratelimiting\n\nFirst, it is important to give a short history of nostrum's ratelimiting: pre\n`0.8`, nostrum used to use a `GenServer` that would call out to ETS tables to\nlook up ratelimiting buckets for requests. If it needed to sleep before\nissuing a request due to the bucket being exhausted, it would do so in the\nserver process and block other callers.\n\nIn nostrum 0.8, the existing ratelimiter bucket storage architecture was\nrefactored to be based around the [pluggable caching\nfunctionality](../advanced/pluggable_caching.md), and buckets with no\nremaining calls were adjusted to be slept out on the client-side by having\nthe `GenServer` respond to the client with `{:error, {:retry_after, millis}}`\nand the client trying again and again to schedule its requests. This allowed\nusers to distribute their ratelimit buckets around however they wish, out of\nthe box, nostrum shipped with an ETS and a Mnesia-based ratelimit bucket\nstore.\n\n\n#### Problems we solved\n\nThe approach above still came with a few problems:\n\n- Requests were still being done synchronously in the ratelimiter, and it was\nblocked from anything else whilst running the requests, even though we are\ntheoretically free to start requests for other buckets while one is still\nrunning.\n\n- The ratelimiter itself was half working on its own, but half required the\nexternal storage mechanisms, which made the code hard to follow and required\nregular automatic pruning because the store had no idea when a bucket was no\nlonger relevant on its own.\n\n- Requests would not be pipelined to run as soon as ideally possible.\n\n- The ratelimiter did not inform clients if their request died in-flight.\n\n- If the client disconnected before we returned the response, we had to\nhandle this explicitly via `handle_info`.\n\nThe new state machine-based ratelimiter solves these problems.","ref":"Nostrum.Api.Ratelimiter.html#module-implementation-benefits-drawbacks"},{"type":"function","title":"Nostrum.Api.Ratelimiter.callback_mode/0","doc":"","ref":"Nostrum.Api.Ratelimiter.html#callback_mode/0"},{"type":"function","title":"Nostrum.Api.Ratelimiter.child_spec/1","doc":"","ref":"Nostrum.Api.Ratelimiter.html#child_spec/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.code_change/4","doc":"","ref":"Nostrum.Api.Ratelimiter.html#code_change/4"},{"type":"function","title":"Nostrum.Api.Ratelimiter.connected/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#connected/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.connecting/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#connecting/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.disconnected/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#disconnected/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.get_endpoint/2","doc":"Retrieves a proper ratelimit endpoint from a given route and url.","ref":"Nostrum.Api.Ratelimiter.html#get_endpoint/2"},{"type":"function","title":"Nostrum.Api.Ratelimiter.global_limit/3","doc":"","ref":"Nostrum.Api.Ratelimiter.html#global_limit/3"},{"type":"function","title":"Nostrum.Api.Ratelimiter.init/1","doc":"","ref":"Nostrum.Api.Ratelimiter.html#init/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.queue/1","doc":"Queue the given request and wait for the response synchronously.\n\nRatelimits on the endpoint are handled by the ratelimiter. Global ratelimits\nwill cause this to return an error.","ref":"Nostrum.Api.Ratelimiter.html#queue/1"},{"type":"function","title":"Nostrum.Api.Ratelimiter.start_link/1","doc":"Starts the ratelimiter.","ref":"Nostrum.Api.Ratelimiter.html#start_link/1"},{"type":"type","title":"Nostrum.Api.Ratelimiter.bucket/0","doc":"A bucket for endpoints unter the same ratelimit.","ref":"Nostrum.Api.Ratelimiter.html#t:bucket/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.queued_request/0","doc":"A bucket-specific request waiting to be queued, alongside its client.","ref":"Nostrum.Api.Ratelimiter.html#t:queued_request/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.remaining/0","doc":"Remaining calls on a route, as provided by the API response.\n\nThe ratelimiter internally counts the remaining calls per route to dispatch\nnew requests as soon as it's capable of doing so, but this is only possible\nif the API already provided us with ratelimit information for an endpoint.\n\nTherefore, if the initial call on an endpoint is made, the special `:initial`\nvalue is specified. This is used by the limit parsing function to set the\nremaining calls if and only if it is the response for the initial call -\notherwise, the value won't represent the truth anymore.","ref":"Nostrum.Api.Ratelimiter.html#t:remaining/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.request/0","doc":"A request to make in the ratelimiter.","ref":"Nostrum.Api.Ratelimiter.html#t:request/0"},{"type":"type","title":"Nostrum.Api.Ratelimiter.state/0","doc":"The state of the ratelimiter.\n\nWhile this has no public use, it is still documented here to provide help\nwhen tracing the ratelimiter via `:sys.trace/2` or other means.","ref":"Nostrum.Api.Ratelimiter.html#t:state/0"},{"type":"type","title":"Fields - Nostrum.Api.Ratelimiter.state/0","doc":"- `:outstanding`: Outstanding (unqueued) requests per bucket alongside with\nthe remaining calls that may be made on said bucket.\n\n- `:running`: Requests that have been sent off. Used to associate back the\nclient with a request when the response comes in.\n\n- `:inflight`: Requests for which we have started getting a response, but we\nhave not fully received it yet. For responses that have a body, this will\nbuffer their body until we can send it back to the client.\n\n- `:conn`: The `:gun` connection backing the server. Used for making new\nrequests, and updated as the state changes.\n\n- `:remaining_in_window`: How many calls we may still make to the API during\nthis time window. Reset automatically via timeouts.\n\n- `:wrapped_token`: An anonymous function that is internally used to retrieve\nthe token. This is wrapped to ensure that it is not accidentally exposed in\nstacktraces.","ref":"Nostrum.Api.Ratelimiter.html#t:state/0-fields"},{"type":"module","title":"Nostrum.Api.RatelimiterGroup","doc":"Tracks ratelimiters and determines correct ratelimiters to use per request.","ref":"Nostrum.Api.RatelimiterGroup.html"},{"type":"module","title":"Purpose - Nostrum.Api.RatelimiterGroup","doc":"In a multi-node setup, users want to be able to make API requests from any\nnode in the cluster without having to worry about hitting ratelimits. This\nmodule serves as the mediator between API clients on any nodes and their\ntarget ratelimiter.\n\n>","ref":"Nostrum.Api.RatelimiterGroup.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Api.RatelimiterGroup","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Api.RatelimiterGroup.html#module-internal-module-info"},{"type":"module","title":"Approach - Nostrum.Api.RatelimiterGroup","doc":"A naive implementation might simply forward requests to the locally (on the\nsame node) running ratelimiter. However, this falls short when modules on\nother nodes want to make API requests, as they then effectively begin\ntracking their own ratelimit state, rendering it inconsistent.\n\nInstead, the approach is that we have a locally running ratelimiter on each\nnode, all of which are registered via the `:pg` process group managed by this\nmodule. When an API request comes in, we determine its ratelimit bucket (see\n`Nostrum.Api.Ratelimiter.get_endpoint/2`) and based on that, determine the\ntarget ratelimiter by selecting it from the list of known ratelimiters via\n`:erlang.phash2/2`.","ref":"Nostrum.Api.RatelimiterGroup.html#module-approach"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.child_spec/1","doc":"","ref":"Nostrum.Api.RatelimiterGroup.html#child_spec/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.join/1","doc":"Join the given ratelimiter to the group.","ref":"Nostrum.Api.RatelimiterGroup.html#join/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.limiter_for_bucket/1","doc":"Return a ratelimiter PID to use for requests to the given ratelimiter `bucket`.","ref":"Nostrum.Api.RatelimiterGroup.html#limiter_for_bucket/1"},{"type":"function","title":"Nostrum.Api.RatelimiterGroup.start_link/1","doc":"","ref":"Nostrum.Api.RatelimiterGroup.html#start_link/1"},{"type":"module","title":"Nostrum.Shard.Session","doc":"Manages a single shard's gateway connection.","ref":"Nostrum.Shard.Session.html"},{"type":"module","title":"Purpose - Nostrum.Shard.Session","doc":"Discord's gateway sends us events over websocket. The shard session state\nmachine concerns it self with parsing these events and dispatching them to\nclients as appropriate.\n\n\n>","ref":"Nostrum.Shard.Session.html#module-purpose"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.html#module-internal-module-info"},{"type":"module","title":"Inner workings - Nostrum.Shard.Session","doc":"The session is implemented via `:gen_statem` and can be in one of the\nfollowing states:\n\n- `disconnected`: when no connection is up at all. On initial connection of\nthe session (e.g. no `seq` field is available), this will block if we need to\nwait a moment to respect the session startup concurrency limits. Afterwards,\nit will transition to `connecting_http`.\n\n- `connecting_http`: We are setting up a HTTP connection to the API. This\nmeans that no connection was available previously at all, and we need to open\nit from scratch. Used for gateway-initiated reconnect requests (\"Cloudflare\nWebsocket proxy restarting\") and on `:gun_down` notifications for the\nconnection in connected state. Once `:gun` notifies us that the connection is\nup, we transition to the `connecting_ws` state.\n\n- `connecting_ws`: We are turning the HTTP connection into a WebSocket\nconnection. If this succeeds, we head into the `connected` state.\n\n- `connected`: The WebSocket connection is up. This state actively deals with\nnew data from the gateway, and takes care of heartbeating. If Discord fails\nto respond to our heartbeats, we close down the full connection and attempt\nto re-establish and resume events.","ref":"Nostrum.Shard.Session.html#module-inner-workings"},{"type":"function","title":"Nostrum.Shard.Session.callback_mode/0","doc":"","ref":"Nostrum.Shard.Session.html#callback_mode/0"},{"type":"function","title":"Nostrum.Shard.Session.child_spec/1","doc":"","ref":"Nostrum.Shard.Session.html#child_spec/1"},{"type":"function","title":"Nostrum.Shard.Session.connected/3","doc":"","ref":"Nostrum.Shard.Session.html#connected/3"},{"type":"function","title":"Nostrum.Shard.Session.connecting_http/3","doc":"","ref":"Nostrum.Shard.Session.html#connecting_http/3"},{"type":"function","title":"Nostrum.Shard.Session.connecting_ws/3","doc":"","ref":"Nostrum.Shard.Session.html#connecting_ws/3"},{"type":"function","title":"Nostrum.Shard.Session.disconnect/1","doc":"","ref":"Nostrum.Shard.Session.html#disconnect/1"},{"type":"function","title":"Nostrum.Shard.Session.disconnect/2","doc":"","ref":"Nostrum.Shard.Session.html#disconnect/2"},{"type":"function","title":"Nostrum.Shard.Session.disconnected/3","doc":"","ref":"Nostrum.Shard.Session.html#disconnected/3"},{"type":"function","title":"Nostrum.Shard.Session.format_status/1","doc":"","ref":"Nostrum.Shard.Session.html#format_status/1"},{"type":"function","title":"Nostrum.Shard.Session.get_ws_state/1","doc":"","ref":"Nostrum.Shard.Session.html#get_ws_state/1"},{"type":"function","title":"Nostrum.Shard.Session.init/1","doc":"","ref":"Nostrum.Shard.Session.html#init/1"},{"type":"function","title":"Nostrum.Shard.Session.request_guild_members/3","doc":"","ref":"Nostrum.Shard.Session.html#request_guild_members/3"},{"type":"function","title":"Nostrum.Shard.Session.start_link/2","doc":"","ref":"Nostrum.Shard.Session.html#start_link/2"},{"type":"function","title":"Nostrum.Shard.Session.update_status/5","doc":"","ref":"Nostrum.Shard.Session.html#update_status/5"},{"type":"function","title":"Nostrum.Shard.Session.update_voice_state/5","doc":"","ref":"Nostrum.Shard.Session.html#update_voice_state/5"},{"type":"behaviour","title":"Nostrum.Shard.Session.Compression","doc":"A behaviour for compression methods supported by the Discord gateway to implement.\n\nSee the modules nested under this behaviour for reference implementations.\n\n>","ref":"Nostrum.Shard.Session.Compression.html"},{"type":"behaviour","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.html#module-internal-module-info"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.create_context/0","doc":"Create a new compression context that can be passed as an argument to other\nmethods within the behaviour to inflate data or reset the context to a\nblank state.","ref":"Nostrum.Shard.Session.Compression.html#c:create_context/0"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.inflate/2","doc":"Decompress a frame received from Discord over the gateway. Should return an\niolist of the decompressed data.","ref":"Nostrum.Shard.Session.Compression.html#c:inflate/2"},{"type":"callback","title":"Nostrum.Shard.Session.Compression.reset_context/1","doc":"Reset a decompression context to a blank slate, this is useful after a websocket\nresume has taken place or something similar requiring the reset of the state\nfor a shard.","ref":"Nostrum.Shard.Session.Compression.html#c:reset_context/1"},{"type":"module","title":"Nostrum.Shard.Session.Compression.Zlib","doc":"Implementation of compression methods for the `zlib` compression algorithm.\n\n>","ref":"Nostrum.Shard.Session.Compression.Zlib.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression.Zlib","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.Zlib.html#module-internal-module-info"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.create_context/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#create_context/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.inflate/2","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#inflate/2"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zlib.reset_context/1","doc":"","ref":"Nostrum.Shard.Session.Compression.Zlib.html#reset_context/1"},{"type":"module","title":"Nostrum.Shard.Session.Compression.Zstd","doc":"Implementation of compression methods for the `zstd` compression algorithm.\n\n>","ref":"Nostrum.Shard.Session.Compression.Zstd.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.Shard.Session.Compression.Zstd","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.Shard.Session.Compression.Zstd.html#module-internal-module-info"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.check_available!/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#check_available!/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.create_context/0","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#create_context/0"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.inflate/2","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#inflate/2"},{"type":"function","title":"Nostrum.Shard.Session.Compression.Zstd.reset_context/1","doc":"","ref":"Nostrum.Shard.Session.Compression.Zstd.html#reset_context/1"},{"type":"module","title":"Nostrum.Shard.Supervisor","doc":"Supervises shard processes.","ref":"Nostrum.Shard.Supervisor.html"},{"type":"module","title":"Implementation - Nostrum.Shard.Supervisor","doc":"As events are sent to the shard, the following happens:\n\n1. Shard looks to see what type of event it is, only dispatch events are sent\n to the producer.\n\n2. If the event is a `Dispatch`, the payload is converted to an atom-keyed map.\n This is done because over ETF (which Nostrum uses), map keys are sometimes\n binaries and sometimes strings, making it a real headache. Additionally,\n with atom keys, we can use the `Map.key` notation. This is normally\n considered unsafe but a debug messages will be emitted if a key is unsafely\n converted to an atom. In this way we can ensure that our atom table is not\n growing unbounded.\n\n3. The payload is then written to the cache. To make sure we're not overrunning\n the cache, especially at startup with `request_guild_members` or other heavy\n payloads, this is done in the shard itself.\n\n4. The cache updates itself from the new data. In some cases, such as update or\n delete events, it may send out a second \"old\" object as well, that helps the\n library user to determine what changed.\n\n5. After writing to the cache, the shard `send`s out the event after going\n through the cache to all subscribed processes. In general, the payload will\n often match the payload described by the official Discord API documentation.\n\n6. The shard instructs the websocket client that it's ready to read more data.\n This prevents flooding the shard with messages that it may not be able to\n handle yet, thus growing the message queue and the memory usage.","ref":"Nostrum.Shard.Supervisor.html#module-implementation"},{"type":"function","title":"Nostrum.Shard.Supervisor.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Nostrum.Shard.Supervisor.html#child_spec/1"},{"type":"function","title":"Nostrum.Shard.Supervisor.connect/2","doc":"Spawns a shard with the specified number and connects it to the discord gateway.","ref":"Nostrum.Shard.Supervisor.html#connect/2"},{"type":"function","title":"Nostrum.Shard.Supervisor.disconnect/1","doc":"Disconnects the shard with the given shard number from the Gateway.\n\nThis function returns `t:resume_information/0` which can be provided\nto `reconnect/1` to reconnect a shard to the gateway and (attempt) to\ncatch up on any missed events.","ref":"Nostrum.Shard.Supervisor.html#disconnect/1"},{"type":"function","title":"Examples - Nostrum.Shard.Supervisor.disconnect/1","doc":"```elixir\niex> Nostrum.Shard.Supervisor.disconnect(4)\n%{shard_num: 4, ...}\n```","ref":"Nostrum.Shard.Supervisor.html#disconnect/1-examples"},{"type":"function","title":"Nostrum.Shard.Supervisor.reconnect/1","doc":"Reconnect to the gateway using the provided `t:resume_information/0`.\n\nResuming is performed by the gateway on a best effort basis, it is not\nguaranteed that a resume will work (though Nostrum will handle failed attempts\nat a resumption). If a reconnect is successful, any events received during the\nreconnection period should be received. If the reconnect fails, events\nreceived between the disconnect and re-authentication may be lost.\n\nFor more information about resuming sessions, visit\n[the Discord Developer Portal](https://discord.com/developers/docs/topics/gateway#resuming).","ref":"Nostrum.Shard.Supervisor.html#reconnect/1"},{"type":"function","title":"Examples - Nostrum.Shard.Supervisor.reconnect/1","doc":"```elixir\niex> resume = Nostrum.Shard.Supervisor.disconnect(4)\n%{shard_num: 4, ...}\niex> Nostrum.Shard.Supervisor.reconnect(resume)\n```","ref":"Nostrum.Shard.Supervisor.html#reconnect/1-examples"},{"type":"function","title":"Nostrum.Shard.Supervisor.start_link/1","doc":"","ref":"Nostrum.Shard.Supervisor.html#start_link/1"},{"type":"function","title":"Nostrum.Shard.Supervisor.update_status/4","doc":"","ref":"Nostrum.Shard.Supervisor.html#update_status/4"},{"type":"function","title":"Nostrum.Shard.Supervisor.update_voice_state/4","doc":"","ref":"Nostrum.Shard.Supervisor.html#update_voice_state/4"},{"type":"type","title":"Nostrum.Shard.Supervisor.resume_information/0","doc":"Represents gateway resume information.","ref":"Nostrum.Shard.Supervisor.html#t:resume_information/0"},{"type":"type","title":"Nostrum.Shard.Supervisor.shard_num/0","doc":"Shard number(`shard_id`). Range is `0..total_shards-1`.","ref":"Nostrum.Shard.Supervisor.html#t:shard_num/0"},{"type":"type","title":"Nostrum.Shard.Supervisor.total_shards/0","doc":"Total shard count(`num_shards`).","ref":"Nostrum.Shard.Supervisor.html#t:total_shards/0"},{"type":"module","title":"Nostrum.StateMachineTranslator","doc":"Translate error reports for `:gen_statem` modules in Elixir.\n\n>","ref":"Nostrum.StateMachineTranslator.html"},{"type":"module","title":"Internal module {: .info} - Nostrum.StateMachineTranslator","doc":">\n> This module is intended for exclusive usage inside of nostrum, and is\n> documented for completeness and people curious to look behind the covers.","ref":"Nostrum.StateMachineTranslator.html#module-internal-module-info"},{"type":"module","title":"Reasoning - Nostrum.StateMachineTranslator","doc":"By default, Elixir will ignore these messages altogether, see [this\nElixirForum\npost](https://elixirforum.com/t/why-does-logger-translator-ignore-gen-statem-reports/37418).\nA possible workaround seems to be using the `gen_state_machine` library, but\npulling in a library purely to have error reporting for something built-in to\nOTP seems pretty strange to me.","ref":"Nostrum.StateMachineTranslator.html#module-reasoning"},{"type":"function","title":"Nostrum.StateMachineTranslator.translate/4","doc":"","ref":"Nostrum.StateMachineTranslator.html#translate/4"},{"type":"exception","title":"Nostrum.Error.ApiError","doc":"Represents a failed response from the API.\n\nThis occurs when `:gun` fails, or when the API doesn't respond with `200` or `204`.\nThis should only be raised explicitly when using the banged API methods.","ref":"Nostrum.Error.ApiError.html"},{"type":"type","title":"Nostrum.Error.ApiError.detailed_error/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:detailed_error/0"},{"type":"type","title":"Nostrum.Error.ApiError.discord_status_code/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:discord_status_code/0"},{"type":"type","title":"Nostrum.Error.ApiError.error/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:error/0"},{"type":"type","title":"Nostrum.Error.ApiError.error_list_map/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:error_list_map/0"},{"type":"type","title":"Nostrum.Error.ApiError.errors/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:errors/0"},{"type":"type","title":"Nostrum.Error.ApiError.response/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:response/0"},{"type":"type","title":"Nostrum.Error.ApiError.status_code/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:status_code/0"},{"type":"type","title":"Nostrum.Error.ApiError.t/0","doc":"","ref":"Nostrum.Error.ApiError.html#t:t/0"},{"type":"exception","title":"Nostrum.Error.CacheError","doc":"Represents an error when interacting with the cache.\n\nThis likely occurs because a specified item could not be found in the cache,\nor your were searching for something invalid.\nThis should only occur when using the banged cache methods.","ref":"Nostrum.Error.CacheError.html"},{"type":"exception","title":"Nostrum.Error.VoiceError","doc":"Represents an error when playing sound through voice channels.\n\nThis occurs when attempting to play audio and the file can't be found\nfor the ffmpeg, youtube-dl, or streamlink executables.","ref":"Nostrum.Error.VoiceError.html"},{"type":"extras","title":"Introduction","doc":"# Introduction\n\nnostrum is an Elixir library that can be used to interact with Discord.\n\nTo see documentation about a specific part of the library, please visit one of\nthe following:\n\n* [API](api-1.html) - Methods to interact with the RESTful API (and some other goodies).\n* [State](state.html) - Caches that keep information from Discord fresh at your disposal.\n* [Events](event_handling.html) - Handling events from Discord as they come in.\n* [Voice](voice-2.html) - Playing audio through Discord voice channels.","ref":"intro.html"},{"type":"extras","title":"Setup - Introduction","doc":"There are two versions of nostrum, a stable version released on Hex and a dev\nversion on GitHub. The dev version will be more up to date but will likely\nhave more errors.\n\n```elixir\ndef deps do\n [{:nostrum, \"~> 0.10\"}]\n # Or, for bleeding edge changes:\n # [{:nostrum, github: \"Kraigie/nostrum\"}]\nend\n```\n\nNext up, you need to configure nostrum. The most basic configuration is simply\nsetting a token to log in with:\n\n```elixir\nconfig :nostrum,\n token: \"666\" # The token of your bot as a string\n```","ref":"intro.html#setup"},{"type":"extras","title":"Configuration options - Introduction","doc":"Apart from the `token` field mentioned above, the following fields are also supported:\n\n- `num_shards` - the amount of shards to run. Can be one of the following:\n - `:auto`: use the suggested amount of shards as provided by Discord.\n - *`num`*: a number of shards to run. nostrum will warn if this is not the\n recommended amount.\n - `{lowest, highest, total}`: start shards `lowest` to `highest`. `total`\n should contain the total amount of shards that your bot is expected to have.\n Useful for splitting a single bot across multiple servers, but see also [the\n multi-node documentation](../advanced/multi_node.md).\n - `:manual`: nostrum does not automatically spawn shards. See the [Manual\n Sharding](../advanced/manual_sharding.md) guide for more information.\n- `gateway_intents` - a list of atoms representing gateway intents for Nostrum\n to subscribe to from the Discord API. More information can be found in the\n [gateway intents](./gateway_intents.md) documentation page.\n- `request_guild_members` - perform member chunking to retrieve a complete list\n of members for all guilds at startup. Depending on your [cache\n backend](../advanced/pluggable_caching.md), this may increase startup time\n and memory usage by quite a bit. Defaults to `false`.\n- `gateway_compression` - use either `:zlib` (default) or `:zstd` for compression\n of messages from the Discord gateway. See the documentation on\n [Gateway Compression](../advanced/gateway_compression.md) for more information.","ref":"intro.html#configuration-options"},{"type":"extras","title":"Voice-specific - Introduction","doc":"- `ffmpeg` - Specifies the path to the `ffmpeg` executable for playing audio.\n Defaults to `\"ffmpeg\"`.\n- `youtubedl` - Specifies the path to the `youtube-dl` executable for playing\n audio with youtube-dl support. Defaults to `\"youtube-dl\"`.\n- `streamlink` - Specifies the path to the `streamlink` executable for playing\n livestream audio with streamlink support. Defaults to `\"streamlink\"`.\n- `audio_timeout` - Milliseconds that input must begin generating audio by\n upon invoking `play`. More information about this option can be found in the\n [voice](./voice-2.html) documentation page. Defaults to `20_000` (20s).\n- `audio_frames_per_burst` - Number of opus frames to send at a time while\n playing audio. More information about this option can be found in the\n [voice](./voice-2.html) documentation page. Defaults to `10`.\n- `voice_auto_connect` - This will determine if Nostrum automatically connects\n to voice websockets gateways upon joining voice channels. If set to `false`\n but you still wish to connect to the voice gateway, you can do so manually\n by calling `Nostrum.Voice.connect_to_gateway/1` after joining a voice\n channel. Defaults to `true`.\n- `voice_encryption_mode` - Defaults to `:aes256_gcm`. More information about this\n option can be found [here](./voice-2.html#encryption-modes).","ref":"intro.html#voice-specific"},{"type":"extras","title":"Development & debugging - Introduction","doc":"- `log_full_events` - This will log the full payload received over the\n websocket. Defaults to `false`.\n- `log_dispatch_events` - This will log dispatch events as they are received\n from the gateway. Defaults to `false`.\n- `fullsweep_after_default` - Sets the `fullsweep_after` flag for processes\n that can have irregularly high memory usage due to Discord payloads. This\n options will dramatically reduce the amount of memory used by some processes\n at the cost of increased CPU usage. This is useful if you're running your\n application under a memory constrained environment. This comes at the cost\n of increased CPU usage. By default, this option will only affect some\n processes. You can set this flag for *all* processes using environment\n variables or by [setting the system flag\n yourself](http://erlang.org/doc/man/erlang.html#system_flag-2). Defaults to\n whatever your system recommends, which is probably `65535`.\n- `force_http1` - Set to `true` if you wish to disable automatic use of HTTP 2\n or newer HTTP versions for API requests to Discord. Useful to diagnose issues\n with ratelimiter connections during abnormal network conditions.","ref":"intro.html#development-debugging"},{"type":"extras","title":"Internal options - Introduction","doc":"The following options are only used for testing nostrum itself.\n\n- `dev` - This is added to enable Nostrum to be run completely stand alone for\n development purposes. `true` will cause Nostrum to spawn its own event\n consumers. If you have the dev flag set to true while running Nostrum\n alongside your application some of your events will be consumed. Defaults to\n `false`.","ref":"intro.html#internal-options"},{"type":"extras","title":"Logging - Introduction","doc":"nostrum uses Elixir's standard logger to inform you about regular and irregular\nevents. Normal messages include Discord-requested shard reconnections and the\n`IDENTIFY` and `READY` events.\n\nThe following metadata fields through logger:\n\n - `shard` - Id of the shard on which the event occurred\n - `guild` - Name of the guild on which the voice connection event occurred\n - `channel` - Name of the channel on which the voice connection event occurred\n\nTo enable this metadata, logger can be configured as such:\n```elixir\nconfig :logger, :console,\n metadata: [:shard, :guild, :channel]\n``` \n\nFor more information on how this works, and how to change the logging\nconfiguration for nostrum on its own, please see the [Logger\ndocumentation](https://hexdocs.pm/logger/Logger.html)","ref":"intro.html#logging"},{"type":"extras","title":"Why Elixir? - Introduction","doc":"From the Elixir website -\n\n> Elixir is a dynamic, functional language designed for building scalable and\n> maintainable applications.\n\n> Elixir leverages the Erlang VM, known for running low-latency, distributed\n> and fault-tolerant systems, while also being successfully used in web\n> development and the embedded software domain.\n\n**How does Nostrum leverage these benefits?**\n\n- **Fault tolerance**: nostrum attempts, where reasonable, to allow for\n different parts of the application to fail with minimal harm. Supervisors are\n used heavily to ensure that anything that breaks will be restarted. Nostrum\n attempts to avoid most errors, but if they do occur (*and they will!*) it\n shouldn't be the end of the world.\n\n- **Concurrency** - Concurrency is considered to be a first class citizen in\n Elixir. Through the use of SMP and processes, information should travel\n through the application quickly.\n\n- **Distributed**: nostrum does not currently support full distribution of all\n components out of the box - that would fall out of the scope of the library.\n However, see the [multi-node](../advanced/multi_node.md) document for\n provided functionality.","ref":"intro.html#why-elixir"},{"type":"extras","title":"Example bots - Introduction","doc":"- A simple bot that consumes events from the gateway can be found [at\n `examples/event_consumer.ex`](https://github.com/Kraigie/nostrum/blob/master/examples/event_consumer.ex).\n\n- An example bot that plays audio through voice channels can be found [at\n `examples/audio_player_example.ex`](https://github.com/Kraigie/nostrum/blob/master/examples/audio_player_example.ex).\n\n- A properly structured bot with commands utilizing\n [nosedrum](https://github.com/jchristgit/nosedrum) can be found [in this\n GitHub repository](https://github.com/kshannoninnes/sample_bot)\n\n- A rather large and complex bot, bolt, can be found\n [here](https://github.com/jchristgit/bolt).\n\n\n\n","ref":"intro.html#example-bots"},{"type":"extras","title":"API","doc":"# API\n\nnostrum includes a complete implementation of the endpoints supported by\nDiscord's API. Method names are copied closely from the documentation to\neliminate any confusion about what a method does, as well as to allow users to\neasily lookup the endpoints in the official API documentation.\n\nFor a full listing of method definitions, please see the `Nostrum.Api` module.","ref":"api-4.html"},{"type":"extras","title":"Banged (`!`) API methods - API","doc":"A lot of methods have a `banged` version of themselves. This is a common Elixir\nidiom hailing from Elixir's style of failing fast.\n\nBy default, the API method will return a tuple like one of the following:\n\n```elixir\n# Success\n{:ok, msg} = Nostrum.Api.create_message(179679229036724225, \"456\")\n\n# Failure\n{:error, reason} = Nostrum.Api.create_message(123, \"eat my shorts api\")\n```\n\nA banged method, instead of returning an `error` tuple, will throw an error. If\nsuccessful, it will directly return the response with no `:ok` tuple.\n\n```elixir\n# Success\nmsg = Nostrum.Api.create_message!(179679229036724225, \"456\")\n\n# Failure - Throws an error\nNostrum.Api.create_message!(123, \"eat my shorts api\")\n```","ref":"api-4.html#banged-api-methods"},{"type":"extras","title":"Abstractions - API","doc":"When appropriate, some helpers are defined to make interacting with the API\nsimpler. An example of this is `Nostrum.Api.get_channel_messages/3`. By default\nthis endpoint only allows the retrieval of `100` messages at a time. A general\nuse case will have a user wanting more messages than that, thus nostrum handles\nthe retrieval of any number of messages for the user.\n\nThere are other endpoints that could use grooming like above, feel free to\nsuggest an interface and implementation for these methods.","ref":"api-4.html#abstractions"},{"type":"extras","title":"Ratelimiting - API","doc":"Ratelimiting is handled internally by nostrum, so long as you use the methods\nsupplied in the `Nostrum.Api` module. This means either calling the methods as\nthey're given or using `Nostrum.Api.request/4` to call an endpoint.\n\nTo ensure that every request is handled properly, no matter if they're called\nasynchronously or not, nostrum funnels all requests through the\n`Nostrum.Api.Ratelimiter` state machine.","ref":"api-4.html#ratelimiting"},{"type":"extras","title":"REST-only - API","doc":"If you only want to use the REST portion of the provided API, the only process\nneeded is the ratelimiter, which can be manually started by calling\n`Nostrum.Api.Ratelimiter.start_link/1`. \n\nIf you don't want to start nostrum, you can add `runtime: false` to the\ndependency options. If you're using `mix release`, all `runtime: false` deps\nwill be excluded from the build, so you'll also need to add `:nostrum` app to\n`mix.exs` in `:included_applications` application option or in the `releases`\nproject option.\n\n","ref":"api-4.html#rest-only"},{"type":"extras","title":"Application commands","doc":"# Application commands\n\nDiscord allows you to create commands for your bot that work within the slash\ncommand menu or via the context menu.\n\nUsing nostrum, you can create, receive, and respond to application commands invoked\nby Discord users.","ref":"application_commands.html"},{"type":"extras","title":"Permissions required - Application commands","doc":"Quoting the [official Discord\ndocumentation](https://discord.com/developers/docs/interactions/application-commands#authorizing-your-application):\n\n> In order to make Commands work within a guild, the guild must authorize\n> your application with the `applications.commands` scope. The `bot` scope is not\n> enough.","ref":"application_commands.html#permissions-required"},{"type":"extras","title":"Getting started - Application commands","doc":"Discord differentiates between **global** and **guild-specific** slash\ncommands. Global commands will be distributed across all guilds that your bot\nis in within an hour. Guild-specific commands slash commands will be available\ninstantly, which is why we will use guild-specific commands for testing.\n\nWe will create a command that will allow the user to assign or remove a role of\nchoice. The `guild_id` parameter is the ID of the guild on which the command\nwill be created.\n\nOur command definition looks as follows:\n\n```elixir\ncommand = %{\n name: \"role\",\n description: \"assign or remove a role\",\n options: [\n %{\n # ApplicationCommandType::ROLE\n type: 8,\n name: \"name\",\n description: \"role to assign or remove\",\n required: true\n },\n %{\n # ApplicationCommandType::STRING\n type: 3,\n name: \"action\",\n description: \"whether to assign or remove the role\",\n required: true,\n choices: [\n %{\n name: \"assign\",\n value: \"assign\"\n },\n %{\n name: \"remove\",\n value: \"remove\"\n }\n ]\n }\n ]\n}\n```\n\nTo register this command on the guild, we simply pass it to\n`Nostrum.Api.create_guild_application_command/2`:\n\n```elixir\nNostrum.Api.create_guild_application_command(guild_id, command)\n```\n\nYou can register the command in the ``:READY`` gateway event handler.","ref":"application_commands.html#getting-started"},{"type":"extras","title":"Receiving interactions - Application commands","doc":"Set up a gateway event handler for ``:INTERACTION_CREATE``. On command\ninvocation the interaction payload will look something like the following:\n\n```elixir\n%Nostrum.Struct.Interaction{\n channel_id: 474025345243414539,\n data: %{\n id: 793152718839087135,\n name: \"role\",\n options: [\n %{name: \"name\", value: \"458692275199803406\"},\n %{name: \"action\", value: \"assign\"}\n ]\n },\n # ...\n```\n\nNote that Discord already converted the user-supplied role to a snowflake.\nConvenient!\n\nLet's match on the retrieved event and create two function heads for the\nseparate operation modes:\n\n```elixir\nalias Nostrum.Api\nalias Nostrum.Struct.Interaction\n\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"assign\"}]}} = interaction) do\n Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\nend\n\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"remove\"}]}} = interaction) do\n Api.remove_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\nend\n\ndef handle_event({:INTERACTION_CREATE, %Interaction{data: %{name: \"role\"}} = interaction, _ws_state}) do\n manage_role(interaction)\nend\n```\n\nOkay, we now have our handling code done. This is pretty much the same code\nthat you would use for regular commands.","ref":"application_commands.html#receiving-interactions"},{"type":"extras","title":"Responding to interactions - Application commands","doc":"To respond to interactions, use ``Nostrum.Api.create_interaction_response/2``:\n\n```elixir\ndefp manage_role(%Interaction{data: %{options: [%{value: role_id}, %{value: \"assign\"}]}} = interaction) do\n Api.add_guild_member_role(interaction.guild_id, interaction.member.user_id, role_id)\n response = %{\n type: 4, # ChannelMessageWithSource\n data: %{\n content: \"role assigned\"\n }\n }\n Api.create_interaction_response(interaction, response)\nend\n```\n\nWe have now built a simple command using slash commands, with argument\nconversion delegated to Discords side of things. Further actions on the\ncommand, such as checking permissions, author roles, and more - are left as an\nexercise to the reader.","ref":"application_commands.html#responding-to-interactions"},{"type":"extras","title":"Gateway Intents","doc":"# Gateway Intents\n\nThe Discord API allows you to fine tune the payloads that are received by your bot through gateway intents.\n\nWhen connecting to Discord you can instruct Discord on which events you want to receive (i.e. messages, user presences, etc.).\n\nNostrum allows you to set these intents within your configuration, **by default all non-privileged intents are enabled**.\n\nTo pass intents you should use the following configuration:\n```elixir\nconfig :nostrum,\n token: \"bot_token\",\n gateway_intents: [\n :guilds,\n # other gateway intents\n ]\n```\n\nPossible intents (and the gateway events they correspond to) are:\n\n```\nguilds:\n - GUILD_CREATE\n - GUILD_UPDATE\n - GUILD_DELETE\n - GUILD_ROLE_CREATE\n - GUILD_ROLE_UPDATE\n - GUILD_ROLE_DELETE\n - CHANNEL_CREATE\n - CHANNEL_UPDATE\n - CHANNEL_DELETE\n - CHANNEL_PINS_UPDATE\n\nguild_members*:\n - GUILD_MEMBER_ADD\n - GUILD_MEMBER_UPDATE\n - GUILD_MEMBER_REMOVE\n\nguild_moderation:\n - GUILD_AUDIT_LOG_ENTRY_CREATE\n - GUILD_BAN_ADD\n - GUILD_BAN_REMOVE\n\nguild_emojis:\n - GUILD_EMOJIS_UPDATE\n\nguild_integrations:\n - GUILD_INTEGRATIONS_UPDATE\n\nguild_webhooks:\n - WEBHOOKS_UPDATE\n\nguild_invites:\n - INVITE_CREATE\n - INVITE_DELETE\n\nguild_voice_states:\n - VOICE_STATE_UPDATE\n\nguild_presences*:\n - PRESENCE_UPDATE\n\nguild_messages:\n - MESSAGE_CREATE\n - MESSAGE_UPDATE\n - MESSAGE_DELETE\n - MESSAGE_DELETE_BULK\n\nguild_message_reactions:\n - MESSAGE_REACTION_ADD\n - MESSAGE_REACTION_REMOVE\n - MESSAGE_REACTION_REMOVE_ALL\n - MESSAGE_REACTION_REMOVE_EMOJI\n\nguild_message_typing:\n - TYPING_START\n\ndirect_messages:\n - MESSAGE_CREATE\n - MESSAGE_UPDATE\n - MESSAGE_DELETE\n - CHANNEL_PINS_UPDATE\n\ndirect_message_reactions:\n - MESSAGE_REACTION_ADD\n - MESSAGE_REACTION_REMOVE\n - MESSAGE_REACTION_REMOVE_ALL\n - MESSAGE_REACTION_REMOVE_EMOJI\n\ndirect_message_typing:\n - TYPING_START\n\nmessage_content*:\n - MESSAGE_CONTENT\n\nguild_scheduled_events:\n - GUILD_SCHEDULED_EVENT_CREATE\n - GUILD_SCHEDULED_EVENT_UPDATE\n - GUILD_SCHEDULED_EVENT_DELETE\n - GUILD_SCHEDULED_EVENT_USER_ADD\n - GUILD_SCHEDULED_EVENT_USER_REMOVE\n\nauto_moderation_configuration:\n - AUTO_MODERATION_RULE_CREATE\n - AUTO_MODERATION_RULE_DELETE\n - AUTO_MODERATION_RULE_UPDATE\n\nauto_moderation_execution:\n - AUTO_MODERATION_RULE_EXECUTION\n\nguild_message_polls:\n - MESSAGE_POLL_VOTE_ADD\n - MESSAGE_POLL_VOTE_REMOVE\n\ndirect_message_polls:\n - MESSAGE_POLL_VOTE_ADD\n - MESSAGE_POLL_VOTE_REMOVE\n```\n\nBesides an explicit list of atoms, acceptable configuration values are `:all` and `:nonprivileged`.\n\nNote that intents marked with `*` are **privileged** intents. You must enable these intents by visiting the Discord Developer portal.\n\nOnce your bot passes 100 servers Discord will force you to **verify your bot**. If you require privileged intents you may need to write additional information on your usage of them.\n\nNostrum's default value for `gateway_intents` is `:nonprivileged`, which enables all non-privileged intents.\nThis is equivalent to setting `gateway_intents` to the above list without the **privileged** intents.\nIf you require all intents, including privileged ones, set `gateway_intents` to `:all`.\n\nMore information on gateway intents can be found in the [Discord Developer documentation](https://discord.com/developers/docs/topics/gateway#gateway-intents).","ref":"gateway_intents.html"},{"type":"extras","title":"Event handling","doc":"# Event handling\n\nEvent handling is how your bot application will interact with the information\nsent from Discord over a websocket connection. By defining an event handler for\nan event, when something like a message is created or a channel is deleted, your\napplication can perform an action as a result of that event.\n\nNostrum uses [Erlang's `:pg` module](https://www.erlang.org/doc/man/pg.html) to\ndetermine which consumers are interested in events, via\n`Nostrum.ConsumerGroup`. This allows dynamic subscriptions at runtime, even\nacross nodes. Events are dispatched to group members as they appear from the\nDiscord Gateway after ingestion into the cache.\n\nTo see the documentation on handling events of provided consumers, please see\n`Nostrum.Consumer`.\n\n\n","ref":"event_handling.html"},{"type":"extras","title":"State","doc":"# State\n\nNostrum keeps track of the state that your bot can see, which is updated based\non events from the WS connection. We differentiate between _caches_, which are\noptional and are used to provide your bot with fresh data, and _state_, which is\nmandatory state that we must track internally.","ref":"state.html"},{"type":"extras","title":"Caches - State","doc":"Caching will by default use Erlang's ETS tables. Abstractions are provided for\ncommon operations. If you feel the caches are missing some abstraction, feel\nfree to suggest it [on GitHub](https://github.com/Kraigie/nostrum/issues).\n\nShould the default ETS-based caching not be enough for you - for instance, you\nwant to integrate to some external caching mechanism or want to distribute your\nbot across multiple nodes, and the built-in Mnesia-based caching is not enough\nfor you either, please see the [pluggable\ncaching](../advanced/pluggable_caching.md) documentation.","ref":"state.html#caches"},{"type":"extras","title":"Implementing your own caches - State","doc":"To implement custom caches, implement the behaviour defined by the cache\nmodule, such as `Nostrum.Cache.GuildCache`. For ease of use, these modules\ndefine both a user-facing API to obtain objects from the configured cache, as\nwell as the developer-facing behaviour description.","ref":"state.html#implementing-your-own-caches"},{"type":"extras","title":"Internal state - State","doc":"In addition to the optional caching, nostrum also needs to keep track of\ninternal state so it functions properly. State follows the same pattern as the\npluggable caching functionality described above, but disabling state storage via\n`NoOp` as with caching is not possible.\n\nThe modules under `Nostrum.Store` are used for this functionality.\n\n\n\n","ref":"state.html#internal-state"},{"type":"extras","title":"Voice","doc":"# Voice","ref":"voice-3.html"},{"type":"extras","title":"Voice channels - Voice","doc":"Discord voice channels allow audio data to be sent to the voice servers over UDP.\nA bot is able to connect to up to one voice channel per guild. One websocket\nconnection will be opened and maintained for each voice channel the bot joins.\nThe websocket connection should reconnect automatically the same way that the \nmain Discord gateway websocket connections do. For available voice functions and\nusage see the `Nostrum.Voice` module.","ref":"voice-3.html#voice-channels"},{"type":"extras","title":"FFmpeg - Voice","doc":"Nostrum uses the powerful [ffmpeg](https://ffmpeg.org/) command line utility to\nencode any audio (or video) file for sending to Discord's voice servers.\nBy default Nostrum will look for the executable `ffmpeg` in the system path.\nIf the executable is elsewhere, the path may be configured via\n`config :nostrum, :ffmpeg, \"/path/to/ffmpeg\"`.\nThe function `Nostrum.Voice.play/4` allows sound to played via files, local or \nremote, or via raw data that gets piped to `stdin` of the `ffmpeg` process.\nWhen playing from a url, the url can be a name of a file on the filesystem or a url\nof file on a remote server - [ffmpeg supports a ton of protocols](https://www.ffmpeg.org/ffmpeg-protocols.html),\nthe most common of which are probably `http` or simply reading a file from the filesystem.\nIt is also possible to send raw opus frames, bypassing ffmpeg, if desired.","ref":"voice-3.html#ffmpeg"},{"type":"extras","title":"youtube-dl - Voice","doc":"With only `ffmpeg` installed, Nostrum supports playing audio/video files or raw, piped\ndata as discussed in the section above. Nostrum also has support for `youtube-dl`, another\npowerful command line utility for downloading audio/video from online video services.\nAlthough the name implies support for Youtube, `youtube-dl` supports downloading from\n[an immense list of sites](https://github.com/ytdl-org/youtube-dl/blob/master/docs/supportedsites.md).\nBy default Nostrum will look for the executable `youtube-dl` in the system path. If the\nexecutable is elsewhere, the path may be configured via `config :nostrum, :youtubedl, \"/path/to/youtube-dl\"`.\nWhen `Nostrum.Voice.play/4` is called with `:ytdl` for the `type` parameter, `youtube-dl` will be\nrun with options `-f bestaudio -q -o -`, which will attempt to download the audio at the given url and pipe it to `ffmpeg`.\n\n> #### Forks {: .warning}\n> The `youtube-dl` project has not been regularly maintained, and the latest release is not presently compatible with YouTube.\n> The use of the `yt-dlp` fork is recommended in its place.\n>\n> ```elixir\n> config :nostrum, :youtubedl, \"yt-dlp\"\n> ```","ref":"voice-3.html#youtube-dl"},{"type":"extras","title":"streamlink - Voice","doc":"Nostrum also has support for `streamlink`, yet another powerful command line utility \nfor downloading live streams from online video streaming services.\nBy default Nostrum will look for the executable `streamlink` in the system path. \nIf the executable is elsewhere, the path may be configured via `config :nostrum, :streamlink, \"/path/to/streamlink\"`.\nWhen `Nostrum.Voice.play/4` is called with `:stream` for the `type` parameter, `streamlink` \nwill attempt to download the live stream content and pipe it to `ffmpeg`.\nIt's recommended to use the most up-to-date version of `streamlink` to properly\nplay human-readable URLs from services such as Youtube and Twitch. Version 3.x.x\ncurrently works with both of these services. If the short, human-readable url of the streaming service\ndoesn't work with `streamlink` out of the box, you may have more luck extracting the underlying raw stream url.\nThese are typically long URLs that end in `.m3u8` or `.hls`. If you have `youtube-dl` installed,\nyou can attempt to get this URL by running the following:\n\n```elixir\n{raw_url, 0} = System.cmd(\"youtube-dl\", [\"-f\", \"best\", \"-g\", url])\nraw_url = raw_url |> String.trim()\n```","ref":"voice-3.html#streamlink"},{"type":"extras","title":"Audio Timeout - Voice","doc":"Upon invoking `Nostrum.Voice.play/4`, the player process has a large configurable initial window\n(`20_000` milliseconds by default) that it must generate audio within before timing out. This is done to allow\nample time for slow networks to download large audio/video files. This configurable timeout only applies to when\n`play` is initially invoked; once audio has begun transmitting, the timeout drops to `500` milliseconds.\nBecause the `ffmpeg` process doesn't close when its input device is `stdin`, which is the case\nwhen `type` is set to `:pipe`, `:ytdl`, or `:stream` the timeout is necessary to promptly detect end of input.\nIf the audio process times out within the initial window, the `Nostrum.Struct.Event.SpeakingUpdate`\nthat is generated will have its `timed_out` field set to `true`. It will be `false` in all other cases.\nIf your use case does not include large, slow downloads and you wish to more quickly be notified\nof timeouts or errors, you may consider setting `audio_timeout` to a lower value.\nHowever, `youtube-dl` typically takes at least 2.5 seconds to begin outputting audio data,\neven on a fast connection.\nIf your use case involves playing large files at a timestamp several hours in like this,\n`play(guild_id, url, :ytdl, start_time: \"2:37:56\")`, you may consider setting the timeout to a higher value,\nas downloading a large youtube video and having `ffmpeg` seek through several hours\nof audio may take 15-20 seconds, even with a fast network connection.","ref":"voice-3.html#audio-timeout"},{"type":"extras","title":"Audio Frames Per Burst - Voice","doc":"The value `:audio_frames_per_burst` represents the number of consecutive packets to send before resting.\nWhen using `Nostrum.Voice.play/4` to play audio, Nostrum collects a number of opus frames from the \naudio input source before sending them all to Discord as a \"burst\" of ordered frames. \nThis is done to reduce the overhead of process-sleeping and setup.\nFor reference, a single opus frame is 20 milliseconds of audio (at least for the format that Discord uses).\nBy default, the `:audio_frames_per_burst` is set to `10`, equivalent to 200 milliseconds of audio.\n\nUnder normal circumstances, there's no reason to change this value. However, if you attempt to play a very short\npiece of audio that's less than `10` frames (200ms) in length, it will time out (after the configured \n`:audio_timeout` duration has passed) as it waits to collect `10` frames to send. For those cases, configure the\nvalue to *at most* the minimum frame length of the audio you intend to play, or simply `1`. Setting the value to `1`\nmeans that each opus frame from your audio source will be taken individually and be sent in its own \"burst\" with the \nplayer process sleeping between each; you likely won't notice a difference in audio playback quality compared to the \ndefault value of `10` other than that your sub-200ms audio files will play as expected.","ref":"voice-3.html#audio-frames-per-burst"},{"type":"extras","title":"Voice Events - Voice","doc":"There are a few voice related events that bots can consume with a `Nostrum.Consumer` process:\n - `t:Nostrum.Consumer.voice_state_update/0`\n - `t:Nostrum.Consumer.voice_server_update/0`\n - `t:Nostrum.Consumer.voice_speaking_update/0`\n - `t:Nostrum.Consumer.voice_ready/0`\n - `t:Nostrum.Consumer.voice_incoming_packet/0`\n\nBoth `t:Nostrum.Consumer.voice_state_update/0` and `t:Nostrum.Consumer.voice_server_update/0` \nare sent by the shard gateway session when a bot joins a voice channel. The receipt of both of \nthese events is required for a voice gateway session to begin, and it happens automatically when \njoining a channel. The `t:Nostrum.Consumer.voice_state_update/0` event is also sent every time \nany user joins or leaves a voice channel, and `t:Nostrum.Struct.Guild.voice_states/0` is \nautomatically updated within the guild cache to reflect current state of voice channels.\n\nA use case for listening to both `t:Nostrum.Consumer.voice_state_update/0` and \n`t:Nostrum.Consumer.voice_server_update/0` events would be to outsource voice connections to \nan application outside of Nostrum. This can be done by setting the config option \n`:voice_auto_connect` to `false` and taking the session and token information \nfrom both of the events and passing them to your external voice app. \nOutside of this niche use case, another use case for listening solely to the\n`t:Nostrum.Consumer.voice_state_update/0` event would be to detect when users join or leave \nvoice channels.\n\nThe `t:Nostrum.Consumer.voice_speaking_update/0` event is generated by Nostrum for convenience. It is \nsent every time the bot starts or stops speaking/sending audio. A use case for this event is if \nyou have a queue of URLs to play, listening to the `t:Nostrum.Consumer.voice_speaking_update/0` \nwill let the bot know when the current URL has finished playing and that it should begin playing \nthe next one in the queue. The alternative approach for this use case that is not event-driven \nis to periodically call `Nostrum.Voice.playing?/1` and wait for it to return `false` as the \ntrigger to play the next URL. Note that the third element in the event is of type\n`t:Nostrum.Struct.VoiceWSState.t/0` and not `t:Nostrum.Struct.WSState.t/0`.\n\nThe `t:Nostrum.Consumer.voice_ready/0` event is generated by Nostrum for convenience. It is sent\nwhen the bot is ready to begin sending audio data upon joining a voice channel. From the moment\nthe bot joins a voice channel, Nostrum handles the multi-step handshaking process that is \nrequired before any audio packets can be sent or received. It is a common use case for bots to\nimmediately begin playing audio upon joining a voice channel. Calling `Nostrum.Voice.play/4`\ndirectly after calling `Nostrum.Voice.join_channel/4` will always return an error as several\nnetwork actions must take place before playing audio is possible. Listening for the\n`t:Nostrum.Consumer.voice_ready/0` event can be used by the bot to begin playing audio as soon \nas it is able to. The alternative approach for this use case that is not event-driven is to \nperiodically call `Nostrum.Voice.ready?/1` and wait for it to return `true` as the trigger to\nbegin playing. Another common approach is to define a `try_play` function as follows:\n```elixir\ndef try_play(guild_id, url, type, opts \\\\ []) do\n case Nostrum.Voice.play(guild_id, url, type, opts) do\n {:error, _msg} ->\n Process.sleep(100)\n try_play(guild_id, url, type, opts)\n\n _ ->\n :ok\n end\nend\n```\nNote that the third element in the event is of type `t:Nostrum.Struct.VoiceWSState.t/0` and \nnot `t:Nostrum.Struct.WSState.t/0`.\n\nThe `t:Nostrum.Consumer.voice_incoming_packet/0` event is generated by Nostrum. None will be generated\nby default. You must first be connected to a voice channel, call the `Nostrum.Voice.start_listen_async/1`\nfunction, then have another user in the same voice channel speak. If these conditions are met, an event\nwill be received for each RTP packet the bot receives; 50 packets per 1 second for each user that is\nactively speaking. These events are only useful if you intend to listen to incoming audio and are disabled\nby default. An alternative approach to listening to incoming audio that is not event driven is to call\n`Nostrum.Voice.listen/3`. This function blocks until the specified number of RTP packets is received.\n`Nostrum.Voice.listen/3` has the additional features of removing duplicate RTP packets within the set of\npackets returned per invocation and the option to return the raw RTP packet. In practice these features\nlikely won't be missed when consuming incoming voice packets asynchronously.\nNote that the third element in the event is of type\n`t:Nostrum.Struct.VoiceWSState.t/0` and not `t:Nostrum.Struct.WSState.t/0`.","ref":"voice-3.html#voice-events"},{"type":"extras","title":"Encryption Modes - Voice","doc":"Nostrum supports all of Discord's available encryption modes for voice channels.\nThe encryption mode is invisible to the user, and you will likely never need to touch it.\n\nDifferent encryption modes may have different performance characteristics depending on the\nhardware architecture your bot is running on. If you're interested, keep reading.\n\n#### Encryption Mode Configuration Options\n\nThis is a runtime configuration option. Some Discord voice servers may not support your \nconfigured encryption mode, and in these cases a fallback mode will be selected.\n\n```elixir\nconfig :nostrum, :voice_encryption_mode, :aes256_gcm # Default\n```\n\nAvailable configuration options are as follows:\n- `:xsalsa20_poly1305`\n- `:xsalsa20_poly1305_suffix`\n- `:xsalsa20_poly1305_lite`\n- `:xsalsa20_poly1305_lite_rtpsize`\n- `:aead_xchacha20_poly1305_rtpsize`\n- `:aead_aes256_gcm`\n- `:aead_aes256_gcm_rtpsize`\n- `:xchacha20_poly1305` (alias for `:aead_xchacha20_poly1305_rtpsize`)\n- `:aes256_gcm` (alias for `:aead_aes256_gcm_rtpsize`)\n\nThe first seven are Discord's available options, while the last two are shorter aliases.\n\nThe latter four of Discord's seven modes are not yet documented, but [will be soon](https://github.com/discord/discord-api-docs/pull/6801).\n\n#### Implementation Details\n\nOf the seven supported modes, three different ciphers are used. The remaining differences\nare variations in how the nonce is determined and where the encrypted portion of the RTP packet begins.\n\nErlang's `:crypto` module is leveraged as much as possible as the ciphers are NIFs.\n\n##### xsalsa20_poly1305\n\nThe entire Salsa20/XSalsa20 cipher is implemented in elixir. The poly1305 MAC function is handled by the `:crypto` module.\nAs a result, xsalsa_poly1305 modes will likely have the slowest performance.\n\n##### xchacha20_poly1305\n\nThe `:crypto` module supports the `chacha20_poly1305` AEAD cipher. The only thing implemented in elixir \nis the HChaCha20 hash function that generates a sub-key from the key and the longer nonce that XChaCha20 \nspecifies, which is then passed to the `chacha20_poly1305` cipher.\nIf your hardware doesn't have AES hardware acceleration, the `chacha` option may perform\nthe best for you.\n\n##### aes256_gcm\n\nThe `:crypto` module completely supports AES256 in GCM mode requiring no implementation in elixir. \nMany CPUs have hardware acceleration specifically for AES. For these reasons, Nostrum defaults to `aes256_gcm`.","ref":"voice-3.html#encryption-modes"},{"type":"extras","title":"Gateway Compression","doc":"# Gateway Compression\n\nNostrum supports either the `zlib-stream` or `zstd-stream` gateway compression\nmethods, as documented\n[here](https://discord.com/developers/docs/topics/gateway#encoding-and-compression)\n\nMost users are fine to leave the `gateway_compression` configuration option set\nto `:zlib` (default), but users looking for a potential reduction in payload\nsizes from the Discord gateway can optionally set `:zstd` here.","ref":"gateway_compression.html"},{"type":"extras","title":"Using `:zstd` compression - Gateway Compression","doc":"Using `:zstd` depends on the [`:ezstd`](https://hex.pm/packages/ezstd) library,\nso you will have to add this dependency to your `mix.exs` file:\n\n```elixir\n defp deps do\n [\n {:nostrum, ...},\n {:ezstd, \"~> 1.1\"} # new dependency\n ]\n end\n```\n\n\n> #### `:ezstd` NIFs {: .info}\n>\n> Some functionality of `:ezstd` depends on Erlang NIFs (Natively Implemented\n> Functions). This means that a proper compiler installation as well as other\n> build tools like `git` may be necessary at the stage where you compile your\n> dependencies.\n>\n> It may be useful to run `mix deps.compile` in any build systems to ensure that\n> your application does not need build utilities in the built application image.\n\nOnce you have this additional dependency installed in your project, set the\n`:nostrum`, `:gateway_compression` configuration option to `:zstd` and Nostrum\nshould pick up on it.\n\nYou will need to run `mix deps.get` and `mix deps.compile` to install and\ncompile the new `:ezstd` dependency.\n\n> #### Nostrum detection of `:ezstd` {: .tip}\n>\n> Since the check for `:ezstd` takes place when you compile Nostrum, you might\n> need to run `mix deps.compile --force nostrum` to ensure that Nostrum is\n> recompiled and recognises the newly installed `:ezstd` dependency.\n>\n> Not doing this may mean that your compiled Nostrum version is still using\n> dummy handlers that will error out even when `:ezstd` is installed.","ref":"gateway_compression.html#using-zstd-compression"},{"type":"extras","title":"Hot code upgrade","doc":"# Hot code upgrade\n\nFor the library users whose Discord bot can afford absolutely no downtime due to\nrestarts, nostrum ships with [`appup`\nfiles](https://www.erlang.org/doc/man/appup.html) via the\n[`castle`](https://github.com/ausimian/castle) library.\n\n\n>","ref":"hot_code_upgrade.html"},{"type":"extras","title":"Maintenance {: .info} - Hot code upgrade","doc":"> \n> The appups are maintained on a best-effort basis. While they are expected to\n> work and be present and documented as such, no guarantee can be made that they\n> will choose the most optimal path to upgrade and downgrade releases.\n> Contributions in this regard are welcome.","ref":"hot_code_upgrade.html#maintenance-info"},{"type":"extras","title":"Usage - Hot code upgrade","doc":"To make use of nostrum's hot code upgrade support, please follow the\ninstructions to install the [`castle`](https://github.com/ausimian/castle)\nlibrary in order to configure your release appropriately. Outside of shipping\nthe appup, nostrum does not provide further functionality to facilitate this.","ref":"hot_code_upgrade.html#usage"},{"type":"extras","title":"nostrum as included application - Hot code upgrade","doc":"When nostrum is run as an included application as documented in [the\nmulti-node support document](./multi_node.md), nostrum's default appup won't\nbe read on generation of the release upgrade file.\n\nPlease see the OTP documentation on [Changing Included\nApplications](https://www.erlang.org/doc/design_principles/appup_cookbook.html#changing-included-applications)\nfor information on how to deal with upgrades in this case.\n\n\n","ref":"hot_code_upgrade.html#nostrum-as-included-application"},{"type":"extras","title":"Manual Sharding","doc":"# Manual Sharding\n\nAdvanced users can use methods located in the `Nostrum.Shard.Supervisor` module\nto manually connect shards to the gateway as well as initiate manual disconnect\nand reconnects (attempting to `RESUME` sessions where possible).\n\nYou can set the `num_shards` option in your `nostrum` application config to\n`:manual` to prevent Nostrum from automatically starting shards. You should use\nthe methods in the shard supervisor such as `Nostrum.Shard.Supervisor.connect/2`\nto manually start shards if using this configuration option.","ref":"manual_sharding.html"},{"type":"extras","title":"Reconnection example - Manual Sharding","doc":"```elixir\n# On Node A\niex> Nostrum.Shard.Supervisor.connect(0, 1)\niex> resume_info = Nostrum.Shard.Supervisor.disconnect(0)\n%{shard_num: 0, ...}\n\n# On another node\niex> Nostrum.Shard.Supervisor.reconnect(resume_info)\n```\n\nDiscord will perform a best effort attempt to resume the gateway from the time\nof disconnection, relaying any missed events. Resumption is not guaranteed to\nwork, in the event it fails Nostrum will reconnect the shard from scratch,\nthough this may mean some events are missed.","ref":"manual_sharding.html#reconnection-example"},{"type":"extras","title":"Multi-node","doc":"# Multi-node\n\nAt the moment, you can run nostrum in highly available mode across multiple\nnodes via OTP's distributed application support, see below. Support for properly\ndistributing nostrum across multiple nodes and using them as one big entity is\nnot supported (yet).\n\nAs a general rule: if you are running distributed Erlang over the internet, make\nsure to secure it with [a solid VPN](https://www.wireguard.com) and / or by\n[using TLS for Erlang\ndistribution](https://www.erlang.org/doc/apps/ssl/ssl_distribution.html).","ref":"multi_node.html"},{"type":"extras","title":"High availability - Multi-node","doc":"Running using OTP's [distributed\napplications](https://www.erlang.org/doc/design_principles/distributed_applications.html)\nallows us to connect multiple nodes together and have your app and nostrum\nrescheduled on another node when things go south. Let's see how we can configure\nit. In this example, we will make use of three nodes, and all of them will be\nrun from your bot's directory. The only difference on their command line is the\n`--sname` / `--name` you specify. We'll use `--sname`s for testing here, for\nproper fault tolerance you will want to use multiple hosts with `--name`. Let's\nassume we name our nodes `joe`, `robert`, and `mike`.","ref":"multi_node.html#high-availability"},{"type":"extras","title":"Bundling nostrum with our app - Multi-node","doc":"We want to colocate nostrum with our app to allow it to move around as our\napplication is moved around. For this, utilize OTP's [included\napplications](https://www.erlang.org/doc/design_principles/included_applications.html)\nfeature to include nostrum into our supervision tree. You also need to\nexplicitly include nostrum's dependencies to ensure they are started, as the\nregular nostrum application startup won't handle it for you. This can be done by\nchanging your application definition in `mix.exs` as follows:\n\n```elixir\n def application do\n [\n mod: {MyBot.Application, []},\n included_applications: [:nostrum],\n # You can see this with `mix app.tree nostrum`\n extra_applications: [:certifi, :gun, :inets, :jason, :mime]\n # ...\n ]\n end\n```\n\nYou also need to set `runtime: false` for `:nostrum` itself in your\ndependencies, and any dependencies of your app that depend on `:nostrum`, such\nas command frameworks like `:nosedrum`:\n\n```elixir\n defp deps do\n [\n {:nostrum, \"~> 0.10\", runtime: false},\n # {:nosedrum, \"~> 0.6\", runtime: false},\n ]\n end\n```\n\nYou now need to add nostrum to your applications' children to start it as part\nof your app:\n\n```elixir\n def start(type, args) do\n children = [\n Nostrum.Application,\n # ...\n ]\n end\n```\n\nIf you want to run some logic ahead of starting nostrum, you can naturally also\nput it later into the list.\n\nYou can start your bot now, and it's going to run. If you look at your\nbot's application in `:observer`, you will see that nostrum has now become one\nwith your bot. We call that integration engineering.\n\nNow that our app bundles everything it needs with itself, this means starting\nour app will also starting nostrum, and stopping will also stop nostrum. We need\nthis for step two.","ref":"multi_node.html#bundling-nostrum-with-our-app"},{"type":"extras","title":"Setting up distribution - Multi-node","doc":"The avid reader will probably know that starting with the same `--cookie` and\n`--sname` / `--name` is only step one, the nodes need to connect to each other\nas well.\n\nTo be able to test this in interactive mode we will configure the settings in\nErlang configuration files, for releases you can use your regular\n`config/prod.exs`. We will set up the following:\n\n- Instruct OTP that our app, `:mybot` is a distributed app, and give it the\n hosts to run it on.\n\n- On startup, tell OTP it should wait for the other nodes to become available.\n\nWith the Erlang configuration files, this can be done as follows:\n\n```erl\n% mybot_joe.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [mike@HOSTNAME, robert@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n```erl\n% mybot_robert.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [joe@HOSTNAME, mike@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n```erl\n% mybot_mike.config\n[{kernel,\n [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},\n {sync_nodes_mandatory, [joe@HOSTNAME, robert@HOSTNAME]},\n {sync_nodes_timeout, 30000}]}].\n```\n\nNote the only thing that changes is the `sync_node_mandatory` setting, which\ninstructs OTP which hosts to wait for on startup. The other settings must match.\nThese options instructs OTP that our app `:mybot` is distributed and should be\nstarted at `:joe@HOSTNAME` first. If that fails, it moves to `:robert@HOSTNAME`\nor `:mike@HOSTNAME`.\n\nFor details on the options, please see the [kernel reference\nmanual](https://www.erlang.org/doc/man/kernel_app.html).","ref":"multi_node.html#setting-up-distribution"},{"type":"extras","title":"Playtest - Multi-node","doc":"In three distinct windows, run the following:\n\n1. `iex --sname joe --cookie foo --erl-config myapp_joe.config -S mix`\n2. `iex --sname robert --cookie foo --erl-config myapp_robert.config -S mix`\n3. `iex --sname mike --cookie foo --erl-config myapp_mike.config -S mix`\n\nIf you have some other application that breaks on startup now - like monitoring\nexporters that bind to specific ports, or similar things - this is when they\nwill blow up. Decide whether you want to run this on every node indeed or\ninclude it with your app as shown above.\n\nYou now have three instances of the VM running. `:joe@HOSTNAME` runs your bot\nright now. If you stop that node, one of the other two nodes will start running\nyour app. High availability complete.","ref":"multi_node.html#playtest"},{"type":"extras","title":"Being informed about takeover - Multi-node","doc":"Your application's `def start` function takes a `type` argument. In this case,\non the node that now runs your application, that `type` was `{:failover,\n:joe@HOSTNAME}`. If you start `:joe@HOSTNAME` back up, `:joe@HOSTNAME` is\nstarted with `{:takeover, source_node}`, where `source_node` is the node that it\ntook over from.","ref":"multi_node.html#being-informed-about-takeover"},{"type":"extras","title":"Manual takeover - Multi-node","doc":"If you want to move your app around manually, you can use\n`:application.takeover`, for example `:application.takeover(:mybot,\n:permanent)`.","ref":"multi_node.html#manual-takeover"},{"type":"extras","title":"Final thoughts - Multi-node","doc":"At present, nostrum can not perform any state synchronization between nodes, it\nis an effective restart from scratch. For most bots, this type of failover will\nbe sufficient.\n\n\n","ref":"multi_node.html#final-thoughts"},{"type":"extras","title":"Pluggable caching","doc":"# Pluggable caching\n\nThe default ETS-based caches supplied by nostrum should work for most of your\nneeds, but all of the caches can be exchanged for your own implementations. For\nthis, implement the behaviours exported by the cache modules under\n`Nostrum.Cache`.\n\n>","ref":"pluggable_caching.html"},{"type":"extras","title":"Exception {: .info} - Pluggable caching","doc":">\n> The exception to the above is the `Nostrum.Cache.MessageCache`, which does not\n> include an ETS-based implementation, and defaults to a NoOp cache. This is\n> an intentional design decision because caching messages consumes a\n> lot more memory than other objects, and is often not needed by most users.\n\nUse the `[:nostrum, :caches]` configuration for configuring which cache\nimplementation you want to use. This can only be set at dependency compilation\ntime. A common situation is that you don't want to cache presences in your bot,\nmost likely you don't care about user's status, so you can disable it altogether\nby using the `NoOp` presence cache:\n\n```elixir\nconfig :nostrum,\n caches: %{\n presences: Nostrum.Cache.PresenceCache.NoOp\n }\n```\n\nIn addition to regular caches that associate Discord snowflakes with the proper\n\"full\" object, nostrum also maintains junction table-like mappings that allow\nyou to find the matching object from one cache in another. One example for this\nis `Nostrum.Cache.ChannelGuildMapping`.\n\nNostrum also ships with Mnesia-based caches. **These are only compiled in when\nmnesia is available**: they may not be available on Nerves or when Mnesia was\nnot installed with OTP.","ref":"pluggable_caching.html#exception-info"},{"type":"extras","title":"Implementations - Pluggable caching","doc":"","ref":"pluggable_caching.html#implementations"},{"type":"extras","title":"ETS caching - Pluggable caching","doc":"Caching based on `:ets` is used by default. No configuration is required. Fast,\nlight on memory, but does not support any form of distribution or secondary\nindexing: queries such as fetching all guild members for a guild by its ID will\nperform a full table scan. For smaller bots, this is perfectly acceptable.","ref":"pluggable_caching.html#ets-caching"},{"type":"extras","title":"Mnesia caching - Pluggable caching","doc":"Mnesia-based caching is mainly suggested for larger bots that require\nfeatures such as cache distribution, fragmentation, secondary indexing and more.\n\nThe caches will attempt to create their tables automatically at startup:\ntherefore, Mnesia must be started ahead of nostrum. Caches expose a function\n`table/0` that can be called to retrieve the table name used by the cache and\nperform schema operations on it, such as adding replicas or fragmenting them.\n\n\n\nAccess to Mnesia is presently done in `sync_transaction` mode for best\nconsistency. If needed, a compile-time configuration option for the cache to\nswitch this can be added.\n\nMnesia-based caching assumes the user is familar with usage and\nmaintenance of Mnesia: the [Mnesia User's\nGuide](https://www.erlang.org/doc/apps/mnesia/mnesia_chap1.html) is a good\nstarting point.","ref":"pluggable_caching.html#mnesia-caching"},{"type":"extras","title":"NoOp caching - Pluggable caching","doc":"The NoOp cache adapters are supplied for the case where you do not want to cache\nspecific data from Discord at all.","ref":"pluggable_caching.html#noop-caching"},{"type":"extras","title":"Cache invalidation - Pluggable caching","doc":"Nostrum does not invalidate most caches in any special way: it will maintain it in\nresponse to gateway events (for instance by deleting a guild and its members\nupon leaving it), but won't regularly prune caches or associate expiration times\nwith entries. For volatile (RAM-based) caches this is perfectly fine, however,\nwhen implementing your own cache backend that persists to disk in some way, you\nneed to take care of this yourself.\n\nThe exception to this is the `Nostrum.Cache.MessageCache.Mnesia` module, which has a\ndefault size limit of 10,000 and will automatically remove the 100 oldest\nmessages when this limit is reached as well as delete all cached messages for a\nchannel when the channel is deleted.","ref":"pluggable_caching.html#cache-invalidation"},{"type":"extras","title":"Cache performance - Pluggable caching","doc":"nostrum strives to provide the most performant caches on the Discord bot caching\nmarket. If you run into performance issues with caches that you feel are not\nadequately documented as such, please feel free to open an issue.\n\nBenchmarks for caches can be found in the [`benchmarks/`\ndirectory](https://github.com/Kraigie/nostrum/tree/master/benchmarks) of the\nsource code tree. If you want to get a feeling for how the caches perform or\nimplement optimizations, check them out.","ref":"pluggable_caching.html#cache-performance"},{"type":"extras","title":"API Usage","doc":"# API Usage\n\nThis cheat sheet covers basic use of the Discord API through the `Nostrum.Api` module.","ref":"api-1.html"},{"type":"extras","title":"Messages - API Usage","doc":"{: .col-2}","ref":"api-1.html#messages"},{"type":"extras","title":"Sending a message - API Usage","doc":"```elixir\nutc_now = DateTime.utc_now\natom_count = :erlang.system_info(:atom_count)\n\ncontent = \"\"\"\nUTC time is: #{DateTime.to_iso8601(utc_now)}\nAtom table size is: #{atom_count}\n\"\"\"\n\nNostrum.Api.create_message(msg.channel_id, content)\n```","ref":"api-1.html#sending-a-message"},{"type":"extras","title":"Sending a message with an embed - API Usage","doc":"```elixir\nimport Nostrum.Struct.Embed\n\nembed =\n %Nostrum.Struct.Embed{}\n |> put_title(\"Craig's Cats\")\n |> put_description(\"nostrum\")\n |> put_url(\"https://google.com/\")\n |> put_timestamp(\"2016-05-05T21:04:13.203Z\")\n |> put_color(431_948)\n |> put_field(\"Field 1\", \"Test\")\n # set inline attribute to true\n |> put_field(\"Field 2\", \"More test\", true)\n\nNostrum.Api.create_message(msg.channel_id, embeds: [embed])\n```\n\nYou can look at the documentation in `m:Nostrum.Struct.Embed#module-using-structs` for more advanced usage.","ref":"api-1.html#sending-a-message-with-an-embed"},{"type":"extras","title":"Upload an attachment - API Usage","doc":"```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n files: [\n # file from filesystem\n \"/path/to/file.txt\",\n # file from memory\n %{body: \"test file\", name: \"example.txt\"}\n ]\n)\n```","ref":"api-1.html#upload-an-attachment"},{"type":"extras","title":"Reply to a message - API Usage","doc":"With a mention:\n\n```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello!\",\n message_reference: %{message_id: msg.id}\n)\n```\n\nWithout a mention:\n\n```elixir\nNostrum.Api.create_message(\n msg.channel_id,\n content: \"Hello!\",\n message_reference: %{message_id: msg.id},\n allowed_mentions: :none\n)\n```","ref":"api-1.html#reply-to-a-message"},{"type":"extras","title":"Send a poll - API Usage","doc":"```elixir\npoll = Poll.create_poll(\n \"Do you enjoy pineapple on pizza?\",\n duration: 2,\n allow_multiselect: false\n)\n|> Poll.put_answer(\"Yes!\", default_emoji: \"\\u2705\")\n|> Poll.put_answer(\"No!\", default_emoji: \"\\u274C\")\n\nApi.create_message(channel_id, poll: poll)\n```","ref":"api-1.html#send-a-poll"},{"type":"extras","title":"React to a message - API Usage","doc":"Using a default emoji (unicode representation):\n```elixir\nNostrum.Api.create_reaction(\n msg.channel_id,\n msg.id,\n \"👾\"\n)\n```\n\nUsing a custom Discord emoji:\n```elixir\nemoji = %Nostrum.Struct.Emoji{\n name: \"emojiname\",\n id: 1228698654022434866\n}\n\nNostrum.Api.create_reaction(msg.channel_id, msg.id, emoji)\n```","ref":"api-1.html#react-to-a-message"},{"type":"extras","title":"Miscellaneous - API Usage","doc":"{: .col-2}","ref":"api-1.html#miscellaneous"},{"type":"extras","title":"Update the bot status - API Usage","doc":"```elixir\nNostrum.Api.update_status(\n :dnd,\n \"craigs cats\",\n 3 # Watching status\n)\n```\nYou can also update a single shard with `Nostrum.Api.update_shard_status/5`.","ref":"api-1.html#update-the-bot-status"},{"type":"extras","title":"Create a guild emoji - API Usage","doc":"```elixir\nimage = \"data:image/png;base64,...\"\n\nNostrum.Api.create_guild_emoji(\n msg.guild_id,\n name: \"nostrum\",\n image: image\n)\n```","ref":"api-1.html#create-a-guild-emoji"},{"type":"extras","title":"Voice Usage","doc":"# Voice Usage\n\nThis cheat sheet covers basic use of the Discord Voice API through the `Nostrum.Voice` module.","ref":"voice-2.html"},{"type":"extras","title":"Playing Audio - Voice Usage","doc":"{: .col-2}","ref":"voice-2.html#playing-audio"},{"type":"extras","title":"Playing immediately with a `try_play` function - Voice Usage","doc":"```elixir\ndef try_play(guild_id, url, type, opts \\\\ []) do\n case Voice.play(guild_id, url, type, opts) do\n {:error, _msg} ->\n # Wait for handshaking to complete\n Process.sleep(100)\n try_play(guild_id, url, type, opts)\n\n _ ->\n :ok\n end\nend\n```\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\niex> try_play(guild_id, \"./song.mp3\", :url)\n```","ref":"voice-2.html#playing-immediately-with-a-try_play-function"},{"type":"extras","title":"Playing immediately using `Nostrum.Voice.ready?/1` - Voice Usage","doc":"```elixir\ndef play_when_ready(guild_id, url, type, opts \\\\ []) do\n if Voice.ready?(guild_id) do\n Voice.play(guild_id, url, type, opts)\n else\n # Wait for handshaking to complete\n Process.sleep(25)\n play_when_ready(guild_id, url, type, opts)\n end\nend\n```\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\niex> play_when_ready(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl)\n```","ref":"voice-2.html#playing-immediately-using-nostrum-voice-ready-1"},{"type":"extras","title":"Playing immediately by using events - Voice Usage","doc":"```elixir\nalias Nostrum.Struct.Event.VoiceReady\nalias Nostrum.Voice\n\ndef handle_event({:VOICE_READY, %VoiceReady{guild_id: guild_id} = _event, _v_ws_state}) do\n Voice.play(guild_id, \"~/loud_noise.mp3\", :url, volume: 10)\nend\n```\n\nOnce the voice handshake has completed, audio will begin playing\nwithout the need for polling functions like `try_play/4` or `play_when_ready/4`\nas shown in the other examples\n\n```elixir\niex> Voice.join_channel(guild_id, channel_id)\n# Playback will start automatically when ready\n```","ref":"voice-2.html#playing-immediately-by-using-events"},{"type":"extras","title":"Audio FFmpeg options - Voice Usage","doc":"{: .col-2}","ref":"voice-2.html#audio-ffmpeg-options"},{"type":"extras","title":"Volume - Voice Usage","doc":"#### Half volume\n\n```elixir\nVoice.play(guild_id, \"~/final_mix.wav\", :url, \n volume: 0.5\n)\n```\n\n#### Extreme clipping\n\n```elixir\nVoice.play(guild_id, \"~/boost_this.m4a\", :url, \n volume: 100\n)\n```\n\n#### Normal volume with inverted phase\n\n```elixir\nVoice.play(guild_id, \"~/music.mp3\", :url, \n volume: -1.0\n)\n```","ref":"voice-2.html#volume"},{"type":"extras","title":"Start position and duration - Voice Usage","doc":"Start at 37.8 seconds\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl, \n start_pos: \"0:37.8\"\n)\n```\n\nPlay the first at 15.3 seconds from the beginning\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/b4RJ-QGOtw4\", :ytdl, \n duration: \"15.3\"\n)\n```\n\nPlay for 80 seconds (equivalently 1:20) starting from 90 seconds (equivalently 1:30) in\n\n```elixir\nVoice.play(guild_id, \"~/music.mp3\", :url, \n start_pos: \"90\", \n duration: \"80\"\n)\n```","ref":"voice-2.html#start-position-and-duration"},{"type":"extras","title":"Advanced audio filtering - Voice Usage","doc":"#### Cutoff filters\n\nLow-pass filter at 1200 Hz, high-pass filter at 300 Hz\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n filter: \"lowpass=f=1200\",\n filter: \"highpass=f=300\"\n)\n```\n\n#### Sample rate\n\nPlay at half tempo and pitch (assumes a 48kHz sample rate)\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n filter: \"asetrate=48000*0.5\"\n)\n```\n\nPlay at 30% higher tempo and pitch. Realtime must be set to `false` for ffmpeg to keep up with faster-than-normal playback.\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/0ngcL_5ekXo\", :ytdl,\n realtime: false,\n filter: \"asetrate=48000*1.3\"\n)\n```\n\n#### Heavily distorted and effected lo-fi FX chain\n\n```elixir\nVoice.play(guild_id, \"https://youtu.be/Hd_giv-wcJU\", :ytdl,\n volume: 3,\n start_pos: \"0:55\",\n filter: \"asetrate=48000*0.73\",\n filter: \"vibrato=d=0.05:f=698.46\",\n filter: \"vibrato=f=1:d=0.8\",\n filter: \"lowpass=f=1200\",\n filter: \"aphaser=in_gain=0.4:out_gain=0.5:delay=3.0:decay=0.3:speed=0.3:type=t\"\n)\n```","ref":"voice-2.html#advanced-audio-filtering"}],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,50,46,49]}} \ No newline at end of file diff --git a/dist/sidebar_items-E9C8C345.js b/dist/sidebar_items-D16B999F.js similarity index 66% rename from dist/sidebar_items-E9C8C345.js rename to dist/sidebar_items-D16B999F.js index fb579f920..8e6381a10 100644 --- a/dist/sidebar_items-E9C8C345.js +++ b/dist/sidebar_items-D16B999F.js @@ -1 +1 @@ -sidebarNodes={"modules":[{"id":"Nostrum.Api","deprecated":false,"group":"Api","title":"Nostrum.Api","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allowed_mention/0","deprecated":false,"title":"allowed_mention()","anchor":"t:allowed_mention/0"},{"id":"allowed_mentions/0","deprecated":false,"title":"allowed_mentions()","anchor":"t:allowed_mentions/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"error/0","deprecated":false,"title":"error()","anchor":"t:error/0"},{"id":"limit/0","deprecated":false,"title":"limit()","anchor":"t:limit/0"},{"id":"locator/0","deprecated":false,"title":"locator()","anchor":"t:locator/0"},{"id":"matrix/0","deprecated":false,"title":"matrix()","anchor":"t:matrix/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"t:status/0"},{"id":"thread_with_message_params/0","deprecated":false,"title":"thread_with_message_params()","anchor":"t:thread_with_message_params/0"},{"id":"thread_without_message_params/0","deprecated":false,"title":"thread_without_message_params()","anchor":"t:thread_without_message_params/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_guild_member/3","deprecated":false,"title":"add_guild_member(guild_id, user_id, options)","anchor":"add_guild_member/3"},{"id":"add_guild_member!/3","deprecated":false,"title":"add_guild_member!(guild_id, user_id, options)","anchor":"add_guild_member!/3"},{"id":"add_guild_member_role/4","deprecated":false,"title":"add_guild_member_role(guild_id, user_id, role_id, reason \\\\ nil)","anchor":"add_guild_member_role/4"},{"id":"add_pinned_channel_message/2","deprecated":false,"title":"add_pinned_channel_message(channel_id, message_id)","anchor":"add_pinned_channel_message/2"},{"id":"add_pinned_channel_message!/2","deprecated":false,"title":"add_pinned_channel_message!(channel_id, message_id)","anchor":"add_pinned_channel_message!/2"},{"id":"add_thread_member/2","deprecated":false,"title":"add_thread_member(thread_id, user_id)","anchor":"add_thread_member/2"},{"id":"batch_edit_application_command_permissions/3","deprecated":false,"title":"batch_edit_application_command_permissions(application_id \\\\ Me.get().id, guild_id, permissions)","anchor":"batch_edit_application_command_permissions/3"},{"id":"begin_guild_prune/3","deprecated":false,"title":"begin_guild_prune(guild_id, days, reason \\\\ nil)","anchor":"begin_guild_prune/3"},{"id":"begin_guild_prune!/3","deprecated":false,"title":"begin_guild_prune!(guild_id, days, reason)","anchor":"begin_guild_prune!/3"},{"id":"bulk_delete_messages/3","deprecated":false,"title":"bulk_delete_messages(channel_id, messages, filter \\\\ true)","anchor":"bulk_delete_messages/3"},{"id":"bulk_delete_messages!/3","deprecated":false,"title":"bulk_delete_messages!(channel_id, messages, filter \\\\ true)","anchor":"bulk_delete_messages!/3"},{"id":"bulk_overwrite_global_application_commands/2","deprecated":false,"title":"bulk_overwrite_global_application_commands(application_id \\\\ Me.get().id, commands)","anchor":"bulk_overwrite_global_application_commands/2"},{"id":"bulk_overwrite_guild_application_commands/3","deprecated":false,"title":"bulk_overwrite_guild_application_commands(application_id \\\\ Me.get().id, guild_id, commands)","anchor":"bulk_overwrite_guild_application_commands/3"},{"id":"create_channel_invite/3","deprecated":false,"title":"create_channel_invite(channel_id, options \\\\ [], reason \\\\ nil)","anchor":"create_channel_invite/3"},{"id":"create_channel_invite!/3","deprecated":false,"title":"create_channel_invite!(channel_id, options \\\\ [], reason \\\\ nil)","anchor":"create_channel_invite!/3"},{"id":"create_dm/1","deprecated":false,"title":"create_dm(user_id)","anchor":"create_dm/1"},{"id":"create_dm!/1","deprecated":false,"title":"create_dm!(user_id)","anchor":"create_dm!/1"},{"id":"create_followup_message/3","deprecated":false,"title":"create_followup_message(application_id \\\\ Me.get().id, token, webhook_payload)","anchor":"create_followup_message/3"},{"id":"create_followup_message!/3","deprecated":false,"title":"create_followup_message!(application_id \\\\ Me.get().id, token, webhook_payload)","anchor":"create_followup_message!/3"},{"id":"create_global_application_command/2","deprecated":false,"title":"create_global_application_command(application_id \\\\ Me.get().id, command)","anchor":"create_global_application_command/2"},{"id":"create_group_dm/2","deprecated":false,"title":"create_group_dm(access_tokens, nicks)","anchor":"create_group_dm/2"},{"id":"create_group_dm!/2","deprecated":false,"title":"create_group_dm!(access_tokens, nicks)","anchor":"create_group_dm!/2"},{"id":"create_guild_application_command/3","deprecated":false,"title":"create_guild_application_command(application_id \\\\ Me.get().id, guild_id, command)","anchor":"create_guild_application_command/3"},{"id":"create_guild_auto_moderation_rule/2","deprecated":false,"title":"create_guild_auto_moderation_rule(guild_id, options)","anchor":"create_guild_auto_moderation_rule/2"},{"id":"create_guild_ban/4","deprecated":false,"title":"create_guild_ban(guild_id, user_id, days_to_delete, reason \\\\ nil)","anchor":"create_guild_ban/4"},{"id":"create_guild_channel/2","deprecated":false,"title":"create_guild_channel(guild_id, options)","anchor":"create_guild_channel/2"},{"id":"create_guild_channel!/2","deprecated":false,"title":"create_guild_channel!(guild_id, options)","anchor":"create_guild_channel!/2"},{"id":"create_guild_emoji/3","deprecated":false,"title":"create_guild_emoji(guild_id, options, reason \\\\ nil)","anchor":"create_guild_emoji/3"},{"id":"create_guild_emoji!/3","deprecated":false,"title":"create_guild_emoji!(guild_id, params, reason \\\\ nil)","anchor":"create_guild_emoji!/3"},{"id":"create_guild_integrations/2","deprecated":false,"title":"create_guild_integrations(guild_id, options)","anchor":"create_guild_integrations/2"},{"id":"create_guild_role/3","deprecated":false,"title":"create_guild_role(guild_id, options, reason \\\\ nil)","anchor":"create_guild_role/3"},{"id":"create_guild_role!/3","deprecated":false,"title":"create_guild_role!(guild_id, options, reason \\\\ nil)","anchor":"create_guild_role!/3"},{"id":"create_guild_scheduled_event/3","deprecated":false,"title":"create_guild_scheduled_event(guild_id, reason \\\\ nil, options)","anchor":"create_guild_scheduled_event/3"},{"id":"create_guild_sticker/6","deprecated":false,"title":"create_guild_sticker(guild_id, name, description, tags, file, reason \\\\ nil)","anchor":"create_guild_sticker/6"},{"id":"create_interaction_response/2","deprecated":false,"title":"create_interaction_response(interaction, response)","anchor":"create_interaction_response/2"},{"id":"create_interaction_response/3","deprecated":false,"title":"create_interaction_response(id, token, response)","anchor":"create_interaction_response/3"},{"id":"create_interaction_response!/2","deprecated":false,"title":"create_interaction_response!(interaction, response)","anchor":"create_interaction_response!/2"},{"id":"create_interaction_response!/3","deprecated":false,"title":"create_interaction_response!(id, token, response)","anchor":"create_interaction_response!/3"},{"id":"create_message/2","deprecated":false,"title":"create_message(channel_id, options)","anchor":"create_message/2"},{"id":"create_message!/2","deprecated":false,"title":"create_message!(channel_id, options)","anchor":"create_message!/2"},{"id":"create_reaction/3","deprecated":false,"title":"create_reaction(channel_id, message_id, emoji)","anchor":"create_reaction/3"},{"id":"create_reaction!/3","deprecated":false,"title":"create_reaction!(channel_id, message_id, emoji)","anchor":"create_reaction!/3"},{"id":"create_webhook/3","deprecated":false,"title":"create_webhook(channel_id, args, reason \\\\ nil)","anchor":"create_webhook/3"},{"id":"delete_all_reactions/2","deprecated":false,"title":"delete_all_reactions(channel_id, message_id)","anchor":"delete_all_reactions/2"},{"id":"delete_all_reactions!/2","deprecated":false,"title":"delete_all_reactions!(channel_id, message_id)","anchor":"delete_all_reactions!/2"},{"id":"delete_channel/2","deprecated":false,"title":"delete_channel(channel_id, reason \\\\ nil)","anchor":"delete_channel/2"},{"id":"delete_channel!/2","deprecated":false,"title":"delete_channel!(channel_id, reason \\\\ nil)","anchor":"delete_channel!/2"},{"id":"delete_channel_permissions/3","deprecated":false,"title":"delete_channel_permissions(channel_id, overwrite_id, reason \\\\ nil)","anchor":"delete_channel_permissions/3"},{"id":"delete_global_application_command/2","deprecated":false,"title":"delete_global_application_command(application_id \\\\ Me.get().id, command_id)","anchor":"delete_global_application_command/2"},{"id":"delete_guild/1","deprecated":false,"title":"delete_guild(guild_id)","anchor":"delete_guild/1"},{"id":"delete_guild!/1","deprecated":false,"title":"delete_guild!(guild_id)","anchor":"delete_guild!/1"},{"id":"delete_guild_application_command/3","deprecated":false,"title":"delete_guild_application_command(application_id \\\\ Me.get().id, guild_id, command_id)","anchor":"delete_guild_application_command/3"},{"id":"delete_guild_auto_moderation_rule/2","deprecated":false,"title":"delete_guild_auto_moderation_rule(guild_id, rule_id)","anchor":"delete_guild_auto_moderation_rule/2"},{"id":"delete_guild_emoji/3","deprecated":false,"title":"delete_guild_emoji(guild_id, emoji_id, reason \\\\ nil)","anchor":"delete_guild_emoji/3"},{"id":"delete_guild_emoji!/3","deprecated":false,"title":"delete_guild_emoji!(guild_id, emoji_id, reason \\\\ nil)","anchor":"delete_guild_emoji!/3"},{"id":"delete_guild_integrations/2","deprecated":false,"title":"delete_guild_integrations(guild_id, integration_id)","anchor":"delete_guild_integrations/2"},{"id":"delete_guild_role/3","deprecated":false,"title":"delete_guild_role(guild_id, role_id, reason \\\\ nil)","anchor":"delete_guild_role/3"},{"id":"delete_guild_role!/3","deprecated":false,"title":"delete_guild_role!(guild_id, role_id, reason \\\\ nil)","anchor":"delete_guild_role!/3"},{"id":"delete_guild_scheduled_event/2","deprecated":false,"title":"delete_guild_scheduled_event(guild_id, event_id)","anchor":"delete_guild_scheduled_event/2"},{"id":"delete_guild_sticker/2","deprecated":false,"title":"delete_guild_sticker(guild_id, sticker_id)","anchor":"delete_guild_sticker/2"},{"id":"delete_interaction_followup_message/3","deprecated":false,"title":"delete_interaction_followup_message(application_id \\\\ Me.get().id, token, message_id)","anchor":"delete_interaction_followup_message/3"},{"id":"delete_interaction_followup_message!/3","deprecated":false,"title":"delete_interaction_followup_message!(application_id \\\\ Me.get().id, token, message_id)","anchor":"delete_interaction_followup_message!/3"},{"id":"delete_interaction_response/1","deprecated":false,"title":"delete_interaction_response(interaction)","anchor":"delete_interaction_response/1"},{"id":"delete_interaction_response/2","deprecated":false,"title":"delete_interaction_response(id \\\\ Me.get().id, token)","anchor":"delete_interaction_response/2"},{"id":"delete_interaction_response!/1","deprecated":false,"title":"delete_interaction_response!(interaction)","anchor":"delete_interaction_response!/1"},{"id":"delete_interaction_response!/2","deprecated":false,"title":"delete_interaction_response!(id \\\\ Me.get().id, token)","anchor":"delete_interaction_response!/2"},{"id":"delete_invite/1","deprecated":false,"title":"delete_invite(invite_code)","anchor":"delete_invite/1"},{"id":"delete_invite!/1","deprecated":false,"title":"delete_invite!(invite_code)","anchor":"delete_invite!/1"},{"id":"delete_message/1","deprecated":false,"title":"delete_message(message)","anchor":"delete_message/1"},{"id":"delete_message/2","deprecated":false,"title":"delete_message(channel_id, message_id)","anchor":"delete_message/2"},{"id":"delete_message!/1","deprecated":false,"title":"delete_message!(message)","anchor":"delete_message!/1"},{"id":"delete_message!/2","deprecated":false,"title":"delete_message!(channel_id, message_id)","anchor":"delete_message!/2"},{"id":"delete_own_reaction/3","deprecated":false,"title":"delete_own_reaction(channel_id, message_id, emoji)","anchor":"delete_own_reaction/3"},{"id":"delete_own_reaction!/3","deprecated":false,"title":"delete_own_reaction!(channel_id, message_id, emoji)","anchor":"delete_own_reaction!/3"},{"id":"delete_pinned_channel_message/2","deprecated":false,"title":"delete_pinned_channel_message(channel_id, message_id)","anchor":"delete_pinned_channel_message/2"},{"id":"delete_pinned_channel_message!/2","deprecated":false,"title":"delete_pinned_channel_message!(channel_id, message_id)","anchor":"delete_pinned_channel_message!/2"},{"id":"delete_reaction/3","deprecated":false,"title":"delete_reaction(channel_id, message_id, emoji)","anchor":"delete_reaction/3"},{"id":"delete_reaction!/3","deprecated":false,"title":"delete_reaction!(channel_id, message_id, emoji)","anchor":"delete_reaction!/3"},{"id":"delete_user_reaction/4","deprecated":false,"title":"delete_user_reaction(channel_id, message_id, emoji, user_id)","anchor":"delete_user_reaction/4"},{"id":"delete_user_reaction!/4","deprecated":false,"title":"delete_user_reaction!(channel_id, message_id, emoji, user_id)","anchor":"delete_user_reaction!/4"},{"id":"delete_webhook/2","deprecated":false,"title":"delete_webhook(webhook_id, reason \\\\ nil)","anchor":"delete_webhook/2"},{"id":"edit_application_command_permissions/4","deprecated":false,"title":"edit_application_command_permissions(application_id \\\\ Me.get().id, guild_id, command_id, permissions)","anchor":"edit_application_command_permissions/4"},{"id":"edit_channel_permissions/4","deprecated":false,"title":"edit_channel_permissions(channel_id, overwrite_id, permission_info, reason \\\\ nil)","anchor":"edit_channel_permissions/4"},{"id":"edit_channel_permissions!/4","deprecated":false,"title":"edit_channel_permissions!(channel_id, overwrite_id, permission_info, reason \\\\ nil)","anchor":"edit_channel_permissions!/4"},{"id":"edit_global_application_command/3","deprecated":false,"title":"edit_global_application_command(application_id \\\\ Me.get().id, command_id, command)","anchor":"edit_global_application_command/3"},{"id":"edit_guild_application_command/4","deprecated":false,"title":"edit_guild_application_command(application_id \\\\ Me.get().id, guild_id, command_id, command)","anchor":"edit_guild_application_command/4"},{"id":"edit_interaction_response/2","deprecated":false,"title":"edit_interaction_response(interaction, response)","anchor":"edit_interaction_response/2"},{"id":"edit_interaction_response/3","deprecated":false,"title":"edit_interaction_response(id \\\\ Me.get().id, token, response)","anchor":"edit_interaction_response/3"},{"id":"edit_interaction_response!/2","deprecated":false,"title":"edit_interaction_response!(interaction, response)","anchor":"edit_interaction_response!/2"},{"id":"edit_interaction_response!/3","deprecated":false,"title":"edit_interaction_response!(id \\\\ Me.get().id, token, response)","anchor":"edit_interaction_response!/3"},{"id":"edit_message/2","deprecated":false,"title":"edit_message(message, options)","anchor":"edit_message/2"},{"id":"edit_message/3","deprecated":false,"title":"edit_message(channel_id, message_id, options)","anchor":"edit_message/3"},{"id":"edit_message!/2","deprecated":false,"title":"edit_message!(message, options)","anchor":"edit_message!/2"},{"id":"edit_message!/3","deprecated":false,"title":"edit_message!(channel_id, message_id, options)","anchor":"edit_message!/3"},{"id":"edit_webhook_message/4","deprecated":false,"title":"edit_webhook_message(webhook_id, webhook_token, message_id, args)","anchor":"edit_webhook_message/4"},{"id":"execute_git_webhook/3","deprecated":false,"title":"execute_git_webhook(webhook_id, webhook_token, wait \\\\ false)","anchor":"execute_git_webhook/3"},{"id":"execute_slack_webhook/3","deprecated":false,"title":"execute_slack_webhook(webhook_id, webhook_token, wait \\\\ false)","anchor":"execute_slack_webhook/3"},{"id":"execute_webhook/4","deprecated":false,"title":"execute_webhook(webhook_id, webhook_token, args, wait \\\\ false)","anchor":"execute_webhook/4"},{"id":"expire_poll/2","deprecated":false,"title":"expire_poll(channel_id, message_id)","anchor":"expire_poll/2"},{"id":"expire_poll!/2","deprecated":false,"title":"expire_poll!(channel_id, message_id)","anchor":"expire_poll!/2"},{"id":"get_application_command_permissions/3","deprecated":false,"title":"get_application_command_permissions(application_id \\\\ Me.get().id, guild_id, command_id)","anchor":"get_application_command_permissions/3"},{"id":"get_application_information/0","deprecated":false,"title":"get_application_information()","anchor":"get_application_information/0"},{"id":"get_channel/1","deprecated":false,"title":"get_channel(channel_id)","anchor":"get_channel/1"},{"id":"get_channel!/1","deprecated":false,"title":"get_channel!(channel_id)","anchor":"get_channel!/1"},{"id":"get_channel_invites/1","deprecated":false,"title":"get_channel_invites(channel_id)","anchor":"get_channel_invites/1"},{"id":"get_channel_invites!/1","deprecated":false,"title":"get_channel_invites!(channel_id)","anchor":"get_channel_invites!/1"},{"id":"get_channel_message/2","deprecated":false,"title":"get_channel_message(channel_id, message_id)","anchor":"get_channel_message/2"},{"id":"get_channel_message!/2","deprecated":false,"title":"get_channel_message!(channel_id, message_id)","anchor":"get_channel_message!/2"},{"id":"get_channel_messages/3","deprecated":false,"title":"get_channel_messages(channel_id, limit, locator \\\\ {})","anchor":"get_channel_messages/3"},{"id":"get_channel_messages!/3","deprecated":false,"title":"get_channel_messages!(channel_id, limit, locator \\\\ {})","anchor":"get_channel_messages!/3"},{"id":"get_channel_webhooks/1","deprecated":false,"title":"get_channel_webhooks(channel_id)","anchor":"get_channel_webhooks/1"},{"id":"get_current_user/0","deprecated":false,"title":"get_current_user()","anchor":"get_current_user/0"},{"id":"get_current_user!/0","deprecated":false,"title":"get_current_user!()","anchor":"get_current_user!/0"},{"id":"get_current_user_guilds/1","deprecated":false,"title":"get_current_user_guilds(options \\\\ [])","anchor":"get_current_user_guilds/1"},{"id":"get_current_user_guilds!/1","deprecated":false,"title":"get_current_user_guilds!(options \\\\ [])","anchor":"get_current_user_guilds!/1"},{"id":"get_global_application_commands/1","deprecated":false,"title":"get_global_application_commands(application_id \\\\ Me.get().id)","anchor":"get_global_application_commands/1"},{"id":"get_guild/1","deprecated":false,"title":"get_guild(guild_id)","anchor":"get_guild/1"},{"id":"get_guild!/1","deprecated":false,"title":"get_guild!(guild_id)","anchor":"get_guild!/1"},{"id":"get_guild_application_command_permissions/2","deprecated":false,"title":"get_guild_application_command_permissions(application_id \\\\ Me.get().id, guild_id)","anchor":"get_guild_application_command_permissions/2"},{"id":"get_guild_application_commands/2","deprecated":false,"title":"get_guild_application_commands(application_id \\\\ Me.get().id, guild_id)","anchor":"get_guild_application_commands/2"},{"id":"get_guild_audit_log/2","deprecated":false,"title":"get_guild_audit_log(guild_id, options \\\\ [])","anchor":"get_guild_audit_log/2"},{"id":"get_guild_auto_moderation_rule/2","deprecated":false,"title":"get_guild_auto_moderation_rule(guild_id, rule_id)","anchor":"get_guild_auto_moderation_rule/2"},{"id":"get_guild_auto_moderation_rules/1","deprecated":false,"title":"get_guild_auto_moderation_rules(guild_id)","anchor":"get_guild_auto_moderation_rules/1"},{"id":"get_guild_ban/2","deprecated":false,"title":"get_guild_ban(guild_id, user_id)","anchor":"get_guild_ban/2"},{"id":"get_guild_bans/1","deprecated":false,"title":"get_guild_bans(guild_id)","anchor":"get_guild_bans/1"},{"id":"get_guild_channels/1","deprecated":false,"title":"get_guild_channels(guild_id)","anchor":"get_guild_channels/1"},{"id":"get_guild_channels!/1","deprecated":false,"title":"get_guild_channels!(guild_id)","anchor":"get_guild_channels!/1"},{"id":"get_guild_emoji/2","deprecated":false,"title":"get_guild_emoji(guild_id, emoji_id)","anchor":"get_guild_emoji/2"},{"id":"get_guild_emoji!/2","deprecated":false,"title":"get_guild_emoji!(guild_id, emoji_id)","anchor":"get_guild_emoji!/2"},{"id":"get_guild_integrations/1","deprecated":false,"title":"get_guild_integrations(guild_id)","anchor":"get_guild_integrations/1"},{"id":"get_guild_invites/1","deprecated":false,"title":"get_guild_invites(guild_id)","anchor":"get_guild_invites/1"},{"id":"get_guild_invites!/1","deprecated":false,"title":"get_guild_invites!(guild_id)","anchor":"get_guild_invites!/1"},{"id":"get_guild_member/2","deprecated":false,"title":"get_guild_member(guild_id, user_id)","anchor":"get_guild_member/2"},{"id":"get_guild_member!/2","deprecated":false,"title":"get_guild_member!(guild_id, user_id)","anchor":"get_guild_member!/2"},{"id":"get_guild_prune_count/2","deprecated":false,"title":"get_guild_prune_count(guild_id, days)","anchor":"get_guild_prune_count/2"},{"id":"get_guild_prune_count!/2","deprecated":false,"title":"get_guild_prune_count!(guild_id, days)","anchor":"get_guild_prune_count!/2"},{"id":"get_guild_roles/1","deprecated":false,"title":"get_guild_roles(guild_id)","anchor":"get_guild_roles/1"},{"id":"get_guild_roles!/1","deprecated":false,"title":"get_guild_roles!(guild_id)","anchor":"get_guild_roles!/1"},{"id":"get_guild_scheduled_event/2","deprecated":false,"title":"get_guild_scheduled_event(guild_id, event_id)","anchor":"get_guild_scheduled_event/2"},{"id":"get_guild_scheduled_event_users/3","deprecated":false,"title":"get_guild_scheduled_event_users(guild_id, event_id, params \\\\ [])","anchor":"get_guild_scheduled_event_users/3"},{"id":"get_guild_scheduled_events/1","deprecated":false,"title":"get_guild_scheduled_events(guild_id)","anchor":"get_guild_scheduled_events/1"},{"id":"get_guild_sticker/2","deprecated":false,"title":"get_guild_sticker(guild_id, sticker_id)","anchor":"get_guild_sticker/2"},{"id":"get_guild_webhooks/1","deprecated":false,"title":"get_guild_webhooks(guild_id)","anchor":"get_guild_webhooks/1"},{"id":"get_guild_widget/1","deprecated":false,"title":"get_guild_widget(guild_id)","anchor":"get_guild_widget/1"},{"id":"get_invite/2","deprecated":false,"title":"get_invite(invite_code, options \\\\ [])","anchor":"get_invite/2"},{"id":"get_invite!/2","deprecated":false,"title":"get_invite!(invite_code, options \\\\ [])","anchor":"get_invite!/2"},{"id":"get_original_interaction_response/1","deprecated":false,"title":"get_original_interaction_response(interaction)","anchor":"get_original_interaction_response/1"},{"id":"get_pinned_messages/1","deprecated":false,"title":"get_pinned_messages(channel_id)","anchor":"get_pinned_messages/1"},{"id":"get_pinned_messages!/1","deprecated":false,"title":"get_pinned_messages!(channel_id)","anchor":"get_pinned_messages!/1"},{"id":"get_poll_answer_voters/4","deprecated":false,"title":"get_poll_answer_voters(channel_id, message_id, answer_id, params \\\\ [])","anchor":"get_poll_answer_voters/4"},{"id":"get_poll_answer_voters!/4","deprecated":false,"title":"get_poll_answer_voters!(channel_id, message_id, answer_id, params \\\\ [])","anchor":"get_poll_answer_voters!/4"},{"id":"get_reactions/4","deprecated":false,"title":"get_reactions(channel_id, message_id, emoji, params \\\\ [])","anchor":"get_reactions/4"},{"id":"get_reactions!/4","deprecated":false,"title":"get_reactions!(channel_id, message_id, emoji, params \\\\ [])","anchor":"get_reactions!/4"},{"id":"get_sticker/1","deprecated":false,"title":"get_sticker(sticker_id)","anchor":"get_sticker/1"},{"id":"get_sticker_packs/0","deprecated":false,"title":"get_sticker_packs()","anchor":"get_sticker_packs/0"},{"id":"get_thread_member/2","deprecated":false,"title":"get_thread_member(thread_id, user_id)","anchor":"get_thread_member/2"},{"id":"get_thread_members/1","deprecated":false,"title":"get_thread_members(thread_id)","anchor":"get_thread_members/1"},{"id":"get_user/1","deprecated":false,"title":"get_user(user_id)","anchor":"get_user/1"},{"id":"get_user!/1","deprecated":false,"title":"get_user!(user_id)","anchor":"get_user!/1"},{"id":"get_user_connections/0","deprecated":false,"title":"get_user_connections()","anchor":"get_user_connections/0"},{"id":"get_user_dms/0","deprecated":false,"title":"get_user_dms()","anchor":"get_user_dms/0"},{"id":"get_user_dms!/0","deprecated":false,"title":"get_user_dms!()","anchor":"get_user_dms!/0"},{"id":"get_voice_region/1","deprecated":false,"title":"get_voice_region(guild_id)","anchor":"get_voice_region/1"},{"id":"get_webhook/1","deprecated":false,"title":"get_webhook(webhook_id)","anchor":"get_webhook/1"},{"id":"get_webhook_message/2","deprecated":false,"title":"get_webhook_message(webhook, message_id)","anchor":"get_webhook_message/2"},{"id":"get_webhook_with_token/2","deprecated":false,"title":"get_webhook_with_token(webhook_id, webhook_token)","anchor":"get_webhook_with_token/2"},{"id":"join_thread/1","deprecated":false,"title":"join_thread(thread_id)","anchor":"join_thread/1"},{"id":"leave_guild/1","deprecated":false,"title":"leave_guild(guild_id)","anchor":"leave_guild/1"},{"id":"leave_thread/1","deprecated":false,"title":"leave_thread(thread_id)","anchor":"leave_thread/1"},{"id":"list_guild_emojis/1","deprecated":false,"title":"list_guild_emojis(guild_id)","anchor":"list_guild_emojis/1"},{"id":"list_guild_emojis!/1","deprecated":false,"title":"list_guild_emojis!(guild_id)","anchor":"list_guild_emojis!/1"},{"id":"list_guild_members/2","deprecated":false,"title":"list_guild_members(guild_id, options \\\\ %{})","anchor":"list_guild_members/2"},{"id":"list_guild_members!/2","deprecated":false,"title":"list_guild_members!(guild_id, options \\\\ %{})","anchor":"list_guild_members!/2"},{"id":"list_guild_stickers/1","deprecated":false,"title":"list_guild_stickers(guild_id)","anchor":"list_guild_stickers/1"},{"id":"list_guild_threads/1","deprecated":false,"title":"list_guild_threads(guild_id)","anchor":"list_guild_threads/1"},{"id":"list_joined_private_archived_threads/2","deprecated":false,"title":"list_joined_private_archived_threads(channel_id, options \\\\ [])","anchor":"list_joined_private_archived_threads/2"},{"id":"list_private_archived_threads/2","deprecated":false,"title":"list_private_archived_threads(channel_id, options \\\\ [])","anchor":"list_private_archived_threads/2"},{"id":"list_public_archived_threads/2","deprecated":false,"title":"list_public_archived_threads(channel_id, options \\\\ [])","anchor":"list_public_archived_threads/2"},{"id":"list_voice_regions/0","deprecated":false,"title":"list_voice_regions()","anchor":"list_voice_regions/0"},{"id":"modify_channel/3","deprecated":false,"title":"modify_channel(channel_id, options, reason \\\\ nil)","anchor":"modify_channel/3"},{"id":"modify_channel!/3","deprecated":false,"title":"modify_channel!(channel_id, options, reason \\\\ nil)","anchor":"modify_channel!/3"},{"id":"modify_current_user/1","deprecated":false,"title":"modify_current_user(options)","anchor":"modify_current_user/1"},{"id":"modify_current_user!/1","deprecated":false,"title":"modify_current_user!(options)","anchor":"modify_current_user!/1"},{"id":"modify_current_user_nick/2","deprecated":false,"title":"modify_current_user_nick(guild_id, options \\\\ %{})","anchor":"modify_current_user_nick/2"},{"id":"modify_current_user_nick!/2","deprecated":false,"title":"modify_current_user_nick!(guild_id, options \\\\ %{})","anchor":"modify_current_user_nick!/2"},{"id":"modify_guild/3","deprecated":false,"title":"modify_guild(guild_id, options \\\\ [], reason \\\\ nil)","anchor":"modify_guild/3"},{"id":"modify_guild!/2","deprecated":false,"title":"modify_guild!(guild_id, options \\\\ [])","anchor":"modify_guild!/2"},{"id":"modify_guild_auto_moderation_rule/3","deprecated":false,"title":"modify_guild_auto_moderation_rule(guild_id, rule_id, options)","anchor":"modify_guild_auto_moderation_rule/3"},{"id":"modify_guild_channel_positions/2","deprecated":false,"title":"modify_guild_channel_positions(guild_id, positions)","anchor":"modify_guild_channel_positions/2"},{"id":"modify_guild_channel_positions!/2","deprecated":false,"title":"modify_guild_channel_positions!(guild_id, positions)","anchor":"modify_guild_channel_positions!/2"},{"id":"modify_guild_emoji/4","deprecated":false,"title":"modify_guild_emoji(guild_id, emoji_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_emoji/4"},{"id":"modify_guild_emoji!/4","deprecated":false,"title":"modify_guild_emoji!(guild_id, emoji_id, options, reason \\\\ nil)","anchor":"modify_guild_emoji!/4"},{"id":"modify_guild_integrations/3","deprecated":false,"title":"modify_guild_integrations(guild_id, integration_id, options)","anchor":"modify_guild_integrations/3"},{"id":"modify_guild_member/4","deprecated":false,"title":"modify_guild_member(guild_id, user_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_member/4"},{"id":"modify_guild_member!/4","deprecated":false,"title":"modify_guild_member!(guild_id, user_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_member!/4"},{"id":"modify_guild_role/4","deprecated":false,"title":"modify_guild_role(guild_id, role_id, options, reason \\\\ nil)","anchor":"modify_guild_role/4"},{"id":"modify_guild_role!/4","deprecated":false,"title":"modify_guild_role!(guild_id, role_id, options, reason \\\\ nil)","anchor":"modify_guild_role!/4"},{"id":"modify_guild_role_positions/3","deprecated":false,"title":"modify_guild_role_positions(guild_id, positions, reason \\\\ nil)","anchor":"modify_guild_role_positions/3"},{"id":"modify_guild_role_positions!/3","deprecated":false,"title":"modify_guild_role_positions!(guild_id, positions, reason \\\\ nil)","anchor":"modify_guild_role_positions!/3"},{"id":"modify_guild_scheduled_event/4","deprecated":false,"title":"modify_guild_scheduled_event(guild_id, event_id, reason \\\\ nil, options)","anchor":"modify_guild_scheduled_event/4"},{"id":"modify_guild_sticker/3","deprecated":false,"title":"modify_guild_sticker(guild_id, sticker_id, options)","anchor":"modify_guild_sticker/3"},{"id":"modify_guild_widget/2","deprecated":false,"title":"modify_guild_widget(guild_id, options)","anchor":"modify_guild_widget/2"},{"id":"modify_webhook/3","deprecated":false,"title":"modify_webhook(webhook_id, args, reason \\\\ nil)","anchor":"modify_webhook/3"},{"id":"modify_webhook_with_token/4","deprecated":false,"title":"modify_webhook_with_token(webhook_id, webhook_token, args, reason \\\\ nil)","anchor":"modify_webhook_with_token/4"},{"id":"remove_guild_ban/3","deprecated":false,"title":"remove_guild_ban(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_ban/3"},{"id":"remove_guild_member/3","deprecated":false,"title":"remove_guild_member(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_member/3"},{"id":"remove_guild_member!/3","deprecated":false,"title":"remove_guild_member!(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_member!/3"},{"id":"remove_guild_member_role/4","deprecated":false,"title":"remove_guild_member_role(guild_id, user_id, role_id, reason \\\\ nil)","anchor":"remove_guild_member_role/4"},{"id":"remove_thread_member/2","deprecated":false,"title":"remove_thread_member(thread_id, user_id)","anchor":"remove_thread_member/2"},{"id":"request/1","deprecated":false,"title":"request(request)","anchor":"request/1"},{"id":"request/4","deprecated":false,"title":"request(method, route, body \\\\ \"\", params \\\\ [])","anchor":"request/4"},{"id":"request_multipart/4","deprecated":false,"title":"request_multipart(method, route, body, params \\\\ [])","anchor":"request_multipart/4"},{"id":"start_thread/3","deprecated":false,"title":"start_thread(channel_id, options, reason \\\\ nil)","anchor":"start_thread/3"},{"id":"start_thread_in_forum_channel/3","deprecated":false,"title":"start_thread_in_forum_channel(channel_id, options, reason \\\\ nil)","anchor":"start_thread_in_forum_channel/3"},{"id":"start_thread_with_message/4","deprecated":false,"title":"start_thread_with_message(channel_id, message_id, options, reason \\\\ nil)","anchor":"start_thread_with_message/4"},{"id":"start_typing/1","deprecated":false,"title":"start_typing(channel_id)","anchor":"start_typing/1"},{"id":"start_typing!/1","deprecated":false,"title":"start_typing!(channel_id)","anchor":"start_typing!/1"},{"id":"sync_guild_integrations/2","deprecated":false,"title":"sync_guild_integrations(guild_id, integration_id)","anchor":"sync_guild_integrations/2"},{"id":"update_shard_status/5","deprecated":false,"title":"update_shard_status(pid, status, game, type \\\\ 0, stream \\\\ nil)","anchor":"update_shard_status/5"},{"id":"update_status/4","deprecated":false,"title":"update_status(status, game, type \\\\ 0, stream \\\\ nil)","anchor":"update_status/4"},{"id":"update_voice_state/4","deprecated":false,"title":"update_voice_state(guild_id, channel_id, self_mute \\\\ false, self_deaf \\\\ false)","anchor":"update_voice_state/4"}],"key":"functions"}]},{"id":"Nostrum.Consumer","deprecated":false,"group":"Api","title":"Nostrum.Consumer","sections":[{"id":"Consuming gateway events","anchor":"module-consuming-gateway-events"},{"id":"Running multiple consumers","anchor":"module-running-multiple-consumers"},{"id":"Example consumer","anchor":"module-example-consumer"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"auto_moderation_rule_create/0","deprecated":false,"title":"auto_moderation_rule_create()","anchor":"t:auto_moderation_rule_create/0"},{"id":"auto_moderation_rule_delete/0","deprecated":false,"title":"auto_moderation_rule_delete()","anchor":"t:auto_moderation_rule_delete/0"},{"id":"auto_moderation_rule_execute/0","deprecated":false,"title":"auto_moderation_rule_execute()","anchor":"t:auto_moderation_rule_execute/0"},{"id":"auto_moderation_rule_update/0","deprecated":false,"title":"auto_moderation_rule_update()","anchor":"t:auto_moderation_rule_update/0"},{"id":"channel_create/0","deprecated":false,"title":"channel_create()","anchor":"t:channel_create/0"},{"id":"channel_delete/0","deprecated":false,"title":"channel_delete()","anchor":"t:channel_delete/0"},{"id":"channel_pins_ack/0","deprecated":false,"title":"channel_pins_ack()","anchor":"t:channel_pins_ack/0"},{"id":"channel_pins_update/0","deprecated":false,"title":"channel_pins_update()","anchor":"t:channel_pins_update/0"},{"id":"channel_update/0","deprecated":false,"title":"channel_update()","anchor":"t:channel_update/0"},{"id":"event/0","deprecated":false,"title":"event()","anchor":"t:event/0"},{"id":"guild_audit_log_entry_create/0","deprecated":false,"title":"guild_audit_log_entry_create()","anchor":"t:guild_audit_log_entry_create/0"},{"id":"guild_available/0","deprecated":false,"title":"guild_available()","anchor":"t:guild_available/0"},{"id":"guild_ban_add/0","deprecated":false,"title":"guild_ban_add()","anchor":"t:guild_ban_add/0"},{"id":"guild_ban_remove/0","deprecated":false,"title":"guild_ban_remove()","anchor":"t:guild_ban_remove/0"},{"id":"guild_create/0","deprecated":false,"title":"guild_create()","anchor":"t:guild_create/0"},{"id":"guild_delete/0","deprecated":false,"title":"guild_delete()","anchor":"t:guild_delete/0"},{"id":"guild_emojis_update/0","deprecated":false,"title":"guild_emojis_update()","anchor":"t:guild_emojis_update/0"},{"id":"guild_integrations_update/0","deprecated":false,"title":"guild_integrations_update()","anchor":"t:guild_integrations_update/0"},{"id":"guild_member_add/0","deprecated":false,"title":"guild_member_add()","anchor":"t:guild_member_add/0"},{"id":"guild_member_remove/0","deprecated":false,"title":"guild_member_remove()","anchor":"t:guild_member_remove/0"},{"id":"guild_member_update/0","deprecated":false,"title":"guild_member_update()","anchor":"t:guild_member_update/0"},{"id":"guild_members_chunk/0","deprecated":false,"title":"guild_members_chunk()","anchor":"t:guild_members_chunk/0"},{"id":"guild_role_create/0","deprecated":false,"title":"guild_role_create()","anchor":"t:guild_role_create/0"},{"id":"guild_role_delete/0","deprecated":false,"title":"guild_role_delete()","anchor":"t:guild_role_delete/0"},{"id":"guild_role_update/0","deprecated":false,"title":"guild_role_update()","anchor":"t:guild_role_update/0"},{"id":"guild_scheduled_event_create/0","deprecated":false,"title":"guild_scheduled_event_create()","anchor":"t:guild_scheduled_event_create/0"},{"id":"guild_scheduled_event_delete/0","deprecated":false,"title":"guild_scheduled_event_delete()","anchor":"t:guild_scheduled_event_delete/0"},{"id":"guild_scheduled_event_update/0","deprecated":false,"title":"guild_scheduled_event_update()","anchor":"t:guild_scheduled_event_update/0"},{"id":"guild_scheduled_event_user_add/0","deprecated":false,"title":"guild_scheduled_event_user_add()","anchor":"t:guild_scheduled_event_user_add/0"},{"id":"guild_scheduled_event_user_remove/0","deprecated":false,"title":"guild_scheduled_event_user_remove()","anchor":"t:guild_scheduled_event_user_remove/0"},{"id":"guild_stickers_update/0","deprecated":false,"title":"guild_stickers_update()","anchor":"t:guild_stickers_update/0"},{"id":"guild_unavailable/0","deprecated":false,"title":"guild_unavailable()","anchor":"t:guild_unavailable/0"},{"id":"guild_update/0","deprecated":false,"title":"guild_update()","anchor":"t:guild_update/0"},{"id":"integration_create/0","deprecated":false,"title":"integration_create()","anchor":"t:integration_create/0"},{"id":"integration_delete/0","deprecated":false,"title":"integration_delete()","anchor":"t:integration_delete/0"},{"id":"integration_update/0","deprecated":false,"title":"integration_update()","anchor":"t:integration_update/0"},{"id":"interaction_create/0","deprecated":false,"title":"interaction_create()","anchor":"t:interaction_create/0"},{"id":"message_ack/0","deprecated":false,"title":"message_ack()","anchor":"t:message_ack/0"},{"id":"message_create/0","deprecated":false,"title":"message_create()","anchor":"t:message_create/0"},{"id":"message_delete/0","deprecated":false,"title":"message_delete()","anchor":"t:message_delete/0"},{"id":"message_delete_bulk/0","deprecated":false,"title":"message_delete_bulk()","anchor":"t:message_delete_bulk/0"},{"id":"message_poll_vote_add/0","deprecated":false,"title":"message_poll_vote_add()","anchor":"t:message_poll_vote_add/0"},{"id":"message_poll_vote_remove/0","deprecated":false,"title":"message_poll_vote_remove()","anchor":"t:message_poll_vote_remove/0"},{"id":"message_reaction_add/0","deprecated":false,"title":"message_reaction_add()","anchor":"t:message_reaction_add/0"},{"id":"message_reaction_remove/0","deprecated":false,"title":"message_reaction_remove()","anchor":"t:message_reaction_remove/0"},{"id":"message_reaction_remove_all/0","deprecated":false,"title":"message_reaction_remove_all()","anchor":"t:message_reaction_remove_all/0"},{"id":"message_reaction_remove_emoji/0","deprecated":false,"title":"message_reaction_remove_emoji()","anchor":"t:message_reaction_remove_emoji/0"},{"id":"message_update/0","deprecated":false,"title":"message_update()","anchor":"t:message_update/0"},{"id":"presence_update/0","deprecated":false,"title":"presence_update()","anchor":"t:presence_update/0"},{"id":"ready/0","deprecated":false,"title":"ready()","anchor":"t:ready/0"},{"id":"resumed/0","deprecated":false,"title":"resumed()","anchor":"t:resumed/0"},{"id":"thread_create/0","deprecated":false,"title":"thread_create()","anchor":"t:thread_create/0"},{"id":"thread_delete/0","deprecated":false,"title":"thread_delete()","anchor":"t:thread_delete/0"},{"id":"thread_list_sync/0","deprecated":false,"title":"thread_list_sync()","anchor":"t:thread_list_sync/0"},{"id":"thread_member_update/0","deprecated":false,"title":"thread_member_update()","anchor":"t:thread_member_update/0"},{"id":"thread_members_update/0","deprecated":false,"title":"thread_members_update()","anchor":"t:thread_members_update/0"},{"id":"thread_update/0","deprecated":false,"title":"thread_update()","anchor":"t:thread_update/0"},{"id":"typing_start/0","deprecated":false,"title":"typing_start()","anchor":"t:typing_start/0"},{"id":"user_settings_update/0","deprecated":false,"title":"user_settings_update()","anchor":"t:user_settings_update/0"},{"id":"user_update/0","deprecated":false,"title":"user_update()","anchor":"t:user_update/0"},{"id":"voice_incoming_packet/0","deprecated":false,"title":"voice_incoming_packet()","anchor":"t:voice_incoming_packet/0"},{"id":"voice_ready/0","deprecated":false,"title":"voice_ready()","anchor":"t:voice_ready/0"},{"id":"voice_server_update/0","deprecated":false,"title":"voice_server_update()","anchor":"t:voice_server_update/0"},{"id":"voice_speaking_update/0","deprecated":false,"title":"voice_speaking_update()","anchor":"t:voice_speaking_update/0"},{"id":"voice_state_update/0","deprecated":false,"title":"voice_state_update()","anchor":"t:voice_state_update/0"},{"id":"webhooks_update/0","deprecated":false,"title":"webhooks_update()","anchor":"t:webhooks_update/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"handle_event/1","deprecated":false,"title":"handle_event(event)","anchor":"c:handle_event/1"}],"key":"callbacks"}]},{"id":"Nostrum.ConsumerGroup","deprecated":false,"group":"Api","title":"Nostrum.ConsumerGroup","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"demonitor/1","deprecated":false,"title":"demonitor(ref)","anchor":"demonitor/1"},{"id":"dispatch/1","deprecated":false,"title":"dispatch(event)","anchor":"dispatch/1"},{"id":"join/0","deprecated":false,"title":"join()","anchor":"join/0"},{"id":"join/1","deprecated":false,"title":"join(pid)","anchor":"join/1"},{"id":"monitor/0","deprecated":false,"title":"monitor()","anchor":"monitor/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Permission","deprecated":false,"group":"Api","title":"Nostrum.Permission","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bit/0","deprecated":false,"title":"bit()","anchor":"t:bit/0"},{"id":"bitset/0","deprecated":false,"title":"bitset()","anchor":"t:bitset/0"},{"id":"general_permission/0","deprecated":false,"title":"general_permission()","anchor":"t:general_permission/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text_permission/0","deprecated":false,"title":"text_permission()","anchor":"t:text_permission/0"},{"id":"voice_permission/0","deprecated":false,"title":"voice_permission()","anchor":"t:voice_permission/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"from_bit/1","deprecated":false,"title":"from_bit(bit)","anchor":"from_bit/1"},{"id":"from_bit!/1","deprecated":false,"title":"from_bit!(bit)","anchor":"from_bit!/1"},{"id":"from_bitset/1","deprecated":false,"title":"from_bitset(bitset)","anchor":"from_bitset/1"},{"id":"is_permission/1","deprecated":false,"title":"is_permission(term)","anchor":"is_permission/1"},{"id":"to_bit/1","deprecated":false,"title":"to_bit(permission)","anchor":"to_bit/1"},{"id":"to_bitset/1","deprecated":false,"title":"to_bitset(permissions)","anchor":"to_bitset/1"}],"key":"functions"}]},{"id":"Nostrum.Voice","deprecated":false,"group":"Api","title":"Nostrum.Voice","sections":[{"id":"Voice Without FFmpeg","anchor":"module-voice-without-ffmpeg"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"opus_packet/0","deprecated":false,"title":"opus_packet()","anchor":"t:opus_packet/0"},{"id":"play_input/0","deprecated":false,"title":"play_input()","anchor":"t:play_input/0"},{"id":"play_type/0","deprecated":false,"title":"play_type()","anchor":"t:play_type/0"},{"id":"rtp_opus/0","deprecated":false,"title":"rtp_opus()","anchor":"t:rtp_opus/0"},{"id":"rtp_sequence/0","deprecated":false,"title":"rtp_sequence()","anchor":"t:rtp_sequence/0"},{"id":"rtp_ssrc/0","deprecated":false,"title":"rtp_ssrc()","anchor":"t:rtp_ssrc/0"},{"id":"rtp_timestamp/0","deprecated":false,"title":"rtp_timestamp()","anchor":"t:rtp_timestamp/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"connect_to_gateway/1","deprecated":false,"title":"connect_to_gateway(guild_id)","anchor":"connect_to_gateway/1"},{"id":"create_ogg_bitstream/1","deprecated":false,"title":"create_ogg_bitstream(opus_packets)","anchor":"create_ogg_bitstream/1"},{"id":"extract_opus_packet/1","deprecated":false,"title":"extract_opus_packet(packet)","anchor":"extract_opus_packet/1"},{"id":"get_channel_id/1","deprecated":false,"title":"get_channel_id(guild_id)","anchor":"get_channel_id/1"},{"id":"get_current_url/1","deprecated":false,"title":"get_current_url(guild_id)","anchor":"get_current_url/1"},{"id":"get_ssrc_map/1","deprecated":false,"title":"get_ssrc_map(guild_id)","anchor":"get_ssrc_map/1"},{"id":"join_channel/5","deprecated":false,"title":"join_channel(guild_id, channel_id, self_mute \\\\ false, self_deaf \\\\ false, persist \\\\ true)","anchor":"join_channel/5"},{"id":"leave_channel/1","deprecated":false,"title":"leave_channel(guild_id)","anchor":"leave_channel/1"},{"id":"listen/3","deprecated":false,"title":"listen(guild_id, num_packets, raw_rtp \\\\ false)","anchor":"listen/3"},{"id":"pad_opus/1","deprecated":false,"title":"pad_opus(packets)","anchor":"pad_opus/1"},{"id":"pause/1","deprecated":false,"title":"pause(guild_id)","anchor":"pause/1"},{"id":"play/4","deprecated":false,"title":"play(guild_id, input, type \\\\ :url, options \\\\ [])","anchor":"play/4"},{"id":"playing?/1","deprecated":false,"title":"playing?(guild_id)","anchor":"playing?/1"},{"id":"ready?/1","deprecated":false,"title":"ready?(guild_id)","anchor":"ready?/1"},{"id":"resume/1","deprecated":false,"title":"resume(guild_id)","anchor":"resume/1"},{"id":"send_frames/2","deprecated":false,"title":"send_frames(guild_id, frames)","anchor":"send_frames/2"},{"id":"set_is_speaking/2","deprecated":false,"title":"set_is_speaking(guild_id, speaking)","anchor":"set_is_speaking/2"},{"id":"start_listen_async/1","deprecated":false,"title":"start_listen_async(guild_id)","anchor":"start_listen_async/1"},{"id":"stop/1","deprecated":false,"title":"stop(guild_id)","anchor":"stop/1"},{"id":"stop_listen_async/1","deprecated":false,"title":"stop_listen_async(guild_id)","anchor":"stop_listen_async/1"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Aes","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Aes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"decrypt/5","deprecated":false,"title":"decrypt(cipher_text, key, nonce, aad, tag)","anchor":"decrypt/5"},{"id":"encrypt/4","deprecated":false,"title":"encrypt(plain_text, key, nonce, aad)","anchor":"encrypt/4"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Chacha","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Chacha","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"decrypt/5","deprecated":false,"title":"decrypt(cipher_text, key, nonce, aad, tag)","anchor":"decrypt/5"},{"id":"encrypt/4","deprecated":false,"title":"encrypt(plain_text, key, nonce, aad)","anchor":"encrypt/4"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Salsa","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Salsa","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"block_binary_to_tuple/1","deprecated":false,"title":"block_binary_to_tuple(arg)","anchor":"block_binary_to_tuple/1"},{"id":"decrypt/3","deprecated":false,"title":"decrypt(encrypted_message, key, nonce)","anchor":"decrypt/3"},{"id":"encrypt/3","deprecated":false,"title":"encrypt(plain_text, key, nonce)","anchor":"encrypt/3"}],"key":"functions"}]},{"id":"Nostrum.Cache.CacheSupervisor","deprecated":false,"group":"Cache","title":"Nostrum.Cache.CacheSupervisor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(list)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".CacheSupervisor","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.ChannelGuildMapping","deprecated":false,"group":"Cache","title":"Nostrum.Cache.ChannelGuildMapping","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, id)","anchor":"c:create/2"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"}],"key":"functions"}],"nested_title":".ChannelGuildMapping","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.GuildCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.GuildCache","sections":[{"id":"Writing your own guild cache","anchor":"module-writing-your-own-guild-cache"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"c:all/0"},{"id":"channel_create/2","deprecated":false,"title":"channel_create(id, channel)","anchor":"c:channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(id, id)","anchor":"c:channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(id, channel)","anchor":"c:channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(map)","anchor":"c:create/1"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(id, emojis)","anchor":"c:emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(id)","anchor":"c:member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(id)","anchor":"c:member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(id, role)","anchor":"c:role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(id, id)","anchor":"c:role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(id, role)","anchor":"c:role_update/2"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(id, stickers)","anchor":"c:stickers_update/2"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(id, state)","anchor":"c:voice_state_update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"fold/3","deprecated":false,"title":"fold(acc, reducer, cache \\\\ Nostrum.Cache.GuildCache.ETS)","anchor":"fold/3"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(guild_id)","anchor":"get!/1"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.GuildCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".GuildCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.Me","deprecated":false,"group":"Cache","title":"Nostrum.Cache.Me","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"get/0","deprecated":false,"title":"get()","anchor":"get/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Me","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MemberCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.MemberCache","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(id, members)","anchor":"c:bulk_create/2"},{"id":"by_guild/1","deprecated":false,"title":"by_guild(id)","anchor":"c:by_guild/1"},{"id":"by_user/1","deprecated":false,"title":"by_user(id)","anchor":"c:by_user/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, member)","anchor":"c:create/2"},{"id":"delete/2","deprecated":false,"title":"delete(id, user_id)","anchor":"c:delete/2"},{"id":"get/2","deprecated":false,"title":"get(id, user_id)","anchor":"c:get/2"},{"id":"update/2","deprecated":false,"title":"update(id, member)","anchor":"c:update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"by_guild/1","deprecated":false,"title":"by_guild(guild_id)","anchor":"by_guild/1"},{"id":"by_user/1","deprecated":false,"title":"by_user(user_id)","anchor":"by_user/1"},{"id":"fold/4","deprecated":false,"title":"fold(acc, guild_id, member_reducer, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold/4"},{"id":"fold_by_user/4","deprecated":false,"title":"fold_by_user(acc, user_id, member_reducer, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold_by_user/4"},{"id":"fold_with_users/4","deprecated":false,"title":"fold_with_users(acc, guild_id, fun, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold_with_users/4"},{"id":"get/2","deprecated":false,"title":"get(guild_id, member_id)","anchor":"get/2"},{"id":"get_with_user/3","deprecated":false,"title":"get_with_user(guild_id, member_id, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"get_with_user/3"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.MemberCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".MemberCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MessageCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.MessageCache","sections":[{"id":"Writing your own message cache","anchor":"module-writing-your-own-message-cache"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"timestamp_like/0","deprecated":false,"title":"timestamp_like()","anchor":"t:timestamp_like/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"bulk_delete/2","deprecated":false,"title":"bulk_delete(id, list)","anchor":"c:bulk_delete/2"},{"id":"channel_delete/1","deprecated":false,"title":"channel_delete(id)","anchor":"c:channel_delete/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(map)","anchor":"c:create/1"},{"id":"delete/2","deprecated":false,"title":"delete(id, id)","anchor":"c:delete/2"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(id, after_timestamp, before_timestamp)","anchor":"c:get_by_author/3"},{"id":"get_by_channel/3","deprecated":false,"title":"get_by_channel(id, after_timestamp, before_timestamp)","anchor":"c:get_by_channel/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(id, id, after_timestamp, before_timestamp)","anchor":"c:get_by_channel_and_author/4"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(message_id)","anchor":"get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(user_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_author/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(channel_id, author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel_and_author/4"}],"key":"functions"}],"nested_title":".MessageCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.PresenceCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.PresenceCache","sections":[{"id":"Writing your own presence cache","anchor":"module-writing-your-own-presence-cache"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"presence/0","deprecated":false,"title":"presence()","anchor":"t:presence/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(id, list)","anchor":"c:bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"c:create/1"},{"id":"get/2","deprecated":false,"title":"get(id, id)","anchor":"c:get/2"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"get!/3","deprecated":false,"title":"get!(guild_id, user_id, cache \\\\ Nostrum.Cache.PresenceCache.ETS)","anchor":"get!/3"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.PresenceCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".PresenceCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.UserCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.UserCache","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(user_payloads)","anchor":"c:bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"c:create/1"},{"id":"delete/1","deprecated":false,"title":"delete(snowflake)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"c:update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(id)","anchor":"get!/1"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.UserCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".UserCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Struct.ApplicationCommand","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommand","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_command_edit_map/0","deprecated":false,"title":"application_command_edit_map()","anchor":"t:application_command_edit_map/0"},{"id":"application_command_map/0","deprecated":false,"title":"application_command_map()","anchor":"t:application_command_map/0"},{"id":"application_command_permission_type/0","deprecated":false,"title":"application_command_permission_type()","anchor":"t:application_command_permission_type/0"},{"id":"application_command_permissions/0","deprecated":false,"title":"application_command_permissions()","anchor":"t:application_command_permissions/0"},{"id":"command_choice/0","deprecated":false,"title":"command_choice()","anchor":"t:command_choice/0"},{"id":"command_description/0","deprecated":false,"title":"command_description()","anchor":"t:command_description/0"},{"id":"command_name/0","deprecated":false,"title":"command_name()","anchor":"t:command_name/0"},{"id":"command_option/0","deprecated":false,"title":"command_option()","anchor":"t:command_option/0"},{"id":"command_option_type/0","deprecated":false,"title":"command_option_type()","anchor":"t:command_option_type/0"},{"id":"command_type/0","deprecated":false,"title":"command_type()","anchor":"t:command_type/0"}],"key":"types"}],"nested_title":".ApplicationCommand","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionData","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionData","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"component_type/0","deprecated":false,"title":"component_type()","anchor":"t:component_type/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"interaction_type/0","deprecated":false,"title":"interaction_type()","anchor":"t:interaction_type/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"resolved/0","deprecated":false,"title":"resolved()","anchor":"t:resolved/0"},{"id":"select_values/0","deprecated":false,"title":"select_values()","anchor":"t:select_values/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_id/0","deprecated":false,"title":"target_id()","anchor":"t:target_id/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionData","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionDataOption","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"focused/0","deprecated":false,"title":"focused()","anchor":"t:focused/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionDataOption","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"attachments/0","deprecated":false,"title":"attachments()","anchor":"t:attachments/0"},{"id":"channels/0","deprecated":false,"title":"channels()","anchor":"t:channels/0"},{"id":"members/0","deprecated":false,"title":"members()","anchor":"t:members/0"},{"id":"messages/0","deprecated":false,"title":"messages()","anchor":"t:messages/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"users/0","deprecated":false,"title":"users()","anchor":"t:users/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionDataResolved","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"actions/0","deprecated":false,"title":"actions()","anchor":"t:actions/0"},{"id":"creator_id/0","deprecated":false,"title":"creator_id()","anchor":"t:creator_id/0"},{"id":"enabled/0","deprecated":false,"title":"enabled()","anchor":"t:enabled/0"},{"id":"event_type/0","deprecated":false,"title":"event_type()","anchor":"t:event_type/0"},{"id":"exempt_channels/0","deprecated":false,"title":"exempt_channels()","anchor":"t:exempt_channels/0"},{"id":"exempt_roles/0","deprecated":false,"title":"exempt_roles()","anchor":"t:exempt_roles/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"preset_values/0","deprecated":false,"title":"preset_values()","anchor":"t:preset_values/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"trigger_metadata/0","deprecated":false,"title":"trigger_metadata()","anchor":"t:trigger_metadata/0"},{"id":"trigger_type/0","deprecated":false,"title":"trigger_type()","anchor":"t:trigger_type/0"}],"key":"types"}],"nested_title":".AutoModerationRule","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.Action","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.Action","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action_type/0","deprecated":false,"title":"action_type()","anchor":"t:action_type/0"},{"id":"metadata/0","deprecated":false,"title":"metadata()","anchor":"t:metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".AutoModerationRule.Action","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.ActionMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"send_alert_message_metadata/0","deprecated":false,"title":"send_alert_message_metadata()","anchor":"t:send_alert_message_metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timeout_metadata/0","deprecated":false,"title":"timeout_metadata()","anchor":"t:timeout_metadata/0"}],"key":"types"}],"nested_title":".AutoModerationRule.ActionMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"keyword_metadata/0","deprecated":false,"title":"keyword_metadata()","anchor":"t:keyword_metadata/0"},{"id":"preset_value_metadata/0","deprecated":false,"title":"preset_value_metadata()","anchor":"t:preset_value_metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".AutoModerationRule.TriggerMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Channel","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Channel","sections":[{"id":"Channel Struct","anchor":"module-channel-struct"},{"id":"Channel Caching","anchor":"module-channel-caching"},{"id":"Helper Functions","anchor":"module-helper-functions"},{"id":"Api Functions","anchor":"module-api-functions"},{"id":"Channel Types","anchor":"module-channel-types"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"applied_tags/0","deprecated":false,"title":"applied_tags()","anchor":"t:applied_tags/0"},{"id":"archive_timestamp/0","deprecated":false,"title":"archive_timestamp()","anchor":"t:archive_timestamp/0"},{"id":"archived/0","deprecated":false,"title":"archived()","anchor":"t:archived/0"},{"id":"auto_archive_duration/0","deprecated":false,"title":"auto_archive_duration()","anchor":"t:auto_archive_duration/0"},{"id":"bitrate/0","deprecated":false,"title":"bitrate()","anchor":"t:bitrate/0"},{"id":"channel_mention/0","deprecated":false,"title":"channel_mention()","anchor":"t:channel_mention/0"},{"id":"default_auto_archive_duration/0","deprecated":false,"title":"default_auto_archive_duration()","anchor":"t:default_auto_archive_duration/0"},{"id":"default_reaction_emoji/0","deprecated":false,"title":"default_reaction_emoji()","anchor":"t:default_reaction_emoji/0"},{"id":"default_thread_rate_limit_per_user/0","deprecated":false,"title":"default_thread_rate_limit_per_user()","anchor":"t:default_thread_rate_limit_per_user/0"},{"id":"dm_channel/0","deprecated":false,"title":"dm_channel()","anchor":"t:dm_channel/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"forum_tag/0","deprecated":false,"title":"forum_tag()","anchor":"t:forum_tag/0"},{"id":"group_dm_channel/0","deprecated":false,"title":"group_dm_channel()","anchor":"t:group_dm_channel/0"},{"id":"guild_category_channel/0","deprecated":false,"title":"guild_category_channel()","anchor":"t:guild_category_channel/0"},{"id":"guild_channel/0","deprecated":true,"title":"guild_channel()","anchor":"t:guild_channel/0"},{"id":"guild_forum_channel/0","deprecated":false,"title":"guild_forum_channel()","anchor":"t:guild_forum_channel/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_news_channel/0","deprecated":false,"title":"guild_news_channel()","anchor":"t:guild_news_channel/0"},{"id":"guild_news_thread_channel/0","deprecated":false,"title":"guild_news_thread_channel()","anchor":"t:guild_news_thread_channel/0"},{"id":"guild_private_thread_channel/0","deprecated":false,"title":"guild_private_thread_channel()","anchor":"t:guild_private_thread_channel/0"},{"id":"guild_public_thread_channel/0","deprecated":false,"title":"guild_public_thread_channel()","anchor":"t:guild_public_thread_channel/0"},{"id":"guild_stage_voice_channel/0","deprecated":false,"title":"guild_stage_voice_channel()","anchor":"t:guild_stage_voice_channel/0"},{"id":"guild_store_channel/0","deprecated":false,"title":"guild_store_channel()","anchor":"t:guild_store_channel/0"},{"id":"guild_text_channel/0","deprecated":false,"title":"guild_text_channel()","anchor":"t:guild_text_channel/0"},{"id":"guild_voice_channel/0","deprecated":false,"title":"guild_voice_channel()","anchor":"t:guild_voice_channel/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"join_timestamp/0","deprecated":false,"title":"join_timestamp()","anchor":"t:join_timestamp/0"},{"id":"last_message_id/0","deprecated":false,"title":"last_message_id()","anchor":"t:last_message_id/0"},{"id":"last_pin_timestamp/0","deprecated":false,"title":"last_pin_timestamp()","anchor":"t:last_pin_timestamp/0"},{"id":"locked/0","deprecated":false,"title":"locked()","anchor":"t:locked/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"message_count/0","deprecated":false,"title":"message_count()","anchor":"t:message_count/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"newly_created/0","deprecated":false,"title":"newly_created()","anchor":"t:newly_created/0"},{"id":"nsfw/0","deprecated":false,"title":"nsfw()","anchor":"t:nsfw/0"},{"id":"owner_id/0","deprecated":false,"title":"owner_id()","anchor":"t:owner_id/0"},{"id":"parent_id/0","deprecated":false,"title":"parent_id()","anchor":"t:parent_id/0"},{"id":"permission_overwrites/0","deprecated":false,"title":"permission_overwrites()","anchor":"t:permission_overwrites/0"},{"id":"permissions/0","deprecated":false,"title":"permissions()","anchor":"t:permissions/0"},{"id":"position/0","deprecated":false,"title":"position()","anchor":"t:position/0"},{"id":"rate_limit_per_user/0","deprecated":false,"title":"rate_limit_per_user()","anchor":"t:rate_limit_per_user/0"},{"id":"recipients/0","deprecated":false,"title":"recipients()","anchor":"t:recipients/0"},{"id":"rtc_region/0","deprecated":false,"title":"rtc_region()","anchor":"t:rtc_region/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text_channel/0","deprecated":true,"title":"text_channel()","anchor":"t:text_channel/0"},{"id":"thread_metadata/0","deprecated":false,"title":"thread_metadata()","anchor":"t:thread_metadata/0"},{"id":"topic/0","deprecated":false,"title":"topic()","anchor":"t:topic/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"},{"id":"user_limit/0","deprecated":false,"title":"user_limit()","anchor":"t:user_limit/0"},{"id":"video_quality_mode/0","deprecated":false,"title":"video_quality_mode()","anchor":"t:video_quality_mode/0"},{"id":"voice_channel/0","deprecated":true,"title":"voice_channel()","anchor":"t:voice_channel/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"mention/1","deprecated":false,"title":"mention(channel)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Channel","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component","sections":[{"id":"Action Row","anchor":"module-action-row"},{"id":"Buttons","anchor":"module-buttons"},{"id":"Link Buttons","anchor":"module-link-buttons"},{"id":"Interaction Buttons ( Non-link Buttons )","anchor":"module-interaction-buttons-non-link-buttons"},{"id":"🐼 Emoji Buttons","anchor":"module-emoji-buttons"},{"id":"Select Menu","anchor":"module-select-menu"},{"id":"Text Input","anchor":"module-text-input"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_types/0","deprecated":false,"title":"channel_types()","anchor":"t:channel_types/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"default_values/0","deprecated":false,"title":"default_values()","anchor":"t:default_values/0"},{"id":"disabled/0","deprecated":false,"title":"disabled()","anchor":"t:disabled/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"t:max_length/0"},{"id":"max_values/0","deprecated":false,"title":"max_values()","anchor":"t:max_values/0"},{"id":"min_length/0","deprecated":false,"title":"min_length()","anchor":"t:min_length/0"},{"id":"min_values/0","deprecated":false,"title":"min_values()","anchor":"t:min_values/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"placeholder/0","deprecated":false,"title":"placeholder()","anchor":"t:placeholder/0"},{"id":"required/0","deprecated":false,"title":"required()","anchor":"t:required/0"},{"id":"style/0","deprecated":false,"title":"style()","anchor":"t:style/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"new/1","deprecated":false,"title":"new(opts)","anchor":"c:new/1"},{"id":"update/2","deprecated":false,"title":"update(t, opts)","anchor":"c:update/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Component","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.ActionRow","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.ActionRow","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"action_row/1","deprecated":false,"title":"action_row(opts \\\\ [])","anchor":"action_row/1"},{"id":"append/2","deprecated":false,"title":"append(action_row, button)","anchor":"append/2"},{"id":"append_lazy/2","deprecated":false,"title":"append_lazy(action_row, button)","anchor":"append_lazy/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"put/2","deprecated":false,"title":"put(component, select_menu)","anchor":"put/2"},{"id":"put_new/2","deprecated":false,"title":"put_new(component, list_of_components)","anchor":"put_new/2"}],"key":"functions"}],"nested_title":".Component.ActionRow","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.Button","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.Button","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"interaction_button/0","deprecated":false,"title":"interaction_button()","anchor":"t:interaction_button/0"},{"id":"link_button/0","deprecated":false,"title":"link_button()","anchor":"t:link_button/0"},{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"button/1","deprecated":false,"title":"button(opts \\\\ [])","anchor":"button/1"},{"id":"disable/2","deprecated":false,"title":"disable(button, disabled)","anchor":"disable/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"interaction_button/3","deprecated":false,"title":"interaction_button(label, custom_id, opts \\\\ [])","anchor":"interaction_button/3"},{"id":"link_button/3","deprecated":false,"title":"link_button(label, url, opts \\\\ [])","anchor":"link_button/3"},{"id":"put_style/2","deprecated":false,"title":"put_style(button, style)","anchor":"put_style/2"},{"id":"toggle/1","deprecated":false,"title":"toggle(button)","anchor":"toggle/1"}],"key":"functions"}],"nested_title":".Component.Button","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.ChannelSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.ChannelSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"channel_select/2","deprecated":false,"title":"channel_select(custom_id, opts \\\\ [])","anchor":"channel_select/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"}],"key":"functions"}],"nested_title":".Component.ChannelSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.DefaultValue","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.DefaultValue","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Component.DefaultValue","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.MentionableSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.MentionableSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.MentionableSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.Option","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.Option","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"default/0","deprecated":false,"title":"default()","anchor":"t:default/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Component.Option","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.RoleSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.RoleSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.RoleSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.SelectMenu","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.SelectMenu","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"select_menu/2","deprecated":false,"title":"select_menu(custom_id, opts \\\\ [])","anchor":"select_menu/2"}],"key":"functions"}],"nested_title":".Component.SelectMenu","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.TextInput","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.TextInput","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"put_style/2","deprecated":false,"title":"put_style(text_input, style)","anchor":"put_style/2"},{"id":"text_input/3","deprecated":false,"title":"text_input(label, custom_id, opts \\\\ [])","anchor":"text_input/3"}],"key":"functions"}],"nested_title":".Component.TextInput","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.UserSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.UserSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.UserSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed","sections":[{"id":"Building Embeds","anchor":"module-building-embeds"},{"id":"Using structs","anchor":"module-using-structs"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"author/0","deprecated":false,"title":"author()","anchor":"t:author/0"},{"id":"color/0","deprecated":false,"title":"color()","anchor":"t:color/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"fields/0","deprecated":false,"title":"fields()","anchor":"t:fields/0"},{"id":"footer/0","deprecated":false,"title":"footer()","anchor":"t:footer/0"},{"id":"image/0","deprecated":false,"title":"image()","anchor":"t:image/0"},{"id":"provider/0","deprecated":false,"title":"provider()","anchor":"t:provider/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"thumbnail/0","deprecated":false,"title":"thumbnail()","anchor":"t:thumbnail/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"title/0","deprecated":false,"title":"title()","anchor":"t:title/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"video/0","deprecated":false,"title":"video()","anchor":"t:video/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"author/1","deprecated":false,"title":"author(struct)","anchor":"c:author/1"},{"id":"color/1","deprecated":false,"title":"color(struct)","anchor":"c:color/1"},{"id":"description/1","deprecated":false,"title":"description(struct)","anchor":"c:description/1"},{"id":"fields/1","deprecated":false,"title":"fields(struct)","anchor":"c:fields/1"},{"id":"footer/1","deprecated":false,"title":"footer(struct)","anchor":"c:footer/1"},{"id":"image/1","deprecated":false,"title":"image(struct)","anchor":"c:image/1"},{"id":"thumbnail/1","deprecated":false,"title":"thumbnail(struct)","anchor":"c:thumbnail/1"},{"id":"timestamp/1","deprecated":false,"title":"timestamp(struct)","anchor":"c:timestamp/1"},{"id":"title/1","deprecated":false,"title":"title(struct)","anchor":"c:title/1"},{"id":"url/1","deprecated":false,"title":"url(struct)","anchor":"c:url/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"from/1","deprecated":false,"title":"from(struct)","anchor":"from/1"},{"id":"put_author/4","deprecated":false,"title":"put_author(embed, name, url, icon_url)","anchor":"put_author/4"},{"id":"put_color/2","deprecated":false,"title":"put_color(embed, value)","anchor":"put_color/2"},{"id":"put_description/2","deprecated":false,"title":"put_description(embed, value)","anchor":"put_description/2"},{"id":"put_field/4","deprecated":false,"title":"put_field(embed, name, value, inline \\\\ nil)","anchor":"put_field/4"},{"id":"put_footer/3","deprecated":false,"title":"put_footer(embed, text, icon_url \\\\ nil)","anchor":"put_footer/3"},{"id":"put_image/2","deprecated":false,"title":"put_image(embed, url)","anchor":"put_image/2"},{"id":"put_thumbnail/2","deprecated":false,"title":"put_thumbnail(embed, url)","anchor":"put_thumbnail/2"},{"id":"put_timestamp/2","deprecated":false,"title":"put_timestamp(embed, value)","anchor":"put_timestamp/2"},{"id":"put_title/2","deprecated":false,"title":"put_title(embed, value)","anchor":"put_title/2"},{"id":"put_url/2","deprecated":false,"title":"put_url(embed, value)","anchor":"put_url/2"}],"key":"functions"}],"nested_title":".Embed","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Author","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Author","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"icon_url/0","deprecated":false,"title":"icon_url()","anchor":"t:icon_url/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"proxy_icon_url/0","deprecated":false,"title":"proxy_icon_url()","anchor":"t:proxy_icon_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"}],"key":"types"}],"nested_title":".Embed.Author","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Field","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Field","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"inline/0","deprecated":false,"title":"inline()","anchor":"t:inline/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Embed.Field","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Footer","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Footer","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"icon_url/0","deprecated":false,"title":"icon_url()","anchor":"t:icon_url/0"},{"id":"proxy_icon_url/0","deprecated":false,"title":"proxy_icon_url()","anchor":"t:proxy_icon_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text/0","deprecated":false,"title":"text()","anchor":"t:text/0"}],"key":"types"}],"nested_title":".Embed.Footer","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Image","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Image","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Image","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Provider","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Provider","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"}],"key":"types"}],"nested_title":".Embed.Provider","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Thumbnail","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Thumbnail","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Thumbnail","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Video","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Video","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Video","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Emoji","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Emoji","sections":[{"id":"Mentioning Emojis in Messages","anchor":"module-mentioning-emojis-in-messages"},{"id":"Using Emojis in the Api","anchor":"module-using-emojis-in-the-api"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"animated/0","deprecated":false,"title":"animated()","anchor":"t:animated/0"},{"id":"api_name/0","deprecated":false,"title":"api_name()","anchor":"t:api_name/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"managed/0","deprecated":false,"title":"managed()","anchor":"t:managed/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"require_colons/0","deprecated":false,"title":"require_colons()","anchor":"t:require_colons/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"api_name/1","deprecated":false,"title":"api_name(emoji)","anchor":"api_name/1"},{"id":"image_url/1","deprecated":false,"title":"image_url(emoji)","anchor":"image_url/1"},{"id":"mention/1","deprecated":false,"title":"mention(emoji)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Emoji","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"afk_channel_id/0","deprecated":false,"title":"afk_channel_id()","anchor":"t:afk_channel_id/0"},{"id":"afk_timeout/0","deprecated":false,"title":"afk_timeout()","anchor":"t:afk_timeout/0"},{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"available_guild/0","deprecated":false,"title":"available_guild()","anchor":"t:available_guild/0"},{"id":"banner/0","deprecated":false,"title":"banner()","anchor":"t:banner/0"},{"id":"channels/0","deprecated":false,"title":"channels()","anchor":"t:channels/0"},{"id":"default_message_notifications/0","deprecated":false,"title":"default_message_notifications()","anchor":"t:default_message_notifications/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"discovery_splash/0","deprecated":false,"title":"discovery_splash()","anchor":"t:discovery_splash/0"},{"id":"emojis/0","deprecated":false,"title":"emojis()","anchor":"t:emojis/0"},{"id":"explicit_content_filter/0","deprecated":false,"title":"explicit_content_filter()","anchor":"t:explicit_content_filter/0"},{"id":"features/0","deprecated":false,"title":"features()","anchor":"t:features/0"},{"id":"guild_scheduled_events/0","deprecated":false,"title":"guild_scheduled_events()","anchor":"t:guild_scheduled_events/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"joined_at/0","deprecated":false,"title":"joined_at()","anchor":"t:joined_at/0"},{"id":"large/0","deprecated":false,"title":"large()","anchor":"t:large/0"},{"id":"max_members/0","deprecated":false,"title":"max_members()","anchor":"t:max_members/0"},{"id":"max_presences/0","deprecated":false,"title":"max_presences()","anchor":"t:max_presences/0"},{"id":"max_stage_video_channel_users/0","deprecated":false,"title":"max_stage_video_channel_users()","anchor":"t:max_stage_video_channel_users/0"},{"id":"max_video_channel_users/0","deprecated":false,"title":"max_video_channel_users()","anchor":"t:max_video_channel_users/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"mfa_level/0","deprecated":false,"title":"mfa_level()","anchor":"t:mfa_level/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"nsfw_level/0","deprecated":false,"title":"nsfw_level()","anchor":"t:nsfw_level/0"},{"id":"owner_id/0","deprecated":false,"title":"owner_id()","anchor":"t:owner_id/0"},{"id":"preferred_locale/0","deprecated":false,"title":"preferred_locale()","anchor":"t:preferred_locale/0"},{"id":"premium_progress_bar_enabled/0","deprecated":false,"title":"premium_progress_bar_enabled()","anchor":"t:premium_progress_bar_enabled/0"},{"id":"premium_subscription_count/0","deprecated":false,"title":"premium_subscription_count()","anchor":"t:premium_subscription_count/0"},{"id":"premium_tier/0","deprecated":false,"title":"premium_tier()","anchor":"t:premium_tier/0"},{"id":"public_updates_channel_id/0","deprecated":false,"title":"public_updates_channel_id()","anchor":"t:public_updates_channel_id/0"},{"id":"region/0","deprecated":false,"title":"region()","anchor":"t:region/0"},{"id":"rest_guild/0","deprecated":false,"title":"rest_guild()","anchor":"t:rest_guild/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"rules_channel_id/0","deprecated":false,"title":"rules_channel_id()","anchor":"t:rules_channel_id/0"},{"id":"safety_alerts_channel_id/0","deprecated":false,"title":"safety_alerts_channel_id()","anchor":"t:safety_alerts_channel_id/0"},{"id":"splash/0","deprecated":false,"title":"splash()","anchor":"t:splash/0"},{"id":"stickers/0","deprecated":false,"title":"stickers()","anchor":"t:stickers/0"},{"id":"system_channel_flags/0","deprecated":false,"title":"system_channel_flags()","anchor":"t:system_channel_flags/0"},{"id":"system_channel_id/0","deprecated":false,"title":"system_channel_id()","anchor":"t:system_channel_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"threads/0","deprecated":false,"title":"threads()","anchor":"t:threads/0"},{"id":"unavailable/0","deprecated":false,"title":"unavailable()","anchor":"t:unavailable/0"},{"id":"unavailable_guild/0","deprecated":false,"title":"unavailable_guild()","anchor":"t:unavailable_guild/0"},{"id":"user_guild/0","deprecated":false,"title":"user_guild()","anchor":"t:user_guild/0"},{"id":"vanity_url_code/0","deprecated":false,"title":"vanity_url_code()","anchor":"t:vanity_url_code/0"},{"id":"verification_level/0","deprecated":false,"title":"verification_level()","anchor":"t:verification_level/0"},{"id":"voice_states/0","deprecated":false,"title":"voice_states()","anchor":"t:voice_states/0"},{"id":"welcome_screen/0","deprecated":false,"title":"welcome_screen()","anchor":"t:welcome_screen/0"},{"id":"widget_channel_id/0","deprecated":false,"title":"widget_channel_id()","anchor":"t:widget_channel_id/0"},{"id":"widget_enabled/0","deprecated":false,"title":"widget_enabled()","anchor":"t:widget_enabled/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"banner_url/2","deprecated":false,"title":"banner_url(guild, image_format \\\\ \"webp\")","anchor":"banner_url/2"},{"id":"discovery_splash_url/2","deprecated":false,"title":"discovery_splash_url(guild, image_format \\\\ \"webp\")","anchor":"discovery_splash_url/2"},{"id":"icon_url/2","deprecated":false,"title":"icon_url(guild, image_format \\\\ \"webp\")","anchor":"icon_url/2"},{"id":"splash_url/2","deprecated":false,"title":"splash_url(guild, image_format \\\\ \"webp\")","anchor":"splash_url/2"}],"key":"functions"}],"nested_title":".Guild","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.AuditLog","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.AuditLog","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"entries/0","deprecated":false,"title":"entries()","anchor":"t:entries/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"users/0","deprecated":false,"title":"users()","anchor":"t:users/0"},{"id":"webhooks/0","deprecated":false,"title":"webhooks()","anchor":"t:webhooks/0"}],"key":"types"}],"nested_title":".Guild.AuditLog","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.AuditLogEntry","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.AuditLogEntry","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action_type/0","deprecated":false,"title":"action_type()","anchor":"t:action_type/0"},{"id":"changes/0","deprecated":false,"title":"changes()","anchor":"t:changes/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"reason/0","deprecated":false,"title":"reason()","anchor":"t:reason/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_id/0","deprecated":false,"title":"target_id()","anchor":"t:target_id/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".Guild.AuditLogEntry","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Ban","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Ban","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"reason/0","deprecated":false,"title":"reason()","anchor":"t:reason/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".Guild.Ban","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration","sections":[{"id":"References","anchor":"module-references"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"account/0","deprecated":false,"title":"account()","anchor":"t:account/0"},{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"enabled/0","deprecated":false,"title":"enabled()","anchor":"t:enabled/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Guild.Integration","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration.Account","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration.Account","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.Integration.Account","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration.Application","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration.Application","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bot/0","deprecated":false,"title":"bot()","anchor":"t:bot/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"summary/0","deprecated":false,"title":"summary()","anchor":"t:summary/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.Integration.Application","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Member","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Member","sections":[{"id":"Mentioning Members in Messages","anchor":"module-mentioning-members-in-messages"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"communication_disabled_until/0","deprecated":false,"title":"communication_disabled_until()","anchor":"t:communication_disabled_until/0"},{"id":"deaf/0","deprecated":false,"title":"deaf()","anchor":"t:deaf/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"joined_at/0","deprecated":false,"title":"joined_at()","anchor":"t:joined_at/0"},{"id":"mute/0","deprecated":false,"title":"mute()","anchor":"t:mute/0"},{"id":"nick/0","deprecated":false,"title":"nick()","anchor":"t:nick/0"},{"id":"pending/0","deprecated":false,"title":"pending()","anchor":"t:pending/0"},{"id":"premium_since/0","deprecated":false,"title":"premium_since()","anchor":"t:premium_since/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"avatar_url/3","deprecated":false,"title":"avatar_url(member, guild_id, image_format \\\\ \"png\")","anchor":"avatar_url/3"},{"id":"guild_channel_permissions/3","deprecated":false,"title":"guild_channel_permissions(member, guild, channel_id)","anchor":"guild_channel_permissions/3"},{"id":"guild_permissions/2","deprecated":false,"title":"guild_permissions(member, guild)","anchor":"guild_permissions/2"},{"id":"mention/1","deprecated":false,"title":"mention(member)","anchor":"mention/1"},{"id":"top_role/2","deprecated":false,"title":"top_role(member, guild)","anchor":"top_role/2"}],"key":"functions"}],"nested_title":".Guild.Member","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Member.Flags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Member.Flags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bypasses_verification/0","deprecated":false,"title":"bypasses_verification()","anchor":"t:bypasses_verification/0"},{"id":"completed_onboarding/0","deprecated":false,"title":"completed_onboarding()","anchor":"t:completed_onboarding/0"},{"id":"did_rejoin/0","deprecated":false,"title":"did_rejoin()","anchor":"t:did_rejoin/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"started_onboarding/0","deprecated":false,"title":"started_onboarding()","anchor":"t:started_onboarding/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".Guild.Member.Flags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Role","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Role","sections":[{"id":"Mentioning Roles in Messages","anchor":"module-mentioning-roles-in-messages"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"color/0","deprecated":false,"title":"color()","anchor":"t:color/0"},{"id":"hoist/0","deprecated":false,"title":"hoist()","anchor":"t:hoist/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"managed/0","deprecated":false,"title":"managed()","anchor":"t:managed/0"},{"id":"mentionable/0","deprecated":false,"title":"mentionable()","anchor":"t:mentionable/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"permissions/0","deprecated":false,"title":"permissions()","anchor":"t:permissions/0"},{"id":"position/0","deprecated":false,"title":"position()","anchor":"t:position/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"unicode_emoji/0","deprecated":false,"title":"unicode_emoji()","anchor":"t:unicode_emoji/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"mention/1","deprecated":false,"title":"mention(role)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Guild.Role","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"creator/0","deprecated":false,"title":"creator()","anchor":"t:creator/0"},{"id":"creator_id/0","deprecated":false,"title":"creator_id()","anchor":"t:creator_id/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"entity_id/0","deprecated":false,"title":"entity_id()","anchor":"t:entity_id/0"},{"id":"entity_metadata/0","deprecated":false,"title":"entity_metadata()","anchor":"t:entity_metadata/0"},{"id":"entity_type/0","deprecated":false,"title":"entity_type()","anchor":"t:entity_type/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"privacy_level/0","deprecated":false,"title":"privacy_level()","anchor":"t:privacy_level/0"},{"id":"scheduled_end_time/0","deprecated":false,"title":"scheduled_end_time()","anchor":"t:scheduled_end_time/0"},{"id":"scheduled_start_time/0","deprecated":false,"title":"scheduled_start_time()","anchor":"t:scheduled_start_time/0"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"t:status/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_count/0","deprecated":false,"title":"user_count()","anchor":"t:user_count/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.ScheduledEvent","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"location/0","deprecated":false,"title":"location()","anchor":"t:location/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.ScheduledEvent.EntityMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent.User","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent.User","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"event_id/0","deprecated":false,"title":"event_id()","anchor":"t:event_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.ScheduledEvent.User","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.SystemChannelFlags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.SystemChannelFlags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"suppress_guild_reminder_notifications/0","deprecated":false,"title":"suppress_guild_reminder_notifications()","anchor":"t:suppress_guild_reminder_notifications/0"},{"id":"suppress_join_notification_replies/0","deprecated":false,"title":"suppress_join_notification_replies()","anchor":"t:suppress_join_notification_replies/0"},{"id":"suppress_join_notifications/0","deprecated":false,"title":"suppress_join_notifications()","anchor":"t:suppress_join_notifications/0"},{"id":"suppress_premium_subscriptions/0","deprecated":false,"title":"suppress_premium_subscriptions()","anchor":"t:suppress_premium_subscriptions/0"},{"id":"suppress_role_subscription_purchase_notifications/0","deprecated":false,"title":"suppress_role_subscription_purchase_notifications()","anchor":"t:suppress_role_subscription_purchase_notifications/0"},{"id":"suppress_role_subscription_purchase_notifications_replies/0","deprecated":false,"title":"suppress_role_subscription_purchase_notifications_replies()","anchor":"t:suppress_role_subscription_purchase_notifications_replies/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".Guild.SystemChannelFlags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.UnavailableGuild","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.UnavailableGuild","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"unavailable/0","deprecated":false,"title":"unavailable()","anchor":"t:unavailable/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.UnavailableGuild","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Interaction","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Interaction","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"t:channel/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"data/0","deprecated":false,"title":"data()","anchor":"t:data/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_locale/0","deprecated":false,"title":"guild_locale()","anchor":"t:guild_locale/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"locale/0","deprecated":false,"title":"locale()","anchor":"t:locale/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"message/0","deprecated":false,"title":"message()","anchor":"t:message/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"},{"id":"version/0","deprecated":false,"title":"version()","anchor":"t:version/0"}],"key":"types"}],"nested_title":".Interaction","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Invite","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Invite","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"approximate_member_count/0","deprecated":false,"title":"approximate_member_count()","anchor":"t:approximate_member_count/0"},{"id":"approximate_presence_count/0","deprecated":false,"title":"approximate_presence_count()","anchor":"t:approximate_presence_count/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"t:channel/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"created_at/0","deprecated":false,"title":"created_at()","anchor":"t:created_at/0"},{"id":"detailed_invite/0","deprecated":false,"title":"detailed_invite()","anchor":"t:detailed_invite/0"},{"id":"guild/0","deprecated":false,"title":"guild()","anchor":"t:guild/0"},{"id":"inviter/0","deprecated":false,"title":"inviter()","anchor":"t:inviter/0"},{"id":"max_age/0","deprecated":false,"title":"max_age()","anchor":"t:max_age/0"},{"id":"max_uses/0","deprecated":false,"title":"max_uses()","anchor":"t:max_uses/0"},{"id":"simple_invite/0","deprecated":false,"title":"simple_invite()","anchor":"t:simple_invite/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_user/0","deprecated":false,"title":"target_user()","anchor":"t:target_user/0"},{"id":"target_user_type/0","deprecated":false,"title":"target_user_type()","anchor":"t:target_user_type/0"},{"id":"temporary/0","deprecated":false,"title":"temporary()","anchor":"t:temporary/0"},{"id":"uses/0","deprecated":false,"title":"uses()","anchor":"t:uses/0"}],"key":"types"}],"nested_title":".Invite","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"activity/0","deprecated":false,"title":"activity()","anchor":"t:activity/0"},{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"attachments/0","deprecated":false,"title":"attachments()","anchor":"t:attachments/0"},{"id":"author/0","deprecated":false,"title":"author()","anchor":"t:author/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"content/0","deprecated":false,"title":"content()","anchor":"t:content/0"},{"id":"edited_timestamp/0","deprecated":false,"title":"edited_timestamp()","anchor":"t:edited_timestamp/0"},{"id":"embeds/0","deprecated":false,"title":"embeds()","anchor":"t:embeds/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"interaction/0","deprecated":false,"title":"interaction()","anchor":"t:interaction/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"mention_channels/0","deprecated":false,"title":"mention_channels()","anchor":"t:mention_channels/0"},{"id":"mention_everyone/0","deprecated":false,"title":"mention_everyone()","anchor":"t:mention_everyone/0"},{"id":"mention_roles/0","deprecated":false,"title":"mention_roles()","anchor":"t:mention_roles/0"},{"id":"mentions/0","deprecated":false,"title":"mentions()","anchor":"t:mentions/0"},{"id":"message_reference/0","deprecated":false,"title":"message_reference()","anchor":"t:message_reference/0"},{"id":"nonce/0","deprecated":false,"title":"nonce()","anchor":"t:nonce/0"},{"id":"pinned/0","deprecated":false,"title":"pinned()","anchor":"t:pinned/0"},{"id":"poll/0","deprecated":false,"title":"poll()","anchor":"t:poll/0"},{"id":"reactions/0","deprecated":false,"title":"reactions()","anchor":"t:reactions/0"},{"id":"referenced_message/0","deprecated":false,"title":"referenced_message()","anchor":"t:referenced_message/0"},{"id":"sticker_items/0","deprecated":false,"title":"sticker_items()","anchor":"t:sticker_items/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"thread/0","deprecated":false,"title":"thread()","anchor":"t:thread/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"tts/0","deprecated":false,"title":"tts()","anchor":"t:tts/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"webhook_id/0","deprecated":false,"title":"webhook_id()","anchor":"t:webhook_id/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_url/1","deprecated":false,"title":"to_url(message)","anchor":"to_url/1"}],"key":"functions"}],"nested_title":".Message","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Activity","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Activity","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"party_id/0","deprecated":false,"title":"party_id()","anchor":"t:party_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Message.Activity","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Application","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Application","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"cover_image/0","deprecated":false,"title":"cover_image()","anchor":"t:cover_image/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Application","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Attachment","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Attachment","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"filename/0","deprecated":false,"title":"filename()","anchor":"t:filename/0"},{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"size/0","deprecated":false,"title":"size()","anchor":"t:size/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Message.Attachment","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Component","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Component","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"disabled/0","deprecated":false,"title":"disabled()","anchor":"t:disabled/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"t:max_length/0"},{"id":"max_values/0","deprecated":false,"title":"max_values()","anchor":"t:max_values/0"},{"id":"min_length/0","deprecated":false,"title":"min_length()","anchor":"t:min_length/0"},{"id":"min_values/0","deprecated":false,"title":"min_values()","anchor":"t:min_values/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"placeholder/0","deprecated":false,"title":"placeholder()","anchor":"t:placeholder/0"},{"id":"required/0","deprecated":false,"title":"required()","anchor":"t:required/0"},{"id":"style/0","deprecated":false,"title":"style()","anchor":"t:style/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Message.Component","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allow_multiselect/0","deprecated":false,"title":"allow_multiselect()","anchor":"t:allow_multiselect/0"},{"id":"answers/0","deprecated":false,"title":"answers()","anchor":"t:answers/0"},{"id":"duration/0","deprecated":false,"title":"duration()","anchor":"t:duration/0"},{"id":"expiry/0","deprecated":false,"title":"expiry()","anchor":"t:expiry/0"},{"id":"layout_type/0","deprecated":false,"title":"layout_type()","anchor":"t:layout_type/0"},{"id":"question/0","deprecated":false,"title":"question()","anchor":"t:question/0"},{"id":"results/0","deprecated":false,"title":"results()","anchor":"t:results/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"create_poll/2","deprecated":false,"title":"create_poll(question_text, list)","anchor":"create_poll/2"},{"id":"put_answer/2","deprecated":false,"title":"put_answer(poll, answer)","anchor":"put_answer/2"},{"id":"put_answer/3","deprecated":false,"title":"put_answer(poll, answer, list)","anchor":"put_answer/3"}],"key":"functions"}],"nested_title":".Message.Poll","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.Answer","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.Answer","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_id/0","deprecated":false,"title":"answer_id()","anchor":"t:answer_id/0"},{"id":"poll_media/0","deprecated":false,"title":"poll_media()","anchor":"t:poll_media/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Poll.Answer","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.MediaObject","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.MediaObject","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text/0","deprecated":false,"title":"text()","anchor":"t:text/0"}],"key":"types"}],"nested_title":".Message.Poll.MediaObject","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.Results","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.Results","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_counts/0","deprecated":false,"title":"answer_counts()","anchor":"t:answer_counts/0"},{"id":"is_finalized/0","deprecated":false,"title":"is_finalized()","anchor":"t:is_finalized/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Poll.Results","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Reaction","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Reaction","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"count/0","deprecated":false,"title":"count()","anchor":"t:count/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"me/0","deprecated":false,"title":"me()","anchor":"t:me/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Reaction","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Reference","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Reference","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Reference","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Overwrite","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Overwrite","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allow/0","deprecated":false,"title":"allow()","anchor":"t:allow/0"},{"id":"deny/0","deprecated":false,"title":"deny()","anchor":"t:deny/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Overwrite","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Sticker","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Sticker","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"available/0","deprecated":false,"title":"available()","anchor":"t:available/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"format_type/0","deprecated":false,"title":"format_type()","anchor":"t:format_type/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"pack_id/0","deprecated":false,"title":"pack_id()","anchor":"t:pack_id/0"},{"id":"sort_value/0","deprecated":false,"title":"sort_value()","anchor":"t:sort_value/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"tags/0","deprecated":false,"title":"tags()","anchor":"t:tags/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"cdn_url/1","deprecated":false,"title":"cdn_url(map)","anchor":"cdn_url/1"}],"key":"functions"}],"nested_title":".Sticker","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Sticker.Pack","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Sticker.Pack","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"banner_asset_id/0","deprecated":false,"title":"banner_asset_id()","anchor":"t:banner_asset_id/0"},{"id":"cover_sticker_id/0","deprecated":false,"title":"cover_sticker_id()","anchor":"t:cover_sticker_id/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"sku_id/0","deprecated":false,"title":"sku_id()","anchor":"t:sku_id/0"},{"id":"stickers/0","deprecated":false,"title":"stickers()","anchor":"t:stickers/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"banner_url/1","deprecated":false,"title":"banner_url(map)","anchor":"banner_url/1"}],"key":"functions"}],"nested_title":".Sticker.Pack","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ThreadMember","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ThreadMember","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"join_timestamp/0","deprecated":false,"title":"join_timestamp()","anchor":"t:join_timestamp/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".ThreadMember","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User","sections":[{"id":"Mentioning Users in Messages","anchor":"module-mentioning-users-in-messages"},{"id":"User vs. Member","anchor":"module-user-vs-member"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"bot/0","deprecated":false,"title":"bot()","anchor":"t:bot/0"},{"id":"discriminator/0","deprecated":false,"title":"discriminator()","anchor":"t:discriminator/0"},{"id":"global_name/0","deprecated":false,"title":"global_name()","anchor":"t:global_name/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"public_flags/0","deprecated":false,"title":"public_flags()","anchor":"t:public_flags/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"username/0","deprecated":false,"title":"username()","anchor":"t:username/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"avatar_url/2","deprecated":false,"title":"avatar_url(user, image_format \\\\ \"webp\")","anchor":"avatar_url/2"},{"id":"full_name/1","deprecated":false,"title":"full_name(user)","anchor":"full_name/1"},{"id":"mention/1","deprecated":false,"title":"mention(user)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".User","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User.Connection","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User.Connection","sections":[],"nested_title":".User.Connection","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User.Flags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User.Flags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bug_hunter_level_1/0","deprecated":false,"title":"bug_hunter_level_1()","anchor":"t:bug_hunter_level_1/0"},{"id":"bug_hunter_level_2/0","deprecated":false,"title":"bug_hunter_level_2()","anchor":"t:bug_hunter_level_2/0"},{"id":"early_supporter/0","deprecated":false,"title":"early_supporter()","anchor":"t:early_supporter/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"hypesquad_balance/0","deprecated":false,"title":"hypesquad_balance()","anchor":"t:hypesquad_balance/0"},{"id":"hypesquad_bravery/0","deprecated":false,"title":"hypesquad_bravery()","anchor":"t:hypesquad_bravery/0"},{"id":"hypesquad_brilliance/0","deprecated":false,"title":"hypesquad_brilliance()","anchor":"t:hypesquad_brilliance/0"},{"id":"hypesquad_events/0","deprecated":false,"title":"hypesquad_events()","anchor":"t:hypesquad_events/0"},{"id":"partner/0","deprecated":false,"title":"partner()","anchor":"t:partner/0"},{"id":"raw_flags/0","deprecated":false,"title":"raw_flags()","anchor":"t:raw_flags/0"},{"id":"staff/0","deprecated":false,"title":"staff()","anchor":"t:staff/0"},{"id":"system/0","deprecated":false,"title":"system()","anchor":"t:system/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"team_user/0","deprecated":false,"title":"team_user()","anchor":"t:team_user/0"},{"id":"verified_bot/0","deprecated":false,"title":"verified_bot()","anchor":"t:verified_bot/0"},{"id":"verified_developer/0","deprecated":false,"title":"verified_developer()","anchor":"t:verified_developer/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".User.Flags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.VoiceRegion","deprecated":false,"group":"Structs","title":"Nostrum.Struct.VoiceRegion","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".VoiceRegion","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.VoiceWSState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.VoiceWSState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"t:conn/0"},{"id":"conn_pid/0","deprecated":false,"title":"conn_pid()","anchor":"t:conn_pid/0"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"t:gateway/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"heartbeat_ack/0","deprecated":false,"title":"heartbeat_ack()","anchor":"t:heartbeat_ack/0"},{"id":"heartbeat_interval/0","deprecated":false,"title":"heartbeat_interval()","anchor":"t:heartbeat_interval/0"},{"id":"heartbeat_ref/0","deprecated":false,"title":"heartbeat_ref()","anchor":"t:heartbeat_ref/0"},{"id":"identified/0","deprecated":false,"title":"identified()","anchor":"t:identified/0"},{"id":"last_heartbeat_ack/0","deprecated":false,"title":"last_heartbeat_ack()","anchor":"t:last_heartbeat_ack/0"},{"id":"last_heartbeat_send/0","deprecated":false,"title":"last_heartbeat_send()","anchor":"t:last_heartbeat_send/0"},{"id":"secret_key/0","deprecated":false,"title":"secret_key()","anchor":"t:secret_key/0"},{"id":"session/0","deprecated":false,"title":"session()","anchor":"t:session/0"},{"id":"ssrc_map/0","deprecated":false,"title":"ssrc_map()","anchor":"t:ssrc_map/0"},{"id":"stream/0","deprecated":false,"title":"stream()","anchor":"t:stream/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"}],"key":"types"}],"nested_title":".VoiceWSState","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.WSState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.WSState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"compress_ctx/0","deprecated":false,"title":"compress_ctx()","anchor":"t:compress_ctx/0"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"t:conn/0"},{"id":"conn_pid/0","deprecated":false,"title":"conn_pid()","anchor":"t:conn_pid/0"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"t:gateway/0"},{"id":"heartbeat_ack/0","deprecated":false,"title":"heartbeat_ack()","anchor":"t:heartbeat_ack/0"},{"id":"heartbeat_interval/0","deprecated":false,"title":"heartbeat_interval()","anchor":"t:heartbeat_interval/0"},{"id":"last_heartbeat_ack/0","deprecated":false,"title":"last_heartbeat_ack()","anchor":"t:last_heartbeat_ack/0"},{"id":"last_heartbeat_send/0","deprecated":false,"title":"last_heartbeat_send()","anchor":"t:last_heartbeat_send/0"},{"id":"resume_gateway/0","deprecated":false,"title":"resume_gateway()","anchor":"t:resume_gateway/0"},{"id":"seq/0","deprecated":false,"title":"seq()","anchor":"t:seq/0"},{"id":"session/0","deprecated":false,"title":"session()","anchor":"t:session/0"},{"id":"shard_num/0","deprecated":false,"title":"shard_num()","anchor":"t:shard_num/0"},{"id":"stream/0","deprecated":false,"title":"stream()","anchor":"t:stream/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"total_shards/0","deprecated":false,"title":"total_shards()","anchor":"t:total_shards/0"}],"key":"types"}],"nested_title":".WSState","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Webhook","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Webhook","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".Webhook","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Event.AutoModerationRuleExecute","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.AutoModerationRuleExecute","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action/0","deprecated":false,"title":"action()","anchor":"t:action/0"},{"id":"alert_system_message_id/0","deprecated":false,"title":"alert_system_message_id()","anchor":"t:alert_system_message_id/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"content/0","deprecated":false,"title":"content()","anchor":"t:content/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"matched_content/0","deprecated":false,"title":"matched_content()","anchor":"t:matched_content/0"},{"id":"matched_keyword/0","deprecated":false,"title":"matched_keyword()","anchor":"t:matched_keyword/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"rule_id/0","deprecated":false,"title":"rule_id()","anchor":"t:rule_id/0"},{"id":"rule_trigger_type/0","deprecated":false,"title":"rule_trigger_type()","anchor":"t:rule_trigger_type/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".AutoModerationRuleExecute","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ChannelPinsUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ChannelPinsUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"last_pin_timestamp/0","deprecated":false,"title":"last_pin_timestamp()","anchor":"t:last_pin_timestamp/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".ChannelPinsUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildBanAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildBanAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".GuildBanAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildBanRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildBanRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".GuildBanRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildIntegrationDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildIntegrationDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".GuildIntegrationDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildIntegrationsUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".GuildIntegrationsUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_scheduled_event_id/0","deprecated":false,"title":"guild_scheduled_event_id()","anchor":"t:guild_scheduled_event_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".GuildScheduledEventUserAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_scheduled_event_id/0","deprecated":false,"title":"guild_scheduled_event_id()","anchor":"t:guild_scheduled_event_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".GuildScheduledEventUserRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.InviteCreate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.InviteCreate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"created_at/0","deprecated":false,"title":"created_at()","anchor":"t:created_at/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"inviter/0","deprecated":false,"title":"inviter()","anchor":"t:inviter/0"},{"id":"max_age/0","deprecated":false,"title":"max_age()","anchor":"t:max_age/0"},{"id":"max_uses/0","deprecated":false,"title":"max_uses()","anchor":"t:max_uses/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_user/0","deprecated":false,"title":"target_user()","anchor":"t:target_user/0"},{"id":"target_user_type/0","deprecated":false,"title":"target_user_type()","anchor":"t:target_user_type/0"},{"id":"temporary/0","deprecated":false,"title":"temporary()","anchor":"t:temporary/0"},{"id":"uses/0","deprecated":false,"title":"uses()","anchor":"t:uses/0"}],"key":"types"}],"nested_title":".InviteCreate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.InviteDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.InviteDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".InviteDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deleted_message/0","deprecated":false,"title":"deleted_message()","anchor":"t:deleted_message/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageDeleteBulk","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageDeleteBulk","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deleted_messages/0","deprecated":false,"title":"deleted_messages()","anchor":"t:deleted_messages/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"ids/0","deprecated":false,"title":"ids()","anchor":"t:ids/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageDeleteBulk","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".MessageReactionAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".MessageReactionRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemoveAll","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemoveAll","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageReactionRemoveAll","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageReactionRemoveEmoji","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.PartialApplication","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.PartialApplication","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".PartialApplication","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.PollVoteChange","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.PollVoteChange","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_id/0","deprecated":false,"title":"answer_id()","anchor":"t:answer_id/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".PollVoteChange","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.Ready","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.Ready","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"guilds/0","deprecated":false,"title":"guilds()","anchor":"t:guilds/0"},{"id":"resume_gateway_url/0","deprecated":false,"title":"resume_gateway_url()","anchor":"t:resume_gateway_url/0"},{"id":"session_id/0","deprecated":false,"title":"session_id()","anchor":"t:session_id/0"},{"id":"shard/0","deprecated":false,"title":"shard()","anchor":"t:shard/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"},{"id":"v/0","deprecated":false,"title":"v()","anchor":"t:v/0"}],"key":"types"}],"nested_title":".Ready","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.SpeakingUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.SpeakingUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"current_url/0","deprecated":false,"title":"current_url()","anchor":"t:current_url/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"speaking/0","deprecated":false,"title":"speaking()","anchor":"t:speaking/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timed_out/0","deprecated":false,"title":"timed_out()","anchor":"t:timed_out/0"}],"key":"types"}],"nested_title":".SpeakingUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ThreadListSync","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ThreadListSync","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_ids/0","deprecated":false,"title":"channel_ids()","anchor":"t:channel_ids/0"},{"id":"guid_id/0","deprecated":false,"title":"guid_id()","anchor":"t:guid_id/0"},{"id":"members/0","deprecated":false,"title":"members()","anchor":"t:members/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"threads/0","deprecated":false,"title":"threads()","anchor":"t:threads/0"}],"key":"types"}],"nested_title":".ThreadListSync","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ThreadMembersUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ThreadMembersUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"added_members/0","deprecated":false,"title":"added_members()","anchor":"t:added_members/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"removed_member_ids/0","deprecated":false,"title":"removed_member_ids()","anchor":"t:removed_member_ids/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".ThreadMembersUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.TypingStart","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.TypingStart","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".TypingStart","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceReady","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceReady","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".VoiceReady","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceServerUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceServerUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"endpoint/0","deprecated":false,"title":"endpoint()","anchor":"t:endpoint/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"}],"key":"types"}],"nested_title":".VoiceServerUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deaf/0","deprecated":false,"title":"deaf()","anchor":"t:deaf/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"mute/0","deprecated":false,"title":"mute()","anchor":"t:mute/0"},{"id":"request_to_speak_timestamp/0","deprecated":false,"title":"request_to_speak_timestamp()","anchor":"t:request_to_speak_timestamp/0"},{"id":"self_deaf/0","deprecated":false,"title":"self_deaf()","anchor":"t:self_deaf/0"},{"id":"self_mute/0","deprecated":false,"title":"self_mute()","anchor":"t:self_mute/0"},{"id":"self_stream/0","deprecated":false,"title":"self_stream()","anchor":"t:self_stream/0"},{"id":"self_video/0","deprecated":false,"title":"self_video()","anchor":"t:self_video/0"},{"id":"session_id/0","deprecated":false,"title":"session_id()","anchor":"t:session_id/0"},{"id":"suppress/0","deprecated":false,"title":"suppress()","anchor":"t:suppress/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".VoiceState","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Constants.ApplicationCommandOptionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandOptionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attachment/0","deprecated":false,"title":"attachment()","anchor":"attachment/0"},{"id":"boolean/0","deprecated":false,"title":"boolean()","anchor":"boolean/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"integer/0","deprecated":false,"title":"integer()","anchor":"integer/0"},{"id":"mentionable/0","deprecated":false,"title":"mentionable()","anchor":"mentionable/0"},{"id":"number/0","deprecated":false,"title":"number()","anchor":"number/0"},{"id":"role/0","deprecated":false,"title":"role()","anchor":"role/0"},{"id":"string/0","deprecated":false,"title":"string()","anchor":"string/0"},{"id":"sub_command/0","deprecated":false,"title":"sub_command()","anchor":"sub_command/0"},{"id":"sub_command_group/0","deprecated":false,"title":"sub_command_group()","anchor":"sub_command_group/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandOptionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ApplicationCommandPermissionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandPermissionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"role/0","deprecated":false,"title":"role()","anchor":"role/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandPermissionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ApplicationCommandType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"chat_input/0","deprecated":false,"title":"chat_input()","anchor":"chat_input/0"},{"id":"message/0","deprecated":false,"title":"message()","anchor":"message/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ButtonStyle","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ButtonStyle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"danger/0","deprecated":false,"title":"danger()","anchor":"danger/0"},{"id":"link/0","deprecated":false,"title":"link()","anchor":"link/0"},{"id":"primary/0","deprecated":false,"title":"primary()","anchor":"primary/0"},{"id":"secondary/0","deprecated":false,"title":"secondary()","anchor":"secondary/0"},{"id":"success/0","deprecated":false,"title":"success()","anchor":"success/0"}],"key":"functions"}],"nested_title":".ButtonStyle","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ChannelType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ChannelType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"announcement_thread/0","deprecated":false,"title":"announcement_thread()","anchor":"announcement_thread/0"},{"id":"dm/0","deprecated":false,"title":"dm()","anchor":"dm/0"},{"id":"group_db/0","deprecated":false,"title":"group_db()","anchor":"group_db/0"},{"id":"guild_announcement/0","deprecated":false,"title":"guild_announcement()","anchor":"guild_announcement/0"},{"id":"guild_category/0","deprecated":false,"title":"guild_category()","anchor":"guild_category/0"},{"id":"guild_directory/0","deprecated":false,"title":"guild_directory()","anchor":"guild_directory/0"},{"id":"guild_forum/0","deprecated":false,"title":"guild_forum()","anchor":"guild_forum/0"},{"id":"guild_text/0","deprecated":false,"title":"guild_text()","anchor":"guild_text/0"},{"id":"guild_voice/0","deprecated":false,"title":"guild_voice()","anchor":"guild_voice/0"},{"id":"private_thread/0","deprecated":false,"title":"private_thread()","anchor":"private_thread/0"},{"id":"public_thread/0","deprecated":false,"title":"public_thread()","anchor":"public_thread/0"}],"key":"functions"}],"nested_title":".ChannelType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ComponentType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ComponentType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"action_row/0","deprecated":false,"title":"action_row()","anchor":"action_row/0"},{"id":"button/0","deprecated":false,"title":"button()","anchor":"button/0"},{"id":"channel_select/0","deprecated":false,"title":"channel_select()","anchor":"channel_select/0"},{"id":"mentionable_select/0","deprecated":false,"title":"mentionable_select()","anchor":"mentionable_select/0"},{"id":"role_select/0","deprecated":false,"title":"role_select()","anchor":"role_select/0"},{"id":"string_select/0","deprecated":false,"title":"string_select()","anchor":"string_select/0"},{"id":"text_input/0","deprecated":false,"title":"text_input()","anchor":"text_input/0"},{"id":"user_select/0","deprecated":false,"title":"user_select()","anchor":"user_select/0"}],"key":"functions"}],"nested_title":".ComponentType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.InteractionCallbackType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.InteractionCallbackType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_command_autocomplete_result/0","deprecated":false,"title":"application_command_autocomplete_result()","anchor":"application_command_autocomplete_result/0"},{"id":"channel_message_with_source/0","deprecated":false,"title":"channel_message_with_source()","anchor":"channel_message_with_source/0"},{"id":"deferred_channel_message_with_source/0","deprecated":false,"title":"deferred_channel_message_with_source()","anchor":"deferred_channel_message_with_source/0"},{"id":"deferred_update_message/0","deprecated":false,"title":"deferred_update_message()","anchor":"deferred_update_message/0"},{"id":"modal/0","deprecated":false,"title":"modal()","anchor":"modal/0"},{"id":"pong/0","deprecated":false,"title":"pong()","anchor":"pong/0"},{"id":"update_message/0","deprecated":false,"title":"update_message()","anchor":"update_message/0"}],"key":"functions"}],"nested_title":".InteractionCallbackType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.InteractionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.InteractionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_command/0","deprecated":false,"title":"application_command()","anchor":"application_command/0"},{"id":"application_command_autocomplete/0","deprecated":false,"title":"application_command_autocomplete()","anchor":"application_command_autocomplete/0"},{"id":"message_component/0","deprecated":false,"title":"message_component()","anchor":"message_component/0"},{"id":"modal_submit/0","deprecated":false,"title":"modal_submit()","anchor":"modal_submit/0"},{"id":"ping/0","deprecated":false,"title":"ping()","anchor":"ping/0"}],"key":"functions"}],"nested_title":".InteractionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.TextInputStyle","deprecated":false,"group":"Constants","title":"Nostrum.Constants.TextInputStyle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"paragraph/0","deprecated":false,"title":"paragraph()","anchor":"paragraph/0"},{"id":"short/0","deprecated":false,"title":"short()","anchor":"short/0"}],"key":"functions"}],"nested_title":".TextInputStyle","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.WebhookType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.WebhookType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application/0","deprecated":false,"title":"application()","anchor":"application/0"},{"id":"channel_follower/0","deprecated":false,"title":"channel_follower()","anchor":"channel_follower/0"},{"id":"incoming/0","deprecated":false,"title":"incoming()","anchor":"incoming/0"}],"key":"functions"}],"nested_title":".WebhookType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Snowflake","deprecated":false,"group":"Utilities","title":"Nostrum.Snowflake","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"external_snowflake/0","deprecated":false,"title":"external_snowflake()","anchor":"t:external_snowflake/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"cast/1","deprecated":false,"title":"cast(value)","anchor":"cast/1"},{"id":"cast!/1","deprecated":false,"title":"cast!(value)","anchor":"cast!/1"},{"id":"creation_time/1","deprecated":false,"title":"creation_time(snowflake)","anchor":"creation_time/1"},{"id":"dump/1","deprecated":false,"title":"dump(snowflake)","anchor":"dump/1"},{"id":"from_datetime/1","deprecated":false,"title":"from_datetime(datetime)","anchor":"from_datetime/1"},{"id":"from_datetime!/1","deprecated":false,"title":"from_datetime!(datetime)","anchor":"from_datetime!/1"},{"id":"is_snowflake/1","deprecated":false,"title":"is_snowflake(term)","anchor":"is_snowflake/1"}],"key":"functions"}]},{"id":"Nostrum.Token","deprecated":false,"group":"Utilities","title":"Nostrum.Token","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_token!/0","deprecated":false,"title":"check_token!()","anchor":"check_token!/0"},{"id":"check_token!/1","deprecated":false,"title":"check_token!(token)","anchor":"check_token!/1"}],"key":"functions"}]},{"id":"Nostrum.Util","deprecated":false,"group":"Utilities","title":"Nostrum.Util","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enum_to_struct/2","deprecated":false,"title":"enum_to_struct(enum, struct)","anchor":"enum_to_struct/2"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"gateway/0"},{"id":"get_all_shard_latencies/0","deprecated":false,"title":"get_all_shard_latencies()","anchor":"get_all_shard_latencies/0"},{"id":"get_shard_latency/1","deprecated":false,"title":"get_shard_latency(state)","anchor":"get_shard_latency/1"},{"id":"map_update_if_present/3","deprecated":false,"title":"map_update_if_present(map, key, fun)","anchor":"map_update_if_present/3"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(token)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_datetime/1","deprecated":false,"title":"maybe_to_datetime(dt)","anchor":"maybe_to_datetime/1"},{"id":"maybe_to_unixtime/1","deprecated":false,"title":"maybe_to_unixtime(stamp)","anchor":"maybe_to_unixtime/1"},{"id":"now/0","deprecated":false,"title":"now()","anchor":"now/0"},{"id":"now_iso/0","deprecated":false,"title":"now_iso()","anchor":"now_iso/0"},{"id":"num_shards/0","deprecated":false,"title":"num_shards()","anchor":"num_shards/0"},{"id":"safe_atom_map/1","deprecated":false,"title":"safe_atom_map(term)","anchor":"safe_atom_map/1"},{"id":"timestamp_like_to_snowflake/1","deprecated":false,"title":"timestamp_like_to_snowflake(snowflake)","anchor":"timestamp_like_to_snowflake/1"},{"id":"unused_atoms/0","deprecated":false,"title":"unused_atoms()","anchor":"unused_atoms/0"},{"id":"usec_now/0","deprecated":false,"title":"usec_now()","anchor":"usec_now/0"}],"key":"functions"}]},{"id":"Nostrum.Store.GuildShardMapping","deprecated":false,"group":"Stores","title":"Nostrum.Store.GuildShardMapping","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, shard_num)","anchor":"c:create/2"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"}],"key":"functions"}],"nested_title":".GuildShardMapping","nested_context":"Nostrum.Store"},{"id":"Nostrum.Store.Supervisor","deprecated":false,"group":"Stores","title":"Nostrum.Store.Supervisor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(list)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Supervisor","nested_context":"Nostrum.Store"},{"id":"Nostrum.Store.UnavailableGuild","deprecated":false,"group":"Stores","title":"Nostrum.Store.UnavailableGuild","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"},{"id":"Implementation","anchor":"module-implementation"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(id)","anchor":"c:create/1"},{"id":"is?/1","deprecated":false,"title":"is?(id)","anchor":"c:is?/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"}],"key":"functions"}],"nested_title":".UnavailableGuild","nested_context":"Nostrum.Store"},{"id":"Nostrum.Cache.MessageCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MessageCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_delete/2","deprecated":false,"title":"bulk_delete(channel_id, message_ids)","anchor":"bulk_delete/2"},{"id":"channel_delete/1","deprecated":false,"title":"channel_delete(channel_id)","anchor":"channel_delete/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/2","deprecated":false,"title":"delete(channel_id, message_id)","anchor":"delete/2"},{"id":"get/1","deprecated":false,"title":"get(message_id)","anchor":"get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_author/3"},{"id":"get_by_channel/3","deprecated":false,"title":"get_by_channel(channel_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(channel_id, author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel_and_author/4"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"query_handle/0","deprecated":false,"title":"query_handle()","anchor":"query_handle/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"}],"key":"functions"}],"nested_title":".MessageCache.Mnesia","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MessageCache.Noop","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MessageCache.Noop","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".MessageCache.Noop","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.ChannelGuildMapping.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(channel_id, guild_id)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(channel_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(channel_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.ChannelGuildMapping.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(channel_id, guild_id)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(channel_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(channel_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.ChannelGuildMapping.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.GuildCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel_create/2","deprecated":false,"title":"channel_create(guild_id, channel)","anchor":"channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(guild_id, channel_id)","anchor":"channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(guild_id, channel)","anchor":"channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(guild_id, emojis)","anchor":"emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(guild_id)","anchor":"member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(guild_id)","anchor":"member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(guild_id, role)","anchor":"role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(guild_id, role_id)","anchor":"role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(guild_id, role)","anchor":"role_update/2"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(guild_id, stickers)","anchor":"stickers_update/2"},{"id":"tabname/0","deprecated":false,"title":"tabname()","anchor":"tabname/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(guild_id, payload)","anchor":"voice_state_update/2"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.GuildCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel_create/2","deprecated":false,"title":"channel_create(guild_id, channel)","anchor":"channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(guild_id, channel_id)","anchor":"channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(guild_id, channel)","anchor":"channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(guild_id, payload)","anchor":"emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(guild_id)","anchor":"member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(guild_id)","anchor":"member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(guild_id, payload)","anchor":"role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(guild_id, role_id)","anchor":"role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(guild_id, role)","anchor":"role_update/2"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(guild_id, stickers)","anchor":"stickers_update/2"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(guild_id, payload)","anchor":"voice_state_update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.GuildCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.MemberCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, members)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/2","deprecated":false,"title":"create(guild_id, payload)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(guild_id, user_id)","anchor":"delete/2"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/2","deprecated":false,"title":"update(guild_id, payload)","anchor":"update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.MemberCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, members)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/2","deprecated":false,"title":"create(guild_id, payload)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(guild_id, user_id)","anchor":"delete/2"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/2","deprecated":false,"title":"update(guild_id, payload)","anchor":"update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.MemberCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.PresenceCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, presences)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/1","deprecated":false,"title":"update(new)","anchor":"update/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.PresenceCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, presences)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(new)","anchor":"update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.PresenceCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.UserCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(users)","anchor":"bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/1","deprecated":false,"title":"update(info)","anchor":"update/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Cache.UserCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(users)","anchor":"bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(user_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(user_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Cache.UserCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Store.GuildShardMapping.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.GuildShardMapping.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Store.GuildShardMapping"},{"id":"Nostrum.Store.GuildShardMapping.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.GuildShardMapping.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Store.GuildShardMapping"},{"id":"Nostrum.Store.UnavailableGuild.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.UnavailableGuild.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Store.UnavailableGuild"},{"id":"Nostrum.Store.UnavailableGuild.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.UnavailableGuild.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Store.UnavailableGuild"},{"id":"Nostrum.Api.Ratelimiter","deprecated":false,"group":"Internal modules","title":"Nostrum.Api.Ratelimiter","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Asynchronous requests","anchor":"module-asynchronous-requests"},{"id":"Multi-node","anchor":"module-multi-node"},{"id":"Inner workings","anchor":"module-inner-workings"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"t:bucket/0"},{"id":"queued_request/0","deprecated":false,"title":"queued_request()","anchor":"t:queued_request/0"},{"id":"remaining/0","deprecated":false,"title":"remaining()","anchor":"t:remaining/0"},{"id":"request/0","deprecated":false,"title":"request()","anchor":"t:request/0"},{"id":"state/0","deprecated":false,"title":"state()","anchor":"t:state/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"callback_mode/0","deprecated":false,"title":"callback_mode()","anchor":"callback_mode/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"code_change/4","deprecated":false,"title":"code_change(version, state, data, extra)","anchor":"code_change/4"},{"id":"connected/3","deprecated":false,"title":"connected(arg1, request, data)","anchor":"connected/3"},{"id":"connecting/3","deprecated":false,"title":"connecting(arg1, arg2, data)","anchor":"connecting/3"},{"id":"disconnected/3","deprecated":false,"title":"disconnected(arg, arg2, data)","anchor":"disconnected/3"},{"id":"get_endpoint/2","deprecated":false,"title":"get_endpoint(route, method)","anchor":"get_endpoint/2"},{"id":"global_limit/3","deprecated":false,"title":"global_limit(arg1, next, data)","anchor":"global_limit/3"},{"id":"init/1","deprecated":false,"title":"init(token)","anchor":"init/1"},{"id":"queue/1","deprecated":false,"title":"queue(request)","anchor":"queue/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Api.RatelimiterGroup","deprecated":false,"group":"Internal modules","title":"Nostrum.Api.RatelimiterGroup","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Approach","anchor":"module-approach"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"join/1","deprecated":false,"title":"join(pid)","anchor":"join/1"},{"id":"limiter_for_bucket/1","deprecated":false,"title":"limiter_for_bucket(bucket)","anchor":"limiter_for_bucket/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Inner workings","anchor":"module-inner-workings"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"callback_mode/0","deprecated":false,"title":"callback_mode()","anchor":"callback_mode/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"connected/3","deprecated":false,"title":"connected(arg1, request, data)","anchor":"connected/3"},{"id":"connecting_http/3","deprecated":false,"title":"connecting_http(arg1, from, data)","anchor":"connecting_http/3"},{"id":"connecting_ws/3","deprecated":false,"title":"connecting_ws(arg1, arg2, data)","anchor":"connecting_ws/3"},{"id":"disconnect/1","deprecated":false,"title":"disconnect(pid)","anchor":"disconnect/1"},{"id":"disconnect/2","deprecated":false,"title":"disconnect(pid, timeout)","anchor":"disconnect/2"},{"id":"disconnected/3","deprecated":false,"title":"disconnected(arg1, arg2, data)","anchor":"disconnected/3"},{"id":"format_status/1","deprecated":false,"title":"format_status(state)","anchor":"format_status/1"},{"id":"get_ws_state/1","deprecated":false,"title":"get_ws_state(pid)","anchor":"get_ws_state/1"},{"id":"init/1","deprecated":false,"title":"init(arg1)","anchor":"init/1"},{"id":"request_guild_members/3","deprecated":false,"title":"request_guild_members(pid, guild_id, limit \\\\ 0)","anchor":"request_guild_members/3"},{"id":"start_link/2","deprecated":false,"title":"start_link(opts, statem_opts)","anchor":"start_link/2"},{"id":"update_status/5","deprecated":false,"title":"update_status(pid, status, game, stream, type)","anchor":"update_status/5"},{"id":"update_voice_state/5","deprecated":false,"title":"update_voice_state(pid, guild_id, channel_id, self_mute, self_deaf)","anchor":"update_voice_state/5"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session.Compression","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"c:create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(reference, iodata)","anchor":"c:inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(reference)","anchor":"c:reset_context/1"}],"key":"callbacks"}]},{"id":"Nostrum.Shard.Session.Compression.Zlib","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression.Zlib","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(ctx, frame)","anchor":"inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(ctx)","anchor":"reset_context/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session.Compression.Zstd","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression.Zstd","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_available!/0","deprecated":false,"title":"check_available!()","anchor":"check_available!/0"},{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(ctx, frame)","anchor":"inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(ctx)","anchor":"reset_context/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Supervisor","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Supervisor","sections":[{"id":"Implementation","anchor":"module-implementation"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"resume_information/0","deprecated":false,"title":"resume_information()","anchor":"t:resume_information/0"},{"id":"shard_num/0","deprecated":false,"title":"shard_num()","anchor":"t:shard_num/0"},{"id":"total_shards/0","deprecated":false,"title":"total_shards()","anchor":"t:total_shards/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"connect/2","deprecated":false,"title":"connect(shard_num, total_shards)","anchor":"connect/2"},{"id":"disconnect/1","deprecated":false,"title":"disconnect(shard_num)","anchor":"disconnect/1"},{"id":"reconnect/1","deprecated":false,"title":"reconnect(opts)","anchor":"reconnect/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(args)","anchor":"start_link/1"},{"id":"update_status/4","deprecated":false,"title":"update_status(status, game, stream, type)","anchor":"update_status/4"},{"id":"update_voice_state/4","deprecated":false,"title":"update_voice_state(guild_id, channel_id, self_mute, self_deaf)","anchor":"update_voice_state/4"}],"key":"functions"}]},{"id":"Nostrum.StateMachineTranslator","deprecated":false,"group":"Internal modules","title":"Nostrum.StateMachineTranslator","sections":[{"id":"Reasoning","anchor":"module-reasoning"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"translate/4","deprecated":false,"title":"translate(min_level, arg2, arg3, arg4)","anchor":"translate/4"}],"key":"functions"}]},{"id":"Nostrum.Error.ApiError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.ApiError","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"detailed_error/0","deprecated":false,"title":"detailed_error()","anchor":"t:detailed_error/0"},{"id":"discord_status_code/0","deprecated":false,"title":"discord_status_code()","anchor":"t:discord_status_code/0"},{"id":"error/0","deprecated":false,"title":"error()","anchor":"t:error/0"},{"id":"error_list_map/0","deprecated":false,"title":"error_list_map()","anchor":"t:error_list_map/0"},{"id":"errors/0","deprecated":false,"title":"errors()","anchor":"t:errors/0"},{"id":"response/0","deprecated":false,"title":"response()","anchor":"t:response/0"},{"id":"status_code/0","deprecated":false,"title":"status_code()","anchor":"t:status_code/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Nostrum.Error.CacheError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.CacheError","sections":[]},{"id":"Nostrum.Error.VoiceError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.VoiceError","sections":[]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"mix-tasks"}]},{"id":"intro","group":"","title":"Introduction","headers":[{"id":"Setup","anchor":"setup"},{"id":"Configuration options","anchor":"configuration-options"},{"id":"Logging","anchor":"logging"},{"id":"Example bots","anchor":"example-bots"}]},{"id":"api-4","group":"","title":"API","headers":[{"id":"Banged (!) API methods","anchor":"banged-api-methods"},{"id":"Abstractions","anchor":"abstractions"},{"id":"Ratelimiting","anchor":"ratelimiting"},{"id":"REST-only","anchor":"rest-only"}]},{"id":"application_commands","group":"","title":"Application commands","headers":[{"id":"Permissions required","anchor":"permissions-required"},{"id":"Getting started","anchor":"getting-started"},{"id":"Receiving interactions","anchor":"receiving-interactions"},{"id":"Responding to interactions","anchor":"responding-to-interactions"}]},{"id":"gateway_intents","group":"","title":"Gateway Intents","headers":[]},{"id":"event_handling","group":"Functionality","title":"Event handling","headers":[]},{"id":"state","group":"Functionality","title":"State","headers":[{"id":"Caches","anchor":"caches"},{"id":"Implementing your own caches","anchor":"implementing-your-own-caches"},{"id":"Internal state","anchor":"internal-state"}]},{"id":"voice-3","group":"Functionality","title":"Voice","headers":[{"id":"Voice channels","anchor":"voice-channels"},{"id":"FFmpeg","anchor":"ffmpeg"},{"id":"youtube-dl","anchor":"youtube-dl"},{"id":"streamlink","anchor":"streamlink"},{"id":"Audio Timeout","anchor":"audio-timeout"},{"id":"Audio Frames Per Burst","anchor":"audio-frames-per-burst"},{"id":"Voice Events","anchor":"voice-events"},{"id":"Encryption Modes","anchor":"encryption-modes"}]},{"id":"gateway_compression","group":"Advanced","title":"Gateway Compression","headers":[{"id":"Using :zstd compression","anchor":"using-zstd-compression"}]},{"id":"hot_code_upgrade","group":"Advanced","title":"Hot code upgrade","headers":[]},{"id":"manual_sharding","group":"Advanced","title":"Manual Sharding","headers":[{"id":"Reconnection example","anchor":"reconnection-example"}]},{"id":"multi_node","group":"Advanced","title":"Multi-node","headers":[{"id":"High availability","anchor":"high-availability"}]},{"id":"pluggable_caching","group":"Advanced","title":"Pluggable caching","headers":[{"id":"Implementations","anchor":"implementations"},{"id":"Cache invalidation","anchor":"cache-invalidation"},{"id":"Cache performance","anchor":"cache-performance"}]},{"id":"api-1","group":"Cheat Sheets","title":"API Usage","headers":[{"id":"Messages","anchor":"messages"},{"id":"Miscellaneous","anchor":"miscellaneous"}]},{"id":"voice-2","group":"Cheat Sheets","title":"Voice Usage","headers":[{"id":"Playing Audio","anchor":"playing-audio"},{"id":"Audio FFmpeg options","anchor":"audio-ffmpeg-options"}]}],"tasks":[{"id":"Mix.Tasks.Gh.Docs","deprecated":false,"group":"","title":"mix gh.docs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(_)","anchor":"run/1"}],"key":"functions"}]}]} \ No newline at end of file +sidebarNodes={"modules":[{"id":"Nostrum.Api","deprecated":false,"group":"Api","title":"Nostrum.Api","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allowed_mention/0","deprecated":false,"title":"allowed_mention()","anchor":"t:allowed_mention/0"},{"id":"allowed_mentions/0","deprecated":false,"title":"allowed_mentions()","anchor":"t:allowed_mentions/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"error/0","deprecated":false,"title":"error()","anchor":"t:error/0"},{"id":"limit/0","deprecated":false,"title":"limit()","anchor":"t:limit/0"},{"id":"locator/0","deprecated":false,"title":"locator()","anchor":"t:locator/0"},{"id":"matrix/0","deprecated":false,"title":"matrix()","anchor":"t:matrix/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"t:status/0"},{"id":"thread_with_message_params/0","deprecated":false,"title":"thread_with_message_params()","anchor":"t:thread_with_message_params/0"},{"id":"thread_without_message_params/0","deprecated":false,"title":"thread_without_message_params()","anchor":"t:thread_without_message_params/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_guild_member/3","deprecated":false,"title":"add_guild_member(guild_id, user_id, options)","anchor":"add_guild_member/3"},{"id":"add_guild_member!/3","deprecated":false,"title":"add_guild_member!(guild_id, user_id, options)","anchor":"add_guild_member!/3"},{"id":"add_guild_member_role/4","deprecated":false,"title":"add_guild_member_role(guild_id, user_id, role_id, reason \\\\ nil)","anchor":"add_guild_member_role/4"},{"id":"add_pinned_channel_message/2","deprecated":false,"title":"add_pinned_channel_message(channel_id, message_id)","anchor":"add_pinned_channel_message/2"},{"id":"add_pinned_channel_message!/2","deprecated":false,"title":"add_pinned_channel_message!(channel_id, message_id)","anchor":"add_pinned_channel_message!/2"},{"id":"add_thread_member/2","deprecated":false,"title":"add_thread_member(thread_id, user_id)","anchor":"add_thread_member/2"},{"id":"batch_edit_application_command_permissions/3","deprecated":false,"title":"batch_edit_application_command_permissions(application_id \\\\ Me.get().id, guild_id, permissions)","anchor":"batch_edit_application_command_permissions/3"},{"id":"begin_guild_prune/3","deprecated":false,"title":"begin_guild_prune(guild_id, days, reason \\\\ nil)","anchor":"begin_guild_prune/3"},{"id":"begin_guild_prune!/3","deprecated":false,"title":"begin_guild_prune!(guild_id, days, reason)","anchor":"begin_guild_prune!/3"},{"id":"bulk_delete_messages/3","deprecated":false,"title":"bulk_delete_messages(channel_id, messages, filter \\\\ true)","anchor":"bulk_delete_messages/3"},{"id":"bulk_delete_messages!/3","deprecated":false,"title":"bulk_delete_messages!(channel_id, messages, filter \\\\ true)","anchor":"bulk_delete_messages!/3"},{"id":"bulk_overwrite_global_application_commands/2","deprecated":false,"title":"bulk_overwrite_global_application_commands(application_id \\\\ Me.get().id, commands)","anchor":"bulk_overwrite_global_application_commands/2"},{"id":"bulk_overwrite_guild_application_commands/3","deprecated":false,"title":"bulk_overwrite_guild_application_commands(application_id \\\\ Me.get().id, guild_id, commands)","anchor":"bulk_overwrite_guild_application_commands/3"},{"id":"create_channel_invite/3","deprecated":false,"title":"create_channel_invite(channel_id, options \\\\ [], reason \\\\ nil)","anchor":"create_channel_invite/3"},{"id":"create_channel_invite!/3","deprecated":false,"title":"create_channel_invite!(channel_id, options \\\\ [], reason \\\\ nil)","anchor":"create_channel_invite!/3"},{"id":"create_dm/1","deprecated":false,"title":"create_dm(user_id)","anchor":"create_dm/1"},{"id":"create_dm!/1","deprecated":false,"title":"create_dm!(user_id)","anchor":"create_dm!/1"},{"id":"create_followup_message/3","deprecated":false,"title":"create_followup_message(application_id \\\\ Me.get().id, token, webhook_payload)","anchor":"create_followup_message/3"},{"id":"create_followup_message!/3","deprecated":false,"title":"create_followup_message!(application_id \\\\ Me.get().id, token, webhook_payload)","anchor":"create_followup_message!/3"},{"id":"create_global_application_command/2","deprecated":false,"title":"create_global_application_command(application_id \\\\ Me.get().id, command)","anchor":"create_global_application_command/2"},{"id":"create_group_dm/2","deprecated":false,"title":"create_group_dm(access_tokens, nicks)","anchor":"create_group_dm/2"},{"id":"create_group_dm!/2","deprecated":false,"title":"create_group_dm!(access_tokens, nicks)","anchor":"create_group_dm!/2"},{"id":"create_guild_application_command/3","deprecated":false,"title":"create_guild_application_command(application_id \\\\ Me.get().id, guild_id, command)","anchor":"create_guild_application_command/3"},{"id":"create_guild_auto_moderation_rule/2","deprecated":false,"title":"create_guild_auto_moderation_rule(guild_id, options)","anchor":"create_guild_auto_moderation_rule/2"},{"id":"create_guild_ban/4","deprecated":false,"title":"create_guild_ban(guild_id, user_id, days_to_delete, reason \\\\ nil)","anchor":"create_guild_ban/4"},{"id":"create_guild_channel/2","deprecated":false,"title":"create_guild_channel(guild_id, options)","anchor":"create_guild_channel/2"},{"id":"create_guild_channel!/2","deprecated":false,"title":"create_guild_channel!(guild_id, options)","anchor":"create_guild_channel!/2"},{"id":"create_guild_emoji/3","deprecated":false,"title":"create_guild_emoji(guild_id, options, reason \\\\ nil)","anchor":"create_guild_emoji/3"},{"id":"create_guild_emoji!/3","deprecated":false,"title":"create_guild_emoji!(guild_id, params, reason \\\\ nil)","anchor":"create_guild_emoji!/3"},{"id":"create_guild_integrations/2","deprecated":false,"title":"create_guild_integrations(guild_id, options)","anchor":"create_guild_integrations/2"},{"id":"create_guild_role/3","deprecated":false,"title":"create_guild_role(guild_id, options, reason \\\\ nil)","anchor":"create_guild_role/3"},{"id":"create_guild_role!/3","deprecated":false,"title":"create_guild_role!(guild_id, options, reason \\\\ nil)","anchor":"create_guild_role!/3"},{"id":"create_guild_scheduled_event/3","deprecated":false,"title":"create_guild_scheduled_event(guild_id, reason \\\\ nil, options)","anchor":"create_guild_scheduled_event/3"},{"id":"create_guild_sticker/6","deprecated":false,"title":"create_guild_sticker(guild_id, name, description, tags, file, reason \\\\ nil)","anchor":"create_guild_sticker/6"},{"id":"create_interaction_response/2","deprecated":false,"title":"create_interaction_response(interaction, response)","anchor":"create_interaction_response/2"},{"id":"create_interaction_response/3","deprecated":false,"title":"create_interaction_response(id, token, response)","anchor":"create_interaction_response/3"},{"id":"create_interaction_response!/2","deprecated":false,"title":"create_interaction_response!(interaction, response)","anchor":"create_interaction_response!/2"},{"id":"create_interaction_response!/3","deprecated":false,"title":"create_interaction_response!(id, token, response)","anchor":"create_interaction_response!/3"},{"id":"create_message/2","deprecated":false,"title":"create_message(channel_id, options)","anchor":"create_message/2"},{"id":"create_message!/2","deprecated":false,"title":"create_message!(channel_id, options)","anchor":"create_message!/2"},{"id":"create_reaction/3","deprecated":false,"title":"create_reaction(channel_id, message_id, emoji)","anchor":"create_reaction/3"},{"id":"create_reaction!/3","deprecated":false,"title":"create_reaction!(channel_id, message_id, emoji)","anchor":"create_reaction!/3"},{"id":"create_webhook/3","deprecated":false,"title":"create_webhook(channel_id, args, reason \\\\ nil)","anchor":"create_webhook/3"},{"id":"delete_all_reactions/2","deprecated":false,"title":"delete_all_reactions(channel_id, message_id)","anchor":"delete_all_reactions/2"},{"id":"delete_all_reactions!/2","deprecated":false,"title":"delete_all_reactions!(channel_id, message_id)","anchor":"delete_all_reactions!/2"},{"id":"delete_channel/2","deprecated":false,"title":"delete_channel(channel_id, reason \\\\ nil)","anchor":"delete_channel/2"},{"id":"delete_channel!/2","deprecated":false,"title":"delete_channel!(channel_id, reason \\\\ nil)","anchor":"delete_channel!/2"},{"id":"delete_channel_permissions/3","deprecated":false,"title":"delete_channel_permissions(channel_id, overwrite_id, reason \\\\ nil)","anchor":"delete_channel_permissions/3"},{"id":"delete_global_application_command/2","deprecated":false,"title":"delete_global_application_command(application_id \\\\ Me.get().id, command_id)","anchor":"delete_global_application_command/2"},{"id":"delete_guild/1","deprecated":false,"title":"delete_guild(guild_id)","anchor":"delete_guild/1"},{"id":"delete_guild!/1","deprecated":false,"title":"delete_guild!(guild_id)","anchor":"delete_guild!/1"},{"id":"delete_guild_application_command/3","deprecated":false,"title":"delete_guild_application_command(application_id \\\\ Me.get().id, guild_id, command_id)","anchor":"delete_guild_application_command/3"},{"id":"delete_guild_auto_moderation_rule/2","deprecated":false,"title":"delete_guild_auto_moderation_rule(guild_id, rule_id)","anchor":"delete_guild_auto_moderation_rule/2"},{"id":"delete_guild_emoji/3","deprecated":false,"title":"delete_guild_emoji(guild_id, emoji_id, reason \\\\ nil)","anchor":"delete_guild_emoji/3"},{"id":"delete_guild_emoji!/3","deprecated":false,"title":"delete_guild_emoji!(guild_id, emoji_id, reason \\\\ nil)","anchor":"delete_guild_emoji!/3"},{"id":"delete_guild_integrations/2","deprecated":false,"title":"delete_guild_integrations(guild_id, integration_id)","anchor":"delete_guild_integrations/2"},{"id":"delete_guild_role/3","deprecated":false,"title":"delete_guild_role(guild_id, role_id, reason \\\\ nil)","anchor":"delete_guild_role/3"},{"id":"delete_guild_role!/3","deprecated":false,"title":"delete_guild_role!(guild_id, role_id, reason \\\\ nil)","anchor":"delete_guild_role!/3"},{"id":"delete_guild_scheduled_event/2","deprecated":false,"title":"delete_guild_scheduled_event(guild_id, event_id)","anchor":"delete_guild_scheduled_event/2"},{"id":"delete_guild_sticker/2","deprecated":false,"title":"delete_guild_sticker(guild_id, sticker_id)","anchor":"delete_guild_sticker/2"},{"id":"delete_interaction_followup_message/3","deprecated":false,"title":"delete_interaction_followup_message(application_id \\\\ Me.get().id, token, message_id)","anchor":"delete_interaction_followup_message/3"},{"id":"delete_interaction_followup_message!/3","deprecated":false,"title":"delete_interaction_followup_message!(application_id \\\\ Me.get().id, token, message_id)","anchor":"delete_interaction_followup_message!/3"},{"id":"delete_interaction_response/1","deprecated":false,"title":"delete_interaction_response(interaction)","anchor":"delete_interaction_response/1"},{"id":"delete_interaction_response/2","deprecated":false,"title":"delete_interaction_response(id \\\\ Me.get().id, token)","anchor":"delete_interaction_response/2"},{"id":"delete_interaction_response!/1","deprecated":false,"title":"delete_interaction_response!(interaction)","anchor":"delete_interaction_response!/1"},{"id":"delete_interaction_response!/2","deprecated":false,"title":"delete_interaction_response!(id \\\\ Me.get().id, token)","anchor":"delete_interaction_response!/2"},{"id":"delete_invite/1","deprecated":false,"title":"delete_invite(invite_code)","anchor":"delete_invite/1"},{"id":"delete_invite!/1","deprecated":false,"title":"delete_invite!(invite_code)","anchor":"delete_invite!/1"},{"id":"delete_message/1","deprecated":false,"title":"delete_message(message)","anchor":"delete_message/1"},{"id":"delete_message/2","deprecated":false,"title":"delete_message(channel_id, message_id)","anchor":"delete_message/2"},{"id":"delete_message!/1","deprecated":false,"title":"delete_message!(message)","anchor":"delete_message!/1"},{"id":"delete_message!/2","deprecated":false,"title":"delete_message!(channel_id, message_id)","anchor":"delete_message!/2"},{"id":"delete_own_reaction/3","deprecated":false,"title":"delete_own_reaction(channel_id, message_id, emoji)","anchor":"delete_own_reaction/3"},{"id":"delete_own_reaction!/3","deprecated":false,"title":"delete_own_reaction!(channel_id, message_id, emoji)","anchor":"delete_own_reaction!/3"},{"id":"delete_pinned_channel_message/2","deprecated":false,"title":"delete_pinned_channel_message(channel_id, message_id)","anchor":"delete_pinned_channel_message/2"},{"id":"delete_pinned_channel_message!/2","deprecated":false,"title":"delete_pinned_channel_message!(channel_id, message_id)","anchor":"delete_pinned_channel_message!/2"},{"id":"delete_reaction/3","deprecated":false,"title":"delete_reaction(channel_id, message_id, emoji)","anchor":"delete_reaction/3"},{"id":"delete_reaction!/3","deprecated":false,"title":"delete_reaction!(channel_id, message_id, emoji)","anchor":"delete_reaction!/3"},{"id":"delete_user_reaction/4","deprecated":false,"title":"delete_user_reaction(channel_id, message_id, emoji, user_id)","anchor":"delete_user_reaction/4"},{"id":"delete_user_reaction!/4","deprecated":false,"title":"delete_user_reaction!(channel_id, message_id, emoji, user_id)","anchor":"delete_user_reaction!/4"},{"id":"delete_webhook/2","deprecated":false,"title":"delete_webhook(webhook_id, reason \\\\ nil)","anchor":"delete_webhook/2"},{"id":"edit_application_command_permissions/4","deprecated":false,"title":"edit_application_command_permissions(application_id \\\\ Me.get().id, guild_id, command_id, permissions)","anchor":"edit_application_command_permissions/4"},{"id":"edit_channel_permissions/4","deprecated":false,"title":"edit_channel_permissions(channel_id, overwrite_id, permission_info, reason \\\\ nil)","anchor":"edit_channel_permissions/4"},{"id":"edit_channel_permissions!/4","deprecated":false,"title":"edit_channel_permissions!(channel_id, overwrite_id, permission_info, reason \\\\ nil)","anchor":"edit_channel_permissions!/4"},{"id":"edit_global_application_command/3","deprecated":false,"title":"edit_global_application_command(application_id \\\\ Me.get().id, command_id, command)","anchor":"edit_global_application_command/3"},{"id":"edit_guild_application_command/4","deprecated":false,"title":"edit_guild_application_command(application_id \\\\ Me.get().id, guild_id, command_id, command)","anchor":"edit_guild_application_command/4"},{"id":"edit_interaction_response/2","deprecated":false,"title":"edit_interaction_response(interaction, response)","anchor":"edit_interaction_response/2"},{"id":"edit_interaction_response/3","deprecated":false,"title":"edit_interaction_response(id \\\\ Me.get().id, token, response)","anchor":"edit_interaction_response/3"},{"id":"edit_interaction_response!/2","deprecated":false,"title":"edit_interaction_response!(interaction, response)","anchor":"edit_interaction_response!/2"},{"id":"edit_interaction_response!/3","deprecated":false,"title":"edit_interaction_response!(id \\\\ Me.get().id, token, response)","anchor":"edit_interaction_response!/3"},{"id":"edit_message/2","deprecated":false,"title":"edit_message(message, options)","anchor":"edit_message/2"},{"id":"edit_message/3","deprecated":false,"title":"edit_message(channel_id, message_id, options)","anchor":"edit_message/3"},{"id":"edit_message!/2","deprecated":false,"title":"edit_message!(message, options)","anchor":"edit_message!/2"},{"id":"edit_message!/3","deprecated":false,"title":"edit_message!(channel_id, message_id, options)","anchor":"edit_message!/3"},{"id":"edit_webhook_message/4","deprecated":false,"title":"edit_webhook_message(webhook_id, webhook_token, message_id, args)","anchor":"edit_webhook_message/4"},{"id":"execute_git_webhook/3","deprecated":false,"title":"execute_git_webhook(webhook_id, webhook_token, wait \\\\ false)","anchor":"execute_git_webhook/3"},{"id":"execute_slack_webhook/3","deprecated":false,"title":"execute_slack_webhook(webhook_id, webhook_token, wait \\\\ false)","anchor":"execute_slack_webhook/3"},{"id":"execute_webhook/4","deprecated":false,"title":"execute_webhook(webhook_id, webhook_token, args, wait \\\\ false)","anchor":"execute_webhook/4"},{"id":"expire_poll/2","deprecated":false,"title":"expire_poll(channel_id, message_id)","anchor":"expire_poll/2"},{"id":"expire_poll!/2","deprecated":false,"title":"expire_poll!(channel_id, message_id)","anchor":"expire_poll!/2"},{"id":"get_application_command_permissions/3","deprecated":false,"title":"get_application_command_permissions(application_id \\\\ Me.get().id, guild_id, command_id)","anchor":"get_application_command_permissions/3"},{"id":"get_application_information/0","deprecated":false,"title":"get_application_information()","anchor":"get_application_information/0"},{"id":"get_channel/1","deprecated":false,"title":"get_channel(channel_id)","anchor":"get_channel/1"},{"id":"get_channel!/1","deprecated":false,"title":"get_channel!(channel_id)","anchor":"get_channel!/1"},{"id":"get_channel_invites/1","deprecated":false,"title":"get_channel_invites(channel_id)","anchor":"get_channel_invites/1"},{"id":"get_channel_invites!/1","deprecated":false,"title":"get_channel_invites!(channel_id)","anchor":"get_channel_invites!/1"},{"id":"get_channel_message/2","deprecated":false,"title":"get_channel_message(channel_id, message_id)","anchor":"get_channel_message/2"},{"id":"get_channel_message!/2","deprecated":false,"title":"get_channel_message!(channel_id, message_id)","anchor":"get_channel_message!/2"},{"id":"get_channel_messages/3","deprecated":false,"title":"get_channel_messages(channel_id, limit, locator \\\\ {})","anchor":"get_channel_messages/3"},{"id":"get_channel_messages!/3","deprecated":false,"title":"get_channel_messages!(channel_id, limit, locator \\\\ {})","anchor":"get_channel_messages!/3"},{"id":"get_channel_webhooks/1","deprecated":false,"title":"get_channel_webhooks(channel_id)","anchor":"get_channel_webhooks/1"},{"id":"get_current_user/0","deprecated":false,"title":"get_current_user()","anchor":"get_current_user/0"},{"id":"get_current_user!/0","deprecated":false,"title":"get_current_user!()","anchor":"get_current_user!/0"},{"id":"get_current_user_guilds/1","deprecated":false,"title":"get_current_user_guilds(options \\\\ [])","anchor":"get_current_user_guilds/1"},{"id":"get_current_user_guilds!/1","deprecated":false,"title":"get_current_user_guilds!(options \\\\ [])","anchor":"get_current_user_guilds!/1"},{"id":"get_global_application_commands/1","deprecated":false,"title":"get_global_application_commands(application_id \\\\ Me.get().id)","anchor":"get_global_application_commands/1"},{"id":"get_guild/1","deprecated":false,"title":"get_guild(guild_id)","anchor":"get_guild/1"},{"id":"get_guild!/1","deprecated":false,"title":"get_guild!(guild_id)","anchor":"get_guild!/1"},{"id":"get_guild_application_command_permissions/2","deprecated":false,"title":"get_guild_application_command_permissions(application_id \\\\ Me.get().id, guild_id)","anchor":"get_guild_application_command_permissions/2"},{"id":"get_guild_application_commands/2","deprecated":false,"title":"get_guild_application_commands(application_id \\\\ Me.get().id, guild_id)","anchor":"get_guild_application_commands/2"},{"id":"get_guild_audit_log/2","deprecated":false,"title":"get_guild_audit_log(guild_id, options \\\\ [])","anchor":"get_guild_audit_log/2"},{"id":"get_guild_auto_moderation_rule/2","deprecated":false,"title":"get_guild_auto_moderation_rule(guild_id, rule_id)","anchor":"get_guild_auto_moderation_rule/2"},{"id":"get_guild_auto_moderation_rules/1","deprecated":false,"title":"get_guild_auto_moderation_rules(guild_id)","anchor":"get_guild_auto_moderation_rules/1"},{"id":"get_guild_ban/2","deprecated":false,"title":"get_guild_ban(guild_id, user_id)","anchor":"get_guild_ban/2"},{"id":"get_guild_bans/1","deprecated":false,"title":"get_guild_bans(guild_id)","anchor":"get_guild_bans/1"},{"id":"get_guild_channels/1","deprecated":false,"title":"get_guild_channels(guild_id)","anchor":"get_guild_channels/1"},{"id":"get_guild_channels!/1","deprecated":false,"title":"get_guild_channels!(guild_id)","anchor":"get_guild_channels!/1"},{"id":"get_guild_emoji/2","deprecated":false,"title":"get_guild_emoji(guild_id, emoji_id)","anchor":"get_guild_emoji/2"},{"id":"get_guild_emoji!/2","deprecated":false,"title":"get_guild_emoji!(guild_id, emoji_id)","anchor":"get_guild_emoji!/2"},{"id":"get_guild_integrations/1","deprecated":false,"title":"get_guild_integrations(guild_id)","anchor":"get_guild_integrations/1"},{"id":"get_guild_invites/1","deprecated":false,"title":"get_guild_invites(guild_id)","anchor":"get_guild_invites/1"},{"id":"get_guild_invites!/1","deprecated":false,"title":"get_guild_invites!(guild_id)","anchor":"get_guild_invites!/1"},{"id":"get_guild_member/2","deprecated":false,"title":"get_guild_member(guild_id, user_id)","anchor":"get_guild_member/2"},{"id":"get_guild_member!/2","deprecated":false,"title":"get_guild_member!(guild_id, user_id)","anchor":"get_guild_member!/2"},{"id":"get_guild_prune_count/2","deprecated":false,"title":"get_guild_prune_count(guild_id, days)","anchor":"get_guild_prune_count/2"},{"id":"get_guild_prune_count!/2","deprecated":false,"title":"get_guild_prune_count!(guild_id, days)","anchor":"get_guild_prune_count!/2"},{"id":"get_guild_roles/1","deprecated":false,"title":"get_guild_roles(guild_id)","anchor":"get_guild_roles/1"},{"id":"get_guild_roles!/1","deprecated":false,"title":"get_guild_roles!(guild_id)","anchor":"get_guild_roles!/1"},{"id":"get_guild_scheduled_event/2","deprecated":false,"title":"get_guild_scheduled_event(guild_id, event_id)","anchor":"get_guild_scheduled_event/2"},{"id":"get_guild_scheduled_event_users/3","deprecated":false,"title":"get_guild_scheduled_event_users(guild_id, event_id, params \\\\ [])","anchor":"get_guild_scheduled_event_users/3"},{"id":"get_guild_scheduled_events/1","deprecated":false,"title":"get_guild_scheduled_events(guild_id)","anchor":"get_guild_scheduled_events/1"},{"id":"get_guild_sticker/2","deprecated":false,"title":"get_guild_sticker(guild_id, sticker_id)","anchor":"get_guild_sticker/2"},{"id":"get_guild_webhooks/1","deprecated":false,"title":"get_guild_webhooks(guild_id)","anchor":"get_guild_webhooks/1"},{"id":"get_guild_widget/1","deprecated":false,"title":"get_guild_widget(guild_id)","anchor":"get_guild_widget/1"},{"id":"get_invite/2","deprecated":false,"title":"get_invite(invite_code, options \\\\ [])","anchor":"get_invite/2"},{"id":"get_invite!/2","deprecated":false,"title":"get_invite!(invite_code, options \\\\ [])","anchor":"get_invite!/2"},{"id":"get_original_interaction_response/1","deprecated":false,"title":"get_original_interaction_response(interaction)","anchor":"get_original_interaction_response/1"},{"id":"get_pinned_messages/1","deprecated":false,"title":"get_pinned_messages(channel_id)","anchor":"get_pinned_messages/1"},{"id":"get_pinned_messages!/1","deprecated":false,"title":"get_pinned_messages!(channel_id)","anchor":"get_pinned_messages!/1"},{"id":"get_poll_answer_voters/4","deprecated":false,"title":"get_poll_answer_voters(channel_id, message_id, answer_id, params \\\\ [])","anchor":"get_poll_answer_voters/4"},{"id":"get_poll_answer_voters!/4","deprecated":false,"title":"get_poll_answer_voters!(channel_id, message_id, answer_id, params \\\\ [])","anchor":"get_poll_answer_voters!/4"},{"id":"get_reactions/4","deprecated":false,"title":"get_reactions(channel_id, message_id, emoji, params \\\\ [])","anchor":"get_reactions/4"},{"id":"get_reactions!/4","deprecated":false,"title":"get_reactions!(channel_id, message_id, emoji, params \\\\ [])","anchor":"get_reactions!/4"},{"id":"get_sticker/1","deprecated":false,"title":"get_sticker(sticker_id)","anchor":"get_sticker/1"},{"id":"get_sticker_packs/0","deprecated":false,"title":"get_sticker_packs()","anchor":"get_sticker_packs/0"},{"id":"get_thread_member/2","deprecated":false,"title":"get_thread_member(thread_id, user_id)","anchor":"get_thread_member/2"},{"id":"get_thread_members/1","deprecated":false,"title":"get_thread_members(thread_id)","anchor":"get_thread_members/1"},{"id":"get_user/1","deprecated":false,"title":"get_user(user_id)","anchor":"get_user/1"},{"id":"get_user!/1","deprecated":false,"title":"get_user!(user_id)","anchor":"get_user!/1"},{"id":"get_user_connections/0","deprecated":false,"title":"get_user_connections()","anchor":"get_user_connections/0"},{"id":"get_user_dms/0","deprecated":false,"title":"get_user_dms()","anchor":"get_user_dms/0"},{"id":"get_user_dms!/0","deprecated":false,"title":"get_user_dms!()","anchor":"get_user_dms!/0"},{"id":"get_voice_region/1","deprecated":false,"title":"get_voice_region(guild_id)","anchor":"get_voice_region/1"},{"id":"get_webhook/1","deprecated":false,"title":"get_webhook(webhook_id)","anchor":"get_webhook/1"},{"id":"get_webhook_message/2","deprecated":false,"title":"get_webhook_message(webhook, message_id)","anchor":"get_webhook_message/2"},{"id":"get_webhook_with_token/2","deprecated":false,"title":"get_webhook_with_token(webhook_id, webhook_token)","anchor":"get_webhook_with_token/2"},{"id":"join_thread/1","deprecated":false,"title":"join_thread(thread_id)","anchor":"join_thread/1"},{"id":"leave_guild/1","deprecated":false,"title":"leave_guild(guild_id)","anchor":"leave_guild/1"},{"id":"leave_thread/1","deprecated":false,"title":"leave_thread(thread_id)","anchor":"leave_thread/1"},{"id":"list_guild_emojis/1","deprecated":false,"title":"list_guild_emojis(guild_id)","anchor":"list_guild_emojis/1"},{"id":"list_guild_emojis!/1","deprecated":false,"title":"list_guild_emojis!(guild_id)","anchor":"list_guild_emojis!/1"},{"id":"list_guild_members/2","deprecated":false,"title":"list_guild_members(guild_id, options \\\\ %{})","anchor":"list_guild_members/2"},{"id":"list_guild_members!/2","deprecated":false,"title":"list_guild_members!(guild_id, options \\\\ %{})","anchor":"list_guild_members!/2"},{"id":"list_guild_stickers/1","deprecated":false,"title":"list_guild_stickers(guild_id)","anchor":"list_guild_stickers/1"},{"id":"list_guild_threads/1","deprecated":false,"title":"list_guild_threads(guild_id)","anchor":"list_guild_threads/1"},{"id":"list_joined_private_archived_threads/2","deprecated":false,"title":"list_joined_private_archived_threads(channel_id, options \\\\ [])","anchor":"list_joined_private_archived_threads/2"},{"id":"list_private_archived_threads/2","deprecated":false,"title":"list_private_archived_threads(channel_id, options \\\\ [])","anchor":"list_private_archived_threads/2"},{"id":"list_public_archived_threads/2","deprecated":false,"title":"list_public_archived_threads(channel_id, options \\\\ [])","anchor":"list_public_archived_threads/2"},{"id":"list_voice_regions/0","deprecated":false,"title":"list_voice_regions()","anchor":"list_voice_regions/0"},{"id":"modify_channel/3","deprecated":false,"title":"modify_channel(channel_id, options, reason \\\\ nil)","anchor":"modify_channel/3"},{"id":"modify_channel!/3","deprecated":false,"title":"modify_channel!(channel_id, options, reason \\\\ nil)","anchor":"modify_channel!/3"},{"id":"modify_current_user/1","deprecated":false,"title":"modify_current_user(options)","anchor":"modify_current_user/1"},{"id":"modify_current_user!/1","deprecated":false,"title":"modify_current_user!(options)","anchor":"modify_current_user!/1"},{"id":"modify_current_user_nick/2","deprecated":false,"title":"modify_current_user_nick(guild_id, options \\\\ %{})","anchor":"modify_current_user_nick/2"},{"id":"modify_current_user_nick!/2","deprecated":false,"title":"modify_current_user_nick!(guild_id, options \\\\ %{})","anchor":"modify_current_user_nick!/2"},{"id":"modify_guild/3","deprecated":false,"title":"modify_guild(guild_id, options \\\\ [], reason \\\\ nil)","anchor":"modify_guild/3"},{"id":"modify_guild!/2","deprecated":false,"title":"modify_guild!(guild_id, options \\\\ [])","anchor":"modify_guild!/2"},{"id":"modify_guild_auto_moderation_rule/3","deprecated":false,"title":"modify_guild_auto_moderation_rule(guild_id, rule_id, options)","anchor":"modify_guild_auto_moderation_rule/3"},{"id":"modify_guild_channel_positions/2","deprecated":false,"title":"modify_guild_channel_positions(guild_id, positions)","anchor":"modify_guild_channel_positions/2"},{"id":"modify_guild_channel_positions!/2","deprecated":false,"title":"modify_guild_channel_positions!(guild_id, positions)","anchor":"modify_guild_channel_positions!/2"},{"id":"modify_guild_emoji/4","deprecated":false,"title":"modify_guild_emoji(guild_id, emoji_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_emoji/4"},{"id":"modify_guild_emoji!/4","deprecated":false,"title":"modify_guild_emoji!(guild_id, emoji_id, options, reason \\\\ nil)","anchor":"modify_guild_emoji!/4"},{"id":"modify_guild_integrations/3","deprecated":false,"title":"modify_guild_integrations(guild_id, integration_id, options)","anchor":"modify_guild_integrations/3"},{"id":"modify_guild_member/4","deprecated":false,"title":"modify_guild_member(guild_id, user_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_member/4"},{"id":"modify_guild_member!/4","deprecated":false,"title":"modify_guild_member!(guild_id, user_id, options \\\\ %{}, reason \\\\ nil)","anchor":"modify_guild_member!/4"},{"id":"modify_guild_role/4","deprecated":false,"title":"modify_guild_role(guild_id, role_id, options, reason \\\\ nil)","anchor":"modify_guild_role/4"},{"id":"modify_guild_role!/4","deprecated":false,"title":"modify_guild_role!(guild_id, role_id, options, reason \\\\ nil)","anchor":"modify_guild_role!/4"},{"id":"modify_guild_role_positions/3","deprecated":false,"title":"modify_guild_role_positions(guild_id, positions, reason \\\\ nil)","anchor":"modify_guild_role_positions/3"},{"id":"modify_guild_role_positions!/3","deprecated":false,"title":"modify_guild_role_positions!(guild_id, positions, reason \\\\ nil)","anchor":"modify_guild_role_positions!/3"},{"id":"modify_guild_scheduled_event/4","deprecated":false,"title":"modify_guild_scheduled_event(guild_id, event_id, reason \\\\ nil, options)","anchor":"modify_guild_scheduled_event/4"},{"id":"modify_guild_sticker/3","deprecated":false,"title":"modify_guild_sticker(guild_id, sticker_id, options)","anchor":"modify_guild_sticker/3"},{"id":"modify_guild_widget/2","deprecated":false,"title":"modify_guild_widget(guild_id, options)","anchor":"modify_guild_widget/2"},{"id":"modify_webhook/3","deprecated":false,"title":"modify_webhook(webhook_id, args, reason \\\\ nil)","anchor":"modify_webhook/3"},{"id":"modify_webhook_with_token/4","deprecated":false,"title":"modify_webhook_with_token(webhook_id, webhook_token, args, reason \\\\ nil)","anchor":"modify_webhook_with_token/4"},{"id":"remove_guild_ban/3","deprecated":false,"title":"remove_guild_ban(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_ban/3"},{"id":"remove_guild_member/3","deprecated":false,"title":"remove_guild_member(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_member/3"},{"id":"remove_guild_member!/3","deprecated":false,"title":"remove_guild_member!(guild_id, user_id, reason \\\\ nil)","anchor":"remove_guild_member!/3"},{"id":"remove_guild_member_role/4","deprecated":false,"title":"remove_guild_member_role(guild_id, user_id, role_id, reason \\\\ nil)","anchor":"remove_guild_member_role/4"},{"id":"remove_thread_member/2","deprecated":false,"title":"remove_thread_member(thread_id, user_id)","anchor":"remove_thread_member/2"},{"id":"request/1","deprecated":false,"title":"request(request)","anchor":"request/1"},{"id":"request/4","deprecated":false,"title":"request(method, route, body \\\\ \"\", params \\\\ [])","anchor":"request/4"},{"id":"request_multipart/4","deprecated":false,"title":"request_multipart(method, route, body, params \\\\ [])","anchor":"request_multipart/4"},{"id":"start_thread/3","deprecated":false,"title":"start_thread(channel_id, options, reason \\\\ nil)","anchor":"start_thread/3"},{"id":"start_thread_in_forum_channel/3","deprecated":false,"title":"start_thread_in_forum_channel(channel_id, options, reason \\\\ nil)","anchor":"start_thread_in_forum_channel/3"},{"id":"start_thread_with_message/4","deprecated":false,"title":"start_thread_with_message(channel_id, message_id, options, reason \\\\ nil)","anchor":"start_thread_with_message/4"},{"id":"start_typing/1","deprecated":false,"title":"start_typing(channel_id)","anchor":"start_typing/1"},{"id":"start_typing!/1","deprecated":false,"title":"start_typing!(channel_id)","anchor":"start_typing!/1"},{"id":"sync_guild_integrations/2","deprecated":false,"title":"sync_guild_integrations(guild_id, integration_id)","anchor":"sync_guild_integrations/2"},{"id":"update_shard_status/5","deprecated":false,"title":"update_shard_status(pid, status, game, type \\\\ 0, stream \\\\ nil)","anchor":"update_shard_status/5"},{"id":"update_status/4","deprecated":false,"title":"update_status(status, game, type \\\\ 0, stream \\\\ nil)","anchor":"update_status/4"},{"id":"update_voice_state/4","deprecated":false,"title":"update_voice_state(guild_id, channel_id, self_mute \\\\ false, self_deaf \\\\ false)","anchor":"update_voice_state/4"}],"key":"functions"}]},{"id":"Nostrum.Consumer","deprecated":false,"group":"Api","title":"Nostrum.Consumer","sections":[{"id":"Consuming gateway events","anchor":"module-consuming-gateway-events"},{"id":"Running multiple consumers","anchor":"module-running-multiple-consumers"},{"id":"Example consumer","anchor":"module-example-consumer"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"auto_moderation_rule_create/0","deprecated":false,"title":"auto_moderation_rule_create()","anchor":"t:auto_moderation_rule_create/0"},{"id":"auto_moderation_rule_delete/0","deprecated":false,"title":"auto_moderation_rule_delete()","anchor":"t:auto_moderation_rule_delete/0"},{"id":"auto_moderation_rule_execute/0","deprecated":false,"title":"auto_moderation_rule_execute()","anchor":"t:auto_moderation_rule_execute/0"},{"id":"auto_moderation_rule_update/0","deprecated":false,"title":"auto_moderation_rule_update()","anchor":"t:auto_moderation_rule_update/0"},{"id":"channel_create/0","deprecated":false,"title":"channel_create()","anchor":"t:channel_create/0"},{"id":"channel_delete/0","deprecated":false,"title":"channel_delete()","anchor":"t:channel_delete/0"},{"id":"channel_pins_ack/0","deprecated":false,"title":"channel_pins_ack()","anchor":"t:channel_pins_ack/0"},{"id":"channel_pins_update/0","deprecated":false,"title":"channel_pins_update()","anchor":"t:channel_pins_update/0"},{"id":"channel_update/0","deprecated":false,"title":"channel_update()","anchor":"t:channel_update/0"},{"id":"event/0","deprecated":false,"title":"event()","anchor":"t:event/0"},{"id":"guild_audit_log_entry_create/0","deprecated":false,"title":"guild_audit_log_entry_create()","anchor":"t:guild_audit_log_entry_create/0"},{"id":"guild_available/0","deprecated":false,"title":"guild_available()","anchor":"t:guild_available/0"},{"id":"guild_ban_add/0","deprecated":false,"title":"guild_ban_add()","anchor":"t:guild_ban_add/0"},{"id":"guild_ban_remove/0","deprecated":false,"title":"guild_ban_remove()","anchor":"t:guild_ban_remove/0"},{"id":"guild_create/0","deprecated":false,"title":"guild_create()","anchor":"t:guild_create/0"},{"id":"guild_delete/0","deprecated":false,"title":"guild_delete()","anchor":"t:guild_delete/0"},{"id":"guild_emojis_update/0","deprecated":false,"title":"guild_emojis_update()","anchor":"t:guild_emojis_update/0"},{"id":"guild_integrations_update/0","deprecated":false,"title":"guild_integrations_update()","anchor":"t:guild_integrations_update/0"},{"id":"guild_member_add/0","deprecated":false,"title":"guild_member_add()","anchor":"t:guild_member_add/0"},{"id":"guild_member_remove/0","deprecated":false,"title":"guild_member_remove()","anchor":"t:guild_member_remove/0"},{"id":"guild_member_update/0","deprecated":false,"title":"guild_member_update()","anchor":"t:guild_member_update/0"},{"id":"guild_members_chunk/0","deprecated":false,"title":"guild_members_chunk()","anchor":"t:guild_members_chunk/0"},{"id":"guild_role_create/0","deprecated":false,"title":"guild_role_create()","anchor":"t:guild_role_create/0"},{"id":"guild_role_delete/0","deprecated":false,"title":"guild_role_delete()","anchor":"t:guild_role_delete/0"},{"id":"guild_role_update/0","deprecated":false,"title":"guild_role_update()","anchor":"t:guild_role_update/0"},{"id":"guild_scheduled_event_create/0","deprecated":false,"title":"guild_scheduled_event_create()","anchor":"t:guild_scheduled_event_create/0"},{"id":"guild_scheduled_event_delete/0","deprecated":false,"title":"guild_scheduled_event_delete()","anchor":"t:guild_scheduled_event_delete/0"},{"id":"guild_scheduled_event_update/0","deprecated":false,"title":"guild_scheduled_event_update()","anchor":"t:guild_scheduled_event_update/0"},{"id":"guild_scheduled_event_user_add/0","deprecated":false,"title":"guild_scheduled_event_user_add()","anchor":"t:guild_scheduled_event_user_add/0"},{"id":"guild_scheduled_event_user_remove/0","deprecated":false,"title":"guild_scheduled_event_user_remove()","anchor":"t:guild_scheduled_event_user_remove/0"},{"id":"guild_stickers_update/0","deprecated":false,"title":"guild_stickers_update()","anchor":"t:guild_stickers_update/0"},{"id":"guild_unavailable/0","deprecated":false,"title":"guild_unavailable()","anchor":"t:guild_unavailable/0"},{"id":"guild_update/0","deprecated":false,"title":"guild_update()","anchor":"t:guild_update/0"},{"id":"integration_create/0","deprecated":false,"title":"integration_create()","anchor":"t:integration_create/0"},{"id":"integration_delete/0","deprecated":false,"title":"integration_delete()","anchor":"t:integration_delete/0"},{"id":"integration_update/0","deprecated":false,"title":"integration_update()","anchor":"t:integration_update/0"},{"id":"interaction_create/0","deprecated":false,"title":"interaction_create()","anchor":"t:interaction_create/0"},{"id":"message_ack/0","deprecated":false,"title":"message_ack()","anchor":"t:message_ack/0"},{"id":"message_create/0","deprecated":false,"title":"message_create()","anchor":"t:message_create/0"},{"id":"message_delete/0","deprecated":false,"title":"message_delete()","anchor":"t:message_delete/0"},{"id":"message_delete_bulk/0","deprecated":false,"title":"message_delete_bulk()","anchor":"t:message_delete_bulk/0"},{"id":"message_poll_vote_add/0","deprecated":false,"title":"message_poll_vote_add()","anchor":"t:message_poll_vote_add/0"},{"id":"message_poll_vote_remove/0","deprecated":false,"title":"message_poll_vote_remove()","anchor":"t:message_poll_vote_remove/0"},{"id":"message_reaction_add/0","deprecated":false,"title":"message_reaction_add()","anchor":"t:message_reaction_add/0"},{"id":"message_reaction_remove/0","deprecated":false,"title":"message_reaction_remove()","anchor":"t:message_reaction_remove/0"},{"id":"message_reaction_remove_all/0","deprecated":false,"title":"message_reaction_remove_all()","anchor":"t:message_reaction_remove_all/0"},{"id":"message_reaction_remove_emoji/0","deprecated":false,"title":"message_reaction_remove_emoji()","anchor":"t:message_reaction_remove_emoji/0"},{"id":"message_update/0","deprecated":false,"title":"message_update()","anchor":"t:message_update/0"},{"id":"presence_update/0","deprecated":false,"title":"presence_update()","anchor":"t:presence_update/0"},{"id":"ready/0","deprecated":false,"title":"ready()","anchor":"t:ready/0"},{"id":"resumed/0","deprecated":false,"title":"resumed()","anchor":"t:resumed/0"},{"id":"thread_create/0","deprecated":false,"title":"thread_create()","anchor":"t:thread_create/0"},{"id":"thread_delete/0","deprecated":false,"title":"thread_delete()","anchor":"t:thread_delete/0"},{"id":"thread_list_sync/0","deprecated":false,"title":"thread_list_sync()","anchor":"t:thread_list_sync/0"},{"id":"thread_member_update/0","deprecated":false,"title":"thread_member_update()","anchor":"t:thread_member_update/0"},{"id":"thread_members_update/0","deprecated":false,"title":"thread_members_update()","anchor":"t:thread_members_update/0"},{"id":"thread_update/0","deprecated":false,"title":"thread_update()","anchor":"t:thread_update/0"},{"id":"typing_start/0","deprecated":false,"title":"typing_start()","anchor":"t:typing_start/0"},{"id":"user_settings_update/0","deprecated":false,"title":"user_settings_update()","anchor":"t:user_settings_update/0"},{"id":"user_update/0","deprecated":false,"title":"user_update()","anchor":"t:user_update/0"},{"id":"voice_incoming_packet/0","deprecated":false,"title":"voice_incoming_packet()","anchor":"t:voice_incoming_packet/0"},{"id":"voice_ready/0","deprecated":false,"title":"voice_ready()","anchor":"t:voice_ready/0"},{"id":"voice_server_update/0","deprecated":false,"title":"voice_server_update()","anchor":"t:voice_server_update/0"},{"id":"voice_speaking_update/0","deprecated":false,"title":"voice_speaking_update()","anchor":"t:voice_speaking_update/0"},{"id":"voice_state_update/0","deprecated":false,"title":"voice_state_update()","anchor":"t:voice_state_update/0"},{"id":"webhooks_update/0","deprecated":false,"title":"webhooks_update()","anchor":"t:webhooks_update/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"handle_event/1","deprecated":false,"title":"handle_event(event)","anchor":"c:handle_event/1"}],"key":"callbacks"}]},{"id":"Nostrum.ConsumerGroup","deprecated":false,"group":"Api","title":"Nostrum.ConsumerGroup","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"demonitor/1","deprecated":false,"title":"demonitor(ref)","anchor":"demonitor/1"},{"id":"dispatch/1","deprecated":false,"title":"dispatch(event)","anchor":"dispatch/1"},{"id":"join/0","deprecated":false,"title":"join()","anchor":"join/0"},{"id":"join/1","deprecated":false,"title":"join(pid)","anchor":"join/1"},{"id":"monitor/0","deprecated":false,"title":"monitor()","anchor":"monitor/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Permission","deprecated":false,"group":"Api","title":"Nostrum.Permission","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bit/0","deprecated":false,"title":"bit()","anchor":"t:bit/0"},{"id":"bitset/0","deprecated":false,"title":"bitset()","anchor":"t:bitset/0"},{"id":"general_permission/0","deprecated":false,"title":"general_permission()","anchor":"t:general_permission/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text_permission/0","deprecated":false,"title":"text_permission()","anchor":"t:text_permission/0"},{"id":"voice_permission/0","deprecated":false,"title":"voice_permission()","anchor":"t:voice_permission/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"from_bit/1","deprecated":false,"title":"from_bit(bit)","anchor":"from_bit/1"},{"id":"from_bit!/1","deprecated":false,"title":"from_bit!(bit)","anchor":"from_bit!/1"},{"id":"from_bitset/1","deprecated":false,"title":"from_bitset(bitset)","anchor":"from_bitset/1"},{"id":"is_permission/1","deprecated":false,"title":"is_permission(term)","anchor":"is_permission/1"},{"id":"to_bit/1","deprecated":false,"title":"to_bit(permission)","anchor":"to_bit/1"},{"id":"to_bitset/1","deprecated":false,"title":"to_bitset(permissions)","anchor":"to_bitset/1"}],"key":"functions"}]},{"id":"Nostrum.Voice","deprecated":false,"group":"Api","title":"Nostrum.Voice","sections":[{"id":"Voice Without FFmpeg","anchor":"module-voice-without-ffmpeg"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"opus_packet/0","deprecated":false,"title":"opus_packet()","anchor":"t:opus_packet/0"},{"id":"play_input/0","deprecated":false,"title":"play_input()","anchor":"t:play_input/0"},{"id":"play_type/0","deprecated":false,"title":"play_type()","anchor":"t:play_type/0"},{"id":"rtp_opus/0","deprecated":false,"title":"rtp_opus()","anchor":"t:rtp_opus/0"},{"id":"rtp_sequence/0","deprecated":false,"title":"rtp_sequence()","anchor":"t:rtp_sequence/0"},{"id":"rtp_ssrc/0","deprecated":false,"title":"rtp_ssrc()","anchor":"t:rtp_ssrc/0"},{"id":"rtp_timestamp/0","deprecated":false,"title":"rtp_timestamp()","anchor":"t:rtp_timestamp/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"connect_to_gateway/1","deprecated":false,"title":"connect_to_gateway(guild_id)","anchor":"connect_to_gateway/1"},{"id":"create_ogg_bitstream/1","deprecated":false,"title":"create_ogg_bitstream(opus_packets)","anchor":"create_ogg_bitstream/1"},{"id":"extract_opus_packet/1","deprecated":false,"title":"extract_opus_packet(packet)","anchor":"extract_opus_packet/1"},{"id":"get_channel_id/1","deprecated":false,"title":"get_channel_id(guild_id)","anchor":"get_channel_id/1"},{"id":"get_current_url/1","deprecated":false,"title":"get_current_url(guild_id)","anchor":"get_current_url/1"},{"id":"get_ssrc_map/1","deprecated":false,"title":"get_ssrc_map(guild_id)","anchor":"get_ssrc_map/1"},{"id":"join_channel/5","deprecated":false,"title":"join_channel(guild_id, channel_id, self_mute \\\\ false, self_deaf \\\\ false, persist \\\\ true)","anchor":"join_channel/5"},{"id":"leave_channel/1","deprecated":false,"title":"leave_channel(guild_id)","anchor":"leave_channel/1"},{"id":"listen/3","deprecated":false,"title":"listen(guild_id, num_packets, raw_rtp \\\\ false)","anchor":"listen/3"},{"id":"pad_opus/1","deprecated":false,"title":"pad_opus(packets)","anchor":"pad_opus/1"},{"id":"pause/1","deprecated":false,"title":"pause(guild_id)","anchor":"pause/1"},{"id":"play/4","deprecated":false,"title":"play(guild_id, input, type \\\\ :url, options \\\\ [])","anchor":"play/4"},{"id":"playing?/1","deprecated":false,"title":"playing?(guild_id)","anchor":"playing?/1"},{"id":"ready?/1","deprecated":false,"title":"ready?(guild_id)","anchor":"ready?/1"},{"id":"resume/1","deprecated":false,"title":"resume(guild_id)","anchor":"resume/1"},{"id":"send_frames/2","deprecated":false,"title":"send_frames(guild_id, frames)","anchor":"send_frames/2"},{"id":"set_is_speaking/2","deprecated":false,"title":"set_is_speaking(guild_id, speaking)","anchor":"set_is_speaking/2"},{"id":"start_listen_async/1","deprecated":false,"title":"start_listen_async(guild_id)","anchor":"start_listen_async/1"},{"id":"stop/1","deprecated":false,"title":"stop(guild_id)","anchor":"stop/1"},{"id":"stop_listen_async/1","deprecated":false,"title":"stop_listen_async(guild_id)","anchor":"stop_listen_async/1"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Aes","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Aes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"decrypt/5","deprecated":false,"title":"decrypt(cipher_text, key, nonce, aad, tag)","anchor":"decrypt/5"},{"id":"encrypt/4","deprecated":false,"title":"encrypt(plain_text, key, nonce, aad)","anchor":"encrypt/4"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Chacha","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Chacha","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"decrypt/5","deprecated":false,"title":"decrypt(cipher_text, key, nonce, aad, tag)","anchor":"decrypt/5"},{"id":"encrypt/4","deprecated":false,"title":"encrypt(plain_text, key, nonce, aad)","anchor":"encrypt/4"}],"key":"functions"}]},{"id":"Nostrum.Voice.Crypto.Salsa","deprecated":false,"group":"Api","title":"Nostrum.Voice.Crypto.Salsa","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"block_binary_to_tuple/1","deprecated":false,"title":"block_binary_to_tuple(arg)","anchor":"block_binary_to_tuple/1"},{"id":"decrypt/3","deprecated":false,"title":"decrypt(encrypted_message, key, nonce)","anchor":"decrypt/3"},{"id":"encrypt/3","deprecated":false,"title":"encrypt(plain_text, key, nonce)","anchor":"encrypt/3"}],"key":"functions"}]},{"id":"Nostrum.Cache.CacheSupervisor","deprecated":false,"group":"Cache","title":"Nostrum.Cache.CacheSupervisor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(list)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".CacheSupervisor","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.ChannelGuildMapping","deprecated":false,"group":"Cache","title":"Nostrum.Cache.ChannelGuildMapping","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, id)","anchor":"c:create/2"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"}],"key":"functions"}],"nested_title":".ChannelGuildMapping","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.GuildCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.GuildCache","sections":[{"id":"Writing your own guild cache","anchor":"module-writing-your-own-guild-cache"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"c:all/0"},{"id":"channel_create/2","deprecated":false,"title":"channel_create(id, channel)","anchor":"c:channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(id, id)","anchor":"c:channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(id, channel)","anchor":"c:channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(map)","anchor":"c:create/1"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(id, emojis)","anchor":"c:emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(id)","anchor":"c:member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(id)","anchor":"c:member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(id, role)","anchor":"c:role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(id, id)","anchor":"c:role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(id, role)","anchor":"c:role_update/2"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(id, stickers)","anchor":"c:stickers_update/2"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(id, state)","anchor":"c:voice_state_update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"fold/3","deprecated":false,"title":"fold(acc, reducer, cache \\\\ Nostrum.Cache.GuildCache.ETS)","anchor":"fold/3"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(guild_id)","anchor":"get!/1"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.GuildCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".GuildCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.Me","deprecated":false,"group":"Cache","title":"Nostrum.Cache.Me","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"get/0","deprecated":false,"title":"get()","anchor":"get/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Me","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MemberCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.MemberCache","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(id, members)","anchor":"c:bulk_create/2"},{"id":"by_guild/1","deprecated":false,"title":"by_guild(id)","anchor":"c:by_guild/1"},{"id":"by_user/1","deprecated":false,"title":"by_user(id)","anchor":"c:by_user/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, member)","anchor":"c:create/2"},{"id":"delete/2","deprecated":false,"title":"delete(id, user_id)","anchor":"c:delete/2"},{"id":"get/2","deprecated":false,"title":"get(id, user_id)","anchor":"c:get/2"},{"id":"update/2","deprecated":false,"title":"update(id, member)","anchor":"c:update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"by_guild/1","deprecated":false,"title":"by_guild(guild_id)","anchor":"by_guild/1"},{"id":"by_user/1","deprecated":false,"title":"by_user(user_id)","anchor":"by_user/1"},{"id":"fold/4","deprecated":false,"title":"fold(acc, guild_id, member_reducer, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold/4"},{"id":"fold_by_user/4","deprecated":false,"title":"fold_by_user(acc, user_id, member_reducer, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold_by_user/4"},{"id":"fold_with_users/4","deprecated":false,"title":"fold_with_users(acc, guild_id, fun, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"fold_with_users/4"},{"id":"get/2","deprecated":false,"title":"get(guild_id, member_id)","anchor":"get/2"},{"id":"get_with_user/3","deprecated":false,"title":"get_with_user(guild_id, member_id, cache \\\\ Nostrum.Cache.MemberCache.ETS)","anchor":"get_with_user/3"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.MemberCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".MemberCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MessageCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.MessageCache","sections":[{"id":"Writing your own message cache","anchor":"module-writing-your-own-message-cache"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"timestamp_like/0","deprecated":false,"title":"timestamp_like()","anchor":"t:timestamp_like/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"bulk_delete/2","deprecated":false,"title":"bulk_delete(id, list)","anchor":"c:bulk_delete/2"},{"id":"channel_delete/1","deprecated":false,"title":"channel_delete(id)","anchor":"c:channel_delete/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(map)","anchor":"c:create/1"},{"id":"delete/2","deprecated":false,"title":"delete(id, id)","anchor":"c:delete/2"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(id, after_timestamp, before_timestamp)","anchor":"c:get_by_author/3"},{"id":"get_by_channel/3","deprecated":false,"title":"get_by_channel(id, after_timestamp, before_timestamp)","anchor":"c:get_by_channel/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(id, id, after_timestamp, before_timestamp)","anchor":"c:get_by_channel_and_author/4"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(message_id)","anchor":"get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(user_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_author/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(channel_id, author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel_and_author/4"}],"key":"functions"}],"nested_title":".MessageCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.PresenceCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.PresenceCache","sections":[{"id":"Writing your own presence cache","anchor":"module-writing-your-own-presence-cache"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"presence/0","deprecated":false,"title":"presence()","anchor":"t:presence/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(id, list)","anchor":"c:bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"c:create/1"},{"id":"get/2","deprecated":false,"title":"get(id, id)","anchor":"c:get/2"},{"id":"update/1","deprecated":false,"title":"update(map)","anchor":"c:update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"get!/3","deprecated":false,"title":"get!(guild_id, user_id, cache \\\\ Nostrum.Cache.PresenceCache.ETS)","anchor":"get!/3"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.PresenceCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".PresenceCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.UserCache","deprecated":false,"group":"Cache","title":"Nostrum.Cache.UserCache","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(user_payloads)","anchor":"c:bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"c:create/1"},{"id":"delete/1","deprecated":false,"title":"delete(snowflake)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"c:update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(function)","anchor":"c:wrap_query/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(id)","anchor":"get!/1"},{"id":"wrap_query/2","deprecated":false,"title":"wrap_query(cache \\\\ Nostrum.Cache.UserCache.ETS, fun)","anchor":"wrap_query/2"}],"key":"functions"}],"nested_title":".UserCache","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Struct.ApplicationCommand","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommand","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_command_edit_map/0","deprecated":false,"title":"application_command_edit_map()","anchor":"t:application_command_edit_map/0"},{"id":"application_command_map/0","deprecated":false,"title":"application_command_map()","anchor":"t:application_command_map/0"},{"id":"application_command_permission_type/0","deprecated":false,"title":"application_command_permission_type()","anchor":"t:application_command_permission_type/0"},{"id":"application_command_permissions/0","deprecated":false,"title":"application_command_permissions()","anchor":"t:application_command_permissions/0"},{"id":"command_choice/0","deprecated":false,"title":"command_choice()","anchor":"t:command_choice/0"},{"id":"command_description/0","deprecated":false,"title":"command_description()","anchor":"t:command_description/0"},{"id":"command_name/0","deprecated":false,"title":"command_name()","anchor":"t:command_name/0"},{"id":"command_option/0","deprecated":false,"title":"command_option()","anchor":"t:command_option/0"},{"id":"command_option_type/0","deprecated":false,"title":"command_option_type()","anchor":"t:command_option_type/0"},{"id":"command_type/0","deprecated":false,"title":"command_type()","anchor":"t:command_type/0"}],"key":"types"}],"nested_title":".ApplicationCommand","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionData","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionData","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"component_type/0","deprecated":false,"title":"component_type()","anchor":"t:component_type/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"interaction_type/0","deprecated":false,"title":"interaction_type()","anchor":"t:interaction_type/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"resolved/0","deprecated":false,"title":"resolved()","anchor":"t:resolved/0"},{"id":"select_values/0","deprecated":false,"title":"select_values()","anchor":"t:select_values/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_id/0","deprecated":false,"title":"target_id()","anchor":"t:target_id/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionData","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionDataOption","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionDataOption","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"focused/0","deprecated":false,"title":"focused()","anchor":"t:focused/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionDataOption","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ApplicationCommandInteractionDataResolved","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"attachments/0","deprecated":false,"title":"attachments()","anchor":"t:attachments/0"},{"id":"channels/0","deprecated":false,"title":"channels()","anchor":"t:channels/0"},{"id":"members/0","deprecated":false,"title":"members()","anchor":"t:members/0"},{"id":"messages/0","deprecated":false,"title":"messages()","anchor":"t:messages/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"users/0","deprecated":false,"title":"users()","anchor":"t:users/0"}],"key":"types"}],"nested_title":".ApplicationCommandInteractionDataResolved","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"actions/0","deprecated":false,"title":"actions()","anchor":"t:actions/0"},{"id":"creator_id/0","deprecated":false,"title":"creator_id()","anchor":"t:creator_id/0"},{"id":"enabled/0","deprecated":false,"title":"enabled()","anchor":"t:enabled/0"},{"id":"event_type/0","deprecated":false,"title":"event_type()","anchor":"t:event_type/0"},{"id":"exempt_channels/0","deprecated":false,"title":"exempt_channels()","anchor":"t:exempt_channels/0"},{"id":"exempt_roles/0","deprecated":false,"title":"exempt_roles()","anchor":"t:exempt_roles/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"preset_values/0","deprecated":false,"title":"preset_values()","anchor":"t:preset_values/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"trigger_metadata/0","deprecated":false,"title":"trigger_metadata()","anchor":"t:trigger_metadata/0"},{"id":"trigger_type/0","deprecated":false,"title":"trigger_type()","anchor":"t:trigger_type/0"}],"key":"types"}],"nested_title":".AutoModerationRule","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.Action","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.Action","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action_type/0","deprecated":false,"title":"action_type()","anchor":"t:action_type/0"},{"id":"metadata/0","deprecated":false,"title":"metadata()","anchor":"t:metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".AutoModerationRule.Action","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.ActionMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.ActionMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"send_alert_message_metadata/0","deprecated":false,"title":"send_alert_message_metadata()","anchor":"t:send_alert_message_metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timeout_metadata/0","deprecated":false,"title":"timeout_metadata()","anchor":"t:timeout_metadata/0"}],"key":"types"}],"nested_title":".AutoModerationRule.ActionMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.AutoModerationRule.TriggerMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"keyword_metadata/0","deprecated":false,"title":"keyword_metadata()","anchor":"t:keyword_metadata/0"},{"id":"preset_value_metadata/0","deprecated":false,"title":"preset_value_metadata()","anchor":"t:preset_value_metadata/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".AutoModerationRule.TriggerMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Channel","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Channel","sections":[{"id":"Channel Struct","anchor":"module-channel-struct"},{"id":"Channel Caching","anchor":"module-channel-caching"},{"id":"Helper Functions","anchor":"module-helper-functions"},{"id":"Api Functions","anchor":"module-api-functions"},{"id":"Channel Types","anchor":"module-channel-types"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"applied_tags/0","deprecated":false,"title":"applied_tags()","anchor":"t:applied_tags/0"},{"id":"archive_timestamp/0","deprecated":false,"title":"archive_timestamp()","anchor":"t:archive_timestamp/0"},{"id":"archived/0","deprecated":false,"title":"archived()","anchor":"t:archived/0"},{"id":"auto_archive_duration/0","deprecated":false,"title":"auto_archive_duration()","anchor":"t:auto_archive_duration/0"},{"id":"bitrate/0","deprecated":false,"title":"bitrate()","anchor":"t:bitrate/0"},{"id":"channel_mention/0","deprecated":false,"title":"channel_mention()","anchor":"t:channel_mention/0"},{"id":"default_auto_archive_duration/0","deprecated":false,"title":"default_auto_archive_duration()","anchor":"t:default_auto_archive_duration/0"},{"id":"default_reaction_emoji/0","deprecated":false,"title":"default_reaction_emoji()","anchor":"t:default_reaction_emoji/0"},{"id":"default_thread_rate_limit_per_user/0","deprecated":false,"title":"default_thread_rate_limit_per_user()","anchor":"t:default_thread_rate_limit_per_user/0"},{"id":"dm_channel/0","deprecated":false,"title":"dm_channel()","anchor":"t:dm_channel/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"forum_tag/0","deprecated":false,"title":"forum_tag()","anchor":"t:forum_tag/0"},{"id":"group_dm_channel/0","deprecated":false,"title":"group_dm_channel()","anchor":"t:group_dm_channel/0"},{"id":"guild_category_channel/0","deprecated":false,"title":"guild_category_channel()","anchor":"t:guild_category_channel/0"},{"id":"guild_channel/0","deprecated":true,"title":"guild_channel()","anchor":"t:guild_channel/0"},{"id":"guild_forum_channel/0","deprecated":false,"title":"guild_forum_channel()","anchor":"t:guild_forum_channel/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_news_channel/0","deprecated":false,"title":"guild_news_channel()","anchor":"t:guild_news_channel/0"},{"id":"guild_news_thread_channel/0","deprecated":false,"title":"guild_news_thread_channel()","anchor":"t:guild_news_thread_channel/0"},{"id":"guild_private_thread_channel/0","deprecated":false,"title":"guild_private_thread_channel()","anchor":"t:guild_private_thread_channel/0"},{"id":"guild_public_thread_channel/0","deprecated":false,"title":"guild_public_thread_channel()","anchor":"t:guild_public_thread_channel/0"},{"id":"guild_stage_voice_channel/0","deprecated":false,"title":"guild_stage_voice_channel()","anchor":"t:guild_stage_voice_channel/0"},{"id":"guild_store_channel/0","deprecated":false,"title":"guild_store_channel()","anchor":"t:guild_store_channel/0"},{"id":"guild_text_channel/0","deprecated":false,"title":"guild_text_channel()","anchor":"t:guild_text_channel/0"},{"id":"guild_voice_channel/0","deprecated":false,"title":"guild_voice_channel()","anchor":"t:guild_voice_channel/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"join_timestamp/0","deprecated":false,"title":"join_timestamp()","anchor":"t:join_timestamp/0"},{"id":"last_message_id/0","deprecated":false,"title":"last_message_id()","anchor":"t:last_message_id/0"},{"id":"last_pin_timestamp/0","deprecated":false,"title":"last_pin_timestamp()","anchor":"t:last_pin_timestamp/0"},{"id":"locked/0","deprecated":false,"title":"locked()","anchor":"t:locked/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"message_count/0","deprecated":false,"title":"message_count()","anchor":"t:message_count/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"newly_created/0","deprecated":false,"title":"newly_created()","anchor":"t:newly_created/0"},{"id":"nsfw/0","deprecated":false,"title":"nsfw()","anchor":"t:nsfw/0"},{"id":"owner_id/0","deprecated":false,"title":"owner_id()","anchor":"t:owner_id/0"},{"id":"parent_id/0","deprecated":false,"title":"parent_id()","anchor":"t:parent_id/0"},{"id":"permission_overwrites/0","deprecated":false,"title":"permission_overwrites()","anchor":"t:permission_overwrites/0"},{"id":"permissions/0","deprecated":false,"title":"permissions()","anchor":"t:permissions/0"},{"id":"position/0","deprecated":false,"title":"position()","anchor":"t:position/0"},{"id":"rate_limit_per_user/0","deprecated":false,"title":"rate_limit_per_user()","anchor":"t:rate_limit_per_user/0"},{"id":"recipients/0","deprecated":false,"title":"recipients()","anchor":"t:recipients/0"},{"id":"rtc_region/0","deprecated":false,"title":"rtc_region()","anchor":"t:rtc_region/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text_channel/0","deprecated":true,"title":"text_channel()","anchor":"t:text_channel/0"},{"id":"thread_metadata/0","deprecated":false,"title":"thread_metadata()","anchor":"t:thread_metadata/0"},{"id":"topic/0","deprecated":false,"title":"topic()","anchor":"t:topic/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"},{"id":"user_limit/0","deprecated":false,"title":"user_limit()","anchor":"t:user_limit/0"},{"id":"video_quality_mode/0","deprecated":false,"title":"video_quality_mode()","anchor":"t:video_quality_mode/0"},{"id":"voice_channel/0","deprecated":true,"title":"voice_channel()","anchor":"t:voice_channel/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"mention/1","deprecated":false,"title":"mention(channel)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Channel","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component","sections":[{"id":"Action Row","anchor":"module-action-row"},{"id":"Buttons","anchor":"module-buttons"},{"id":"Link Buttons","anchor":"module-link-buttons"},{"id":"Interaction Buttons ( Non-link Buttons )","anchor":"module-interaction-buttons-non-link-buttons"},{"id":"🐼 Emoji Buttons","anchor":"module-emoji-buttons"},{"id":"Select Menu","anchor":"module-select-menu"},{"id":"Text Input","anchor":"module-text-input"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_types/0","deprecated":false,"title":"channel_types()","anchor":"t:channel_types/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"default_values/0","deprecated":false,"title":"default_values()","anchor":"t:default_values/0"},{"id":"disabled/0","deprecated":false,"title":"disabled()","anchor":"t:disabled/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"t:max_length/0"},{"id":"max_values/0","deprecated":false,"title":"max_values()","anchor":"t:max_values/0"},{"id":"min_length/0","deprecated":false,"title":"min_length()","anchor":"t:min_length/0"},{"id":"min_values/0","deprecated":false,"title":"min_values()","anchor":"t:min_values/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"placeholder/0","deprecated":false,"title":"placeholder()","anchor":"t:placeholder/0"},{"id":"required/0","deprecated":false,"title":"required()","anchor":"t:required/0"},{"id":"style/0","deprecated":false,"title":"style()","anchor":"t:style/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"new/1","deprecated":false,"title":"new(opts)","anchor":"c:new/1"},{"id":"update/2","deprecated":false,"title":"update(t, opts)","anchor":"c:update/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Component","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.ActionRow","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.ActionRow","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"action_row/1","deprecated":false,"title":"action_row(opts \\\\ [])","anchor":"action_row/1"},{"id":"append/2","deprecated":false,"title":"append(action_row, button)","anchor":"append/2"},{"id":"append_lazy/2","deprecated":false,"title":"append_lazy(action_row, button)","anchor":"append_lazy/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"put/2","deprecated":false,"title":"put(component, select_menu)","anchor":"put/2"},{"id":"put_new/2","deprecated":false,"title":"put_new(component, list_of_components)","anchor":"put_new/2"}],"key":"functions"}],"nested_title":".Component.ActionRow","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.Button","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.Button","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"interaction_button/0","deprecated":false,"title":"interaction_button()","anchor":"t:interaction_button/0"},{"id":"link_button/0","deprecated":false,"title":"link_button()","anchor":"t:link_button/0"},{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"button/1","deprecated":false,"title":"button(opts \\\\ [])","anchor":"button/1"},{"id":"disable/2","deprecated":false,"title":"disable(button, disabled)","anchor":"disable/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"interaction_button/3","deprecated":false,"title":"interaction_button(label, custom_id, opts \\\\ [])","anchor":"interaction_button/3"},{"id":"link_button/3","deprecated":false,"title":"link_button(label, url, opts \\\\ [])","anchor":"link_button/3"},{"id":"put_style/2","deprecated":false,"title":"put_style(button, style)","anchor":"put_style/2"},{"id":"toggle/1","deprecated":false,"title":"toggle(button)","anchor":"toggle/1"}],"key":"functions"}],"nested_title":".Component.Button","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.ChannelSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.ChannelSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"channel_select/2","deprecated":false,"title":"channel_select(custom_id, opts \\\\ [])","anchor":"channel_select/2"},{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"}],"key":"functions"}],"nested_title":".Component.ChannelSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.DefaultValue","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.DefaultValue","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Component.DefaultValue","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.MentionableSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.MentionableSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.MentionableSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.Option","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.Option","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"default/0","deprecated":false,"title":"default()","anchor":"t:default/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Component.Option","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.RoleSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.RoleSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.RoleSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.SelectMenu","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.SelectMenu","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"select_menu/2","deprecated":false,"title":"select_menu(custom_id, opts \\\\ [])","anchor":"select_menu/2"}],"key":"functions"}],"nested_title":".Component.SelectMenu","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.TextInput","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.TextInput","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"put_style/2","deprecated":false,"title":"put_style(text_input, style)","anchor":"put_style/2"},{"id":"text_input/3","deprecated":false,"title":"text_input(label, custom_id, opts \\\\ [])","anchor":"text_input/3"}],"key":"functions"}],"nested_title":".Component.TextInput","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Component.UserSelect","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Component.UserSelect","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"opt/0","deprecated":false,"title":"opt()","anchor":"t:opt/0"},{"id":"opts/0","deprecated":false,"title":"opts()","anchor":"t:opts/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"flatten/1","deprecated":false,"title":"flatten(map)","anchor":"flatten/1"},{"id":"mentionable_select/2","deprecated":false,"title":"mentionable_select(custom_id, opts \\\\ [])","anchor":"mentionable_select/2"}],"key":"functions"}],"nested_title":".Component.UserSelect","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed","sections":[{"id":"Building Embeds","anchor":"module-building-embeds"},{"id":"Using structs","anchor":"module-using-structs"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"author/0","deprecated":false,"title":"author()","anchor":"t:author/0"},{"id":"color/0","deprecated":false,"title":"color()","anchor":"t:color/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"fields/0","deprecated":false,"title":"fields()","anchor":"t:fields/0"},{"id":"footer/0","deprecated":false,"title":"footer()","anchor":"t:footer/0"},{"id":"image/0","deprecated":false,"title":"image()","anchor":"t:image/0"},{"id":"provider/0","deprecated":false,"title":"provider()","anchor":"t:provider/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"thumbnail/0","deprecated":false,"title":"thumbnail()","anchor":"t:thumbnail/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"title/0","deprecated":false,"title":"title()","anchor":"t:title/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"video/0","deprecated":false,"title":"video()","anchor":"t:video/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"author/1","deprecated":false,"title":"author(struct)","anchor":"c:author/1"},{"id":"color/1","deprecated":false,"title":"color(struct)","anchor":"c:color/1"},{"id":"description/1","deprecated":false,"title":"description(struct)","anchor":"c:description/1"},{"id":"fields/1","deprecated":false,"title":"fields(struct)","anchor":"c:fields/1"},{"id":"footer/1","deprecated":false,"title":"footer(struct)","anchor":"c:footer/1"},{"id":"image/1","deprecated":false,"title":"image(struct)","anchor":"c:image/1"},{"id":"thumbnail/1","deprecated":false,"title":"thumbnail(struct)","anchor":"c:thumbnail/1"},{"id":"timestamp/1","deprecated":false,"title":"timestamp(struct)","anchor":"c:timestamp/1"},{"id":"title/1","deprecated":false,"title":"title(struct)","anchor":"c:title/1"},{"id":"url/1","deprecated":false,"title":"url(struct)","anchor":"c:url/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"from/1","deprecated":false,"title":"from(struct)","anchor":"from/1"},{"id":"put_author/4","deprecated":false,"title":"put_author(embed, name, url, icon_url)","anchor":"put_author/4"},{"id":"put_color/2","deprecated":false,"title":"put_color(embed, value)","anchor":"put_color/2"},{"id":"put_description/2","deprecated":false,"title":"put_description(embed, value)","anchor":"put_description/2"},{"id":"put_field/4","deprecated":false,"title":"put_field(embed, name, value, inline \\\\ nil)","anchor":"put_field/4"},{"id":"put_footer/3","deprecated":false,"title":"put_footer(embed, text, icon_url \\\\ nil)","anchor":"put_footer/3"},{"id":"put_image/2","deprecated":false,"title":"put_image(embed, url)","anchor":"put_image/2"},{"id":"put_thumbnail/2","deprecated":false,"title":"put_thumbnail(embed, url)","anchor":"put_thumbnail/2"},{"id":"put_timestamp/2","deprecated":false,"title":"put_timestamp(embed, value)","anchor":"put_timestamp/2"},{"id":"put_title/2","deprecated":false,"title":"put_title(embed, value)","anchor":"put_title/2"},{"id":"put_url/2","deprecated":false,"title":"put_url(embed, value)","anchor":"put_url/2"}],"key":"functions"}],"nested_title":".Embed","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Author","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Author","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"icon_url/0","deprecated":false,"title":"icon_url()","anchor":"t:icon_url/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"proxy_icon_url/0","deprecated":false,"title":"proxy_icon_url()","anchor":"t:proxy_icon_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"}],"key":"types"}],"nested_title":".Embed.Author","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Field","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Field","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"inline/0","deprecated":false,"title":"inline()","anchor":"t:inline/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Embed.Field","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Footer","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Footer","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"icon_url/0","deprecated":false,"title":"icon_url()","anchor":"t:icon_url/0"},{"id":"proxy_icon_url/0","deprecated":false,"title":"proxy_icon_url()","anchor":"t:proxy_icon_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text/0","deprecated":false,"title":"text()","anchor":"t:text/0"}],"key":"types"}],"nested_title":".Embed.Footer","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Image","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Image","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Image","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Provider","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Provider","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"}],"key":"types"}],"nested_title":".Embed.Provider","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Thumbnail","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Thumbnail","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Thumbnail","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Embed.Video","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Embed.Video","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Embed.Video","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Emoji","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Emoji","sections":[{"id":"Mentioning Emojis in Messages","anchor":"module-mentioning-emojis-in-messages"},{"id":"Using Emojis in the Api","anchor":"module-using-emojis-in-the-api"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"animated/0","deprecated":false,"title":"animated()","anchor":"t:animated/0"},{"id":"api_name/0","deprecated":false,"title":"api_name()","anchor":"t:api_name/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"managed/0","deprecated":false,"title":"managed()","anchor":"t:managed/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"require_colons/0","deprecated":false,"title":"require_colons()","anchor":"t:require_colons/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"api_name/1","deprecated":false,"title":"api_name(emoji)","anchor":"api_name/1"},{"id":"image_url/1","deprecated":false,"title":"image_url(emoji)","anchor":"image_url/1"},{"id":"mention/1","deprecated":false,"title":"mention(emoji)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Emoji","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"afk_channel_id/0","deprecated":false,"title":"afk_channel_id()","anchor":"t:afk_channel_id/0"},{"id":"afk_timeout/0","deprecated":false,"title":"afk_timeout()","anchor":"t:afk_timeout/0"},{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"available_guild/0","deprecated":false,"title":"available_guild()","anchor":"t:available_guild/0"},{"id":"banner/0","deprecated":false,"title":"banner()","anchor":"t:banner/0"},{"id":"channels/0","deprecated":false,"title":"channels()","anchor":"t:channels/0"},{"id":"default_message_notifications/0","deprecated":false,"title":"default_message_notifications()","anchor":"t:default_message_notifications/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"discovery_splash/0","deprecated":false,"title":"discovery_splash()","anchor":"t:discovery_splash/0"},{"id":"emojis/0","deprecated":false,"title":"emojis()","anchor":"t:emojis/0"},{"id":"explicit_content_filter/0","deprecated":false,"title":"explicit_content_filter()","anchor":"t:explicit_content_filter/0"},{"id":"features/0","deprecated":false,"title":"features()","anchor":"t:features/0"},{"id":"guild_scheduled_events/0","deprecated":false,"title":"guild_scheduled_events()","anchor":"t:guild_scheduled_events/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"joined_at/0","deprecated":false,"title":"joined_at()","anchor":"t:joined_at/0"},{"id":"large/0","deprecated":false,"title":"large()","anchor":"t:large/0"},{"id":"max_members/0","deprecated":false,"title":"max_members()","anchor":"t:max_members/0"},{"id":"max_presences/0","deprecated":false,"title":"max_presences()","anchor":"t:max_presences/0"},{"id":"max_stage_video_channel_users/0","deprecated":false,"title":"max_stage_video_channel_users()","anchor":"t:max_stage_video_channel_users/0"},{"id":"max_video_channel_users/0","deprecated":false,"title":"max_video_channel_users()","anchor":"t:max_video_channel_users/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"mfa_level/0","deprecated":false,"title":"mfa_level()","anchor":"t:mfa_level/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"nsfw_level/0","deprecated":false,"title":"nsfw_level()","anchor":"t:nsfw_level/0"},{"id":"owner_id/0","deprecated":false,"title":"owner_id()","anchor":"t:owner_id/0"},{"id":"preferred_locale/0","deprecated":false,"title":"preferred_locale()","anchor":"t:preferred_locale/0"},{"id":"premium_progress_bar_enabled/0","deprecated":false,"title":"premium_progress_bar_enabled()","anchor":"t:premium_progress_bar_enabled/0"},{"id":"premium_subscription_count/0","deprecated":false,"title":"premium_subscription_count()","anchor":"t:premium_subscription_count/0"},{"id":"premium_tier/0","deprecated":false,"title":"premium_tier()","anchor":"t:premium_tier/0"},{"id":"public_updates_channel_id/0","deprecated":false,"title":"public_updates_channel_id()","anchor":"t:public_updates_channel_id/0"},{"id":"region/0","deprecated":false,"title":"region()","anchor":"t:region/0"},{"id":"rest_guild/0","deprecated":false,"title":"rest_guild()","anchor":"t:rest_guild/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"rules_channel_id/0","deprecated":false,"title":"rules_channel_id()","anchor":"t:rules_channel_id/0"},{"id":"safety_alerts_channel_id/0","deprecated":false,"title":"safety_alerts_channel_id()","anchor":"t:safety_alerts_channel_id/0"},{"id":"splash/0","deprecated":false,"title":"splash()","anchor":"t:splash/0"},{"id":"stickers/0","deprecated":false,"title":"stickers()","anchor":"t:stickers/0"},{"id":"system_channel_flags/0","deprecated":false,"title":"system_channel_flags()","anchor":"t:system_channel_flags/0"},{"id":"system_channel_id/0","deprecated":false,"title":"system_channel_id()","anchor":"t:system_channel_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"threads/0","deprecated":false,"title":"threads()","anchor":"t:threads/0"},{"id":"unavailable/0","deprecated":false,"title":"unavailable()","anchor":"t:unavailable/0"},{"id":"unavailable_guild/0","deprecated":false,"title":"unavailable_guild()","anchor":"t:unavailable_guild/0"},{"id":"user_guild/0","deprecated":false,"title":"user_guild()","anchor":"t:user_guild/0"},{"id":"vanity_url_code/0","deprecated":false,"title":"vanity_url_code()","anchor":"t:vanity_url_code/0"},{"id":"verification_level/0","deprecated":false,"title":"verification_level()","anchor":"t:verification_level/0"},{"id":"voice_states/0","deprecated":false,"title":"voice_states()","anchor":"t:voice_states/0"},{"id":"welcome_screen/0","deprecated":false,"title":"welcome_screen()","anchor":"t:welcome_screen/0"},{"id":"widget_channel_id/0","deprecated":false,"title":"widget_channel_id()","anchor":"t:widget_channel_id/0"},{"id":"widget_enabled/0","deprecated":false,"title":"widget_enabled()","anchor":"t:widget_enabled/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"banner_url/2","deprecated":false,"title":"banner_url(guild, image_format \\\\ \"webp\")","anchor":"banner_url/2"},{"id":"discovery_splash_url/2","deprecated":false,"title":"discovery_splash_url(guild, image_format \\\\ \"webp\")","anchor":"discovery_splash_url/2"},{"id":"icon_url/2","deprecated":false,"title":"icon_url(guild, image_format \\\\ \"webp\")","anchor":"icon_url/2"},{"id":"splash_url/2","deprecated":false,"title":"splash_url(guild, image_format \\\\ \"webp\")","anchor":"splash_url/2"}],"key":"functions"}],"nested_title":".Guild","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.AuditLog","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.AuditLog","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"entries/0","deprecated":false,"title":"entries()","anchor":"t:entries/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"users/0","deprecated":false,"title":"users()","anchor":"t:users/0"},{"id":"webhooks/0","deprecated":false,"title":"webhooks()","anchor":"t:webhooks/0"}],"key":"types"}],"nested_title":".Guild.AuditLog","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.AuditLogEntry","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.AuditLogEntry","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action_type/0","deprecated":false,"title":"action_type()","anchor":"t:action_type/0"},{"id":"changes/0","deprecated":false,"title":"changes()","anchor":"t:changes/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"reason/0","deprecated":false,"title":"reason()","anchor":"t:reason/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_id/0","deprecated":false,"title":"target_id()","anchor":"t:target_id/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".Guild.AuditLogEntry","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Ban","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Ban","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"reason/0","deprecated":false,"title":"reason()","anchor":"t:reason/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".Guild.Ban","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration","sections":[{"id":"References","anchor":"module-references"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"account/0","deprecated":false,"title":"account()","anchor":"t:account/0"},{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"enabled/0","deprecated":false,"title":"enabled()","anchor":"t:enabled/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Guild.Integration","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration.Account","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration.Account","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.Integration.Account","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Integration.Application","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Integration.Application","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bot/0","deprecated":false,"title":"bot()","anchor":"t:bot/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"summary/0","deprecated":false,"title":"summary()","anchor":"t:summary/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.Integration.Application","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Member","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Member","sections":[{"id":"Mentioning Members in Messages","anchor":"module-mentioning-members-in-messages"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"communication_disabled_until/0","deprecated":false,"title":"communication_disabled_until()","anchor":"t:communication_disabled_until/0"},{"id":"deaf/0","deprecated":false,"title":"deaf()","anchor":"t:deaf/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"joined_at/0","deprecated":false,"title":"joined_at()","anchor":"t:joined_at/0"},{"id":"mute/0","deprecated":false,"title":"mute()","anchor":"t:mute/0"},{"id":"nick/0","deprecated":false,"title":"nick()","anchor":"t:nick/0"},{"id":"pending/0","deprecated":false,"title":"pending()","anchor":"t:pending/0"},{"id":"premium_since/0","deprecated":false,"title":"premium_since()","anchor":"t:premium_since/0"},{"id":"roles/0","deprecated":false,"title":"roles()","anchor":"t:roles/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"avatar_url/3","deprecated":false,"title":"avatar_url(member, guild_id, image_format \\\\ \"png\")","anchor":"avatar_url/3"},{"id":"guild_channel_permissions/3","deprecated":false,"title":"guild_channel_permissions(member, guild, channel_id)","anchor":"guild_channel_permissions/3"},{"id":"guild_permissions/2","deprecated":false,"title":"guild_permissions(member, guild)","anchor":"guild_permissions/2"},{"id":"mention/1","deprecated":false,"title":"mention(member)","anchor":"mention/1"},{"id":"top_role/2","deprecated":false,"title":"top_role(member, guild)","anchor":"top_role/2"}],"key":"functions"}],"nested_title":".Guild.Member","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Member.Flags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Member.Flags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bypasses_verification/0","deprecated":false,"title":"bypasses_verification()","anchor":"t:bypasses_verification/0"},{"id":"completed_onboarding/0","deprecated":false,"title":"completed_onboarding()","anchor":"t:completed_onboarding/0"},{"id":"did_rejoin/0","deprecated":false,"title":"did_rejoin()","anchor":"t:did_rejoin/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"started_onboarding/0","deprecated":false,"title":"started_onboarding()","anchor":"t:started_onboarding/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".Guild.Member.Flags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.Role","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.Role","sections":[{"id":"Mentioning Roles in Messages","anchor":"module-mentioning-roles-in-messages"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"color/0","deprecated":false,"title":"color()","anchor":"t:color/0"},{"id":"hoist/0","deprecated":false,"title":"hoist()","anchor":"t:hoist/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"managed/0","deprecated":false,"title":"managed()","anchor":"t:managed/0"},{"id":"mentionable/0","deprecated":false,"title":"mentionable()","anchor":"t:mentionable/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"permissions/0","deprecated":false,"title":"permissions()","anchor":"t:permissions/0"},{"id":"position/0","deprecated":false,"title":"position()","anchor":"t:position/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"unicode_emoji/0","deprecated":false,"title":"unicode_emoji()","anchor":"t:unicode_emoji/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"mention/1","deprecated":false,"title":"mention(role)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".Guild.Role","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"creator/0","deprecated":false,"title":"creator()","anchor":"t:creator/0"},{"id":"creator_id/0","deprecated":false,"title":"creator_id()","anchor":"t:creator_id/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"entity_id/0","deprecated":false,"title":"entity_id()","anchor":"t:entity_id/0"},{"id":"entity_metadata/0","deprecated":false,"title":"entity_metadata()","anchor":"t:entity_metadata/0"},{"id":"entity_type/0","deprecated":false,"title":"entity_type()","anchor":"t:entity_type/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"privacy_level/0","deprecated":false,"title":"privacy_level()","anchor":"t:privacy_level/0"},{"id":"scheduled_end_time/0","deprecated":false,"title":"scheduled_end_time()","anchor":"t:scheduled_end_time/0"},{"id":"scheduled_start_time/0","deprecated":false,"title":"scheduled_start_time()","anchor":"t:scheduled_start_time/0"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"t:status/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_count/0","deprecated":false,"title":"user_count()","anchor":"t:user_count/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.ScheduledEvent","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent.EntityMetadata","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"location/0","deprecated":false,"title":"location()","anchor":"t:location/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Guild.ScheduledEvent.EntityMetadata","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.ScheduledEvent.User","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.ScheduledEvent.User","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"event_id/0","deprecated":false,"title":"event_id()","anchor":"t:event_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.ScheduledEvent.User","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.SystemChannelFlags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.SystemChannelFlags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"suppress_guild_reminder_notifications/0","deprecated":false,"title":"suppress_guild_reminder_notifications()","anchor":"t:suppress_guild_reminder_notifications/0"},{"id":"suppress_join_notification_replies/0","deprecated":false,"title":"suppress_join_notification_replies()","anchor":"t:suppress_join_notification_replies/0"},{"id":"suppress_join_notifications/0","deprecated":false,"title":"suppress_join_notifications()","anchor":"t:suppress_join_notifications/0"},{"id":"suppress_premium_subscriptions/0","deprecated":false,"title":"suppress_premium_subscriptions()","anchor":"t:suppress_premium_subscriptions/0"},{"id":"suppress_role_subscription_purchase_notifications/0","deprecated":false,"title":"suppress_role_subscription_purchase_notifications()","anchor":"t:suppress_role_subscription_purchase_notifications/0"},{"id":"suppress_role_subscription_purchase_notifications_replies/0","deprecated":false,"title":"suppress_role_subscription_purchase_notifications_replies()","anchor":"t:suppress_role_subscription_purchase_notifications_replies/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".Guild.SystemChannelFlags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Guild.UnavailableGuild","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Guild.UnavailableGuild","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"unavailable/0","deprecated":false,"title":"unavailable()","anchor":"t:unavailable/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_struct/1","deprecated":false,"title":"to_struct(map)","anchor":"to_struct/1"}],"key":"functions"}],"nested_title":".Guild.UnavailableGuild","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Interaction","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Interaction","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"t:channel/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"data/0","deprecated":false,"title":"data()","anchor":"t:data/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_locale/0","deprecated":false,"title":"guild_locale()","anchor":"t:guild_locale/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"locale/0","deprecated":false,"title":"locale()","anchor":"t:locale/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"message/0","deprecated":false,"title":"message()","anchor":"t:message/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"},{"id":"version/0","deprecated":false,"title":"version()","anchor":"t:version/0"}],"key":"types"}],"nested_title":".Interaction","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Invite","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Invite","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"approximate_member_count/0","deprecated":false,"title":"approximate_member_count()","anchor":"t:approximate_member_count/0"},{"id":"approximate_presence_count/0","deprecated":false,"title":"approximate_presence_count()","anchor":"t:approximate_presence_count/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"t:channel/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"created_at/0","deprecated":false,"title":"created_at()","anchor":"t:created_at/0"},{"id":"detailed_invite/0","deprecated":false,"title":"detailed_invite()","anchor":"t:detailed_invite/0"},{"id":"guild/0","deprecated":false,"title":"guild()","anchor":"t:guild/0"},{"id":"inviter/0","deprecated":false,"title":"inviter()","anchor":"t:inviter/0"},{"id":"max_age/0","deprecated":false,"title":"max_age()","anchor":"t:max_age/0"},{"id":"max_uses/0","deprecated":false,"title":"max_uses()","anchor":"t:max_uses/0"},{"id":"simple_invite/0","deprecated":false,"title":"simple_invite()","anchor":"t:simple_invite/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_user/0","deprecated":false,"title":"target_user()","anchor":"t:target_user/0"},{"id":"target_user_type/0","deprecated":false,"title":"target_user_type()","anchor":"t:target_user_type/0"},{"id":"temporary/0","deprecated":false,"title":"temporary()","anchor":"t:temporary/0"},{"id":"uses/0","deprecated":false,"title":"uses()","anchor":"t:uses/0"}],"key":"types"}],"nested_title":".Invite","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"activity/0","deprecated":false,"title":"activity()","anchor":"t:activity/0"},{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"attachments/0","deprecated":false,"title":"attachments()","anchor":"t:attachments/0"},{"id":"author/0","deprecated":false,"title":"author()","anchor":"t:author/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"content/0","deprecated":false,"title":"content()","anchor":"t:content/0"},{"id":"edited_timestamp/0","deprecated":false,"title":"edited_timestamp()","anchor":"t:edited_timestamp/0"},{"id":"embeds/0","deprecated":false,"title":"embeds()","anchor":"t:embeds/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"interaction/0","deprecated":false,"title":"interaction()","anchor":"t:interaction/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"mention_channels/0","deprecated":false,"title":"mention_channels()","anchor":"t:mention_channels/0"},{"id":"mention_everyone/0","deprecated":false,"title":"mention_everyone()","anchor":"t:mention_everyone/0"},{"id":"mention_roles/0","deprecated":false,"title":"mention_roles()","anchor":"t:mention_roles/0"},{"id":"mentions/0","deprecated":false,"title":"mentions()","anchor":"t:mentions/0"},{"id":"message_reference/0","deprecated":false,"title":"message_reference()","anchor":"t:message_reference/0"},{"id":"nonce/0","deprecated":false,"title":"nonce()","anchor":"t:nonce/0"},{"id":"pinned/0","deprecated":false,"title":"pinned()","anchor":"t:pinned/0"},{"id":"poll/0","deprecated":false,"title":"poll()","anchor":"t:poll/0"},{"id":"reactions/0","deprecated":false,"title":"reactions()","anchor":"t:reactions/0"},{"id":"referenced_message/0","deprecated":false,"title":"referenced_message()","anchor":"t:referenced_message/0"},{"id":"sticker_items/0","deprecated":false,"title":"sticker_items()","anchor":"t:sticker_items/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"thread/0","deprecated":false,"title":"thread()","anchor":"t:thread/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"tts/0","deprecated":false,"title":"tts()","anchor":"t:tts/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"webhook_id/0","deprecated":false,"title":"webhook_id()","anchor":"t:webhook_id/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"to_url/1","deprecated":false,"title":"to_url(message)","anchor":"to_url/1"}],"key":"functions"}],"nested_title":".Message","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Activity","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Activity","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"party_id/0","deprecated":false,"title":"party_id()","anchor":"t:party_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Message.Activity","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Application","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Application","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"cover_image/0","deprecated":false,"title":"cover_image()","anchor":"t:cover_image/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"t:icon/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Application","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Attachment","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Attachment","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"filename/0","deprecated":false,"title":"filename()","anchor":"t:filename/0"},{"id":"height/0","deprecated":false,"title":"height()","anchor":"t:height/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"proxy_url/0","deprecated":false,"title":"proxy_url()","anchor":"t:proxy_url/0"},{"id":"size/0","deprecated":false,"title":"size()","anchor":"t:size/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"width/0","deprecated":false,"title":"width()","anchor":"t:width/0"}],"key":"types"}],"nested_title":".Message.Attachment","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Component","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Component","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"custom_id/0","deprecated":false,"title":"custom_id()","anchor":"t:custom_id/0"},{"id":"disabled/0","deprecated":false,"title":"disabled()","anchor":"t:disabled/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"label/0","deprecated":false,"title":"label()","anchor":"t:label/0"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"t:max_length/0"},{"id":"max_values/0","deprecated":false,"title":"max_values()","anchor":"t:max_values/0"},{"id":"min_length/0","deprecated":false,"title":"min_length()","anchor":"t:min_length/0"},{"id":"min_values/0","deprecated":false,"title":"min_values()","anchor":"t:min_values/0"},{"id":"options/0","deprecated":false,"title":"options()","anchor":"t:options/0"},{"id":"placeholder/0","deprecated":false,"title":"placeholder()","anchor":"t:placeholder/0"},{"id":"required/0","deprecated":false,"title":"required()","anchor":"t:required/0"},{"id":"style/0","deprecated":false,"title":"style()","anchor":"t:style/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"t:url/0"},{"id":"value/0","deprecated":false,"title":"value()","anchor":"t:value/0"}],"key":"types"}],"nested_title":".Message.Component","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allow_multiselect/0","deprecated":false,"title":"allow_multiselect()","anchor":"t:allow_multiselect/0"},{"id":"answers/0","deprecated":false,"title":"answers()","anchor":"t:answers/0"},{"id":"duration/0","deprecated":false,"title":"duration()","anchor":"t:duration/0"},{"id":"expiry/0","deprecated":false,"title":"expiry()","anchor":"t:expiry/0"},{"id":"layout_type/0","deprecated":false,"title":"layout_type()","anchor":"t:layout_type/0"},{"id":"question/0","deprecated":false,"title":"question()","anchor":"t:question/0"},{"id":"results/0","deprecated":false,"title":"results()","anchor":"t:results/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"create_poll/2","deprecated":false,"title":"create_poll(question_text, list)","anchor":"create_poll/2"},{"id":"put_answer/2","deprecated":false,"title":"put_answer(poll, answer)","anchor":"put_answer/2"},{"id":"put_answer/3","deprecated":false,"title":"put_answer(poll, answer, list)","anchor":"put_answer/3"}],"key":"functions"}],"nested_title":".Message.Poll","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.Answer","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.Answer","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_id/0","deprecated":false,"title":"answer_id()","anchor":"t:answer_id/0"},{"id":"poll_media/0","deprecated":false,"title":"poll_media()","anchor":"t:poll_media/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Poll.Answer","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.MediaObject","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.MediaObject","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"text/0","deprecated":false,"title":"text()","anchor":"t:text/0"}],"key":"types"}],"nested_title":".Message.Poll.MediaObject","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Poll.Results","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Poll.Results","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_counts/0","deprecated":false,"title":"answer_counts()","anchor":"t:answer_counts/0"},{"id":"is_finalized/0","deprecated":false,"title":"is_finalized()","anchor":"t:is_finalized/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Poll.Results","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Reaction","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Reaction","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"count/0","deprecated":false,"title":"count()","anchor":"t:count/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"me/0","deprecated":false,"title":"me()","anchor":"t:me/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Reaction","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Message.Reference","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Message.Reference","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".Message.Reference","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Overwrite","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Overwrite","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"allow/0","deprecated":false,"title":"allow()","anchor":"t:allow/0"},{"id":"deny/0","deprecated":false,"title":"deny()","anchor":"t:deny/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"}],"key":"types"}],"nested_title":".Overwrite","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Sticker","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Sticker","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"available/0","deprecated":false,"title":"available()","anchor":"t:available/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"format_type/0","deprecated":false,"title":"format_type()","anchor":"t:format_type/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"pack_id/0","deprecated":false,"title":"pack_id()","anchor":"t:pack_id/0"},{"id":"sort_value/0","deprecated":false,"title":"sort_value()","anchor":"t:sort_value/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"tags/0","deprecated":false,"title":"tags()","anchor":"t:tags/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"cdn_url/1","deprecated":false,"title":"cdn_url(map)","anchor":"cdn_url/1"}],"key":"functions"}],"nested_title":".Sticker","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Sticker.Pack","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Sticker.Pack","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"banner_asset_id/0","deprecated":false,"title":"banner_asset_id()","anchor":"t:banner_asset_id/0"},{"id":"cover_sticker_id/0","deprecated":false,"title":"cover_sticker_id()","anchor":"t:cover_sticker_id/0"},{"id":"description/0","deprecated":false,"title":"description()","anchor":"t:description/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"sku_id/0","deprecated":false,"title":"sku_id()","anchor":"t:sku_id/0"},{"id":"stickers/0","deprecated":false,"title":"stickers()","anchor":"t:stickers/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"banner_url/1","deprecated":false,"title":"banner_url(map)","anchor":"banner_url/1"}],"key":"functions"}],"nested_title":".Sticker.Pack","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.ThreadMember","deprecated":false,"group":"Structs","title":"Nostrum.Struct.ThreadMember","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"join_timestamp/0","deprecated":false,"title":"join_timestamp()","anchor":"t:join_timestamp/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".ThreadMember","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User","sections":[{"id":"Mentioning Users in Messages","anchor":"module-mentioning-users-in-messages"},{"id":"User vs. Member","anchor":"module-user-vs-member"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"bot/0","deprecated":false,"title":"bot()","anchor":"t:bot/0"},{"id":"discriminator/0","deprecated":false,"title":"discriminator()","anchor":"t:discriminator/0"},{"id":"global_name/0","deprecated":false,"title":"global_name()","anchor":"t:global_name/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"public_flags/0","deprecated":false,"title":"public_flags()","anchor":"t:public_flags/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"username/0","deprecated":false,"title":"username()","anchor":"t:username/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"avatar_url/2","deprecated":false,"title":"avatar_url(user, image_format \\\\ \"webp\")","anchor":"avatar_url/2"},{"id":"full_name/1","deprecated":false,"title":"full_name(user)","anchor":"full_name/1"},{"id":"mention/1","deprecated":false,"title":"mention(user)","anchor":"mention/1"}],"key":"functions"}],"nested_title":".User","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User.Connection","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User.Connection","sections":[],"nested_title":".User.Connection","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.User.Flags","deprecated":false,"group":"Structs","title":"Nostrum.Struct.User.Flags","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"bug_hunter_level_1/0","deprecated":false,"title":"bug_hunter_level_1()","anchor":"t:bug_hunter_level_1/0"},{"id":"bug_hunter_level_2/0","deprecated":false,"title":"bug_hunter_level_2()","anchor":"t:bug_hunter_level_2/0"},{"id":"early_supporter/0","deprecated":false,"title":"early_supporter()","anchor":"t:early_supporter/0"},{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"hypesquad_balance/0","deprecated":false,"title":"hypesquad_balance()","anchor":"t:hypesquad_balance/0"},{"id":"hypesquad_bravery/0","deprecated":false,"title":"hypesquad_bravery()","anchor":"t:hypesquad_bravery/0"},{"id":"hypesquad_brilliance/0","deprecated":false,"title":"hypesquad_brilliance()","anchor":"t:hypesquad_brilliance/0"},{"id":"hypesquad_events/0","deprecated":false,"title":"hypesquad_events()","anchor":"t:hypesquad_events/0"},{"id":"partner/0","deprecated":false,"title":"partner()","anchor":"t:partner/0"},{"id":"raw_flags/0","deprecated":false,"title":"raw_flags()","anchor":"t:raw_flags/0"},{"id":"staff/0","deprecated":false,"title":"staff()","anchor":"t:staff/0"},{"id":"system/0","deprecated":false,"title":"system()","anchor":"t:system/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"team_user/0","deprecated":false,"title":"team_user()","anchor":"t:team_user/0"},{"id":"verified_bot/0","deprecated":false,"title":"verified_bot()","anchor":"t:verified_bot/0"},{"id":"verified_developer/0","deprecated":false,"title":"verified_developer()","anchor":"t:verified_developer/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"from_integer/1","deprecated":false,"title":"from_integer(flag_value)","anchor":"from_integer/1"},{"id":"to_integer/1","deprecated":false,"title":"to_integer(flag_struct)","anchor":"to_integer/1"}],"key":"functions"}],"nested_title":".User.Flags","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.VoiceRegion","deprecated":false,"group":"Structs","title":"Nostrum.Struct.VoiceRegion","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".VoiceRegion","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.VoiceWSState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.VoiceWSState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"t:conn/0"},{"id":"conn_pid/0","deprecated":false,"title":"conn_pid()","anchor":"t:conn_pid/0"},{"id":"encryption_mode/0","deprecated":false,"title":"encryption_mode()","anchor":"t:encryption_mode/0"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"t:gateway/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"heartbeat_ack/0","deprecated":false,"title":"heartbeat_ack()","anchor":"t:heartbeat_ack/0"},{"id":"heartbeat_interval/0","deprecated":false,"title":"heartbeat_interval()","anchor":"t:heartbeat_interval/0"},{"id":"heartbeat_ref/0","deprecated":false,"title":"heartbeat_ref()","anchor":"t:heartbeat_ref/0"},{"id":"identified/0","deprecated":false,"title":"identified()","anchor":"t:identified/0"},{"id":"last_heartbeat_ack/0","deprecated":false,"title":"last_heartbeat_ack()","anchor":"t:last_heartbeat_ack/0"},{"id":"last_heartbeat_send/0","deprecated":false,"title":"last_heartbeat_send()","anchor":"t:last_heartbeat_send/0"},{"id":"secret_key/0","deprecated":false,"title":"secret_key()","anchor":"t:secret_key/0"},{"id":"seq/0","deprecated":false,"title":"seq()","anchor":"t:seq/0"},{"id":"session/0","deprecated":false,"title":"session()","anchor":"t:session/0"},{"id":"ssrc_map/0","deprecated":false,"title":"ssrc_map()","anchor":"t:ssrc_map/0"},{"id":"stream/0","deprecated":false,"title":"stream()","anchor":"t:stream/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"}],"key":"types"}],"nested_title":".VoiceWSState","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.WSState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.WSState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"compress_ctx/0","deprecated":false,"title":"compress_ctx()","anchor":"t:compress_ctx/0"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"t:conn/0"},{"id":"conn_pid/0","deprecated":false,"title":"conn_pid()","anchor":"t:conn_pid/0"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"t:gateway/0"},{"id":"heartbeat_ack/0","deprecated":false,"title":"heartbeat_ack()","anchor":"t:heartbeat_ack/0"},{"id":"heartbeat_interval/0","deprecated":false,"title":"heartbeat_interval()","anchor":"t:heartbeat_interval/0"},{"id":"last_heartbeat_ack/0","deprecated":false,"title":"last_heartbeat_ack()","anchor":"t:last_heartbeat_ack/0"},{"id":"last_heartbeat_send/0","deprecated":false,"title":"last_heartbeat_send()","anchor":"t:last_heartbeat_send/0"},{"id":"resume_gateway/0","deprecated":false,"title":"resume_gateway()","anchor":"t:resume_gateway/0"},{"id":"seq/0","deprecated":false,"title":"seq()","anchor":"t:seq/0"},{"id":"session/0","deprecated":false,"title":"session()","anchor":"t:session/0"},{"id":"shard_num/0","deprecated":false,"title":"shard_num()","anchor":"t:shard_num/0"},{"id":"stream/0","deprecated":false,"title":"stream()","anchor":"t:stream/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"total_shards/0","deprecated":false,"title":"total_shards()","anchor":"t:total_shards/0"}],"key":"types"}],"nested_title":".WSState","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Webhook","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Webhook","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"avatar/0","deprecated":false,"title":"avatar()","anchor":"t:avatar/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"t:name/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".Webhook","nested_context":"Nostrum.Struct"},{"id":"Nostrum.Struct.Event.AutoModerationRuleExecute","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.AutoModerationRuleExecute","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"action/0","deprecated":false,"title":"action()","anchor":"t:action/0"},{"id":"alert_system_message_id/0","deprecated":false,"title":"alert_system_message_id()","anchor":"t:alert_system_message_id/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"content/0","deprecated":false,"title":"content()","anchor":"t:content/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"matched_content/0","deprecated":false,"title":"matched_content()","anchor":"t:matched_content/0"},{"id":"matched_keyword/0","deprecated":false,"title":"matched_keyword()","anchor":"t:matched_keyword/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"rule_id/0","deprecated":false,"title":"rule_id()","anchor":"t:rule_id/0"},{"id":"rule_trigger_type/0","deprecated":false,"title":"rule_trigger_type()","anchor":"t:rule_trigger_type/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".AutoModerationRuleExecute","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ChannelPinsUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ChannelPinsUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"last_pin_timestamp/0","deprecated":false,"title":"last_pin_timestamp()","anchor":"t:last_pin_timestamp/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".ChannelPinsUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildBanAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildBanAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".GuildBanAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildBanRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildBanRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"}],"key":"types"}],"nested_title":".GuildBanRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildIntegrationDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildIntegrationDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application_id/0","deprecated":false,"title":"application_id()","anchor":"t:application_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".GuildIntegrationDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildIntegrationsUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildIntegrationsUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".GuildIntegrationsUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildScheduledEventUserAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_scheduled_event_id/0","deprecated":false,"title":"guild_scheduled_event_id()","anchor":"t:guild_scheduled_event_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".GuildScheduledEventUserAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.GuildScheduledEventUserRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"guild_scheduled_event_id/0","deprecated":false,"title":"guild_scheduled_event_id()","anchor":"t:guild_scheduled_event_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".GuildScheduledEventUserRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.InviteCreate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.InviteCreate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"created_at/0","deprecated":false,"title":"created_at()","anchor":"t:created_at/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"inviter/0","deprecated":false,"title":"inviter()","anchor":"t:inviter/0"},{"id":"max_age/0","deprecated":false,"title":"max_age()","anchor":"t:max_age/0"},{"id":"max_uses/0","deprecated":false,"title":"max_uses()","anchor":"t:max_uses/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"target_user/0","deprecated":false,"title":"target_user()","anchor":"t:target_user/0"},{"id":"target_user_type/0","deprecated":false,"title":"target_user_type()","anchor":"t:target_user_type/0"},{"id":"temporary/0","deprecated":false,"title":"temporary()","anchor":"t:temporary/0"},{"id":"uses/0","deprecated":false,"title":"uses()","anchor":"t:uses/0"}],"key":"types"}],"nested_title":".InviteCreate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.InviteDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.InviteDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"code/0","deprecated":false,"title":"code()","anchor":"t:code/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".InviteDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageDelete","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageDelete","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deleted_message/0","deprecated":false,"title":"deleted_message()","anchor":"t:deleted_message/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageDelete","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageDeleteBulk","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageDeleteBulk","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deleted_messages/0","deprecated":false,"title":"deleted_messages()","anchor":"t:deleted_messages/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"ids/0","deprecated":false,"title":"ids()","anchor":"t:ids/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageDeleteBulk","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionAdd","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionAdd","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".MessageReactionAdd","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemove","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemove","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".MessageReactionRemove","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemoveAll","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemoveAll","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageReactionRemoveAll","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.MessageReactionRemoveEmoji","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"emoji/0","deprecated":false,"title":"emoji()","anchor":"t:emoji/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".MessageReactionRemoveEmoji","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.PartialApplication","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.PartialApplication","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"flags/0","deprecated":false,"title":"flags()","anchor":"t:flags/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".PartialApplication","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.PollVoteChange","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.PollVoteChange","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"answer_id/0","deprecated":false,"title":"answer_id()","anchor":"t:answer_id/0"},{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"message_id/0","deprecated":false,"title":"message_id()","anchor":"t:message_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"t:type/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".PollVoteChange","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.Ready","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.Ready","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"application/0","deprecated":false,"title":"application()","anchor":"t:application/0"},{"id":"guilds/0","deprecated":false,"title":"guilds()","anchor":"t:guilds/0"},{"id":"resume_gateway_url/0","deprecated":false,"title":"resume_gateway_url()","anchor":"t:resume_gateway_url/0"},{"id":"session_id/0","deprecated":false,"title":"session_id()","anchor":"t:session_id/0"},{"id":"shard/0","deprecated":false,"title":"shard()","anchor":"t:shard/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"t:user/0"},{"id":"v/0","deprecated":false,"title":"v()","anchor":"t:v/0"}],"key":"types"}],"nested_title":".Ready","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.SpeakingUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.SpeakingUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"current_url/0","deprecated":false,"title":"current_url()","anchor":"t:current_url/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"speaking/0","deprecated":false,"title":"speaking()","anchor":"t:speaking/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timed_out/0","deprecated":false,"title":"timed_out()","anchor":"t:timed_out/0"}],"key":"types"}],"nested_title":".SpeakingUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ThreadListSync","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ThreadListSync","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_ids/0","deprecated":false,"title":"channel_ids()","anchor":"t:channel_ids/0"},{"id":"guid_id/0","deprecated":false,"title":"guid_id()","anchor":"t:guid_id/0"},{"id":"members/0","deprecated":false,"title":"members()","anchor":"t:members/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"threads/0","deprecated":false,"title":"threads()","anchor":"t:threads/0"}],"key":"types"}],"nested_title":".ThreadListSync","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.ThreadMembersUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.ThreadMembersUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"added_members/0","deprecated":false,"title":"added_members()","anchor":"t:added_members/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"id/0","deprecated":false,"title":"id()","anchor":"t:id/0"},{"id":"member_count/0","deprecated":false,"title":"member_count()","anchor":"t:member_count/0"},{"id":"removed_member_ids/0","deprecated":false,"title":"removed_member_ids()","anchor":"t:removed_member_ids/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".ThreadMembersUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.TypingStart","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.TypingStart","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"timestamp/0","deprecated":false,"title":"timestamp()","anchor":"t:timestamp/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".TypingStart","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceReady","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceReady","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}],"nested_title":".VoiceReady","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceServerUpdate","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceServerUpdate","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"endpoint/0","deprecated":false,"title":"endpoint()","anchor":"t:endpoint/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"token/0","deprecated":false,"title":"token()","anchor":"t:token/0"}],"key":"types"}],"nested_title":".VoiceServerUpdate","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Struct.Event.VoiceState","deprecated":false,"group":"Structs","title":"Nostrum.Struct.Event.VoiceState","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"channel_id/0","deprecated":false,"title":"channel_id()","anchor":"t:channel_id/0"},{"id":"deaf/0","deprecated":false,"title":"deaf()","anchor":"t:deaf/0"},{"id":"guild_id/0","deprecated":false,"title":"guild_id()","anchor":"t:guild_id/0"},{"id":"member/0","deprecated":false,"title":"member()","anchor":"t:member/0"},{"id":"mute/0","deprecated":false,"title":"mute()","anchor":"t:mute/0"},{"id":"request_to_speak_timestamp/0","deprecated":false,"title":"request_to_speak_timestamp()","anchor":"t:request_to_speak_timestamp/0"},{"id":"self_deaf/0","deprecated":false,"title":"self_deaf()","anchor":"t:self_deaf/0"},{"id":"self_mute/0","deprecated":false,"title":"self_mute()","anchor":"t:self_mute/0"},{"id":"self_stream/0","deprecated":false,"title":"self_stream()","anchor":"t:self_stream/0"},{"id":"self_video/0","deprecated":false,"title":"self_video()","anchor":"t:self_video/0"},{"id":"session_id/0","deprecated":false,"title":"session_id()","anchor":"t:session_id/0"},{"id":"suppress/0","deprecated":false,"title":"suppress()","anchor":"t:suppress/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"},{"id":"user_id/0","deprecated":false,"title":"user_id()","anchor":"t:user_id/0"}],"key":"types"}],"nested_title":".VoiceState","nested_context":"Nostrum.Struct.Event"},{"id":"Nostrum.Constants.ApplicationCommandOptionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandOptionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attachment/0","deprecated":false,"title":"attachment()","anchor":"attachment/0"},{"id":"boolean/0","deprecated":false,"title":"boolean()","anchor":"boolean/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"integer/0","deprecated":false,"title":"integer()","anchor":"integer/0"},{"id":"mentionable/0","deprecated":false,"title":"mentionable()","anchor":"mentionable/0"},{"id":"number/0","deprecated":false,"title":"number()","anchor":"number/0"},{"id":"role/0","deprecated":false,"title":"role()","anchor":"role/0"},{"id":"string/0","deprecated":false,"title":"string()","anchor":"string/0"},{"id":"sub_command/0","deprecated":false,"title":"sub_command()","anchor":"sub_command/0"},{"id":"sub_command_group/0","deprecated":false,"title":"sub_command_group()","anchor":"sub_command_group/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandOptionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ApplicationCommandPermissionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandPermissionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"role/0","deprecated":false,"title":"role()","anchor":"role/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandPermissionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ApplicationCommandType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ApplicationCommandType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"chat_input/0","deprecated":false,"title":"chat_input()","anchor":"chat_input/0"},{"id":"message/0","deprecated":false,"title":"message()","anchor":"message/0"},{"id":"user/0","deprecated":false,"title":"user()","anchor":"user/0"}],"key":"functions"}],"nested_title":".ApplicationCommandType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ButtonStyle","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ButtonStyle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"danger/0","deprecated":false,"title":"danger()","anchor":"danger/0"},{"id":"link/0","deprecated":false,"title":"link()","anchor":"link/0"},{"id":"primary/0","deprecated":false,"title":"primary()","anchor":"primary/0"},{"id":"secondary/0","deprecated":false,"title":"secondary()","anchor":"secondary/0"},{"id":"success/0","deprecated":false,"title":"success()","anchor":"success/0"}],"key":"functions"}],"nested_title":".ButtonStyle","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ChannelType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ChannelType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"announcement_thread/0","deprecated":false,"title":"announcement_thread()","anchor":"announcement_thread/0"},{"id":"dm/0","deprecated":false,"title":"dm()","anchor":"dm/0"},{"id":"group_db/0","deprecated":false,"title":"group_db()","anchor":"group_db/0"},{"id":"guild_announcement/0","deprecated":false,"title":"guild_announcement()","anchor":"guild_announcement/0"},{"id":"guild_category/0","deprecated":false,"title":"guild_category()","anchor":"guild_category/0"},{"id":"guild_directory/0","deprecated":false,"title":"guild_directory()","anchor":"guild_directory/0"},{"id":"guild_forum/0","deprecated":false,"title":"guild_forum()","anchor":"guild_forum/0"},{"id":"guild_text/0","deprecated":false,"title":"guild_text()","anchor":"guild_text/0"},{"id":"guild_voice/0","deprecated":false,"title":"guild_voice()","anchor":"guild_voice/0"},{"id":"private_thread/0","deprecated":false,"title":"private_thread()","anchor":"private_thread/0"},{"id":"public_thread/0","deprecated":false,"title":"public_thread()","anchor":"public_thread/0"}],"key":"functions"}],"nested_title":".ChannelType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.ComponentType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.ComponentType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"action_row/0","deprecated":false,"title":"action_row()","anchor":"action_row/0"},{"id":"button/0","deprecated":false,"title":"button()","anchor":"button/0"},{"id":"channel_select/0","deprecated":false,"title":"channel_select()","anchor":"channel_select/0"},{"id":"mentionable_select/0","deprecated":false,"title":"mentionable_select()","anchor":"mentionable_select/0"},{"id":"role_select/0","deprecated":false,"title":"role_select()","anchor":"role_select/0"},{"id":"string_select/0","deprecated":false,"title":"string_select()","anchor":"string_select/0"},{"id":"text_input/0","deprecated":false,"title":"text_input()","anchor":"text_input/0"},{"id":"user_select/0","deprecated":false,"title":"user_select()","anchor":"user_select/0"}],"key":"functions"}],"nested_title":".ComponentType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.InteractionCallbackType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.InteractionCallbackType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_command_autocomplete_result/0","deprecated":false,"title":"application_command_autocomplete_result()","anchor":"application_command_autocomplete_result/0"},{"id":"channel_message_with_source/0","deprecated":false,"title":"channel_message_with_source()","anchor":"channel_message_with_source/0"},{"id":"deferred_channel_message_with_source/0","deprecated":false,"title":"deferred_channel_message_with_source()","anchor":"deferred_channel_message_with_source/0"},{"id":"deferred_update_message/0","deprecated":false,"title":"deferred_update_message()","anchor":"deferred_update_message/0"},{"id":"modal/0","deprecated":false,"title":"modal()","anchor":"modal/0"},{"id":"pong/0","deprecated":false,"title":"pong()","anchor":"pong/0"},{"id":"update_message/0","deprecated":false,"title":"update_message()","anchor":"update_message/0"}],"key":"functions"}],"nested_title":".InteractionCallbackType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.InteractionType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.InteractionType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_command/0","deprecated":false,"title":"application_command()","anchor":"application_command/0"},{"id":"application_command_autocomplete/0","deprecated":false,"title":"application_command_autocomplete()","anchor":"application_command_autocomplete/0"},{"id":"message_component/0","deprecated":false,"title":"message_component()","anchor":"message_component/0"},{"id":"modal_submit/0","deprecated":false,"title":"modal_submit()","anchor":"modal_submit/0"},{"id":"ping/0","deprecated":false,"title":"ping()","anchor":"ping/0"}],"key":"functions"}],"nested_title":".InteractionType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.TextInputStyle","deprecated":false,"group":"Constants","title":"Nostrum.Constants.TextInputStyle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"paragraph/0","deprecated":false,"title":"paragraph()","anchor":"paragraph/0"},{"id":"short/0","deprecated":false,"title":"short()","anchor":"short/0"}],"key":"functions"}],"nested_title":".TextInputStyle","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Constants.WebhookType","deprecated":false,"group":"Constants","title":"Nostrum.Constants.WebhookType","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application/0","deprecated":false,"title":"application()","anchor":"application/0"},{"id":"channel_follower/0","deprecated":false,"title":"channel_follower()","anchor":"channel_follower/0"},{"id":"incoming/0","deprecated":false,"title":"incoming()","anchor":"incoming/0"}],"key":"functions"}],"nested_title":".WebhookType","nested_context":"Nostrum.Constants"},{"id":"Nostrum.Snowflake","deprecated":false,"group":"Utilities","title":"Nostrum.Snowflake","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"external_snowflake/0","deprecated":false,"title":"external_snowflake()","anchor":"t:external_snowflake/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"cast/1","deprecated":false,"title":"cast(value)","anchor":"cast/1"},{"id":"cast!/1","deprecated":false,"title":"cast!(value)","anchor":"cast!/1"},{"id":"creation_time/1","deprecated":false,"title":"creation_time(snowflake)","anchor":"creation_time/1"},{"id":"dump/1","deprecated":false,"title":"dump(snowflake)","anchor":"dump/1"},{"id":"from_datetime/1","deprecated":false,"title":"from_datetime(datetime)","anchor":"from_datetime/1"},{"id":"from_datetime!/1","deprecated":false,"title":"from_datetime!(datetime)","anchor":"from_datetime!/1"},{"id":"is_snowflake/1","deprecated":false,"title":"is_snowflake(term)","anchor":"is_snowflake/1"}],"key":"functions"}]},{"id":"Nostrum.Token","deprecated":false,"group":"Utilities","title":"Nostrum.Token","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_token!/0","deprecated":false,"title":"check_token!()","anchor":"check_token!/0"},{"id":"check_token!/1","deprecated":false,"title":"check_token!(token)","anchor":"check_token!/1"}],"key":"functions"}]},{"id":"Nostrum.Util","deprecated":false,"group":"Utilities","title":"Nostrum.Util","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enum_to_struct/2","deprecated":false,"title":"enum_to_struct(enum, struct)","anchor":"enum_to_struct/2"},{"id":"gateway/0","deprecated":false,"title":"gateway()","anchor":"gateway/0"},{"id":"get_all_shard_latencies/0","deprecated":false,"title":"get_all_shard_latencies()","anchor":"get_all_shard_latencies/0"},{"id":"get_shard_latency/1","deprecated":false,"title":"get_shard_latency(state)","anchor":"get_shard_latency/1"},{"id":"map_update_if_present/3","deprecated":false,"title":"map_update_if_present(map, key, fun)","anchor":"map_update_if_present/3"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(token)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_datetime/1","deprecated":false,"title":"maybe_to_datetime(dt)","anchor":"maybe_to_datetime/1"},{"id":"maybe_to_unixtime/1","deprecated":false,"title":"maybe_to_unixtime(stamp)","anchor":"maybe_to_unixtime/1"},{"id":"now/0","deprecated":false,"title":"now()","anchor":"now/0"},{"id":"now_iso/0","deprecated":false,"title":"now_iso()","anchor":"now_iso/0"},{"id":"num_shards/0","deprecated":false,"title":"num_shards()","anchor":"num_shards/0"},{"id":"safe_atom_map/1","deprecated":false,"title":"safe_atom_map(term)","anchor":"safe_atom_map/1"},{"id":"timestamp_like_to_snowflake/1","deprecated":false,"title":"timestamp_like_to_snowflake(snowflake)","anchor":"timestamp_like_to_snowflake/1"},{"id":"unused_atoms/0","deprecated":false,"title":"unused_atoms()","anchor":"unused_atoms/0"},{"id":"usec_now/0","deprecated":false,"title":"usec_now()","anchor":"usec_now/0"}],"key":"functions"}]},{"id":"Nostrum.Store.GuildShardMapping","deprecated":false,"group":"Stores","title":"Nostrum.Store.GuildShardMapping","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(id, shard_num)","anchor":"c:create/2"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"c:delete/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"c:get/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"}],"key":"functions"}],"nested_title":".GuildShardMapping","nested_context":"Nostrum.Store"},{"id":"Nostrum.Store.Supervisor","deprecated":false,"group":"Stores","title":"Nostrum.Store.Supervisor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(list)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(list)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Supervisor","nested_context":"Nostrum.Store"},{"id":"Nostrum.Store.UnavailableGuild","deprecated":false,"group":"Stores","title":"Nostrum.Store.UnavailableGuild","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Configuration","anchor":"module-configuration"},{"id":"Implementation","anchor":"module-implementation"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(term)","anchor":"c:child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(id)","anchor":"c:create/1"},{"id":"is?/1","deprecated":false,"title":"is?(id)","anchor":"c:is?/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"}],"key":"functions"}],"nested_title":".UnavailableGuild","nested_context":"Nostrum.Store"},{"id":"Nostrum.Cache.MessageCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MessageCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_delete/2","deprecated":false,"title":"bulk_delete(channel_id, message_ids)","anchor":"bulk_delete/2"},{"id":"channel_delete/1","deprecated":false,"title":"channel_delete(channel_id)","anchor":"channel_delete/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/2","deprecated":false,"title":"delete(channel_id, message_id)","anchor":"delete/2"},{"id":"get/1","deprecated":false,"title":"get(message_id)","anchor":"get/1"},{"id":"get_by_author/3","deprecated":false,"title":"get_by_author(author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_author/3"},{"id":"get_by_channel/3","deprecated":false,"title":"get_by_channel(channel_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel/3"},{"id":"get_by_channel_and_author/4","deprecated":false,"title":"get_by_channel_and_author(channel_id, author_id, after_timestamp \\\\ 0, before_timestamp \\\\ :infinity)","anchor":"get_by_channel_and_author/4"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"query_handle/0","deprecated":false,"title":"query_handle()","anchor":"query_handle/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"}],"key":"functions"}],"nested_title":".MessageCache.Mnesia","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.MessageCache.Noop","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MessageCache.Noop","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".MessageCache.Noop","nested_context":"Nostrum.Cache"},{"id":"Nostrum.Cache.ChannelGuildMapping.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(channel_id, guild_id)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(channel_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(channel_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.ChannelGuildMapping.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(channel_id, guild_id)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(channel_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(channel_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.ChannelGuildMapping.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.ChannelGuildMapping.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.ChannelGuildMapping"},{"id":"Nostrum.Cache.GuildCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel_create/2","deprecated":false,"title":"channel_create(guild_id, channel)","anchor":"channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(guild_id, channel_id)","anchor":"channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(guild_id, channel)","anchor":"channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(guild_id, emojis)","anchor":"emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(guild_id)","anchor":"member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(guild_id)","anchor":"member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(guild_id, role)","anchor":"role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(guild_id, role_id)","anchor":"role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(guild_id, role)","anchor":"role_update/2"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(guild_id, stickers)","anchor":"stickers_update/2"},{"id":"tabname/0","deprecated":false,"title":"tabname()","anchor":"tabname/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(guild_id, payload)","anchor":"voice_state_update/2"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.GuildCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"channel_create/2","deprecated":false,"title":"channel_create(guild_id, channel)","anchor":"channel_create/2"},{"id":"channel_delete/2","deprecated":false,"title":"channel_delete(guild_id, channel_id)","anchor":"channel_delete/2"},{"id":"channel_update/2","deprecated":false,"title":"channel_update(guild_id, channel)","anchor":"channel_update/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"emoji_update/2","deprecated":false,"title":"emoji_update(guild_id, payload)","anchor":"emoji_update/2"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"member_count_down/1","deprecated":false,"title":"member_count_down(guild_id)","anchor":"member_count_down/1"},{"id":"member_count_up/1","deprecated":false,"title":"member_count_up(guild_id)","anchor":"member_count_up/1"},{"id":"role_create/2","deprecated":false,"title":"role_create(guild_id, payload)","anchor":"role_create/2"},{"id":"role_delete/2","deprecated":false,"title":"role_delete(guild_id, role_id)","anchor":"role_delete/2"},{"id":"role_update/2","deprecated":false,"title":"role_update(guild_id, role)","anchor":"role_update/2"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"stickers_update/2","deprecated":false,"title":"stickers_update(guild_id, stickers)","anchor":"stickers_update/2"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"voice_state_update/2","deprecated":false,"title":"voice_state_update(guild_id, payload)","anchor":"voice_state_update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.GuildCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.GuildCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.GuildCache"},{"id":"Nostrum.Cache.MemberCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, members)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/2","deprecated":false,"title":"create(guild_id, payload)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(guild_id, user_id)","anchor":"delete/2"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/2","deprecated":false,"title":"update(guild_id, payload)","anchor":"update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.MemberCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, members)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/2","deprecated":false,"title":"create(guild_id, payload)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(guild_id, user_id)","anchor":"delete/2"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/2","deprecated":false,"title":"update(guild_id, payload)","anchor":"update/2"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.MemberCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.MemberCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.MemberCache"},{"id":"Nostrum.Cache.PresenceCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, presences)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/1","deprecated":false,"title":"update(new)","anchor":"update/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.PresenceCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/2","deprecated":false,"title":"bulk_create(guild_id, presences)","anchor":"bulk_create/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(presence)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(guild_id, user_id)","anchor":"get/2"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(new)","anchor":"update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.PresenceCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.PresenceCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.PresenceCache"},{"id":"Nostrum.Cache.UserCache.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(users)","anchor":"bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"update/1","deprecated":false,"title":"update(info)","anchor":"update/1"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Cache.UserCache.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bulk_create/1","deprecated":false,"title":"bulk_create(users)","anchor":"bulk_create/1"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"clear/0","deprecated":false,"title":"clear()","anchor":"clear/0"},{"id":"create/1","deprecated":false,"title":"create(payload)","anchor":"create/1"},{"id":"delete/1","deprecated":false,"title":"delete(user_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(user_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"},{"id":"update/1","deprecated":false,"title":"update(payload)","anchor":"update/1"},{"id":"wrap_query/1","deprecated":false,"title":"wrap_query(fun)","anchor":"wrap_query/1"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Cache.UserCache.NoOp","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Cache.UserCache.NoOp","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".NoOp","nested_context":"Nostrum.Cache.UserCache"},{"id":"Nostrum.Store.GuildShardMapping.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.GuildShardMapping.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Store.GuildShardMapping"},{"id":"Nostrum.Store.GuildShardMapping.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.GuildShardMapping.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/2","deprecated":false,"title":"create(guild_id, shard_num)","anchor":"create/2"},{"id":"delete/1","deprecated":false,"title":"delete(guild_id)","anchor":"delete/1"},{"id":"get/1","deprecated":false,"title":"get(guild_id)","anchor":"get/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Store.GuildShardMapping"},{"id":"Nostrum.Store.UnavailableGuild.ETS","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.UnavailableGuild.ETS","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"}],"key":"functions"}],"nested_title":".ETS","nested_context":"Nostrum.Store.UnavailableGuild"},{"id":"Nostrum.Store.UnavailableGuild.Mnesia","deprecated":false,"group":"Pluggable caches & stores","title":"Nostrum.Store.UnavailableGuild.Mnesia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"create/1","deprecated":false,"title":"create(guild_id)","anchor":"create/1"},{"id":"init/1","deprecated":false,"title":"init(init_arg)","anchor":"init/1"},{"id":"is?/1","deprecated":false,"title":"is?(guild_id)","anchor":"is?/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(init_arg)","anchor":"start_link/1"},{"id":"table/0","deprecated":false,"title":"table()","anchor":"table/0"},{"id":"teardown/0","deprecated":false,"title":"teardown()","anchor":"teardown/0"}],"key":"functions"}],"nested_title":".Mnesia","nested_context":"Nostrum.Store.UnavailableGuild"},{"id":"Nostrum.Api.Ratelimiter","deprecated":false,"group":"Internal modules","title":"Nostrum.Api.Ratelimiter","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Asynchronous requests","anchor":"module-asynchronous-requests"},{"id":"Multi-node","anchor":"module-multi-node"},{"id":"Inner workings","anchor":"module-inner-workings"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"t:bucket/0"},{"id":"queued_request/0","deprecated":false,"title":"queued_request()","anchor":"t:queued_request/0"},{"id":"remaining/0","deprecated":false,"title":"remaining()","anchor":"t:remaining/0"},{"id":"request/0","deprecated":false,"title":"request()","anchor":"t:request/0"},{"id":"state/0","deprecated":false,"title":"state()","anchor":"t:state/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"callback_mode/0","deprecated":false,"title":"callback_mode()","anchor":"callback_mode/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"code_change/4","deprecated":false,"title":"code_change(version, state, data, extra)","anchor":"code_change/4"},{"id":"connected/3","deprecated":false,"title":"connected(arg1, request, data)","anchor":"connected/3"},{"id":"connecting/3","deprecated":false,"title":"connecting(arg1, arg2, data)","anchor":"connecting/3"},{"id":"disconnected/3","deprecated":false,"title":"disconnected(arg, arg2, data)","anchor":"disconnected/3"},{"id":"get_endpoint/2","deprecated":false,"title":"get_endpoint(route, method)","anchor":"get_endpoint/2"},{"id":"global_limit/3","deprecated":false,"title":"global_limit(arg1, next, data)","anchor":"global_limit/3"},{"id":"init/1","deprecated":false,"title":"init(token)","anchor":"init/1"},{"id":"queue/1","deprecated":false,"title":"queue(request)","anchor":"queue/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Api.RatelimiterGroup","deprecated":false,"group":"Internal modules","title":"Nostrum.Api.RatelimiterGroup","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Approach","anchor":"module-approach"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"join/1","deprecated":false,"title":"join(pid)","anchor":"join/1"},{"id":"limiter_for_bucket/1","deprecated":false,"title":"limiter_for_bucket(bucket)","anchor":"limiter_for_bucket/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session","sections":[{"id":"Purpose","anchor":"module-purpose"},{"id":"Inner workings","anchor":"module-inner-workings"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"callback_mode/0","deprecated":false,"title":"callback_mode()","anchor":"callback_mode/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"connected/3","deprecated":false,"title":"connected(arg1, request, data)","anchor":"connected/3"},{"id":"connecting_http/3","deprecated":false,"title":"connecting_http(arg1, from, data)","anchor":"connecting_http/3"},{"id":"connecting_ws/3","deprecated":false,"title":"connecting_ws(arg1, arg2, data)","anchor":"connecting_ws/3"},{"id":"disconnect/1","deprecated":false,"title":"disconnect(pid)","anchor":"disconnect/1"},{"id":"disconnect/2","deprecated":false,"title":"disconnect(pid, timeout)","anchor":"disconnect/2"},{"id":"disconnected/3","deprecated":false,"title":"disconnected(arg1, arg2, data)","anchor":"disconnected/3"},{"id":"format_status/1","deprecated":false,"title":"format_status(state)","anchor":"format_status/1"},{"id":"get_ws_state/1","deprecated":false,"title":"get_ws_state(pid)","anchor":"get_ws_state/1"},{"id":"init/1","deprecated":false,"title":"init(arg1)","anchor":"init/1"},{"id":"request_guild_members/3","deprecated":false,"title":"request_guild_members(pid, guild_id, limit \\\\ 0)","anchor":"request_guild_members/3"},{"id":"start_link/2","deprecated":false,"title":"start_link(opts, statem_opts)","anchor":"start_link/2"},{"id":"update_status/5","deprecated":false,"title":"update_status(pid, status, game, stream, type)","anchor":"update_status/5"},{"id":"update_voice_state/5","deprecated":false,"title":"update_voice_state(pid, guild_id, channel_id, self_mute, self_deaf)","anchor":"update_voice_state/5"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session.Compression","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"c:create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(reference, iodata)","anchor":"c:inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(reference)","anchor":"c:reset_context/1"}],"key":"callbacks"}]},{"id":"Nostrum.Shard.Session.Compression.Zlib","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression.Zlib","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(ctx, frame)","anchor":"inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(ctx)","anchor":"reset_context/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Session.Compression.Zstd","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Session.Compression.Zstd","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_available!/0","deprecated":false,"title":"check_available!()","anchor":"check_available!/0"},{"id":"create_context/0","deprecated":false,"title":"create_context()","anchor":"create_context/0"},{"id":"inflate/2","deprecated":false,"title":"inflate(ctx, frame)","anchor":"inflate/2"},{"id":"reset_context/1","deprecated":false,"title":"reset_context(ctx)","anchor":"reset_context/1"}],"key":"functions"}]},{"id":"Nostrum.Shard.Supervisor","deprecated":false,"group":"Internal modules","title":"Nostrum.Shard.Supervisor","sections":[{"id":"Implementation","anchor":"module-implementation"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"resume_information/0","deprecated":false,"title":"resume_information()","anchor":"t:resume_information/0"},{"id":"shard_num/0","deprecated":false,"title":"shard_num()","anchor":"t:shard_num/0"},{"id":"total_shards/0","deprecated":false,"title":"total_shards()","anchor":"t:total_shards/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"connect/2","deprecated":false,"title":"connect(shard_num, total_shards)","anchor":"connect/2"},{"id":"disconnect/1","deprecated":false,"title":"disconnect(shard_num)","anchor":"disconnect/1"},{"id":"reconnect/1","deprecated":false,"title":"reconnect(opts)","anchor":"reconnect/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(args)","anchor":"start_link/1"},{"id":"update_status/4","deprecated":false,"title":"update_status(status, game, stream, type)","anchor":"update_status/4"},{"id":"update_voice_state/4","deprecated":false,"title":"update_voice_state(guild_id, channel_id, self_mute, self_deaf)","anchor":"update_voice_state/4"}],"key":"functions"}]},{"id":"Nostrum.StateMachineTranslator","deprecated":false,"group":"Internal modules","title":"Nostrum.StateMachineTranslator","sections":[{"id":"Reasoning","anchor":"module-reasoning"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"translate/4","deprecated":false,"title":"translate(min_level, arg2, arg3, arg4)","anchor":"translate/4"}],"key":"functions"}]},{"id":"Nostrum.Error.ApiError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.ApiError","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"detailed_error/0","deprecated":false,"title":"detailed_error()","anchor":"t:detailed_error/0"},{"id":"discord_status_code/0","deprecated":false,"title":"discord_status_code()","anchor":"t:discord_status_code/0"},{"id":"error/0","deprecated":false,"title":"error()","anchor":"t:error/0"},{"id":"error_list_map/0","deprecated":false,"title":"error_list_map()","anchor":"t:error_list_map/0"},{"id":"errors/0","deprecated":false,"title":"errors()","anchor":"t:errors/0"},{"id":"response/0","deprecated":false,"title":"response()","anchor":"t:response/0"},{"id":"status_code/0","deprecated":false,"title":"status_code()","anchor":"t:status_code/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Nostrum.Error.CacheError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.CacheError","sections":[]},{"id":"Nostrum.Error.VoiceError","deprecated":false,"group":"Exceptions","title":"Nostrum.Error.VoiceError","sections":[]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"mix-tasks"}]},{"id":"intro","group":"","title":"Introduction","headers":[{"id":"Setup","anchor":"setup"},{"id":"Configuration options","anchor":"configuration-options"},{"id":"Logging","anchor":"logging"},{"id":"Example bots","anchor":"example-bots"}]},{"id":"api-4","group":"","title":"API","headers":[{"id":"Banged (!) API methods","anchor":"banged-api-methods"},{"id":"Abstractions","anchor":"abstractions"},{"id":"Ratelimiting","anchor":"ratelimiting"},{"id":"REST-only","anchor":"rest-only"}]},{"id":"application_commands","group":"","title":"Application commands","headers":[{"id":"Permissions required","anchor":"permissions-required"},{"id":"Getting started","anchor":"getting-started"},{"id":"Receiving interactions","anchor":"receiving-interactions"},{"id":"Responding to interactions","anchor":"responding-to-interactions"}]},{"id":"gateway_intents","group":"","title":"Gateway Intents","headers":[]},{"id":"event_handling","group":"Functionality","title":"Event handling","headers":[]},{"id":"state","group":"Functionality","title":"State","headers":[{"id":"Caches","anchor":"caches"},{"id":"Implementing your own caches","anchor":"implementing-your-own-caches"},{"id":"Internal state","anchor":"internal-state"}]},{"id":"voice-3","group":"Functionality","title":"Voice","headers":[{"id":"Voice channels","anchor":"voice-channels"},{"id":"FFmpeg","anchor":"ffmpeg"},{"id":"youtube-dl","anchor":"youtube-dl"},{"id":"streamlink","anchor":"streamlink"},{"id":"Audio Timeout","anchor":"audio-timeout"},{"id":"Audio Frames Per Burst","anchor":"audio-frames-per-burst"},{"id":"Voice Events","anchor":"voice-events"},{"id":"Encryption Modes","anchor":"encryption-modes"}]},{"id":"gateway_compression","group":"Advanced","title":"Gateway Compression","headers":[{"id":"Using :zstd compression","anchor":"using-zstd-compression"}]},{"id":"hot_code_upgrade","group":"Advanced","title":"Hot code upgrade","headers":[]},{"id":"manual_sharding","group":"Advanced","title":"Manual Sharding","headers":[{"id":"Reconnection example","anchor":"reconnection-example"}]},{"id":"multi_node","group":"Advanced","title":"Multi-node","headers":[{"id":"High availability","anchor":"high-availability"}]},{"id":"pluggable_caching","group":"Advanced","title":"Pluggable caching","headers":[{"id":"Implementations","anchor":"implementations"},{"id":"Cache invalidation","anchor":"cache-invalidation"},{"id":"Cache performance","anchor":"cache-performance"}]},{"id":"api-1","group":"Cheat Sheets","title":"API Usage","headers":[{"id":"Messages","anchor":"messages"},{"id":"Miscellaneous","anchor":"miscellaneous"}]},{"id":"voice-2","group":"Cheat Sheets","title":"Voice Usage","headers":[{"id":"Playing Audio","anchor":"playing-audio"},{"id":"Audio FFmpeg options","anchor":"audio-ffmpeg-options"}]}],"tasks":[{"id":"Mix.Tasks.Gh.Docs","deprecated":false,"group":"","title":"mix gh.docs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(_)","anchor":"run/1"}],"key":"functions"}]}]} \ No newline at end of file diff --git a/event_handling.html b/event_handling.html index d9ef12028..242efc338 100644 --- a/event_handling.html +++ b/event_handling.html @@ -14,7 +14,7 @@ - + diff --git a/gateway_compression.html b/gateway_compression.html index 522c18ddb..b76db1c8d 100644 --- a/gateway_compression.html +++ b/gateway_compression.html @@ -14,7 +14,7 @@ - + @@ -147,12 +147,12 @@

Using :zstd compression

Using :zstd depends on the :ezstd library, -so you will have to add this dependency to your mix.exs file:

  defp deps do
-    [
-      {:nostrum, ...},
-      {:ezstd, "~> 1.1"} # new dependency
-    ]
-  end

:ezstd NIFs

Some functionality of :ezstd depends on Erlang NIFs (Natively Implemented +so you will have to add this dependency to your mix.exs file:

  defp deps do
+    [
+      {:nostrum, ...},
+      {:ezstd, "~> 1.1"} # new dependency
+    ]
+  end

:ezstd NIFs

Some functionality of :ezstd depends on Erlang NIFs (Natively Implemented Functions). This means that a proper compiler installation as well as other build tools like git may be necessary at the stage where you compile your dependencies.

It may be useful to run mix deps.compile in any build systems to ensure that diff --git a/gateway_intents.html b/gateway_intents.html index ce9cc852b..974ca92dd 100644 --- a/gateway_intents.html +++ b/gateway_intents.html @@ -14,7 +14,7 @@ - + @@ -138,10 +138,10 @@

The Discord API allows you to fine tune the payloads that are received by your bot through gateway intents.

When connecting to Discord you can instruct Discord on which events you want to receive (i.e. messages, user presences, etc.).

Nostrum allows you to set these intents within your configuration, by default all non-privileged intents are enabled.

To pass intents you should use the following configuration:

config :nostrum,
   token: "bot_token",
-  gateway_intents: [
+  gateway_intents: [
     :guilds,
     # other gateway intents
-  ]

Possible intents (and the gateway events they correspond to) are:

guilds:
+  ]

Possible intents (and the gateway events they correspond to) are:

guilds:
   - GUILD_CREATE
   - GUILD_UPDATE
   - GUILD_DELETE
diff --git a/hot_code_upgrade.html b/hot_code_upgrade.html
index cb8fa7d4c..7f3e524c8 100644
--- a/hot_code_upgrade.html
+++ b/hot_code_upgrade.html
@@ -14,7 +14,7 @@
 
     
     
-    
+    
     
     
 
diff --git a/intro.html b/intro.html
index 508012e2b..a674e1e3f 100644
--- a/intro.html
+++ b/intro.html
@@ -14,7 +14,7 @@
 
     
     
-    
+    
     
     
 
@@ -145,11 +145,11 @@ 

There are two versions of nostrum, a stable version released on Hex and a dev version on GitHub. The dev version will be more up to date but will likely -have more errors.

def deps do
-  [{:nostrum, "~> 0.10"}]
+have more errors.

def deps do
+  [{:nostrum, "~> 0.10"}]
   # Or, for bleeding edge changes:
   # [{:nostrum, github: "Kraigie/nostrum"}]
-end

Next up, you need to configure nostrum. The most basic configuration is simply +end

Next up, you need to configure nostrum. The most basic configuration is simply setting a token to log in with:

config :nostrum,
   token: "666"  # The token of your bot as a string

@@ -225,7 +225,7 @@

nostrum uses Elixir's standard logger to inform you about regular and irregular events. Normal messages include Discord-requested shard reconnections and the IDENTIFY and READY events.

The following metadata fields through logger:

  • shard - Id of the shard on which the event occurred
  • guild - Name of the guild on which the voice connection event occurred
  • channel - Name of the channel on which the voice connection event occurred

To enable this metadata, logger can be configured as such:

config :logger, :console,
-  metadata: [:shard, :guild, :channel]

For more information on how this works, and how to change the logging + metadata: [:shard, :guild, :channel]

For more information on how this works, and how to change the logging configuration for nostrum on its own, please see the Logger documentation

diff --git a/manual_sharding.html b/manual_sharding.html index a089f69af..fb978ffb3 100644 --- a/manual_sharding.html +++ b/manual_sharding.html @@ -14,7 +14,7 @@ - + @@ -148,12 +148,12 @@

Reconnection example

# On Node A
-iex> Nostrum.Shard.Supervisor.connect(0, 1)
-iex> resume_info = Nostrum.Shard.Supervisor.disconnect(0)
-%{shard_num: 0, ...}
+iex> Nostrum.Shard.Supervisor.connect(0, 1)
+iex> resume_info = Nostrum.Shard.Supervisor.disconnect(0)
+%{shard_num: 0, ...}
 
 # On another node
-iex> Nostrum.Shard.Supervisor.reconnect(resume_info)

Discord will perform a best effort attempt to resume the gateway from the time +iex> Nostrum.Shard.Supervisor.reconnect(resume_info)

Discord will perform a best effort attempt to resume the gateway from the time of disconnection, relaying any missed events. Resumption is not guaranteed to work, in the event it fails Nostrum will reconnect the shard from scratch, though this may mean some events are missed.

diff --git a/multi_node.html b/multi_node.html index 574ed31ac..1e49cb268 100644 --- a/multi_node.html +++ b/multi_node.html @@ -14,7 +14,7 @@ - + @@ -168,28 +168,28 @@

feature to include nostrum into our supervision tree. You also need to explicitly include nostrum's dependencies to ensure they are started, as the regular nostrum application startup won't handle it for you. This can be done by -changing your application definition in mix.exs as follows:

  def application do
-    [
-      mod: {MyBot.Application, []},
-      included_applications: [:nostrum],
+changing your application definition in mix.exs as follows:

  def application do
+    [
+      mod: {MyBot.Application, []},
+      included_applications: [:nostrum],
       # You can see this with `mix app.tree nostrum`
-      extra_applications: [:certifi, :gun, :inets, :jason, :mime]
+      extra_applications: [:certifi, :gun, :inets, :jason, :mime]
       # ...
-    ]
-  end

You also need to set runtime: false for :nostrum itself in your + ] + end

You also need to set runtime: false for :nostrum itself in your dependencies, and any dependencies of your app that depend on :nostrum, such -as command frameworks like :nosedrum:

  defp deps do
-    [
-      {:nostrum, "~> 0.10", runtime: false},
+as command frameworks like :nosedrum:

  defp deps do
+    [
+      {:nostrum, "~> 0.10", runtime: false},
       # {:nosedrum, "~> 0.6", runtime: false},
-    ]
-  end

You now need to add nostrum to your applications' children to start it as part -of your app:

  def start(type, args) do
-    children = [
+    ]
+  end

You now need to add nostrum to your applications' children to start it as part +of your app:

  def start(type, args) do
+    children = [
       Nostrum.Application,
       # ...
-    ]
-  end

If you want to run some logic ahead of starting nostrum, you can naturally also + ] + end

If you want to run some logic ahead of starting nostrum, you can naturally also put it later into the list.

You can start your bot now, and it's going to run. If you look at your bot's application in :observer, you will see that nostrum has now become one with your bot. We call that integration engineering.

Now that our app bundles everything it needs with itself, this means starting @@ -206,18 +206,18 @@

Erlang configuration files, for releases you can use your regular config/prod.exs. We will set up the following:

  • Instruct OTP that our app, :mybot is a distributed app, and give it the hosts to run it on.

  • On startup, tell OTP it should wait for the other nodes to become available.

With the Erlang configuration files, this can be done as follows:

% mybot_joe.config
-[{kernel,
-  [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},
-   {sync_nodes_mandatory, [mike@HOSTNAME, robert@HOSTNAME]},
-   {sync_nodes_timeout, 30000}]}].
% mybot_robert.config
-[{kernel,
-  [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},
-   {sync_nodes_mandatory, [joe@HOSTNAME, mike@HOSTNAME]},
-   {sync_nodes_timeout, 30000}]}].
% mybot_mike.config
-[{kernel,
-  [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},
-   {sync_nodes_mandatory, [joe@HOSTNAME, robert@HOSTNAME]},
-   {sync_nodes_timeout, 30000}]}].

Note the only thing that changes is the sync_node_mandatory setting, which +[{kernel, + [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]}, + {sync_nodes_mandatory, [mike@HOSTNAME, robert@HOSTNAME]}, + {sync_nodes_timeout, 30000}]}].

% mybot_robert.config
+[{kernel,
+  [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},
+   {sync_nodes_mandatory, [joe@HOSTNAME, mike@HOSTNAME]},
+   {sync_nodes_timeout, 30000}]}].
% mybot_mike.config
+[{kernel,
+  [{distributed, [{mybot, 5000, [joe@HOSTNAME, {mike@HOSTNAME, robert@HOSTNAME}]}]},
+   {sync_nodes_mandatory, [joe@HOSTNAME, robert@HOSTNAME]},
+   {sync_nodes_timeout, 30000}]}].

Note the only thing that changes is the sync_node_mandatory setting, which instructs OTP which hosts to wait for on startup. The other settings must match. These options instructs OTP that our app :mybot is distributed and should be started at :joe@HOSTNAME first. If that fails, it moves to :robert@HOSTNAME diff --git a/pluggable_caching.html b/pluggable_caching.html index 9c0562d02..16c8cfccb 100644 --- a/pluggable_caching.html +++ b/pluggable_caching.html @@ -14,7 +14,7 @@ - + @@ -153,9 +153,9 @@

time. A common situation is that you don't want to cache presences in your bot, most likely you don't care about user's status, so you can disable it altogether by using the NoOp presence cache:

config :nostrum,
-  caches: %{
+  caches: %{
     presences: Nostrum.Cache.PresenceCache.NoOp
-  }

In addition to regular caches that associate Discord snowflakes with the proper + }

In addition to regular caches that associate Discord snowflakes with the proper "full" object, nostrum also maintains junction table-like mappings that allow you to find the matching object from one cache in another. One example for this is Nostrum.Cache.ChannelGuildMapping.

Nostrum also ships with Mnesia-based caches. These are only compiled in when diff --git a/search.html b/search.html index 275d8cff2..bf4a85a83 100644 --- a/search.html +++ b/search.html @@ -16,7 +16,7 @@ - + @@ -133,7 +133,7 @@

- +

diff --git a/state.html b/state.html index 71b5fddd4..13a72d1a7 100644 --- a/state.html +++ b/state.html @@ -14,7 +14,7 @@ - + diff --git a/voice-2.html b/voice-2.html index 84ad2ce47..ab0a1a694 100644 --- a/voice-2.html +++ b/voice-2.html @@ -16,7 +16,7 @@ - + @@ -155,33 +155,33 @@

Playing immediately with a try_play function

-
def try_play(guild_id, url, type, opts \\ []) do
-  case Voice.play(guild_id, url, type, opts) do
-    {:error, _msg} ->
+
def try_play(guild_id, url, type, opts \\ []) do
+  case Voice.play(guild_id, url, type, opts) do
+    {:error, _msg} ->
       # Wait for handshaking to complete
-      Process.sleep(100)
-      try_play(guild_id, url, type, opts)
+      Process.sleep(100)
+      try_play(guild_id, url, type, opts)
 
     _ ->
       :ok
-  end
-end
iex> Voice.join_channel(guild_id, channel_id)
-iex> try_play(guild_id, "./song.mp3", :url)

+ end +end

iex> Voice.join_channel(guild_id, channel_id)
+iex> try_play(guild_id, "./song.mp3", :url)

Playing immediately using Nostrum.Voice.ready?/1

-
def play_when_ready(guild_id, url, type, opts \\ []) do
-  if Voice.ready?(guild_id) do
-    Voice.play(guild_id, url, type, opts)
-  else
+
def play_when_ready(guild_id, url, type, opts \\ []) do
+  if Voice.ready?(guild_id) do
+    Voice.play(guild_id, url, type, opts)
+  else
     # Wait for handshaking to complete
-    Process.sleep(25)
-    play_when_ready(guild_id, url, type, opts)
-  end
-end
iex> Voice.join_channel(guild_id, channel_id)
-iex> play_when_ready(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl)

+ Process.sleep(25) + play_when_ready(guild_id, url, type, opts) + end +end

iex> Voice.join_channel(guild_id, channel_id)
+iex> play_when_ready(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl)

@@ -190,11 +190,11 @@

alias Nostrum.Struct.Event.VoiceReady
 alias Nostrum.Voice
 
-def handle_event({:VOICE_READY, %VoiceReady{guild_id: guild_id} = _event, _v_ws_state}) do
-  Voice.play(guild_id, "~/loud_noise.mp3", :url, volume: 10)
-end

Once the voice handshake has completed, audio will begin playing +def handle_event({:VOICE_READY, %VoiceReady{guild_id: guild_id} = _event, _v_ws_state}) do + Voice.play(guild_id, "~/loud_noise.mp3", :url, volume: 10) +end

Once the voice handshake has completed, audio will begin playing without the need for polling functions like try_play/4 or play_when_ready/4 -as shown in the other examples

iex> Voice.join_channel(guild_id, channel_id)
+as shown in the other examples

iex> Voice.join_channel(guild_id, channel_id)
 # Playback will start automatically when ready

@@ -207,40 +207,40 @@

Volume

-

Half volume

Voice.play(guild_id, "~/final_mix.wav", :url, 
+

Half volume

Voice.play(guild_id, "~/final_mix.wav", :url, 
   volume: 0.5
-)

Extreme clipping

Voice.play(guild_id, "~/boost_this.m4a", :url, 
+)

Extreme clipping

Voice.play(guild_id, "~/boost_this.m4a", :url, 
   volume: 100
-)

Normal volume with inverted phase

Voice.play(guild_id, "~/music.mp3", :url, 
+)

Normal volume with inverted phase

Voice.play(guild_id, "~/music.mp3", :url, 
   volume: -1.0
-)

+)

Start position and duration

-

Start at 37.8 seconds

Voice.play(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl, 
+

Start at 37.8 seconds

Voice.play(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl, 
   start_pos: "0:37.8"
-)

Play the first at 15.3 seconds from the beginning

Voice.play(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl, 
+)

Play the first at 15.3 seconds from the beginning

Voice.play(guild_id, "https://youtu.be/b4RJ-QGOtw4", :ytdl, 
   duration: "15.3"
-)

Play for 80 seconds (equivalently 1:20) starting from 90 seconds (equivalently 1:30) in

Voice.play(guild_id, "~/music.mp3", :url, 
+)

Play for 80 seconds (equivalently 1:20) starting from 90 seconds (equivalently 1:30) in

Voice.play(guild_id, "~/music.mp3", :url, 
   start_pos: "90", 
   duration: "80"
-)

+)

Advanced audio filtering

-

Cutoff filters

Low-pass filter at 1200 Hz, high-pass filter at 300 Hz

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
+

Cutoff filters

Low-pass filter at 1200 Hz, high-pass filter at 300 Hz

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
   filter: "lowpass=f=1200",
   filter: "highpass=f=300"
-)

Sample rate

Play at half tempo and pitch (assumes a 48kHz sample rate)

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
+)

Sample rate

Play at half tempo and pitch (assumes a 48kHz sample rate)

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
   filter: "asetrate=48000*0.5"
-)

Play at 30% higher tempo and pitch. Realtime must be set to false for ffmpeg to keep up with faster-than-normal playback.

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
+)

Play at 30% higher tempo and pitch. Realtime must be set to false for ffmpeg to keep up with faster-than-normal playback.

Voice.play(guild_id, "https://youtu.be/0ngcL_5ekXo", :ytdl,
   realtime: false,
   filter: "asetrate=48000*1.3"
-)

Heavily distorted and effected lo-fi FX chain

Voice.play(guild_id, "https://youtu.be/Hd_giv-wcJU", :ytdl,
+)

Heavily distorted and effected lo-fi FX chain

Voice.play(guild_id, "https://youtu.be/Hd_giv-wcJU", :ytdl,
   volume: 3,
   start_pos: "0:55",
   filter: "asetrate=48000*0.73",
@@ -248,7 +248,7 @@ 

Cutoff filters

Low-pass filter at 1200 Hz, high-pass filter at 300 Hz filter: "vibrato=f=1:d=0.8", filter: "lowpass=f=1200", filter: "aphaser=in_gain=0.4:out_gain=0.5:delay=3.0:decay=0.3:speed=0.3:type=t" -)

+
)
diff --git a/voice-3.html b/voice-3.html index 8d70332ac..9da7a0e64 100644 --- a/voice-3.html +++ b/voice-3.html @@ -14,7 +14,7 @@ - + @@ -195,8 +195,8 @@

currently works with both of these services. If the short, human-readable url of the streaming service doesn't work with streamlink out of the box, you may have more luck extracting the underlying raw stream url. These are typically long URLs that end in .m3u8 or .hls. If you have youtube-dl installed, -you can attempt to get this URL by running the following:

{raw_url, 0} = System.cmd("youtube-dl", ["-f", "best", "-g", url])
-raw_url = raw_url |> String.trim()

+you can attempt to get this URL by running the following:

{raw_url, 0} = System.cmd("youtube-dl", ["-f", "best", "-g", url])
+raw_url = raw_url |> String.trim()

@@ -269,16 +269,16 @@

Nostrum.Consumer.voice_ready/0 event can be used by the bot to begin playing audio as soon as it is able to. The alternative approach for this use case that is not event-driven is to periodically call Nostrum.Voice.ready?/1 and wait for it to return true as the trigger to -begin playing. Another common approach is to define a try_play function as follows:

def try_play(guild_id, url, type, opts \\ []) do
-  case Nostrum.Voice.play(guild_id, url, type, opts) do
-    {:error, _msg} ->
-      Process.sleep(100)
-      try_play(guild_id, url, type, opts)
+begin playing. Another common approach is to define a try_play function as follows:

def try_play(guild_id, url, type, opts \\ []) do
+  case Nostrum.Voice.play(guild_id, url, type, opts) do
+    {:error, _msg} ->
+      Process.sleep(100)
+      try_play(guild_id, url, type, opts)
 
     _ ->
       :ok
-  end
-end

Note that the third element in the event is of type Nostrum.Struct.VoiceWSState.t/0 and + end +end

Note that the third element in the event is of type Nostrum.Struct.VoiceWSState.t/0 and not Nostrum.Struct.WSState.t/0.

The Nostrum.Consumer.voice_incoming_packet/0 event is generated by Nostrum. None will be generated by default. You must first be connected to a voice channel, call the Nostrum.Voice.start_listen_async/1 function, then have another user in the same voice channel speak. If these conditions are met, an event @@ -298,8 +298,8 @@

Nostrum supports all of Discord's available encryption modes for voice channels. The encryption mode is invisible to the user, and you will likely never need to touch it.

Different encryption modes may have different performance characteristics depending on the -hardware architecture your bot is running on. If you're interested, keep reading.

Encryption Mode Configuration Options

This is a compile-time configuration option, so should you wish to set it, -do it in config.exs or one of its imported config files, not runtime.exs.

config :nostrum, :voice_encryption_mode, :aes256_gcm # Default

Available configuration options are as follows:

  • :xsalsa20_poly1305
  • :xsalsa20_poly1305_suffix
  • :xsalsa20_poly1305_lite
  • :xsalsa20_poly1305_lite_rtpsize (not yet documented by Discord)
  • :aead_xchacha20_poly1305_rtpsize (not yet documented by Discord)
  • :aead_aes256_gcm (not yet documented by Discord)
  • :aead_aes256_gcm_rtpsize (not yet documented by Discord)
  • :xchacha20_poly1305 (alias for :aead_xchacha20_poly1305_rtpsize)
  • :aes256_gcm (alias for :aead_aes256_gcm_rtpsize)

The first seven are Discord's available options, while the last two are shorter aliases.

The latter four of Discord's seven modes are not yet documented, but will be soon.

Implementation Details

Of the seven supported modes, three different ciphers are used. The remaining differences +hardware architecture your bot is running on. If you're interested, keep reading.

Encryption Mode Configuration Options

This is a runtime configuration option. Some Discord voice servers may not support your +configured encryption mode, and in these cases a fallback mode will be selected.

config :nostrum, :voice_encryption_mode, :aes256_gcm # Default

Available configuration options are as follows:

  • :xsalsa20_poly1305
  • :xsalsa20_poly1305_suffix
  • :xsalsa20_poly1305_lite
  • :xsalsa20_poly1305_lite_rtpsize
  • :aead_xchacha20_poly1305_rtpsize
  • :aead_aes256_gcm
  • :aead_aes256_gcm_rtpsize
  • :xchacha20_poly1305 (alias for :aead_xchacha20_poly1305_rtpsize)
  • :aes256_gcm (alias for :aead_aes256_gcm_rtpsize)

The first seven are Discord's available options, while the last two are shorter aliases.

The latter four of Discord's seven modes are not yet documented, but will be soon.

Implementation Details

Of the seven supported modes, three different ciphers are used. The remaining differences are variations in how the nonce is determined and where the encrypted portion of the RTP packet begins.

Erlang's :crypto module is leveraged as much as possible as the ciphers are NIFs.

xsalsa20_poly1305

The entire Salsa20/XSalsa20 cipher is implemented in elixir. The poly1305 MAC function is handled by the :crypto module. As a result, xsalsa_poly1305 modes will likely have the slowest performance.

xchacha20_poly1305

The :crypto module supports the chacha20_poly1305 AEAD cipher. The only thing implemented in elixir is the HChaCha20 hash function that generates a sub-key from the key and the longer nonce that XChaCha20