提问者:小点点

Discord Bot应删除“用户固定消息到频道”消息


我对编程一个不和谐的机器人有点陌生,但是现在我遇到了一个问题,并且找不到解决方案。我甚至不确定我使用的是哪种语言--我在Atom工作,用index.js节点启动我的bot,然后从这里使用函数/类/。。。:https://discord.js.org/#/docs/main/stable/general/welcome

我的问题

但是,通过一个特定的命令,我的bot会向某个通道发送一条消息,并将其固定。但是我想让机器人删除“User pinned message to Channel”的系统消息(它必须是这样的东西,我的不和谐不是英文的),但是我不知何故无法得到该消息。

我所尝试的

我试着这样说:

if (message.content.toLowerCase().startsWith(`${BOT} hat eine nachricht an diesen kanal angeheftet`) { somefunction}

其中BOT是<@BOT id>;“hat eine nachricht an diesen kanal angeheftet”有点像德国版的“pinned message to channel”,但什么也没发生。它不执行某个函数(用message.channel.send(something)测试了它)

然后我想我可以使用fetchmessages()(https://discord.js.org/#/docs/main/stable/class/textchannel?scrollto=fetchmessages):

function botAngeheftet(message, planungsChannel) {
  let mes = planungsChannel.fetchMessages({limit:1})
    .then(messages => planungsChannel.send("TEST:\n" + messages.first())
    .catch(console.error);

但planungsChannel中的信息是

TEST:

没有任何信息。我将限制更改为2,并用planungsChannel(sometext)写了一些东西,再次执行函数,结果是

TEST:
sometext

所以。。。fetchMessages()似乎可以工作--但对系统消息不起作用。

我的问题

我怎样才能“得到”系统消息来使用它呢?或者:我如何让机器人删除说“用户固定消息到通道”的系统消息?


共1个答案

匿名用户

这是一个理论上的解决方案(未经测试),但它应该行得通。

discord上的每个message都有一个type属性,它属于几种类型,您可以在这里看到。在这种情况下,您可以使用的特定类型是ifmessage.type===“pins_add”,它是

表示“用户将消息固定到通道”的系统消息

你刚才提到的那个。

简单地说,你要做的就是:

on msg event (msg) 
     if(msg.type === "PINS_ADD") msg.delete();

这是伪代码而不是实际代码,希望您可以转换它。文件编制