如何使用getMessageAsync((ulong)id)将Discord.IMessage转换为字符串?

时间:2019-01-08 18:32:32

标签: c# discord.net

我正在尝试将在不和谐频道中发送的最后一条消息用作Windows窗体应用程序中的字符串,但我似乎无法将IMessage转换为string。我也很难收到上次发送的消息ID

使用GetMessagesAsync(10).First().ID返回3位数字而不是18位数字?使用不和谐的实际消息ID即可。

非常感谢您的帮助。

try
{
    await Client.LoginAsync(TokenType.Bot, Token);
    await Client.StartAsync();
}
catch
{
    MessageBox.Show("Unable to connect.");
    return;
}

Client.Ready += getMessage;

    private async Task getMessage()
    {
        ulong msgid = (ulong)Client.GetGuild(525039283917291520).GetTextChannel(532107460807491584).GetMessagesAsync(10).FirstOrDefault().Id;

        var channel = Client.GetChannel(532107460807491584) as SocketTextChannel;

        var msg = channel.GetMessageAsync(msgid); // id is 3 digits instead of 18? not sure why.
        Console.WriteLine("MESSAGE:  " + msg);
    }

    private Task Client_Log(LogMessage arg)
    {
        Invoke((Action)delegate
        {
            Console.WriteLine(arg);
        });            
        return null;
    }

2 个答案:

答案 0 :(得分:1)

您需要使用<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true" tools:targetApi="m"> 方法await,因为它是GetMessageAsync。然后,每个消息内容都存储在Task<IMessage>属性中。此外,您以前已经获得了消息对象,因此无需检索同一消息的另一个实例。

理想情况下,就绪处理程序应如下所示:

Content

参考文献:

答案 1 :(得分:0)

多亏了Still H的代码,它才能正常工作。我刚刚对其进行了修改,以获取发送的最后一条消息的ID :)这是以后查看此代码的任何人的代码;

private async Task clientReady()
    {
        Channel = Client.GetChannel(525085451598692364) as SocketTextChannel;

        if (!(Channel is ISocketMessageChannel msgChannel)) return;

        var msgId = (await Channel.GetMessagesAsync(1).FlattenAsync()).FirstOrDefault().Id;

        var msg = await msgChannel.GetMessageAsync(msgId);

        if (msg != null) Console.WriteLine(msg.Content + " ID: ");
    }