首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >注册斜杠命令时Discord.js API“缺少访问”

注册斜杠命令时Discord.js API“缺少访问”
EN

Stack Overflow用户
提问于 2022-02-12 11:03:54
回答 2查看 1.3K关注 0票数 0

我有一个小的不和谐的机器人,我在3年前的打字稿,并出现在80多个公会,我最近决定更新它从discord.js-v12.3.1-devdiscord.js-v13.6,同时添加著名的斜杠命令。

但是,当我在我的“就绪”事件中用不和谐的Routes.applicationGuildCommands例程注册它们时,当我映射到我的机器人所在的每个行会时,methode Routes.applicationGuildCommands会在我的大多数公会(但不是全部)上给我返回一个错误Missing Access

代码语言:javascript
运行
复制
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)

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

--我知道Routes.applicationCommands是存在的,但结果是一样的,我想把我的命令分别推到我的行会上,以便以后再对我的命令进行描述。

代码语言:javascript
运行
复制
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" });
});

在我的commandsList事件的第一行创建的ready对象是有效的,如下所示:

代码语言:javascript
运行
复制
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
      }
    ]
  }
]

我上面的代码“工作”,但是我的所有服务器(我的机器人所在的服务器)都没有注册命令、所有服务器的列表,如果Routes.applicationGuildCommands成功与否,在机器人的控制台中显示如下:

代码语言:javascript
运行
复制
Curently connected on (9) servers:
 - Guild1 ❌
 - Guild2 ✔️
 - Guild3 ❌
 - Guild4 ❌
 - Guild5 ❌
 - Guild6 ❌
 - Guild7 ❌
 - Guild8 ✔️
 - Guild9 ❌

console.log( - ${guild.name}✔️);console.log( - ${guild.name}❌);产生的结果(当出现时,表示遇到的Missing Access )。

,我的问题是:我如何在我的机器人协会中成功地注册我的斜杠命令?

有些是他成功注册它们的公会(没有Missing Access错误和✔️)没有我的bot命令(即使重新加载了不和谐的客户端,等待了几个小时或几天的缓存问题),我的一些bot公会在遇到Missing Access时仍然可以让我的bot命令列表工作.

当我所有的机器人公会增加他的时候,applications.commands甚至都不存在,如果每个公会的所有者踢他并重新邀请他来修复它,但是很多机器人(比如MEE6,Tatsumaki & co)成功地推送了他们的斜杠命令,而不管他们对公会的权限如何,而不需要被踢和重新邀请。即使在我的机器人上授予administrator权限也不允许他成功地在一个测试服务器上注册他的命令。

我已经阅读了https://discord.com/developers/docs/interactions/application-commands指南的全部“应用程序命令”部分,但没有线索,在StackOverflow上应该添加application.commands.update作用域(但不在我的bot门户中)。

,我错过了什么吗?

和我真的不想踢我所有公会的机器人,用applications.commands范围重新邀请它,而很多其他的机器人不需要这么做。

EN

Stack Overflow用户

发布于 2022-02-12 14:33:31

不幸的是,如果您的应用程序在公会中没有applications.commands意图,它就不能在那里创建斜杠命令。当有人使用非斜杠命令时,你可以用一个新的oauth链接在公会中发送一条消息来添加带有applications.commands意图的机器人。

关于:我真的不想踢我的机器人的所有他的公会重新邀请它与applications.commands范围,而许多其他机器人不需要这样做。

不和谐添加到所有行会的applications.commands意图与现有的机器人在他们,但如果在此之后加入的机器人没有意图,它将无法工作。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71091282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档