Remora.Discord.Gateway
12.0.2
Prefix Reserved
dotnet add package Remora.Discord.Gateway --version 12.0.2
NuGet\Install-Package Remora.Discord.Gateway -Version 12.0.2
<PackageReference Include="Remora.Discord.Gateway" Version="12.0.2" />
paket add Remora.Discord.Gateway --version 12.0.2
#r "nuget: Remora.Discord.Gateway, 12.0.2"
// Install Remora.Discord.Gateway as a Cake Addin #addin nuget:?package=Remora.Discord.Gateway&version=12.0.2 // Install Remora.Discord.Gateway as a Cake Tool #tool nuget:?package=Remora.Discord.Gateway&version=12.0.2
Remora.Discord.Gateway
This package provides a fully-featured implementation of a Discord gateway client, complete with resume capabilities and user-facing events.
Structure
The package consists of two main parts - the client itself, and the event dispatch system. The latter will be familiar to users of the mediator pattern, wherein an intermediate type handles communication between separate objects; in Remora.Discord.Gateway's case, all incoming Discord events are dispatched and executed concurrently with each other, and the user may register responders to handle these events.
Provided you yourself do not inject services with a shared mutable state, all responders are thread-safe and do not require additional synchronization through semaphores or mutexes.
The client is a singleton service by design.
Usage
First and foremost, the gateway client must be registered with your dependency injection container.
services.AddDiscordGateway(serviceProvider => GetTokenFromSomewhere(serviceProvider));
Two things to note:
- You are not required to call any other methods from dependency libraries
(such as
Remora.Discord.API
) - this call takes care of all transitive dependencies itself. - You must, at this point, provide a way to access your bot's token in plain text. This access only happens after the container is constructed, and an API instance is requested, so you have access to the built container.
After this point, you may inject the gateway client into your own services. In
order to connect and start dispatching events, you must call RunAsync
somewhere, and subsequently either await the task directly or store it for later
use. This task represents the entire lifetime of the gateway client, and will
run until you explicitly request its termination via the cancellation token
passed to this method.
If you wish to explicitly send a gateway command (for example, to update
presence information), you may do so via the SubmitCommand
method on the
client. Note that no validations are performed on this command, so you can cause
unexpected termination of your session if the data is malformed or inappropriate
for the current state of the client.
Responders - the types which react to and handle incoming events - are created
by declaring a class that implements one or more instances of the
IResponder<T>
interface, and then registering these types with the service
container.
public class MyResponder : IResponder<IMessageCreate>
{
public async Task<Result> RespondAsync
(
IMessageCreate gatewayEvent,
CancellationToken ct = default
)
{
// ...
}
}
...
services.AddResponder<MyResponder>();
There are no restrictions placed on how long an individual responder may run, but you should strive to keep it short in order to avoid thread pool exhaustion.
Responders have no guarantees related to sequential execution, but you are able to sort them into one of three "groups", which do run sequentially to one another.
services.AddResponder<MyResponder>(ResponderGroup.Early); // executes before...
services.AddResponder<MyResponder>(ResponderGroup.Normal); // executes before...
services.AddResponder<MyResponder>(ResponderGroup.Late);
This is useful in cases where two responders to the same event depend on each other in some way.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- CommunityToolkit.HighPerformance (>= 8.2.2)
- Remora.Discord.Rest (>= 51.0.0)
- Remora.Extensions.Options.Immutable (>= 1.0.8)
- System.Threading.Channels (>= 8.0.0)
-
net6.0
- CommunityToolkit.HighPerformance (>= 8.2.2)
- Remora.Discord.Rest (>= 51.0.0)
- Remora.Extensions.Options.Immutable (>= 1.0.8)
- System.Threading.Channels (>= 8.0.0)
-
net7.0
- CommunityToolkit.HighPerformance (>= 8.2.2)
- Remora.Discord.Rest (>= 51.0.0)
- Remora.Extensions.Options.Immutable (>= 1.0.8)
- System.Threading.Channels (>= 8.0.0)
-
net8.0
- CommunityToolkit.HighPerformance (>= 8.2.2)
- Remora.Discord.Rest (>= 51.0.0)
- Remora.Extensions.Options.Immutable (>= 1.0.8)
- System.Threading.Channels (>= 8.0.0)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Remora.Discord.Gateway:
Package | Downloads |
---|---|
Remora.Discord.Commands
Glue code for using Remora.Commands with Remora.Discord |
|
Remora.Discord.Hosting
Implementation of a hosted Discord gateway service for the .NET Generic Host |
|
Remora.Discord.Interactivity
Framework for using Discord's interaction-driven message components |
|
Remora.Discord.Extensions
Utilities and components which extend upon Remora.Discord's base resources |
|
Remora.Discord.Caching
Caching implementations of Remora.Discord's services |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
12.0.2 | 34,270 | 5/28/2024 | |
12.0.1 | 25,810 | 2/5/2024 | |
12.0.0 | 47,545 | 11/14/2023 | |
11.1.0 | 29,860 | 7/24/2023 | |
11.0.7 | 19,252 | 5/11/2023 | |
11.0.6 | 2,843 | 3/20/2023 | |
11.0.5 | 3,473 | 1/19/2023 | |
11.0.4 | 2,838 | 1/10/2023 | |
11.0.3 | 3,200 | 12/28/2022 | |
11.0.2 | 5,811 | 12/10/2022 | |
11.0.1 | 3,534 | 10/30/2022 | |
11.0.0 | 19,945 | 9/2/2022 | |
10.1.7 | 3,560 | 8/19/2022 | |
10.1.6 | 3,420 | 7/28/2022 | |
10.1.5 | 3,325 | 7/26/2022 | |
10.1.4 | 3,152 | 7/26/2022 | |
10.1.3 | 7,118 | 6/29/2022 | |
10.1.2 | 3,197 | 6/27/2022 | |
10.1.1 | 3,497 | 6/23/2022 | |
10.1.0 | 4,145 | 6/20/2022 | |
10.0.0 | 3,210 | 6/19/2022 | |
9.0.0 | 3,228 | 6/18/2022 | |
8.1.5 | 3,266 | 6/14/2022 | |
8.1.4 | 3,246 | 6/8/2022 | |
8.1.3 | 3,240 | 6/3/2022 | |
8.1.2 | 3,232 | 5/25/2022 | |
8.1.1 | 3,223 | 5/23/2022 | |
8.1.0 | 3,439 | 5/15/2022 | |
8.0.6 | 3,329 | 5/10/2022 | |
8.0.5 | 5,562 | 5/3/2022 | |
8.0.4 | 6,604 | 4/25/2022 | |
8.0.3 | 4,001 | 4/18/2022 | |
8.0.2 | 2,872 | 4/2/2022 | |
8.0.1 | 5,050 | 4/2/2022 | |
8.0.0 | 3,471 | 3/21/2022 | |
7.2.0 | 3,299 | 3/17/2022 | |
7.1.0 | 2,957 | 3/15/2022 | |
7.0.1 | 4,417 | 2/20/2022 | |
7.0.0 | 3,026 | 2/19/2022 | |
7.0.0-rc1 | 1,174 | 2/14/2022 | |
6.2.10 | 3,073 | 2/14/2022 | |
6.2.9 | 3,276 | 1/27/2022 | |
6.2.7 | 5,160 | 1/11/2022 | |
6.2.6 | 35,500 | 1/2/2022 | |
6.2.5 | 3,165 | 12/23/2021 | |
6.2.4 | 1,393 | 12/21/2021 | |
6.2.3 | 1,615 | 12/16/2021 | |
6.2.2 | 1,490 | 12/11/2021 | |
6.2.1 | 1,653 | 12/5/2021 | |
6.2.0 | 3,275 | 11/26/2021 | |
6.1.0 | 7,189 | 11/24/2021 | |
6.0.0 | 2,514 | 11/20/2021 | |
5.0.4 | 2,188 | 11/9/2021 | |
5.0.3 | 1,990 | 11/6/2021 | |
5.0.2 | 2,282 | 10/30/2021 | |
5.0.1 | 1,657 | 10/28/2021 | |
5.0.0 | 3,892 | 10/15/2021 | |
4.0.15 | 2,271 | 10/7/2021 | |
4.0.13 | 1,812 | 10/3/2021 | |
4.0.12 | 1,623 | 10/2/2021 | |
4.0.11 | 1,561 | 9/30/2021 | |
4.0.10 | 2,192 | 9/26/2021 | |
4.0.9 | 1,638 | 9/24/2021 | |
4.0.8 | 1,654 | 9/23/2021 | |
4.0.7 | 1,639 | 9/16/2021 | |
4.0.6 | 1,716 | 9/15/2021 | |
4.0.5 | 1,785 | 9/8/2021 | |
4.0.4 | 2,977 | 9/4/2021 | |
4.0.3 | 3,331 | 8/21/2021 | |
4.0.2 | 1,821 | 8/18/2021 | |
4.0.1 | 2,751 | 8/12/2021 | |
4.0.0 | 1,458 | 8/11/2021 | |
3.5.8 | 2,002 | 8/11/2021 | |
3.5.7 | 1,873 | 8/2/2021 | |
3.5.6 | 2,110 | 8/2/2021 | |
3.5.5 | 2,169 | 7/31/2021 | |
3.5.4 | 1,703 | 7/29/2021 | |
3.5.3 | 1,634 | 7/28/2021 | |
3.5.2 | 1,555 | 7/28/2021 | |
3.5.1 | 2,070 | 7/22/2021 | |
3.5.0 | 1,702 | 7/17/2021 | |
3.4.6 | 1,638 | 7/14/2021 | |
3.4.5 | 1,774 | 7/12/2021 | |
3.4.4 | 1,673 | 7/11/2021 | |
3.4.3 | 1,678 | 7/5/2021 | |
3.4.2 | 1,533 | 7/3/2021 | |
3.4.1 | 1,544 | 7/1/2021 | |
3.4.0 | 1,861 | 6/14/2021 | |
3.3.1 | 839 | 6/10/2021 | |
3.3.1-beta2 | 1,057 | 5/30/2021 | |
3.3.1-beta1 | 1,465 | 5/28/2021 | |
3.3.0 | 1,535 | 5/23/2021 | |
3.2.1 | 1,713 | 5/20/2021 | |
3.2.0 | 2,044 | 5/4/2021 | |
3.1.14 | 1,692 | 4/22/2021 | |
3.1.13 | 1,668 | 4/15/2021 | |
3.1.12 | 1,682 | 4/10/2021 | |
3.1.11 | 1,839 | 4/5/2021 | |
3.1.10 | 1,739 | 4/4/2021 | |
3.1.9 | 2,343 | 3/28/2021 | |
3.1.8 | 2,592 | 3/25/2021 | |
3.1.7 | 1,454 | 3/25/2021 | |
3.1.6 | 2,193 | 3/16/2021 | |
3.1.5 | 1,646 | 3/14/2021 | |
3.1.4 | 1,620 | 3/13/2021 | |
3.1.3 | 1,635 | 3/11/2021 | |
3.1.2 | 1,943 | 3/6/2021 | |
3.1.1 | 1,727 | 3/1/2021 | |
3.1.0 | 1,701 | 3/1/2021 | |
3.0.7 | 1,793 | 2/28/2021 | |
3.0.6 | 1,509 | 2/23/2021 | |
3.0.5 | 2,095 | 2/22/2021 | |
3.0.4 | 1,646 | 2/21/2021 | |
3.0.3 | 1,345 | 2/16/2021 | |
3.0.2 | 1,758 | 2/13/2021 | |
3.0.1 | 1,964 | 2/11/2021 | |
3.0.0 | 1,662 | 2/10/2021 | |
2.2.3 | 1,498 | 2/6/2021 | |
2.2.2 | 1,549 | 2/5/2021 | |
2.2.1 | 1,479 | 1/29/2021 | |
2.2.0 | 1,457 | 1/27/2021 | |
2.1.1 | 1,795 | 1/21/2021 | |
2.1.0 | 1,671 | 1/17/2021 | |
2.0.1 | 1,574 | 1/10/2021 | |
2.0.0 | 1,685 | 1/10/2021 | |
1.1.2 | 1,624 | 1/9/2021 | |
1.1.1 | 1,769 | 12/31/2020 | |
1.1.0 | 1,639 | 12/27/2020 | |
1.0.1 | 2,193 | 12/25/2020 | |
1.0.0 | 1,459 | 12/25/2020 | |
1.0.0-beta9 | 1,016 | 12/10/2020 | |
1.0.0-beta8 | 1,009 | 11/26/2020 | |
1.0.0-beta7 | 968 | 11/15/2020 | |
1.0.0-beta6 | 960 | 11/14/2020 | |
1.0.0-beta5 | 1,038 | 11/8/2020 | |
1.0.0-beta4 | 456 | 11/8/2020 | |
1.0.0-beta3 | 398 | 10/17/2020 | |
1.0.0-beta2 | 397 | 10/6/2020 | |
1.0.0-beta11 | 939 | 12/23/2020 | |
1.0.0-beta10 | 997 | 12/18/2020 | |
1.0.0-beta1 | 405 | 10/6/2020 | |
1.0.0-alpha1 | 398 | 9/27/2020 |
Update dependencies.
Handle reconnection requests on connect.