繁体   English   中英

Discord.js v13:斜杠命令重复

[英]Discord.js v13: Slash commands are duplicated

这似乎是一些错误,或者我不知道,但我确信这是可以修复的。 我所有的斜杠命令都是重复的,首先是最新版本的命令,其次是一些过时的命令。

预习

我假设它与斜杠命令注册有关,所以这里是:

const guild = await client.guilds.cache
            .get("836212492769165363")

        guild.commands.set(arrayOfSlashCommands).then((cmd) => {
          const getRoles = (commandName) => {
            const permissions = arrayOfSlashCommands.find(x => x.name === commandName).userPermissions;

            if(!permissions) return null;
            return guild.roles.cache.filter(x => x.permissions.has(permissions) && !x.managed)
          }

          const fullPermissions = cmd.reduce((accumulator, x) => {
            const roles = getRoles(x.name);
            if(!roles) return accumulator;

            const permissions = roles.reduce((a, v) => {
              return [
                ...a,
                {
                  id: v.id, 
                  type: 'ROLE',
                  permission: true,
                },
              ]
            }, [])
            return [
              ...accumulator,
              {
                id: x.id,
                permissions,
              }
            ]
          }, [])
          guild.commands.permissions.set({ fullPermissions }).catch((e) => console.log(e))
        })

全局和公会命令不一样。

解释


全局和公会命令是存储在不同位置的两种不同类型的斜线命令。
它们都有 100 的限制,并且有自己的速率限制。

那么有什么区别呢?


  • 所有公会和用户(包括 DM)都可以看到全局命令。
  • 另一方面,公会命令是特定于服务器的。

示范


假设您有 2 台服务器,一台名为A ,一台名为B

现在,您在A中注册了 2 个公会命令。 这两个命令不会出现在B上。

但是,如果您注册另外 2 个全局命令,这将出现在两个服务器上,包括 DM。

那我的代码怎么了?


您注册了 global 和 guild 命令,它们都具有相同的配置。
这就是它们都出现重复的原因。

修复?


有一种方法可以重置所有公会和全局命令。
通过使用下面的代码,它将立即重置公会命令。
但是,您必须等待大约 1 小时才能更新全局命令。

    const guild = client.guilds.cache.get("<guild id>");

    // This takes ~1 hour to update
    client.application.commands.set([]);
    // This updates immediately
    guild.commands.set([]);

尝试使用以下代码重新启动您的机器人:

client.application.commands.set([])

或者,如果你有公会,你可以这样做:

guild.commands.set([])

可能需要一些时间才能完成,但它会起作用。 它将清除所有斜杠命令,因此您可以将它们放回去而不会重复。 据我所知,您同时拥有 Guild 命令应用程序命令

简单修复:踢你的机器人然后重新邀请它,为我工作:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM