Ошибка Discord Bot возникает при отсутствии прав - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь сделать так, чтобы мой бот мог просто проверить, выполнено ли одно разрешение, и я попробовал метод, где окружение разрешения с ['Permission'] и до сих пор работает, проблема в том, что еслиразрешения не соблюдаются, тогда бот выдает ошибку.

TypeError: Cannot read property 'edit' of undefined

Бот по-прежнему работает нормально, но он должен выдать сообщение типа «У меня нет прав» (который я добавил)вместо этого он просто выдает ошибку

An error occurred while running the command: TypeError: Cannot read property 'edit' of undefined
You shouldn't ever receive an error like this.
Please contact the bot owner.

.

Я попытался изменить расположение кода доступа, и я попытался найти другие посты об этом, но этобыл просто нормальный javascript, а не discord.js.

Я использовал метод, где он hasPermission("MANAGE_WEBHOOKS", "ADMINISTRATOR"), но он проверяет, выполнены ли ОБА разрешения, для меня это нормально, если встречается только ОДНО разрешение, и я нене хочу, чтобы бот запрашивал, если у него самого и у автора сообщения есть оба разрешения.

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

class pingy2 extends commando.Command 
{
    constructor(client) {
        super(client, {
            name: 'pinghook2',
            group: 'help',
            memberName: 'pinghook2',
            description: 'This is where you can set the pinghook.',
            aliases: ['ph2'],
        })
    }
async run(message, args){
if(message.member.guild.me.hasPermission(["MANAGE_WEBHOOKS"], ["ADMINISTRATOR"]))
return message.channel.send("I don't have the permissions to make webhooks, please contact an admin or change my permissions!")
if (!message.member.hasPermission(["MANAGE_WEBHOOKS"], ["ADMINISTRATOR"])) 
return message.channel.send("You need to be an admin or webhook manager to use this command.")

const avatar = `https://cdn.discordapp.com/attachments/515307677656678420/557050444954992673/Generic5.png`;
const name2 = "PingBot";
const hook = await message.channel.createWebhook(name2, avatar).catch(error => console.log(error))
await hook.edit(name2, avatar).catch(error => console.log(error))
message.channel.send("Your webhook is now created! You can delete it at any time and can be re-added by using this command! You can also edit the webhook's name or avatar.")

setInterval(() => {
    hook.send("success!")
}, 1200);

}};
module.exports = pingy2;

Я ожидаю, что бот создаст веб-крючок при отправке команды в чате, и если бот обнаружит, чтотолько одно разрешение встречено, этовсе еще продолжает выполнение команды.

На самом деле произошло то, что бот создает веб-крючок без каких-либо ошибок, но когда вы лишаете бота разрешения ADMINISTRATOR и MANAGE_WEBHOOKS, он выдает «Anпроизошла ошибка во время выполнения команды. "ошибка, а не ошибка, введенная в код команды.

1 Ответ

1 голос
/ 23 марта 2019

Одна проблема заключается в том, что вы используете GuildMember#hasPermission немного неправильно, а также в том, что вы забыли ! в одном из операторов if:

// At the first statement you dont really need Administrator Perms as MANAGE_WEBHOOKS is enough
// Also you forget the ! in front of the check so it would return the error message only if the Bot did  have Permissions to edit the Webhook
if(!message.member.guild.me.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('I don\'t have the permissions to make webhooks, please contact an admin or change my permissions!');
// To check if the Member is Admin or Has Webhook Manager you only need to check for WebHook as Administrator already gives manage_webhooks 
if (!message.member.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('You need to be an admin or webhook manager to use this command.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...