【问题标题】:discord.js(12) command permissions problemdiscord.js(12) 命令权限问题
【发布时间】:2021-10-06 00:04:57
【问题描述】:

我正在尝试让我的 say 命令只对管理员有效,但我的权限有问题。这是我的代码:

client.on("message", (message) => {
    if (!message.member.hasPermission("ADMINISTRATOR")) return;

    if (message.content.startsWith(prefix + "say")) {
        if (message.author.bot) return;
        const SayMessage = message.content.slice(5).trim();
        message.channel.send(SayMessage);

        if (message.deletable) message.delete();
        return;
    }
});

对我来说看起来不错,但控制台说:

  if(!message.member.hasPermission("ADMINISTRATOR")) return
                       ^

TypeError: Cannot read property 'hasPermission' of null

【问题讨论】:

  • 命令是在公会内部运行的吗? (如果消息来自 DM,则 .member 未定义。)
  • 如果我没记错的话,如果消息是在 DM 中发送的,member 会返回 null。尝试在服务器中运行它
  • 不,它甚至不起作用,控制台在启动机器人后立即显示它
  • 该代码在消息事件中,它只会在发送消息时触发

标签: javascript node.js discord discord.js


【解决方案1】:

我认为您的机器人一开始就会收到来自某人的 dm 消息...尝试添加以下内容:

client.on("message", (message) => {
    if(message.channel.type === 'dm') return;
    

【讨论】:

  • 还是不行,也许我应该在这里发布我的完整代码?
【解决方案2】:

检查用户是否具有“ADMINISTRATOR”权限的函数是message.member.permissions.has("ADMINISTRATOR"),而你把message.member.hasPermissions("ADMINISTRATOR")...这是主要问题。

client.on("message", (message) => {
    if (message.content.startsWith(prefix + "say")) {
        if (!message.member.permissions.has("ADMINISTRATOR")) return; // Is permissions.has, and you put hasPermissions
    // Rest of your code
    }
});

【讨论】:

  • GuildMember.hasPermission() 完全有效。这就是 OP 在他的问题中的意思。
  • 在我的代码中(hasPermissions)实际上不起作用(使用v12),只有权限。has
  • 因为不是hasPermissions,而是hasPermission...
  • 我想说“hasPermission”,对不起
  • OP的问题不是hasPermission()(在v12中有效)。问题是message.member 为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2021-09-09
  • 2020-04-06
  • 2020-12-29
  • 2020-08-24
  • 2020-06-16
  • 2020-01-14
相关资源
最近更新 更多