使用Discord.NET如何获取附带组件的消息ID?
在Discord.NET的组件交互中获取消息ID
在组件触发的Lv方法里,你不需要通过Context.Interaction.Data来获取消息ID——因为组件交互对应的Interaction实际类型是SocketMessageComponent,它自带Message属性,直接就能拿到触发交互的原始消息对象及ID。
方案一:直接转换交互类型获取
修改Lv方法如下:
[ComponentInteraction("leave")] public async Task Lv() { // 将交互转换为SocketMessageComponent类型,获取消息ID ulong messageId = ((SocketMessageComponent)Context.Interaction).Message.Id; // 示例:回复消息ID await RespondAsync($"触发组件的消息ID:{messageId}"); }
方案二:通过方法参数自动注入(更简洁)
Discord.NET支持在组件交互方法中直接注入SocketMessageComponent对象,无需手动转换:
[ComponentInteraction("leave")] public async Task Lv(SocketMessageComponent interaction) { ulong messageId = interaction.Message.Id; await RespondAsync($"触发组件的消息ID:{messageId}"); }
补充说明
Context.Interaction.Data主要存储的是组件自身的标识、类型等元数据,并不包含消息本身的信息。而SocketMessageComponent类型的Message属性,直接指向了包含该组件的原始消息,通过它可以获取消息ID、内容、发送者等所有消息相关信息。
内容的提问来源于stack exchange,提问作者user21123575
相关产品推荐
相关产品推荐

