【问题标题】:How to make a report command in Discord.js如何在 Discord.js 中创建报告命令
【发布时间】:2020-07-21 00:14:12
【问题描述】:

我正在尝试为我的机器人发出报告命令,但我似乎没有得到任何响应

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

    let args = message.content.substring(PREFIX.length).split(' ');

    switch(args[0]){

        case 'report':
            message.delete(3000);
            let target = message.mentions.members.first() || message.guild.members.get(args[0]);
            if(!target) return message.channel.send('Please provide a user that you wish to report').then(m => m.delete(15000));
            
            let reason = args.slice(1).join(" ");
            if(!reason) return message.channel.send(`Please provide a reason for reporting **${target.user.username}**`).then(m => m.delete(15000));
 
            let reportChannel = message.guild.channels.cache.find(x => x.name === "????▸logs");
            
            message.channel.send('Your report has been filed to the staff team. Thank you for reporting!').then(m => m.delete(15000));
            reportChannel.send(`**${message.author.username}** has reported **${target.user.username}** for **${reason}**.`);
        break;
    };
});

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    假设您使用的是 discord.js v12,我进行了一些编辑以使此代码有效。 首先,新的 discord.js Message#delete() 方法现在需要一个参数:

    所以改变:

    message.delete(3000); -> message.delete({timeout: 3000});

    message.guild.members.get() -> message.guild.members.cache.get()

    • 此外,args.slice(2) 而不是args.slice(1) 也可以正确删除用户提及。

    这是最终结果^

    bot.on('message', message => {
      let args = message.content.substring(PREFIX.length).split(' ');
      switch(args[0]){
          case 'report':
              message.delete({timeout: 3000});
              let target = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
              if(!target) return message.channel.send('Please provide a user that you wish to report').then(m => m.delete({timeout: 15000}));
    
              let reason = args.slice(2).join(" ");
              if(!reason) return message.channel.send(`Please provide a reason for reporting **${target.user.username}**`).then(m => m.delete({timeout: 15000}));
    
              let reportChannel = message.guild.channels.cache.find(x => x.name === "?▸logs");
    
              message.channel.send('Your report has been filed to the staff team. Thank you for reporting!').then(m => m.delete({timeout: 15000}));
              reportChannel.send(`**${message.author.username}** has reported **${target.user.username}** for **${reason}**.`);
          break;
        };
    });
    

    【讨论】:

    • 尝试后我得到了错误(如果没有提供目标并且没有提供原因),但是当我尝试提供原因时它不会发送确认消息或消息选择的频道,我也尝试将reportChannel切换到message.guild.channels.cache.get('[channel id]'),但还是不行
    • 嗯,奇怪,我刚试过,它对我很有效
    • 我通过添加这一行让它工作:if(args[1] === target, args[2] === reason){ [confirmation message code and reportChannel code here] }
    • 哦好吧完美:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2022-10-22
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多