Node.js 具有用户权限、客户端权限和限制的Discord.js命令处理程序

Node.js 具有用户权限、客户端权限和限制的Discord.js命令处理程序,node.js,discord,discord.js,commando,Node.js,Discord,Discord.js,Commando,我怎样才能像commando那样在导出中检查用户权限、客户端权限、添加限制和定义参数 我的消息事件如下所示 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(

我怎样才能像commando那样在导出中检查用户权限、客户端权限、添加限制和定义参数

我的消息事件如下所示

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);
})
您可以获取message.channel的client.user权限和message.member权限,然后使用has进行检查

关于节流,可以使用冷却。这就是如何使用它的好方法

const{Permissions}=require'discord.js'; ifcommand.clientPermissions.length>0{ 让clientChannelPermissions=message.channel.permissionsFormessage.guild.me; clientChannelPermissions=新权限clientChannelPermissions.bitfield; 如果!clientChannelPermissions.hascommand.clientPermissions{ 让missingPermissions=command.clientPermissions.filterperm=>clientChannelPermissions.hasperm==false.join',' 返回消息。答复`我无法执行此命令,缺少${missingPermissions}的权限` } } ifcommand.userPermissions.length>0{ 让memberChannelPermissions=message.channel.permissionsFormessage.member; memberChannelPermissions=新权限memberChannelPermissions.bitfield; 如果!memberChannelPermissions.hascommand.clientPermissions{ 让missingPermissions=command.clientPermissions.filterperm=>memberChannelPermissions.hasperm==false.join',' 返回消息。回复`我无法执行此命令,您缺少${missingPermissions}的权限` } }
检查参数呢?这个问题需要更详细的研究,命令参数可以是用户、角色、频道、关键字、它们的顺序,并且严格遵守某些参数,这些参数可以表示为ID、userTAG、Tention、name,在某些地方也很重要。因此,我在这里无法给出一些通用且简单的解决方案。未捕获的承诺拒绝范围错误:无效的权限字符串或数字。第行clientChannelPermissions=新权限clientChannelPermissions;我授予的权限是clientPermissions:[嵌入链接,发送消息],@ETHYT我正在添加一些修复,忘记返回对象的权限。。。
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
}