我试图弄清楚在将用户添加到通过 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;
}
}
机器人需要管理员权限来管理对频道的访问。所以没有办法,只能在邀请的时候征求管理员的许可。