簡體   English   中英

Discord bot - 清除命令不起作用 discord.js-commando

[英]Discord bot - Purge command not working discord.js-commando

我最近使用 node js 創建了一個 discord bot,當我執行!purge ,用Unknown command, do !help to view a list of command響應Unknown command, do !help to view a list of command但在說完之后,它正在清除消息。 也就是說,它運行良好,但發布了該錯誤消息。 我不知道是什么問題請幫助我

const commando = require('discord.js-commando');
const bot = new commando.Client();
const prefix = '!';

bot.on('message', message => {

    let msg = message.content.toUpperCase();
    let sender = message.author; 
    let cont = message.content.slice(prefix.length).split(" "); 
    let args = cont.slice(1); 

    if (msg.startsWith(prefix + 'PURGE')) {        
        async function purge() {
            message.delete();

            if (isNaN(args[0])) {
                message.channel.send('Please input a number of messages to be deleted \n Syntax: ' + prefix + 'purge <amount>'); 
                return;
            }

            const fetched = await message.channel.fetchMessages({limit: args[0]}); 
            console.log(fetched.size + ' messages found, deleting...'); 

            // Deleting the messages
            message.channel.bulkDelete(fetched)
                .catch(error => message.channel.send(`Error: ${error}`));

        } 
        purge(); 
    }
});

bot.login('MY BOT TOKEN HERE');

現在您正在使用discord.js-commando庫。 您決定使用該庫的任何原因? 它看起來像你僅僅使用標准discord.js像功能bot.onmessage.channel.sendmessage.channel.fetchMessagesmessage.channel.bulkDelete ...

你應該只使用標准的discord.js庫,用這個開始你的代碼:

const Discord = require('discord.js');
const bot = new Discord.Client();

您可以在Discord.js 的“歡迎”主頁上找到此代碼

編輯:我仍然不確定你為什么使用discord.js-commando ,但這並不重要。 這是我使用discord.js-commando庫提出的示例命令:

const commando = require('discord.js-commando');

class PurgeCommand extends commando.Command {
    constructor(client) {
        super(client, {
            name: 'purge',
            group: 'random', // like your !roll command
            memberName: 'purge',
            description: 'Purge some messages from a Text Channel.',
            examples: ['purge 5'],

            args: [
                {
                    key: 'numToPurge',
                    label: 'number',
                    prompt: 'Please input a number ( > 0) of messages to be deleted.',
                    type: 'integer'
                }
            ]
        });
    }

    run(msg, { numToPurge }) {
        let channel = msg.channel;

        // fail if number of messages to purge is invalid
        if (numToPurge <= 0) {
            return msg.reply('Purge number must be greater than 0');
        }

        // channel type must be text for .bulkDelete to be available
        else if (channel.type === 'text') {
            return channel.fetchMessages({limit: numToPurge})
                .then(msgs => channel.bulkDelete(msgs))
                .then(msgs => msg.reply(`Purge deleted ${msgs.size} message(s)`))
                .catch(console.error);
        }
        else {
            return msg.reply('Purge command only available in Text Channels');
        }
    }
};

module.exports = PurgeCommand

我還建議使用新type而不是integer以便您可以驗證用戶的響應並確保他們輸入大於 0 的數字。

如果您需要幫助設置初始discord.js-commando腳本,我會看看 Discord 團隊提供的這個 repo: https : //github.com/discordjs/Commando/tree/master/test

你可能想用這個。 此清除命令適用於 discord.js v11.5.1,我尚未測試它是否適用於 v12,但我認為這可能對您有用。 我應該說這會刪除頻道內的所有內容(嵌套命令)

exports.run = (bot, message, args) => {
  let filter = m => message.author.id === message.author.id;
    
  message.channel.send("Are you sure you wanna delete all messages? (y/n)").then(() => {
      message.channel.awaitMessages(filter, {
        max: 1,
        time: 30000,
        errors: ['time']
      })
        .then(message => {
          message = message.first();
        
          if (message.content.toUpperCase() == "YES" || message.content.toUpperCase() == "Y") {
            message.channel.bulkDelete(100);
          } else if (message.content.toUpperCase() == "NO" || message.content.toUpperCase() == "N") {
            message.channel.send("Terminated").then(() => {message.delete(2000)});
          } else {
            message.delete();
          }
        })
        .catch(collected => {
        message.channel.send("Timeout").then(() => {message.delete(2000)});
      });
    }).catch(error => {
    message.channel.send(error);
  });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM