【问题标题】:Discord Bot shall delete "user pinned message to channel" messageDiscord Bot 应删除“用户将消息固定到频道”消息
【发布时间】:2018-09-07 03:46:55
【问题描述】:

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

我的问题

但是,通过特定命令,我的机器人将消息发送到某个通道并将其固定。但我希望机器人删除显示“用户将消息固定到频道”的系统消息(它必须是这样的,我的不和谐不是英文的),但我不知何故无法收到该消息。

我尝试了什么

我尝试过这样:

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

其中 BOT 是 并且“hat eine nachricht an diesen kanal angeheftet”有点像德语版的“将消息固定到频道”,但没有任何反应。它不执行某些功能(用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() 似乎有效 - 但不适用于系统消息。

我的问题

如何“获取”该系统消息以使用它?或者:如何让机器人删除说“用户将消息固定到频道”的系统消息?

【问题讨论】:

    标签: bots discord.js


    【解决方案1】:

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

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

    type

    显示“用户将消息固定到频道”的系统消息

    你指的是。

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

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

    这是伪代码而不是实际代码,希望您可以转换它。 Documentation

    【讨论】:

    • 谢谢,这有帮助 :) 但这样会删除所有类型为 PINS_ADD 的系统消息。我添加了对发送消息的通道的检查,因此现在它将仅在该特定通道中删除这些消息。现在对我的目的来说已经足够了,但是有没有办法检查消息中提到的用户?我可能希望机器人只从机器人固定的固定消息中删除系统消息。
    • 嗯,它只是同一个message 对象,所以您可以检查author,然后检查bot 属性。翻译:message.author.bot 或者只是检查 id message.author.id === "idhere" 记住这一切都是documented
    • 啊,好吧,我只是假设系统消息的作者是某种不和谐的东西:/ 非常感谢,它现在可以按我的意愿工作了 :)
    • 没问题!很高兴为您提供帮助
    • 为了方便初学者或懒人:P,代码如下:client.on("message", (message) => { if(message.type === "PINS_ADD" && message.author.bot) message.delete(); }
    【解决方案2】:

    固定消息时发送的消息类型为“CHANNEL_PINNED_MESSAGE”。

    client.on('messageCreate', async (message) => {
    
      if (message.author.bot && message.type === 'CHANNEL_PINNED_MESSAGE') {
        message.delete();
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2020-08-25
      • 2021-11-11
      • 2021-10-18
      • 2021-01-28
      • 2021-06-30
      • 2021-01-10
      • 2023-03-27
      • 2020-12-03
      相关资源
      最近更新 更多