#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;
}
}
});
Не уверен, что выполнение(…) после сохранения (…) необходимо, но, похоже, это необходимый синтаксис. И вот так это работает.