【问题标题】:Delete message command for moderators版主的删除消息命令
【发布时间】:2018-01-12 21:44:28
【问题描述】:

我正在开发一个 Discord 机器人,最近一直在阅读 API。我想为我的机器人添加一个命令,该命令将完全清除文本通道,并且只允许有权管理消息的人。

这是我目前的代码:

client.on('message', function(message) {
    if (message.content == "^clear") {
        try {
            if (message.member.hasPermission("MANAGE_MESSAGES")) {
                messages = message.channel.fetchMessages();
                message.channel.bulkDelete(messages);
            }
        } catch(e) {
            message.channel.send("ERROR: ERROR CLEARING CHANNEL.");
            console.log(e);
        }
    }

});

我收到一个如下所示的错误:

TypeError: The messages must be an Array, Collection, or number.
at TextChannel.bulkDelete (/Users/person/bot/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:379:11)
at Client.<anonymous> (/Users/person/bpt/bot.js:29:33)
at emitOne (events.js:96:13)
at Client.emit (events.js:188:7)
at MessageCreateHandler.handle (/Users/person/bot/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34)
at WebSocketPacketManager.handle (/Users/person/bot/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:102:65)
at WebSocketConnection.onPacket (/Users/person/bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:325:35)
at WebSocketConnection.onMessage (/Users/person/bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:288:17)
at WebSocket.onMessage (/Users/person/bot/node_modules/discord.js/node_modules/ws/lib/EventTarget.js:103:16)
at emitTwo (events.js:106:13)

【问题讨论】:

    标签: node.js macos bots discord discord.js


    【解决方案1】:

    对于初学者,您无法批量删除超过 14 天的消息,因此如果您尝试清除包含超过 14 天的消息的频道,它不适用于批量删除,您必须将其删除一次一个(while/for 循环),我假设您在文档中知道这一点。其次,message.channel.fetchMessages() 返回一个Promise,这意味着在您访问它时它还没有准备好。您必须使用async/await 或仅使用.then。示例:

    client.on('message', function(message) {
        if (message.content == "^clear") {
            if (message.member.hasPermission("MANAGE_MESSAGES")) {
                message.channel.fetchMessages()
                   .then(function(list){
                        message.channel.bulkDelete(list);
                    }, function(err){message.channel.send("ERROR: ERROR CLEARING CHANNEL.")})                        
            }
        }
    
    });
    

    【讨论】:

    • message.channel.fetchMessages() 变成 message.channel.message.fetch()
    【解决方案2】:

    这是非常简单的代码,如果你想在 message.channel.bulkDelete(输入你的自定义号码)因为这只会删除 5 条消息。但请记住,最大值为 100。

    /////////////////Clear Chat//////////////////////////////////
    
    client.on("message", message => {
      if(message.content === "/clearchat 5") {
        message.channel.bulkDelete(5)
        .then(messages => console.log(`Bulk deleted ${messages.size} messages`))
        .catch(console.error);
     message.channel.send("Chat cleared");
      }
    })
    ///Make ur own trigger and edit the response/////////////
    

    【讨论】:

    • 这没有考虑问题要求的权限。这也被硬编码为只删除 5 个。
    • 是的,但是你可以在上面写着messag.channel.bulkDelete的地方改变它(添加你自己的号码)
    【解决方案3】:

    这是消息。而不是味精。

    if(message.content.startsWith(prefix + "clear")){
        const amount = message.content.split(" ")[1];
        if(!amount)
        {
            message.reply(`<amount>`);
            return;
        }
         if(!message.member.hasPermission("MANAGE_MESSAGES"))
         {
            message.channel.send('You have no permissions to do that');
            return;
         }
        message.channel.bulkDelete(amount)
        //.then(messages => message.channel.send(`${messages.size} Messages deleted`))
    .then(messages => message.channel.send(`Messages deleted by ${message.author.username}`))
    .catch(console.error);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2021-09-26
      • 2021-04-27
      • 1970-01-01
      • 2021-07-25
      • 2020-11-02
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多