【问题标题】:How to get a message for editing Discord .NET如何获取编辑 Discord .NET 的消息
【发布时间】:2021-12-04 13:37:10
【问题描述】:

我正在为我的机器人执行一个命令来编辑它发送的消息 但我需要得到消息来编辑它 我找到了一个获取它但返回一个没有 ModifyAsync() 函数的IMessage 的函数 这是我的代码:

[Command("editmessage")]
public async Task EditMessage(string sMessageId, string TextMessage) {

     ulong MessageId = Convert.ToUInt64(sMessageId);
     var Message = Context.Channel.GetMessageAsync(MessageId);
     
     await Message.ModifyAsync(msg => msg.Content = TextMessage); //This gives me an error because "IMessage" does not contain a definition for "ModifyAsync"

}

有没有办法从IMessageIUserMessage? (IUserMessage 如果有ModifyAsync() 功能)

原谅我的英语不好

【问题讨论】:

  • 您可以强制转换,注意如果底层类型不是IUserMessage,它将失败。您可以通过Message as IUserMessage 进行转换。
  • 我刚刚试了一下,非常适合我,非常感谢
  • 你是对的,当我运行该命令时,它在await Message.ModifyAsync(msg => msg.Content = TextMessage); 中给我一个错误
  • 我正在检查,当我转换时,它变为空

标签: c# discord.net


【解决方案1】:

考虑到有人告诉我,我做了测试,我找到了这个解决方案:

[Command("editmessage")]
public async Task EditMessage(string sMessageId, string TextMessage) {

     ulong MessageId = Convert.ToUInt64(sMessageId);
     var _Message = Context.Channel.GetMessageAsync(MessageId).Result; //It is important to put the `.Result`

     var Message = _Message as IUserMessage;

     await Message.ModifyAsync(msg => msg.Content = TextMessage);

}

【讨论】:

  • 别那样做,你在等待函数返回synchronously
  • 对不起,我没听懂。请你能更具体地说明我不应该做什么吗?
  • 使用Result 表示“阻塞执行线程,直到我收到结果”。而是使用await。例如:var _Message = await Context.Channel.GetMessageAsync(MessageId);
  • 使用.Result,您可能会阻塞 Discord.NET 中处理其他任务的线程,例如发送 ping 以保持连接处于活动状态或更新缓存。使用await,您可以让 Discord.NET 有机会控制哪些内容被阻止,哪些内容不被阻止。
  • 好的,非常感谢,我现在更清楚了
【解决方案2】:

您需要做的是await,以便通过await 异步完成操作。不要在这里使用.Result,因为这是一个阻塞操作。

[Command("editmessage")]
public async Task EditMessage(string messageId, string textMessage) 
{
     var id = Convert.ToUInt64(messageId);
     var msg = await Context.Channel.GetMessageAsync(id);

     if ( msg is IUserMessage message )
     {
         await message.ModifyAsync(m => m.Content = textMessage);
     }
} 

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2021-09-19
    • 2022-08-14
    • 2021-05-24
    • 2021-03-04
    • 2021-05-04
    • 2022-08-24
    • 2021-12-12
    相关资源
    最近更新 更多