更改我的机器人在 Discord 中发送的消息的内容

Changing the content of a message sent by my bot in Discord

我使用斜杠命令创建了一个频道,在频道中,一条消息内容是这样的:

Title : my title
Date  : 23rd Oct. 2021
Desc. : a brief description

然后,机器人将此消息置顶。一切正常。

现在,我想使用另一个命令来更改该内容。以下是我尝试更改消息内容的方法:

    $channel = $interaction->guild->channels->get('id', $idChannel);
    $channel->getPinnedMessages()->done(function ($list) use ($channel) {
        foreach ($list as $msg) {
            if ($msg->author->id == $this->botId) {
                $channel->getMessage($msg->id)->done( function ($pinnedMsg) {
                    echo "\nMessage found\n";
                    echo $pinnedMsg->content;
                    $pinnedMsg->content = "new text";
                    echo "\nMessage changed\n";
                    echo $pinnedMsg->content;
                });
                break;
            }
        }
    });

“消息已更改”在控制台中是正确的,但在 Discord 中未更改。为什么?

注意:我尝试了 $pinnedMsg->edit(我在一些关于 Discord.js 的回答中看到了这一点,并试图将其调整为 php)但它没有用:下面的回显是未显示。

找到解决方案:您必须在消息列表上调用保存:

$channel = $interaction->guild->channels->get('id', $idChannel);
$channel->getPinnedMessages()->done(function ($list) use ($channel) {
    foreach ($list as $msg) {
        if ($msg->author->id == $this->botId) {
            $channel->getMessage($msg->id)->done( function ($pinnedMsg) {
                $pinnedMsg->content = "new text";
                $channel->messages->save($pinnedMsg)->done( function ($x) { echo "done"; } );
            });
            break;
        }
    }
});

不确定 save (...) 之后的 done(...) 是否必要,但这似乎是所需的语法。而且,像这样,它有效。