* Fix broken link (#11) * Fix typos and improve wording * Add information for IGuildUser + Add GetPermission sample + Add ModifyAsync remarks * Add information for IGuildChannel + Add ModifyAsync remarks + Add GetOverwritePermissionAsync examples * Add warning for Direction.Around * Fix indentations and references * Move IRole.ModifyAsync sample * Add information for IUser + Add example, remarks for Get(Default)AvatarUrl + Add example, remarks for GetOrCreateDMChannelAsync + Add missing remarks/summary/returns for other properties of the class * Change verbs used in IVoiceState summary/remarks * Add additional explanation for IGuildUser.RoleIds * Change verbs used in IMessage summary/remarks * Clarify IUserMessage Add/RemoveReactionAsync samples * Fix command handler sample typo * Add information for DiscordSocketConfig + Add remarks/example to the class + Add remarks to AlwaysDownloadUsers * Fix documentation for SlowMode * Add additional remarks for Guild/TextChannelProperties * Update DocFx.Plugins.LastModified to v1.2.0 This should drastically improve docfx build time. * Add missing dependencies * Update DocFx.Plugins.LastModified to v1.2.1 Improve performance * Update DocFx.Plugins.LastModified to v1.2.2 * Clarify deployment.md + Rewritten .NET Core deployment strategies for better clarification * Split deployment types into framework-dependent and self-contained * Clarify the benefits of using different types of publishing * Include a sample of how to execute dotnet application with the dotnet command in a TIP dialog for visibility * Update post-execution article and samples + This change is to reflect changes made in https://github.com/RogueException/Discord.Net/pull/1164, where CommandInfo is now passed into the CommandExecuted event as an Optional<T> * Update DocFX.Plugin.DescriptionGenerator to v1.1.1 * Adjust according to recent CommandExecuted changes See: +f549da50e0+6260749095* Add further documentation for https://github.com/RogueException/Discord.Net/pull/1037 * Add partial documentation for the precondition helper class * Include CHANGELOG.md in docs * Revise post-execution docs * Fix incorrect Optional<T> usage * Indent some sample code and add a comment reminding the user that the post-execution basic sample code is not ideal. * Streamline docs for Attachment + This commit also adds further explanation for why Embeds and Attachments are read-only collections * Add further documentation for MessageActivity and MessageApplication * Add caching-related docs to ISocketMessageChannel * Add missing documentation inheritance for SyncPermissionsAsync * Streamline documentation process This is done by changing the documentation of the implementations required by interfaces to redirect to the interface method instead (e.g., SocketDMChannel#GetMessagesAsync refer to IMessageChannel.GetMessagesAsync within the remarks of the method). * Cleanup92bf8363ca* Update src/Discord.Net.Core/Entities/Channels/Direction.cs Co-Authored-By: Still34 <341464@gmail.com> * Update src/Discord.Net.Core/Entities/Channels/Direction.cs Co-Authored-By: Still34 <341464@gmail.com> * Update src/Discord.Net.Core/Entities/Channels/GuildChannelProperties.cs Co-Authored-By: Still34 <341464@gmail.com> * Update src/Discord.Net.WebSocket/DiscordSocketConfig.cs Co-Authored-By: Still34 <341464@gmail.com> * Update according to PR suggestions * Reword sentences of deployment article for clarification & remove mention of portability * Fix typos/grammar errors within TextChannelProperties * Add the logo SVG to the page navbar * Implement changing logo image based on theme color using CSS background image * Add a favicon * use the purple logomark instead of white * hack? set the title to navbar svg to read "Discord.Net Docs"
123 lines
4.3 KiB
Markdown
123 lines
4.3 KiB
Markdown
---
|
|
uid: FAQ.Basics.BasicOp
|
|
title: Questions about Basic Operations
|
|
---
|
|
|
|
# Basic Operations Questions
|
|
|
|
In the following section, you will find commonly asked questions and
|
|
answers regarding basic usage of the library, as well as
|
|
language-specific tips when using this library.
|
|
|
|
## How should I safely check a type?
|
|
|
|
> [!WARNING]
|
|
> Direct casting (e.g., `(Type)type`) is **the least recommended**
|
|
> way of casting, as it *can* throw an [InvalidCastException]
|
|
> when the object isn't the desired type.
|
|
>
|
|
> Please refer to [this post] for more details.
|
|
|
|
In Discord.Net, the idea of polymorphism is used throughout. You may
|
|
need to cast the object as a certain type before you can perform any
|
|
action.
|
|
|
|
A good and safe casting example:
|
|
|
|
[!code-csharp[Casting](samples/cast.cs)]
|
|
|
|
[InvalidCastException]: https://docs.microsoft.com/en-us/dotnet/api/system.invalidcastexception
|
|
[this post]: https://docs.microsoft.com/en-us/dotnet/csharp/how-to/safely-cast-using-pattern-matching-is-and-as-operators
|
|
|
|
## How do I send a message?
|
|
|
|
> [!TIP]
|
|
> The [GetChannel] method by default returns an [IChannel], allowing
|
|
> channel types such as [IVoiceChannel], [ICategoryChannel]
|
|
> to be returned; consequently, you cannot send a message
|
|
> to channels like those.
|
|
|
|
Any implementation of [IMessageChannel] has a [SendMessageAsync]
|
|
method. You can get the channel via [GetChannel] under the client.
|
|
Remember, when using Discord.Net, polymorphism is a common recurring
|
|
theme. This means an object may take in many shapes or form, which
|
|
means casting is your friend. You should attempt to cast the channel
|
|
as an [IMessageChannel] or any other entity that implements it to be
|
|
able to message.
|
|
|
|
[SendMessageAsync]: xref:Discord.IMessageChannel.SendMessageAsync*
|
|
[GetChannel]: xref:Discord.WebSocket.DiscordSocketClient.GetChannel*
|
|
|
|
## How can I tell if a message is from X, Y, Z channel?
|
|
|
|
You may check the message channel type. Visit [Glossary] to see the
|
|
various types of channels.
|
|
|
|
[Glossary]: xref:FAQ.Glossary#message-channels
|
|
|
|
## How can I get the guild from a message?
|
|
|
|
There are 2 ways to do this. You can do either of the following,
|
|
|
|
1. Cast the user as an [IGuildUser] and use its [IGuild] property.
|
|
2. Cast the channel as an [IGuildChannel] and use its [IGuild] property.
|
|
|
|
## How do I add hyperlink text to an embed?
|
|
|
|
Embeds can use standard [markdown] in the description field as well
|
|
as in field values. With that in mind, links can be added with
|
|
`[text](link)`.
|
|
|
|
[markdown]: https://support.discordapp.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline-
|
|
|
|
## How do I add reactions to a message?
|
|
|
|
Any entity that implements [IUserMessage] has an [AddReactionAsync]
|
|
method. This method expects an [IEmote] as a parameter.
|
|
In Discord.Net, an Emote represents a custom-image emote, while an
|
|
Emoji is a Unicode emoji (standard emoji). Both [Emoji] and [Emote]
|
|
implement [IEmote] and are valid options.
|
|
|
|
# [Adding a reaction to another message](#tab/emoji-others)
|
|
|
|
[!code-csharp[Emoji](samples/emoji-others.cs)]
|
|
|
|
# [Adding a reaction to a sent message](#tab/emoji-self)
|
|
|
|
[!code-csharp[Emoji](samples/emoji-self.cs)]
|
|
|
|
***
|
|
|
|
[AddReactionAsync]: xref:Discord.IUserMessage.AddReactionAsync*
|
|
|
|
## What is a "preemptive rate limit?"
|
|
|
|
A preemptive rate limit is Discord.Net's way of telling you to slow
|
|
down before you get hit by the real rate limit. Hitting a real rate
|
|
limit might prevent your entire client from sending any requests for
|
|
a period of time. This is calculated based on the HTTP header
|
|
returned by a Discord response.
|
|
|
|
## Why am I getting so many preemptive rate limits when I try to add more than one reactions?
|
|
|
|
This is due to how HTML header works, mistreating
|
|
0.25sec/action to 1sec. This causes the lib to throw preemptive rate
|
|
limit more frequently than it should for methods such as adding
|
|
reactions.
|
|
|
|
## Can I opt-out of preemptive rate limits?
|
|
|
|
Unfortunately, not at the moment. See [#401](https://github.com/RogueException/Discord.Net/issues/401).
|
|
|
|
[IChannel]: xref:Discord.IChannel
|
|
[ICategoryChannel]: xref:Discord.ICategoryChannel
|
|
[IGuildChannel]: xref:Discord.IGuildChannel
|
|
[ITextChannel]: xref:Discord.ITextChannel
|
|
[IGuild]: xref:Discord.IGuild
|
|
[IVoiceChannel]: xref:Discord.IVoiceChannel
|
|
[IGuildUser]: xref:Discord.IGuildUser
|
|
[IMessageChannel]: xref:Discord.IMessageChannel
|
|
[IUserMessage]: xref:Discord.IUserMessage
|
|
[IEmote]: xref:Discord.IEmote
|
|
[Emote]: xref:Discord.Emote
|
|
[Emoji]: xref:Discord.Emoji |