discord-net/Discord.Net

[Bug]: Can`t delete or modify ephemeral message after Interaction error 10008 Unknown Message

NnN6574 opened this issue · 2 comments

Check The Docs

  • I double checked the docs and couldn't find any useful information.

Verify Issue Source

  • I verified the issue was caused by Discord.Net.

Check your intents

  • I double checked that I have the required intents.

Description

Шn the event handler of the message components сan`t delete or modify ephemeral message after Interaction error 10008 Unknown Message

Version

ex. 3.14.1

Working Version

No response

Logs

info: Discord.Addons.Hosting.Services.DiscordHostedService[0]
      Discord.NET hosted service is starting
info: Discord.WebSocket.DiscordSocketClient[0]
      Discord: Discord.Net v3.14.1 (API v10)
info: Discord.Addons.Hosting.Services.CommandServiceRegistrationHost[0]
      Registered logger for CommandService
info: Discord.Addons.Hosting.Services.InteractionServiceRegistrationHost[0]
      Registered logger for InteractionService
info: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: Connecting
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: D:\Projects\DarkBotv2\bin\Debug\net8.0
[General/Verbose] 22:17:21 Rest        GET gateway/bot: 519,1 ms
[General/Debug] 22:17:21 Gateway     Received Hello
[General/Debug] 22:17:21 Gateway     Heartbeat Started
[General/Debug] 22:17:21 Gateway     Identifying
[General/Debug] 22:17:21 Gateway     Sent Heartbeat
[General/Debug] 22:17:21 Gateway     Sent Identify
[General/Debug] 22:17:21 Gateway     Received HeartbeatAck
[General/Debug] 22:17:21 Gateway     Latency = 203 ms
[General/Debug] 22:17:22 Gateway     Received Dispatch (READY)
[General/Debug] 22:17:22 Gateway     GuildDownloader Started
warn: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: You're using the GuildPresences intent without listening to the PresenceUpdate event, consider removing the intent from your config.
[General/Warning] 22:17:22 Gateway     You're using the GuildPresences intent without listening to the PresenceUpdate event, consider removing the intent from your config.
warn: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: You're using the GuildScheduledEvents gateway intent without listening to any events related to that intent, consider removing the intent from your config.
[General/Warning] 22:17:22 Gateway     You're using the GuildScheduledEvents gateway intent without listening to any events related to that intent, consider removing the intent from your config.
warn: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: You're using the GuildInvites gateway intent without listening to any events related to that intent, consider removing the intent from your config.
[General/Warning] 22:17:22 Gateway     You're using the GuildInvites gateway intent without listening to any events related to that intent, consider removing the intent from your config.
info: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: Connected
[General/Info] 22:17:22 Gateway     Connected
[General/Debug] 22:17:22 Gateway     Raising Event
[General/Debug] 22:17:22 Gateway     Received Dispatch (GUILD_AVAILABLE)
[General/Verbose] 22:17:22 Gateway     Connected to АЗС #1  World RP
[General/Debug] 22:17:22 Gateway     GuildDownloader Stopped
info: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: Ready
[General/Info] 22:17:22 Gateway     Ready
[General/Verbose] 22:17:23 Rest        PUT applications/1219611352549818439/commands: 421,48 ms
[General/Debug] 22:17:33 Gateway     Received Dispatch (INTERACTION_CREATE)
ApplicationCommand
[General/Verbose] 22:17:33 Rest        POST interactions/1220451261128900719/aW50ZXJhY3Rpb246MTIyMDQ1MTI2MTEyODkwMDcxOTp3eDJ5dmNVZEZXR0xoVFduZHBzSlJBOXFtOWpxa1Z4SjhZd0FBTUJiWUdZT0ZEdmJQYVhZTVFrNjE3WUJYQXo3SHZ4TVZhcWx5U1VscEJRV3pkTTh1elJaQTdPVjZsMzBiVDVIaDNUMGVKMjJOQTFEZzhTaEdUb0taalNOc3lWSQ/callback: 330,3 ms
after RespondAsync
Name: dark_one_frome_three Id: 1220071058070306836
[General/Debug] 22:17:33 Gateway     Received Dispatch (MESSAGE_CREATE)
[General/Debug] 22:17:42 Gateway     Received Dispatch (INTERACTION_CREATE)
MessageComponent
1220451262579871794
warn: Discord.WebSocket.DiscordSocketClient[0]
      Gateway: A ButtonExecuted handler has thrown an unhandled exception.
      Discord.Net.HttpException: The server responded with error 10008: Unknown Message
         at Discord.Net.Queue.RequestBucket.SendAsync(RestRequest request)
         at Discord.Net.Queue.RequestQueue.SendAsync(RestRequest request)
         at Discord.API.DiscordRestApiClient.SendInternalAsync(String method, String endpoint, RestRequest request)
         at DarkBotv2.Services.GameInteractionHandler.ButtonExecuted(SocketMessageComponent component) in D:\Projects\DarkBotv2\Services\GameInteractionHandler.cs:line 78
         at Discord.EventExtensions.InvokeAsync[T](AsyncEvent`1 eventHandler, T arg)
         at Discord.WebSocket.DiscordSocketClient.TimeoutWrap(String name, Func`1 action)
[General/Warning] 22:17:42 Gateway     A ButtonExecuted handler has thrown an unhandled exception.:
Discord.Net.HttpException: The server responded with error 10008: Unknown Message
   at Discord.Net.Queue.RequestBucket.SendAsync(RestRequest request)
   at Discord.Net.Queue.RequestQueue.SendAsync(RestRequest request)
   at Discord.API.DiscordRestApiClient.SendInternalAsync(String method, String endpoint, RestRequest request)
   at DarkBotv2.Services.GameInteractionHandler.ButtonExecuted(SocketMessageComponent component) in D:\Projects\DarkBotv2\Services\GameInteractionHandler.cs:line 78
   at Discord.EventExtensions.InvokeAsync[T](AsyncEvent`1 eventHandler, T arg)
   at Discord.WebSocket.DiscordSocketClient.TimeoutWrap(String name, Func`1 action)
Removed: 339654874142867456
[General/Debug] 22:17:58 Gateway     Received Dispatch (PRESENCE_UPDATE)
[General/Debug] 22:17:58 Gateway     Sent Heartbeat
[General/Debug] 22:17:59 Gateway     Received HeartbeatAck
[General/Debug] 22:17:59 Gateway     Latency = 156 ms

Sample

private async Task StartOneFromThreeGame(SocketSlashCommand command)
{
   var builder = new ComponentBuilder();
   for (int i = 0; i < numbers.Count; i++)
   {
      builder.WithButton($"{numbers[i]}", $"OneFromThree_{i}", style: ButtonStyle.Secondary);
   }
   await command.RespondAsync("title", components: builder.Build(), ephemeral: true);
}
private async Task ButtonExecuted(SocketMessageComponent component)
{
   Console.WriteLine(component.Message.Id); // message id (1220444646094671953)

   var msg = component.Message;
   await msg.ModifyAsync(x => x.Content = "", (RequestOptions.Default)); //  10008 Unknown Message
   //await msg.DeleteAsync(RequestOptions.Default); //   10008 Unknown Message
} 

Packages

<PackageReference Include="Discord.Addons.Hosting" Version="6.0.0" />
<PackageReference Include="Discord.Addons.Interactive" Version="2.0.0" />
<PackageReference Include="Discord.Net" Version="3.14.1" />
<PackageReference Include="Microsoft.AspNet.SignalR.Core" Version="2.4.3" />
<PackageReference Include="MySql.Data" Version="8.3.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Threading.Tasks" Version="4.3.0" />

Environment

  • OS: Windows 10 Pro 22H2
  • Architecture: x64 (vps)
  • .Net: 8.0

You can't use regular Modify/DeleteAsync methods on ephemeral interaction responses.
Use IMessageComponent.UpdateAsync of Modify/DeleteOriginalResponseAsync instead. Note that the two latter ones are followup methods and require the interaction to be already acknowledged (ex. with DeferAsync)

A docs page to help you understand interactions flow

You can't use regular Modify/DeleteAsync methods on ephemeral interaction responses. Use IMessageComponent.UpdateAsync of Modify/DeleteOriginalResponseAsync instead. Note that the two latter ones are followup methods and require the interaction to be already acknowledged (ex. with DeferAsync)

A docs page to help you understand interactions flow

Thank you, I previously used the Modify/DeleteOriginalResponseAsync method but I did not specify its parameter RequestOptions which is why the error persisted. The default null value was creating an error for me