You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:09:02