将用户添加到私人文本频道 -discordjs

问题描述 投票:0回答:1

我试图弄清楚在将用户添加到通过 http 私有的文本通道的权限方面我缺少什么。用户已经在公会/服务器中,如果我要将机器人权限更新为管理员,那么它就可以工作,但是如果我使用我设置的选择权限

我明白了

Error adding user to guild or assigning role: Error: HTTP error!
 Status: 403 - {"message": "Missing Access", "code": 50001}
    at discordFetch

如果我要像这样选择除管理员之外的所有权限

然后我就明白了

Error: HTTP error! Status: 403 - {"message": "Missing Access", "code": 50001}

仍然。我试图不使用管理员,而只使用所需的权限,但如果选择每个权限不起作用,但选择管理员确实会将用户添加到私人文本频道,一旦他们已经在公会中,那么我错过了什么?另外,当您转到“discord 服务器设置”>“角色”时,我的机器人角色位于最顶部。我读到它需要高于其他角色才能分配权限。

这是否与这个错误有关?

const permissions = {
    allow: "1024",
    deny: "0",
    type: "1",
  };

以下是我如何将用户添加到私人频道,该频道再次以管理员身份运行。

export async function addUserToPrivateChannel(
  channelId: string,
  userId: string
) {
  const url = `${discordBaseUrl}/channels/${channelId}/permissions/${userId}`;
  const permissions = {
    allow: "1024",
    deny: "0",
    type: "1",
  };

  const options = {
    method: "PUT",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bot ${DISCORD_TOKEN}`,
    },
    body: JSON.stringify(permissions),
  };

  return await discordFetch(url, options);
}


async function discordFetch(url, options) {
  try {
    const response = await fetch(url, options);

    // Log rate limit information
    const rateLimit = response.headers.get("X-RateLimit-Limit");
    const rateLimitRemaining = response.headers.get("X-RateLimit-Remaining");
    const rateLimitReset = response.headers.get("X-RateLimit-Reset");

    if (rateLimitReset) {
      const rateLimitResetDate = new Date(Number(rateLimitReset) * 1000);
      console.log(
        `Rate Limit Reset: ${rateLimitResetDate.toLocaleTimeString()}`
      );
    }
    console.log(`Rate Limit: ${rateLimit}`);
    console.log(`Rate Limit Remaining: ${rateLimitRemaining}`);

    if (!response.ok) {
      const text = await response.text();
      throw new Error(`HTTP error! Status: ${response.status} - ${text}`);
    }

    if (response.status === 204 || response.status === 201) {
      console.log(
        `User added successfully with status code: ${response.status}`
      );
      return { status: response.status }; 
    } else {
      return await response.json();
    }
  } catch (error) {
    console.error("Error with Discord fetch:", error);
    throw error; 
  }
}
discord discord.js
1个回答
0
投票

机器人需要管理员权限来管理对频道的访问。所以没有办法,只能在邀请的时候征求管理员的许可。

© www.soinside.com 2019 - 2024. All rights reserved.