Discord.NET开发:如何将IMessage转为IUserMessage以实现消息编辑功能
解决方案
你遇到的问题可以通过以下两步修复:
- 首先需要给异步方法
GetMessageAsync补充await调用,你当前代码没有加await,拿到的是Task<IMessage>类型的异步任务对象,不是实际的消息实例,本身也无法调用消息相关方法 IMessage转IUserMessage可以用C#的安全类型转换实现,转换后增加空校验即可避免异常
修改后可正常运行的代码如下:
[Command("editmessage")] public async Task EditMessage(string sMessageId, string TextMessage) { ulong MessageId = Convert.ToUInt64(sMessageId); // 加await获取实际的IMessage实例 var message = await Context.Channel.GetMessageAsync(MessageId); // 安全转换为支持修改的IUserMessage类型 var userMessage = message as IUserMessage; // 空校验避免处理不可编辑的消息时崩溃 if (userMessage != null) { await userMessage.ModifyAsync(msg => msg.Content = TextMessage); } }
如果你能100%确认要编辑的消息一定是可编辑的用户消息,也可以用强制转换写法var userMessage = (IUserMessage)message;省略空校验,但是稳定性会比安全转换的写法更低。
内容的提问来源于stack exchange,提问作者mor.a39
相关产品推荐
相关产品推荐

