Discord Bot 应删除 "user pinned message to channel" 消息

Discord Bot shall delete "user pinned message to channel" message

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

我的问题

但是,通过特定命令,我的机器人会向特定频道发送消息并将其固定。但我希望机器人删除显示 "user pinned message to channel" 的系统消息(它必须是这样的,我的 discord 不是英文的),但我不知何故无法收到该消息。

我试过的

我试过这样得到它:

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:

没有任何消息。我把limit改成2,在planungsChannel(sometext)里写了点东西,再次执行函数,结果是

TEST:
sometext

所以.. fetchMessages() 似乎有效 - 但不适用于系统消息。

我的问题

我怎样才能 "get" 使用该系统消息?或者:我怎样才能让机器人删除说 "user pinned message to channel" 的系统消息?

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

discord 上的每个 message 都有一个 type 属性,属于几种类型,你可以看到 here。在这种情况下,您可以使用的具体 type 是 if message.type === "PINS_ADD",即

type

the system message that says "user pinned message to channel"

你所指的。

简而言之,您所要做的就是:

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

这是伪代码,不是实际代码,希望你能转换它。 Documentation

固定消息时发送的消息类型是'CHANNEL_PINNED_MESSAGE'。

client.on('messageCreate', async (message) => {

  if (message.author.bot && message.type === 'CHANNEL_PINNED_MESSAGE') {
    message.delete();
  }

}