更改我的机器人在 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(...) 是否必要,但这似乎是所需的语法。而且,像这样,它有效。
我使用斜杠命令创建了一个频道,在频道中,一条消息内容是这样的:
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(...) 是否必要,但这似乎是所需的语法。而且,像这样,它有效。