首页 > 解决方案 > 未捕获的类型错误:member.hasPermission 不是函数

问题描述

几天前我开始制作一个不和谐的机器人。这一切都有效。但是,今天突然,它抛出一个错误“Uncaught TypeError: member.hasPermission is not a function”。这很奇怪,因为这一切都已经奏效了。这是一个脚本,其中使用了 member.hasPermission。

var Discord = require('discord.js');
var ms = require('ms');

exports.run = async(client, msg, args) => {
    if(!msg.member.hasPermission('MANAGE_MESSAGES')) return msg.reply('Du kannst das nicht benutzen!');

    var user = msg.mentions.users.first();
    if(!user) {

        msg.channel.send("\`\`\`\nMute: \nArg1: [User]\nArg2: [Time] - - - s = Sekunde | m = Minute | d = Tag \nArg3: [Grund]\nBsp : +mute @Test 15m spam\n\`\`\` ")
    }
    var member;

    try {
        member = await msg.guild.members.fetch(user);
    } catch(err) {
        member = null;
    }

    if(!member) return msg.reply('Sie sind nicht auf dem Server!');
    if(member.hasPermission('MANAGE_MESSAGES')) return msg.reply('Du kannst diese Person nicht muten!');

    var rawTime = args[1];
    var time = ms(rawTime);
    if(!time) return msg.reply('Du hast keine Zeit angegeben!');

    var reason = args.splice(2).join(' ');
    if(!reason) return msg.reply('Du musst einen Grund angeben!');

    var channel = msg.guild.channels.cache.find(c => c.name === 'potato');

    var log = new Discord.MessageEmbed()
    .setTitle('User Muted')
    .addField('User:', user, true)
    .addField('By:', msg.author, true)
    .addField('Expires:', rawTime)
    .addField('Reason:', reason)
    msg.channel.send(log)
    

    var embed = new Discord.MessageEmbed()
    .setTitle('You were muted!')
    .addField('Expires:', rawTime, true)
    .addField('Reason:', reason, true);

    try {
        user.send(embed);
    } catch(err) {
        console.warn(err);
    }
    var role = msg.member.guild.roles.cache.find(role => role.name === "Muted");
    await member.roles.add(role);

    setTimeout(async() => {
        member.roles.remove(role);
        var log2 = new Discord.MessageEmbed()
        .setTitle('User unmuted')
        .addField('User:', user, true)
        msg.channel.send(log2)
    }, time);
}

标签: javascript

解决方案


var Discord = require('discord.js');
var ms = require('ms');

exports.run = async(client, msg, args) => {
    if(!msg.member.hasPermission('MANAGE_MESSAGES')) return msg.reply('Du kannst das nicht benutzen!');

    var user = msg.mentions.users.first();
    if(!user) {

        msg.channel.send("\`\`\`\nMute: \nArg1: [User]\nArg2: [Time] - - - s = Sekunde | m = Minute | d = Tag \nArg3: [Grund]\nBsp : +mute @Test 15m spam\n\`\`\` ")
    }
    var member;

    try {
        member = await msg.guild.members.cache.get(user);
    } catch(err) {
        member = null;
    }

    if(!member) return msg.reply('Sie sind nicht auf dem Server!');
    if(member.hasPermission('MANAGE_MESSAGES')) return msg.reply('Du kannst diese Person nicht muten!');

    var rawTime = args[1];
    var time = ms(rawTime);
    if(!time) return msg.reply('Du hast keine Zeit angegeben!');

    var reason = args.splice(2).join(' ');
    if(!reason) return msg.reply('Du musst einen Grund angeben!');

    var channel = msg.guild.channels.cache.find(c => c.name === 'potato');

    var log = new Discord.MessageEmbed()
    .setTitle('User Muted')
    .addField('User:', user, true)
    .addField('By:', msg.author, true)
    .addField('Expires:', rawTime)
    .addField('Reason:', reason)
    msg.channel.send(log)
    

    var embed = new Discord.MessageEmbed()
    .setTitle('You were muted!')
    .addField('Expires:', rawTime, true)
    .addField('Reason:', reason, true);

    try {
        user.send(embed);
    } catch(err) {
        console.warn(err);
    }
    var role = msg.member.guild.roles.cache.find(role => role.name === "Muted");
    await member.roles.add(role);

    setTimeout(async() => {
        member.roles.remove(role);
        var log2 = new Discord.MessageEmbed()
        .setTitle('User unmuted')
        .addField('User:', user, true)
        msg.channel.send(log2)
    }, time);
}

推荐阅读