From ebe3882a78e08757cb050c1be966f48017a094c4 Mon Sep 17 00:00:00 2001 From: TriForMine Date: Fri, 8 Oct 2021 17:49:28 +0200 Subject: [PATCH] Role transformer --- src/transformers/role.ts | 169 +++------------------------------------ 1 file changed, 13 insertions(+), 156 deletions(-) diff --git a/src/transformers/role.ts b/src/transformers/role.ts index 2138146ca..bfc0e367b 100644 --- a/src/transformers/role.ts +++ b/src/transformers/role.ts @@ -1,171 +1,28 @@ -// import { eventHandlers } from "../bot.ts"; -// import { cache } from "../cache.ts"; -// import { deleteRole } from "../helpers/roles/delete_role.ts"; -// import { editRole } from "../helpers/roles/edit_role.ts"; -// import { CreateGuildRole } from "../types/guilds/create_guild_role.ts"; -// import { Errors } from "../types/discordeno/errors.ts"; -// import type { Role } from "../types/permissions/role.ts"; -// import { snowflakeToBigint } from "../util/bigint.ts"; -// import { Collection } from "../util/collection.ts"; -// import { highestRole } from "../util/permissions.ts"; -// import { createNewProp } from "../util/utils.ts"; -// import { DiscordenoGuild } from "./guild.ts"; -// import { DiscordenoMember } from "./member.ts"; - import { Bot } from "../bot.ts"; import { Role } from "../types/mod.ts"; -// const ROLE_SNOWFLAKES = ["id", "botId", "integrationId", "guildId"]; - -// const roleToggles = { -// /** If this role is showed seperately in the user listing */ -// hoist: 1n, -// /** Whether this role is managed by an integration */ -// managed: 2n, -// /** Whether this role is mentionable */ -// mentionable: 4n, -// /** If this role is the nitro boost role. */ -// isNitroBoostRole: 8n, -// }; - -// const baseRole: Partial = { -// get guild() { -// return cache.guilds.get(this.guildId!); -// }, -// get hexColor() { -// return this.color!.toString(16); -// }, -// get members() { -// return cache.members.filter((m) => m.guilds.some((g) => g.roles.includes(this.id!))); -// }, -// get mention() { -// return `<@&${this.id}>`; -// }, - -// // METHODS -// delete() { -// return deleteRole(this.guildId!, this.id!); -// }, -// edit(options) { -// return editRole(this.guildId!, this.id!, options); -// }, -// higherThanRole(roleId: bigint, position?: number) { -// // If no position try and find one from cache -// if (!position) position = this.guild?.roles.get(roleId)?.position; -// // If still none error out. -// if (!position) { -// throw new Error( -// "role.higherThanRoleId() did not have a position provided and the role or guild was not found in cache. Please provide a position like role.higherThanRoleId(roleId, position)" -// ); -// } - -// // Rare edge case handling -// if (this.position === position) { -// return this.id! < roleId; -// } - -// return this.position! > position; -// }, -// async higherThanMember(memberId: bigint) { -// const guild = this.guild; -// if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); - -// if (guild.ownerId === memberId) return false; - -// const memberHighestRole = await highestRole(guild, memberId); -// return this.higherThanRole!(memberHighestRole.id, memberHighestRole.position); -// }, -// get hoist() { -// return Boolean(this.bitfield! & roleToggles.hoist); -// }, -// get managed() { -// return Boolean(this.bitfield! & roleToggles.managed); -// }, -// get mentionable() { -// return Boolean(this.bitfield! & roleToggles.mentionable); -// }, -// get isNitroBoostRole() { -// return Boolean(this.bitfield! & roleToggles.isNitroBoostRole); -// }, -// toJSON() { -// return { -// guildId: this.guildId?.toString(), -// id: this.id?.toString(), -// name: this.name, -// color: this.color, -// hoist: this.hoist, -// position: this.position, -// permissions: this.permissions?.toString(), -// managed: this.managed, -// mentionable: this.mentionable, -// tags: { -// botId: this.botId?.toString(), -// integrationId: this.integrationId?.toString(), -// premiumSubscriber: this.isNitroBoostRole, -// }, -// } as Role & { guildId: string }; -// }, -// }; - -// // deno-lint-ignore require-await -// export async function createDiscordenoRole( -// data: { role: Role } & { -// guildId: bigint; -// } -// ) { -// const { tags = {}, ...rest } = { guildId: data.guildId, ...data.role }; - -// let bitfield = 0n; - -// const props: Record> = {}; -// for (const key of Object.keys(rest) as (keyof typeof rest)[]) { -// eventHandlers.debug?.("loop", `Running for of loop in createDiscordenoRole function.`); - -// const toggleBits = roleToggles[key as keyof typeof roleToggles]; -// if (toggleBits) { -// bitfield |= rest[key] ? toggleBits : 0n; -// continue; -// } - -// props[key] = createNewProp( -// ROLE_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key] -// ); -// } - -// if (!cache.requiredStructureProperties.roles.size || cache.requiredStructureProperties.roles.has("permissions")) -// props.permissions = createNewProp(BigInt(rest.permissions)); - -// if (!cache.requiredStructureProperties.roles.size || cache.requiredStructureProperties.roles.has("botId")) -// props.botId = createNewProp(tags.botId ? snowflakeToBigint(tags.botId) : undefined); - -// if (!cache.requiredStructureProperties.roles.size || cache.requiredStructureProperties.roles.has("isNitroBoostRole")) -// props.isNitroBoostRole = createNewProp("premiumSubscriber" in tags); - -// if (!cache.requiredStructureProperties.roles.size || cache.requiredStructureProperties.roles.has("integrationId")) -// props.integrationId = createNewProp(tags.integrationId ? snowflakeToBigint(tags.integrationId) : undefined); - -// if (!cache.requiredStructureProperties.roles.size || cache.requiredStructureProperties.roles.has("bitfield")) -// props.bitfield = createNewProp(bitfield); - -// return Object.create(baseRole, props) as DiscordenoRole; -// } - export function transformRole( - bot: Bot, - payload: { role: Role } & { - guildId: bigint; - } + bot: Bot, + payload: { role: Role } & { + guildId: bigint; + } ) { return { // TODO: decide if its better to spread like this or do manually - ...payload, + // ...payload, // UNTRANSFORMED STUFF HERE // TODO: decide if we should use spread above or do manually - // name: payload.role.name, + name: payload.role.name, + guildId: payload.guildId, + position: payload.role.position, + color: payload.role.color, // TRANSFORMED STUFF BELOW id: bot.transformers.snowflake(payload.role.id), - botId: payload.role.tags?.botId ? bot.transformers.snowflake(payload.role.tags?.botId) : undefined, + botId: payload.role.tags?.botId ? bot.transformers.snowflake(payload.role.tags.botId) : undefined, + integrationId: payload.role.tags?.integrationId ? bot.transformers.snowflake(payload.role.tags.integrationId) : undefined, + permissions: payload.role.permissions ? bot.transformers.snowflake(payload.role.permissions) : undefined, + bitfield: 0n & (payload.role?.hoist ? 1n : 0n) & (payload.role?.managed ? 2n : 0n) & (payload.role?.mentionable ? 4n : 0n) & (payload.role.tags?.premiumSubscriber ? 8n : 0n) }; }