mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-03 09:20:08 +00:00
Merge branch 'main' into stupid-deno-type-errors
This commit is contained in:
@@ -47,6 +47,19 @@ const GUILD_SNOWFLAKES = [
|
||||
"publicUpdatesChannelId",
|
||||
];
|
||||
|
||||
export const guildToggles = {
|
||||
/** Whether this user is owner of this guild */
|
||||
owner: 1n,
|
||||
/** Whether the guild widget is enabled */
|
||||
widgetEnabled: 2n,
|
||||
/** Whether this is a large guild */
|
||||
large: 4n,
|
||||
/** Whether this guild is unavailable due to an outage */
|
||||
unavailable: 8n,
|
||||
/** Whether this server is an nsfw guild */
|
||||
nsfw: 16n,
|
||||
};
|
||||
|
||||
const baseGuild: Partial<DiscordenoGuild> = {
|
||||
get members() {
|
||||
return cache.members.filter((member) => member.guilds.has(this.id!));
|
||||
@@ -120,6 +133,21 @@ const baseGuild: Partial<DiscordenoGuild> = {
|
||||
leave() {
|
||||
return leaveGuild(this.id!);
|
||||
},
|
||||
get isOwner() {
|
||||
return Boolean(this.bitfield! & guildToggles.owner);
|
||||
},
|
||||
get widgetEnabled() {
|
||||
return Boolean(this.bitfield! & guildToggles.widgetEnabled);
|
||||
},
|
||||
get large() {
|
||||
return Boolean(this.bitfield! & guildToggles.large);
|
||||
},
|
||||
get unavailable() {
|
||||
return Boolean(this.bitfield! & guildToggles.unavailable);
|
||||
},
|
||||
get nsfw() {
|
||||
return Boolean(this.bitfield! & guildToggles.nsfw);
|
||||
},
|
||||
};
|
||||
|
||||
export async function createDiscordenoGuild(
|
||||
@@ -137,6 +165,7 @@ export async function createDiscordenoGuild(
|
||||
...rest
|
||||
} = data;
|
||||
|
||||
let bitfield = 0n;
|
||||
const guildId = snowflakeToBigint(rest.id);
|
||||
|
||||
const roles = await Promise.all(
|
||||
@@ -172,6 +201,12 @@ export async function createDiscordenoGuild(
|
||||
`Running for of loop in createDiscordenoGuild function.`,
|
||||
);
|
||||
|
||||
const toggleBits = guildToggles[key as keyof typeof guildToggles];
|
||||
if (toggleBits) {
|
||||
bitfield |= value ? toggleBits : 0n;
|
||||
continue;
|
||||
}
|
||||
|
||||
props[key] = createNewProp(
|
||||
GUILD_SNOWFLAKES.includes(key)
|
||||
? value ? snowflakeToBigint(value) : undefined
|
||||
@@ -278,6 +313,10 @@ export interface DiscordenoGuild extends
|
||||
voiceStates: Collection<bigint, DiscordenoVoiceState>;
|
||||
/** Custom guild emojis */
|
||||
emojis: Collection<bigint, Emoji>;
|
||||
/** Whether the bot is the owner of this guild */
|
||||
isOwner: boolean;
|
||||
/** Holds all the boolean toggles. */
|
||||
bitfield: bigint;
|
||||
|
||||
// GETTERS
|
||||
/** Members in this guild. */
|
||||
|
||||
@@ -23,11 +23,21 @@ import { createNewProp } from "../util/utils.ts";
|
||||
import { DiscordenoGuild } from "./guild.ts";
|
||||
|
||||
const MEMBER_SNOWFLAKES = [
|
||||
"roles",
|
||||
"id",
|
||||
"discriminator",
|
||||
];
|
||||
|
||||
export const memberToggles = {
|
||||
/** Whether the user belongs to an OAuth2 application */
|
||||
bot: 1n,
|
||||
/** Whether the user is an Official Discord System user (part of the urgent message system) */
|
||||
system: 2n,
|
||||
/** Whether the user has two factor enabled on their account */
|
||||
mfaEnabled: 4n,
|
||||
/** Whether the email on this account has been verified */
|
||||
verified: 8n,
|
||||
};
|
||||
|
||||
const baseMember: Partial<DiscordenoMember> = {
|
||||
get avatarURL() {
|
||||
return avatarURL(this.id!, this.discriminator!, this.avatar!);
|
||||
@@ -76,6 +86,18 @@ const baseMember: Partial<DiscordenoMember> = {
|
||||
removeRole(guildId, roleId, reason) {
|
||||
return removeRole(guildId, this.id!, roleId, reason);
|
||||
},
|
||||
get bot() {
|
||||
return Boolean(this.bitfield! & memberToggles.bot);
|
||||
},
|
||||
get system() {
|
||||
return Boolean(this.bitfield! & memberToggles.system);
|
||||
},
|
||||
get mfaEnabled() {
|
||||
return Boolean(this.bitfield! & memberToggles.mfaEnabled);
|
||||
},
|
||||
get verified() {
|
||||
return Boolean(this.bitfield! & memberToggles.verified);
|
||||
},
|
||||
};
|
||||
|
||||
export async function createDiscordenoMember(
|
||||
@@ -87,35 +109,23 @@ export async function createDiscordenoMember(
|
||||
user,
|
||||
joinedAt,
|
||||
premiumSince,
|
||||
...rest
|
||||
} = data;
|
||||
|
||||
let bitfield = 0n;
|
||||
const props: Record<string, ReturnType<typeof createNewProp>> = {};
|
||||
|
||||
for (const [key, value] of Object.entries(rest)) {
|
||||
eventHandlers.debug?.(
|
||||
"loop",
|
||||
`Running for of loop for Object.keys(rest) in DiscordenoMember function.`,
|
||||
);
|
||||
|
||||
if (key === "roles") {
|
||||
props[key] = value.map((id: string) => snowflakeToBigint(id));
|
||||
continue;
|
||||
}
|
||||
|
||||
props[key] = createNewProp(
|
||||
MEMBER_SNOWFLAKES.includes(key)
|
||||
? value ? snowflakeToBigint(value) : undefined
|
||||
: value,
|
||||
);
|
||||
}
|
||||
|
||||
for (const [key, value] of Object.entries(user)) {
|
||||
eventHandlers.debug?.(
|
||||
"loop",
|
||||
`Running for of for Object.keys(user) loop in DiscordenoMember function.`,
|
||||
);
|
||||
|
||||
const toggleBits = memberToggles[key as keyof typeof memberToggles];
|
||||
if (toggleBits) {
|
||||
bitfield |= value ? toggleBits : 0n;
|
||||
continue;
|
||||
}
|
||||
|
||||
props[key] = createNewProp(
|
||||
MEMBER_SNOWFLAKES.includes(key)
|
||||
? value ? snowflakeToBigint(value) : undefined
|
||||
@@ -142,29 +152,23 @@ export async function createDiscordenoMember(
|
||||
|
||||
// User was never cached before
|
||||
member.guilds.set(guildId, {
|
||||
nick: rest.nick,
|
||||
roles: rest.roles.map((id) => snowflakeToBigint(id)),
|
||||
nick: data.nick,
|
||||
roles: data.roles.map((id) => snowflakeToBigint(id)),
|
||||
joinedAt: Date.parse(joinedAt),
|
||||
premiumSince: premiumSince ? Date.parse(premiumSince) : undefined,
|
||||
deaf: rest.deaf,
|
||||
mute: rest.mute,
|
||||
deaf: data.deaf,
|
||||
mute: data.mute,
|
||||
});
|
||||
|
||||
return member;
|
||||
}
|
||||
|
||||
export interface DiscordenoMember extends
|
||||
Omit<
|
||||
GuildMember,
|
||||
"roles"
|
||||
>,
|
||||
Omit<
|
||||
User,
|
||||
| "discriminator"
|
||||
| "id"
|
||||
> {
|
||||
/** Array of role object ids */
|
||||
roles: bigint[];
|
||||
/** The user's id */
|
||||
id: bigint;
|
||||
/** The user's 4-digit discord-tag */
|
||||
@@ -178,6 +182,8 @@ export interface DiscordenoMember extends
|
||||
roles: bigint[];
|
||||
}
|
||||
>;
|
||||
/** Holds all the boolean toggles. */
|
||||
bitfield: bigint;
|
||||
|
||||
// GETTERS
|
||||
/** The avatar url using the default format and size. */
|
||||
|
||||
@@ -29,6 +29,15 @@ const MESSAGE_SNOWFLAKES = [
|
||||
"webhookId",
|
||||
];
|
||||
|
||||
const messageToggles = {
|
||||
/** Whether this was a TTS message */
|
||||
tts: 1n,
|
||||
/** Whether this message mentions everyone */
|
||||
mentionEveryone: 2n,
|
||||
/** Whether this message is pinned */
|
||||
pinned: 4n,
|
||||
};
|
||||
|
||||
const baseMessage: Partial<DiscordenoMessage> = {
|
||||
get channel() {
|
||||
if (this.guildId) return cache.channels.get(this.channelId!);
|
||||
@@ -132,6 +141,15 @@ const baseMessage: Partial<DiscordenoMessage> = {
|
||||
removeReaction(reaction, userId) {
|
||||
return removeReaction(this.channelId!, this.id!, reaction, { userId });
|
||||
},
|
||||
get tts() {
|
||||
return Boolean(this.bitfield! & messageToggles.tts);
|
||||
},
|
||||
get mentionEveryone() {
|
||||
return Boolean(this.bitfield! & messageToggles.mentionEveryone);
|
||||
},
|
||||
get pinned() {
|
||||
return Boolean(this.bitfield! & messageToggles.pinned);
|
||||
},
|
||||
};
|
||||
|
||||
export async function createDiscordenoMessage(data: Message) {
|
||||
@@ -146,6 +164,8 @@ export async function createDiscordenoMessage(data: Message) {
|
||||
...rest
|
||||
} = data;
|
||||
|
||||
let bitfield = 0n;
|
||||
|
||||
const props: Record<string, ReturnType<typeof createNewProp>> = {};
|
||||
for (const [key, value] of Object.entries(rest)) {
|
||||
eventHandlers.debug?.(
|
||||
@@ -153,6 +173,12 @@ export async function createDiscordenoMessage(data: Message) {
|
||||
`Running for of loop in createDiscordenoMessage function.`,
|
||||
);
|
||||
|
||||
const toggleBits = messageToggles[key as keyof typeof messageToggles];
|
||||
if (toggleBits) {
|
||||
bitfield |= value ? toggleBits : 0n;
|
||||
continue;
|
||||
}
|
||||
|
||||
props[key] = createNewProp(
|
||||
MESSAGE_SNOWFLAKES.includes(key)
|
||||
? value ? snowflakeToBigint(value) : undefined
|
||||
@@ -231,7 +257,11 @@ export interface DiscordenoMessage extends
|
||||
isBot: boolean;
|
||||
/** The username#discrimnator for the user who sent this message */
|
||||
tag: string;
|
||||
/** Holds all the boolean toggles. */
|
||||
bitfield: bigint;
|
||||
|
||||
// For better user experience
|
||||
|
||||
/** Id of the guild which the massage has been send in. "0n" if it a DM */
|
||||
guildId: bigint;
|
||||
/** id of the channel the message was sent in */
|
||||
@@ -252,6 +282,7 @@ export interface DiscordenoMessage extends
|
||||
timestamp: number;
|
||||
/** When this message was edited (or undefined if never) */
|
||||
editedTimestamp?: number;
|
||||
|
||||
// GETTERS
|
||||
|
||||
/** The channel where this message was sent. Can be undefined if uncached. */
|
||||
|
||||
@@ -19,6 +19,17 @@ const ROLE_SNOWFLAKES = [
|
||||
"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<DiscordenoRole> = {
|
||||
get guild() {
|
||||
return cache.guilds.get(this.guildId!);
|
||||
@@ -71,6 +82,18 @@ const baseRole: Partial<DiscordenoRole> = {
|
||||
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);
|
||||
},
|
||||
};
|
||||
|
||||
// deno-lint-ignore require-await
|
||||
@@ -84,6 +107,8 @@ export async function createDiscordenoRole(
|
||||
...rest
|
||||
} = ({ guildId: data.guildId, ...data.role });
|
||||
|
||||
let bitfield = 0n;
|
||||
|
||||
const props: Record<string, ReturnType<typeof createNewProp>> = {};
|
||||
for (const [key, value] of Object.entries(rest)) {
|
||||
eventHandlers.debug?.(
|
||||
@@ -91,6 +116,12 @@ export async function createDiscordenoRole(
|
||||
`Running for of loop in createDiscordenoRole function.`,
|
||||
);
|
||||
|
||||
const toggleBits = roleToggles[key as keyof typeof roleToggles];
|
||||
if (toggleBits) {
|
||||
bitfield |= value ? toggleBits : 0n;
|
||||
continue;
|
||||
}
|
||||
|
||||
props[key] = createNewProp(
|
||||
ROLE_SNOWFLAKES.includes(key)
|
||||
? value ? snowflakeToBigint(value) : undefined
|
||||
@@ -123,6 +154,8 @@ export interface DiscordenoRole extends Omit<Role, "tags" | "id"> {
|
||||
integrationId: bigint;
|
||||
/** The roles guildId */
|
||||
guildId: bigint;
|
||||
/** Holds all the boolean toggles. */
|
||||
bitfield: bigint;
|
||||
|
||||
// GETTERS
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ export async function createDiscordenoVoiceState(
|
||||
|
||||
const toggleBits = voiceStateToggles[key as keyof typeof voiceStateToggles];
|
||||
if (toggleBits) {
|
||||
bitfield |= toggleBits;
|
||||
bitfield |= value ? toggleBits : 0n;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user