Обработчик команд Discord. js с правами пользователя, разрешением клиента и регулированием - PullRequest
0 голосов
/ 12 марта 2020

Как я могу проверить разрешение пользователя, разрешение клиента, добавить регулировку и определить аргументы в экспорте, как это делает коммандо

мое сообщение выглядит так

client.on('message', async (message) => {

    if (message.author.bot) return;
    if (!message.guild) return;
    let prefix
    await db.collection('guilds').doc(message.guild.id).get().then((q) => {
        if (q.exists) {
            prefix = q.data().prefix || config1.prefix_mention;
        } else {
            prefix = "." || config1.prefix_mention;
        }
    })
    const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(prefix)})\\s*`);
    if (!prefixRegex.test(message.content)) return;

    const [ matchedPrefix ] = message.content.match(prefixRegex);
    const args = message.content.slice(matchedPrefix.length).trim().split(/ +/g);

    const cmd = args.shift().toLowerCase();
    if (cmd.length === 0) return;

    let command = client.commands.get(cmd);
    if (!command) command = client.commands.get(client.aliases.get(cmd));
    if (!message.channel.permissionsFor(client.user).has("SEND_MESSAGES")) return;

    if (command)
        command.run(client, message, args, db);
})

как я могу проверить другое разрешение как пример

name: 'osu',
group: 'search',
memberName: 'osu',
description: 'Responds with information on an osu! user.',
clientPermissions: ["EMBED_LINKS","SEND_MESSAGES"],
userPermissions:['VIEW_CHANNEL'],
args: [
 {
  key: 'user',
  prompt: 'What user would you like to get information on?',
  type: 'string'
 }
],
async run(client ,message ,args) {
  //some code here
}

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете получить client.user разрешения и message.member разрешения для message.channel, а затем проверить его с помощью has.

О регулировании можно использовать cooldowns. Это хороший гид как его использовать.

const { Permissions } = require('discord.js');

if(command.clientPermissions.length > 0) {
    let clientChannelPermissions = message.channel.permissionsFor(message.guild.me);
    clientChannelPermissions = new Permissions(clientChannelPermissions.bitfield);
    if(!clientChannelPermissions.has(command.clientPermissions)) {
        let missingPermissions = command.clientPermissions.filter(perm => clientChannelPermissions.has(perm) === false).join(', ')
        return message.reply(`I can`t execute this command, missing permissions for ${missingPermissions}`)
    }
}

if(command.userPermissions.length > 0) {
    let memberChannelPermissions = message.channel.permissionsFor(message.member);
    memberChannelPermissions = new Permissions(memberChannelPermissions.bitfield);
    if(!memberChannelPermissions.has(command.clientPermissions)) {
        let missingPermissions = command.clientPermissions.filter(perm => memberChannelPermissions.has(perm) === false).join(', ')
        return message.reply(`I can`t execute this command, you missing permissions for ${missingPermissions}`)
    }
}
...