当前位置: 首页 > 知识库问答 >
问题:

不和谐.js API“缺少访问权限”,同时注册我的斜杠命令

翟缪文
2023-03-14

我有一个小型的不和谐机器人,我3年前在Typescript中制作,并出现在80多个公会中,我最近决定将其从不和谐.js-v12.3.1-dev更新为不和谐.js-v13.6,同时添加著名的斜杠命令。

但是当我用discord.js的< code > routes . applicationguildcommands 例程在我的“ready”事件中注册它们时,当我映射到我的机器人所在的每个公会时,methode < code > routes . applicationguildcommands 在我的大多数公会(但不是所有的公会)上返回一个错误< code>Missing Access!):

Trace: S[50001]: Missing Access
    at Q.runRequest (/home/user/bot/node_modules/@discordjs/rest/src/lib/handlers/SequentialHandler.ts:487:11)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Q.queueRequest (/home/user/bot/node_modules/@discordjs/rest/src/lib/handlers/SequentialHandler.ts:200:11)
    at async /home/user/bot/src/discord.ts:21:9
    at async Promise.all (index 50)
    at async Client.<anonymous> (/home/user/bot/src/discord.ts:19:5) {
  rawError: { message: 'Missing Access', code: 50001 },
  code: 50001,
  status: 403,
  method: 'put',
  url: 'https://discord.com/api/v9/applications/642935463048642470/guilds/907457626412628088/commands',
  requestBody: { files: undefined, json: [ [Object], [Object] ] }
}
    at /home/user/bot/src/discord.ts:21:17
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Promise.all (index 50)
    at async Client.<anonymous> (/home/user/botsrc/discord.ts:19:5)

下面是我的代码片段(这只是我代码的一部分,我把所有不相关的部分都剪掉了)。

我知道存在方法< code > routes . application commands ,但结果是一样的,我想将我的命令分别推送到我的公会,以便以后翻译我的命令描述。

import { Client, Intents, Guild } from 'discord.js';
import { REST                   } from '@discordjs/rest';
import { Routes                 } from 'discord-api-types/v9';
import * as commands              from "./commands/";

export const bot: Client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MEMBERS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.DIRECT_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS
  ]
});

bot.on("ready", async (): Promise<void> => {
    const commandsList: any[] = Object.keys(commands)?.map((name: string) => commands[name]);
    console.log(`Curently connected on (${bot.guilds.cache.size}) servers:`);
    await Promise.all(bot.guilds.cache.map(async (guild: Guild) => {
      try {
        await rest.put(Routes.applicationGuildCommands(bot.user.id, guild.id), { body: commandsList });
        console.log(` - ${guild.name} ✔️`);
      } catch (error) {
        console.log(` - ${guild.name} ❌`);
        console.trace(error);
      }
    }));
    console.log(`${commandsList.length} imported command${commandsList.length ? 's' : ''}.`);
    await bot.user.setActivity("le Krosmoz", { type: "WATCHING" });
});

我的命令在我的就绪事件的第一行创建的List对象是有效的,如下所示:

commandsList = [
  {
    name: 'help',
    description: 'Print the list of commands'
  },
  {
    name: 'toto',
    description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'
    options: [
      {
        name: 'date',
        description: "The toto's date",
        type: 3,
        required: false
      },
      {
        name: 'item',
        description: "The toto's item",
        type: 3,
        required: false
      }
    ]
  }
]

我上面的代码有些“工作”,但我的机器人所在的所有服务器都没有注册命令,我的所有服务器的列表以及< code > routes . applicationguildcommands 是否成功显示在机器人的控制台中,如下所示:

Curently connected on (9) servers:
 - Guild1 ❌
 - Guild2 ✔️
 - Guild3 ❌
 - Guild4 ❌
 - Guild5 ❌
 - Guild6 ❌
 - Guild7 ❌
 - Guild8 ✔️
 - Guild9 ❌

控制台.log( - ${guild.name} ✔️ );控制台.log( - ${guild.name} ❌ ); (当出现时❌,表示遇到缺少访问权限)。

我的问题是:我怎样才能在我所有机器人的公会上成功注册我的斜杠命令?

其中一些公会,他成功注册了它们(没有缺少访问权限错误和一个✔️)没有我的机器人的命令(即使重新加载不和谐的客户端并在缓存问题的情况下等待数小时和数天),我的一些机器人的公会遇到缺少访问权限仍然可以让我的机器人命令列表工作...

当我所有的机器人公会都添加了他时,应用程序命令甚至不存在,所以如果每个公会的所有者踢他并重新邀请他,可能会修复它,但是很多机器人(如MEE6,龙木这样的大型机器人)。

我已经阅读了 https://discord.com/developers/docs/interactions/application-commands 指南的整个“应用程序命令”部分,但没有线索,在StackOverflow上找到的应用程序.commands.update范围应该添加(但不在我的机器人的门户中)。

我错过了什么?

我真的不想踢我的机器人所有的行会重新邀请它与应用程序。命令作用域,而许多其他机器人程序不需要这样做。

共有2个答案

方韬
2023-03-14

你需要从你的服务器上启动机器人程序,并用范围“bot”和“applications.commands”创建一个新的邀请链接,否则机器人程序将无法从api修改命令。

邹胜泫
2023-03-14

遗憾的是,如果你的应用在公会中没有 apps.commands 的意图,则它无法在其中创建斜杠命令。你可以在公会中发送一条消息,其中包含一个新的 oauth 链接,以便在有人使用非斜杠命令时添加具有 applications.commands 意图的机器人。

关于:我真的不想踢我的所有公会的机器人来重新激活它的应用程序.commands范围,而许多其他机器人不需要这样做。

Discord将应用程序.命令意图添加到所有包含现有机器人的公会中,但是如果在此之后添加机器人而没有意图,它将无法工作。

 类似资料:
  • 当我尝试注册以下代码时,会出现此错误:code 下图中出错

  • 今天,我调试了我的代码。但是,当我删除bot的权限时,出现了一个错误,“discordapi:缺少权限”。因此,我尝试了一些方法让bot检查它是否具有所需的权限。但是,当我尝试下面的代码时,我再次遇到一个错误:“UnhandledPromisejectionWarning:TypeError:无法读取未定义的属性'has'”

  • 我有以下规则: 所以基本上,我希望经过身份验证的用户能够读/写和集合。但当我创建一个用户并登录时,我会尝试写: 但我有一个错误: 不知道我做错了什么。任何帮助都将不胜感激——谢谢!

  • 首先,我是node.js和discord.js的初学者。 我目前正在开发我自己的discord机器人,我想知道是否可以“存储”斜杠命令的数据。下面是我的意思的一个例子: 这是否可以在并在如下:

  • 本文向大家介绍Python中的左斜杠、右斜杠(正斜杠和反斜杠),包括了Python中的左斜杠、右斜杠(正斜杠和反斜杠)的使用技巧和注意事项,需要的朋友参考一下 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下

  • 原始问题: 我正试图用这个命令安装monaca。 但是就在得到这些错误之后: 知道怎么解决这个问题吗?谢谢你们