【问题标题】:Discord %sticky commandDiscord %sticky 命令
【发布时间】:2020-05-02 19:05:27
【问题描述】:

我目前正在尝试创建一个 Discord 机器人,当具有指定角色的用户发送命令 %sticky This is a test 时发送消息

我希望它始终是频道中的第一条消息,并且每次其他用户在频道中键入时,机器人都会删除其最后一条消息并再次发布。我还没有在网上找到任何运气,甚至没有找到一个已经执行此功能的机器人,或者甚至从哪里开始。到目前为止,这是我所拥有的

var lastStickyMessage;

client.on('message', message => {
    if (lastStickyMessage != null) {
       message.channel.fetchMessage(lastStickyMessage)
            .then(retrievedMessage => retrievedMessage.delete());
    }
   message.reply("This is a Sticky Message").then(sent => {
        let lastStickyMessage = sent.id;
   }
});

【问题讨论】:

    标签: javascript bots discord.js


    【解决方案1】:

    您的变量管理存在几个错误:一方面,您创建了一个具有相同名称的 new let。由于 let 是一个作用域变量,lastStickyMessage 在发送的回调内部的值将与它在其外部的值不同,因为它们是两个不同的变量(阅读更多关于此here)。

    除此之外,您应该将最后发送的 ID 保存在文件中或某处,因为一旦您重新启动机器人,var 将被重置(内置的 fs 模块可以帮助您,您可以找到文档 @987654322 @)。

    最后一件事:如果你初始化一个没有值的变量,它不是null,而是undefined。如果您只使用== 进行检查,它仍然会评估为true(表示null == undefined),但如果您使用=== 进行比较,它将评估为假(null !== undefined)。在您的情况下,这不是一个真正的问题,但对于其他情况,这可能是件好事。

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2019-12-08
      • 2021-02-05
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2021-04-02
      • 2018-10-21
      相关资源
      最近更新 更多