mirror of
https://github.com/discordeno/discordeno.git
synced 2026-09-17 08:47:22 +00:00
fix: move channelOverwriteHasPermission to perm plugin
This commit is contained in:
@@ -1,34 +0,0 @@
|
|||||||
import { separateOverwrites } from "../../transformers/channel.ts";
|
|
||||||
import type { DiscordOverwrite } from "../../types/channels/overwrite.ts";
|
|
||||||
import { BitwisePermissionFlags } from "../../types/permissions/bitwisePermissionFlags.ts";
|
|
||||||
import type { PermissionStrings } from "../../types/permissions/permissionStrings.ts";
|
|
||||||
|
|
||||||
/** Checks if a channel overwrite for a user id or a role id has permission in this channel */
|
|
||||||
export function channelOverwriteHasPermission(
|
|
||||||
guildId: bigint,
|
|
||||||
id: bigint,
|
|
||||||
overwrites: bigint[],
|
|
||||||
permissions: PermissionStrings[]
|
|
||||||
) {
|
|
||||||
const overwrite =
|
|
||||||
overwrites.find((perm) => {
|
|
||||||
const [_, bitID] = separateOverwrites(perm);
|
|
||||||
return id === bitID;
|
|
||||||
}) ||
|
|
||||||
overwrites.find((perm) => {
|
|
||||||
const [_, bitID] = separateOverwrites(perm);
|
|
||||||
return bitID === guildId;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!overwrite) return false;
|
|
||||||
|
|
||||||
return permissions.every((perm) => {
|
|
||||||
const [type, id, allowBits, denyBits] = separateOverwrites(overwrite);
|
|
||||||
if (BigInt(denyBits) & BigInt(BitwisePermissionFlags[perm])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (BigInt(allowBits) & BigInt(BitwisePermissionFlags[perm])) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
//channels
|
//channels
|
||||||
export * from "./channels/channelOverwriteHasPermission.ts";
|
|
||||||
export * from "./channels/createChannel.ts";
|
export * from "./channels/createChannel.ts";
|
||||||
export * from "./channels/deleteChannel.ts";
|
export * from "./channels/deleteChannel.ts";
|
||||||
export * from "./channels/deleteChannelOverwrite.ts";
|
export * from "./channels/deleteChannelOverwrite.ts";
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ export {
|
|||||||
assertThrowsAsync
|
assertThrowsAsync
|
||||||
} from "https://deno.land/std@0.115.1/testing/asserts.ts";
|
} from "https://deno.land/std@0.115.1/testing/asserts.ts";
|
||||||
export * from "https://deno.land/x/discordeno_cache_plugin@0.0.13/mod.ts";
|
export * from "https://deno.land/x/discordeno_cache_plugin@0.0.13/mod.ts";
|
||||||
|
export * from "https://deno.land/x/discordeno_permissions_plugin@0.0.7/mod.ts";
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
import { ChannelTypes, channelOverwriteHasPermission, OverwriteTypes } from "../../../mod.ts";
|
|
||||||
import { assertExists, assertEquals } from "../../deps.ts";
|
|
||||||
import { bot } from "../../mod.ts";
|
|
||||||
import { delayUntil } from "../../utils.ts";
|
|
||||||
|
|
||||||
export async function channelOverwriteHasPermissionTest(guildId: bigint) {
|
|
||||||
const channel = await bot.helpers.createChannel(guildId, {
|
|
||||||
name: "Discordeno-test",
|
|
||||||
permissionOverwrites: [
|
|
||||||
{
|
|
||||||
id: bot.id,
|
|
||||||
type: OverwriteTypes.Member,
|
|
||||||
allow: ["VIEW_CHANNEL"],
|
|
||||||
deny: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
// Assertions
|
|
||||||
assertExists(channel);
|
|
||||||
assertEquals(channel.type, ChannelTypes.GuildText);
|
|
||||||
|
|
||||||
// Delay the execution to allow event to be processed
|
|
||||||
await delayUntil(10000, () => bot.channels.has(channel.id));
|
|
||||||
|
|
||||||
if (!bot.channels.has(channel.id)) {
|
|
||||||
throw new Error("The channel seemed to be created but it was not cached.");
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(channel.permissionOverwrites.length, 1);
|
|
||||||
|
|
||||||
assertEquals(
|
|
||||||
channelOverwriteHasPermission(channel.guildId, bot.id, bot.channels.get(channel.id)?.permissionOverwrites || [], [
|
|
||||||
"VIEW_CHANNEL",
|
|
||||||
]),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ChannelTypes, channelOverwriteHasPermission, OverwriteTypes } from "../../../mod.ts";
|
import { ChannelTypes, OverwriteTypes } from "../../../mod.ts";
|
||||||
import { assertExists, assertEquals } from "../../deps.ts";
|
import { assertExists, assertEquals, channelOverwriteHasPermission } from "../../deps.ts";
|
||||||
import { bot } from "../../mod.ts";
|
import { bot } from "../../mod.ts";
|
||||||
import { delayUntil } from "../../utils.ts";
|
import { delayUntil } from "../../utils.ts";
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import { getBansTests } from "./helpers/guilds/getBans.ts";
|
|||||||
import { getGuildTests } from "./helpers/guilds/getGuild.ts";
|
import { getGuildTests } from "./helpers/guilds/getGuild.ts";
|
||||||
import { getVanityURLTests } from "./helpers/guilds/getVanityUrl.ts";
|
import { getVanityURLTests } from "./helpers/guilds/getVanityUrl.ts";
|
||||||
import { categoryChildrenTest } from "./helpers/channels/categoryChannels.ts";
|
import { categoryChildrenTest } from "./helpers/channels/categoryChannels.ts";
|
||||||
import { channelOverwriteHasPermissionTest } from "./helpers/channels/channelOverwriteHasPermission.ts";
|
|
||||||
import { deleteChannelOverwriteTests } from "./helpers/channels/deleteChannelOverwrite.ts";
|
import { deleteChannelOverwriteTests } from "./helpers/channels/deleteChannelOverwrite.ts";
|
||||||
import { editChannelTests } from "./helpers/channels/editChannel.ts";
|
import { editChannelTests } from "./helpers/channels/editChannel.ts";
|
||||||
import { CACHED_COMMUNITY_GUILD_ID, sanitizeMode } from "./constants.ts";
|
import { CACHED_COMMUNITY_GUILD_ID, sanitizeMode } from "./constants.ts";
|
||||||
@@ -267,13 +266,6 @@ Deno.test({
|
|||||||
},
|
},
|
||||||
...sanitizeMode,
|
...sanitizeMode,
|
||||||
});
|
});
|
||||||
Deno.test({
|
|
||||||
name: "[channel] edit a channel permission overwrite",
|
|
||||||
async fn(t) {
|
|
||||||
await channelOverwriteHasPermissionTest(guild.id);
|
|
||||||
},
|
|
||||||
...sanitizeMode,
|
|
||||||
});
|
|
||||||
Deno.test({
|
Deno.test({
|
||||||
name: "[channel] delete a channel overwrite",
|
name: "[channel] delete a channel overwrite",
|
||||||
async fn(t) {
|
async fn(t) {
|
||||||
|
|||||||
Reference in New Issue
Block a user