discord.js v12 |类型错误:无法读取未定义的属性“发送”

时间:2021-01-12 19:25:42

标签: discord.js typeerror

这是我的禁令命令的完整代码。很高兴注意到我也在使用 Discord.JS Commando 我一直在为这个错误而苦苦挣扎,但实际上无法弄清楚为什么我得到它一切看起来都很好,除非我使用了一个弃用的函数。真的很感谢有人能帮助我解决这个问题,在这之前我一直很好地创建了一个功能丰富的机器人。

const { Command } = require('discord.js-commando');
const { MessageEmbed } = require('discord.js');
const db = require('quick.db');

module.exports = class banCommand extends Command {
  constructor(client) {
      super(client, {
        name: 'ban',
        memberName: "ban",
        group: 'moderation',
        guildOnly: true,
        userPermissions: ['BAN_MEMBERS'],
        description: 'Bans the mentioned user from the server with additional modlog info.'
      });

      }
    async run(message, args) {
            if (!args[0]) return message.channel.send('**Please Provide A User To Ban!**')

            let banMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase());
            if (!banMember) return message.channel.send('**User Is Not In The Guild**');
            if (banMember === message.member) return message.channel.send('**You Cannot Ban Yourself**')

            var reason = args.slice(1).join(' ');

            if (!banMember.bannable) return message.channel.send('**Cant Kick That User**')
            banMember.send(`**Hello, You Have Been Banned From ${message.guild.name} for - ${reason || 'No Reason'}**`).then(() =>
                message.guild.members.ban(banMember, { days: 7, reason: reason })).catch(() => null)
                message.guild.members.ban(banMember, { days: 7, reason: reason })
            if (reason) {
            var sembed = new MessageEmbed()
                .setColor('GREEN')
                .setAuthor(message.guild.name, message.guild.iconURL())
                .setDescription(`**${banMember.user.username}** has been banned for ${reason}`)
            message.channel.send(sembed)
            } else {
                var sembed2 = new MessageEmbed()
                .setColor('GREEN')
                .setAuthor(message.guild.name, message.guild.iconURL())
                .setDescription(`**${banMember.user.username}** has been banned`)
            message.channel.send(sembed2)
            }
            let channel = db.fetch(`modlog_${message.guild.id}`)
            if (channel == null) return;

            if (!channel) return;

            const embed = new MessageEmbed()
                .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL())
                .setColor('#ff0000')
                .setThumbnail(banMember.user.displayAvatarURL({ dynamic: true }))
                .setFooter(message.guild.name, message.guild.iconURL())
                .addField('**Moderation**', 'ban')
                .addField('**Banned**', banMember.user.username)
                .addField('**ID**', `${banMember.id}`)
                .addField('**Banned By**', message.author.username)
                .addField('**Reason**', `${reason || '**No Reason**'}`)
                .addField('**Date**', message.createdAt.toLocaleString())
                .setTimestamp();

            var sChannel = message.guild.channels.cache.get(channel)
            if (!sChannel) return;
            sChannel.send(embed)
        }
    };

1 个答案:

答案 0 :(得分:0)

您收到 TypeError: args.slice(...).join is not a function 错误的原因是因为 slice 方法创建了切片数据的新数组,因此不能 join(' ') 因为没有空间可以加入. (即它不是字符串)

您要找的是args.slice(1).toString().replace(",", " ")

这将删除 args 数组对象的第二部分,然后将其转换为字符串,然后删除字符串中的逗号并用空格替换它们。