不和谐%sticky命令

时间:2020-05-02 04:33:22

标签: javascript bots discord.js

我当前正在尝试创建一个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;
   }
});

1 个答案:

答案 0 :(得分:1)

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

除此之外,您还应该将上次发送的ID保存在文件中或某个位置,因为一旦重新启动bot,变量就会被重置(内置fs模块可以为您提供帮助,您可以找到说明文件here)。

最后一件事:如果初始化没有值的变量,则不是null,而是undefined。如果仅使用==进行检查,则仍将得出true(表示null == undefined),但如果使用===进行比较,则会得出false(null !== undefined )。在您的情况下,这并不是真正的问题,但是对于其他情况,可能会很了解。