Изменение содержания сообщения, отправленного моим ботом в Discord

#php #discord #message

Вопрос:

Я использую команду косой черты для создания канала, а в канале-сообщение, содержимое которого выглядит следующим образом :

 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 foundn";
                    echo $pinnedMsg->content;
                    $pinnedMsg->content = "new text";
                    echo "nMessage changedn";
                    echo $pinnedMsg->content;
                });
                break;
            }
        }
    });
 

«Сообщение изменено» верно в консоли, но НЕ изменено в Discord. Почему?

Примечание : Я попробовал $pinnedMsg->редактировать (я видел это в некоторых ответах о Discord.js и попытался адаптировать его к php), но это не сработало : следующее эхо не отображалось.

Ответ №1:

Найдено решение : вы должны позвонить сохранить в списке сообщений :

 $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;
        }
    }
});
 

Не уверен, что выполнение(…) после сохранения (…) необходимо, но, похоже, это необходимый синтаксис. И вот так это работает.