⚡ Convert BitField to BigInt
This commit is contained in:
parent
e11f94337b
commit
d2795bdd0a
@ -4,7 +4,7 @@ import { getIpAdress } from "./GlobalRateLimit";
|
|||||||
|
|
||||||
export function RateLimit({ count = 10, timespan = 1000 * 5, name = "/" }) {
|
export function RateLimit({ count = 10, timespan = 1000 * 5, name = "/" }) {
|
||||||
return async (req: Request, res: Response, next: NextFunction) => {
|
return async (req: Request, res: Response, next: NextFunction) => {
|
||||||
let id = req.userid || getIpAdress(req); // TODO: .replaceAll(".", "_"); // for ip adress replace all dots to save in database
|
let id = req.userid || getIpAdress(req);
|
||||||
|
|
||||||
const limit: { count: number; start: number } = (await db.data.ratelimit.routes[name][id].get()) || {
|
const limit: { count: number; start: number } = (await db.data.ratelimit.routes[name][id].get()) || {
|
||||||
count: 0,
|
count: 0,
|
||||||
|
15
src/models/User.ts
Normal file
15
src/models/User.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { UserFlags } from "../util/UserFlags";
|
||||||
|
|
||||||
|
export interface User {
|
||||||
|
id: BigInt;
|
||||||
|
username: string;
|
||||||
|
discriminator: string;
|
||||||
|
avatar: string;
|
||||||
|
bot: boolean;
|
||||||
|
system: boolean;
|
||||||
|
mfa_enabled: boolean;
|
||||||
|
locale: string;
|
||||||
|
verified: boolean;
|
||||||
|
email: string;
|
||||||
|
flags: UserFlags;
|
||||||
|
}
|
@ -3,26 +3,17 @@
|
|||||||
// https://github.com/discordjs/discord.js/blob/master/src/util/BitField.js
|
// https://github.com/discordjs/discord.js/blob/master/src/util/BitField.js
|
||||||
// Apache License Version 2.0 Copyright 2015 - 2021 Amish Shah
|
// Apache License Version 2.0 Copyright 2015 - 2021 Amish Shah
|
||||||
|
|
||||||
export type BitFieldResolvable = number | BitField | string | BitFieldResolvable[];
|
export type BitFieldResolvable = number | BigInt | BitField | string | BitFieldResolvable[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data structure that makes it easy to interact with a bitfield.
|
* Data structure that makes it easy to interact with a bitfield.
|
||||||
*/
|
*/
|
||||||
export class BitField {
|
export class BitField {
|
||||||
public bitfield: number;
|
public bitfield: bigint = BigInt(0);
|
||||||
|
|
||||||
|
public static FLAGS: Record<string, bigint>;
|
||||||
|
|
||||||
/**
|
|
||||||
* Numeric bitfield flags.
|
|
||||||
* <info>Defined in extension classes</info>
|
|
||||||
*/
|
|
||||||
public static FLAGS: Record<string, number>;
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
constructor(bits: BitFieldResolvable = 0) {
|
constructor(bits: BitFieldResolvable = 0) {
|
||||||
/**
|
|
||||||
* Bitfield of the packed bits
|
|
||||||
* @type {number}
|
|
||||||
*/
|
|
||||||
this.bitfield = BitField.resolve(bits);
|
this.bitfield = BitField.resolve(bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,7 +21,7 @@ export class BitField {
|
|||||||
* Checks whether the bitfield has a bit, or any of multiple bits.
|
* Checks whether the bitfield has a bit, or any of multiple bits.
|
||||||
*/
|
*/
|
||||||
any(bit: BitFieldResolvable): boolean {
|
any(bit: BitFieldResolvable): boolean {
|
||||||
return (this.bitfield & BitField.resolve(bit)) !== 0;
|
return (this.bitfield & BitField.resolve(bit)) !== 0n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,8 +36,8 @@ export class BitField {
|
|||||||
*/
|
*/
|
||||||
has(bit: BitFieldResolvable): boolean {
|
has(bit: BitFieldResolvable): boolean {
|
||||||
if (Array.isArray(bit)) return bit.every((p) => this.has(p));
|
if (Array.isArray(bit)) return bit.every((p) => this.has(p));
|
||||||
bit = BitField.resolve(bit);
|
const BIT = BitField.resolve(bit);
|
||||||
return (this.bitfield & bit) === bit;
|
return (this.bitfield & BIT) === BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,7 +61,7 @@ export class BitField {
|
|||||||
* @returns {BitField} These bits or new BitField if the instance is frozen.
|
* @returns {BitField} These bits or new BitField if the instance is frozen.
|
||||||
*/
|
*/
|
||||||
add(...bits: BitFieldResolvable[]): BitField {
|
add(...bits: BitFieldResolvable[]): BitField {
|
||||||
let total = 0;
|
let total = 0n;
|
||||||
for (const bit of bits) {
|
for (const bit of bits) {
|
||||||
total |= BitField.resolve(bit);
|
total |= BitField.resolve(bit);
|
||||||
}
|
}
|
||||||
@ -84,7 +75,7 @@ export class BitField {
|
|||||||
* @param {...BitFieldResolvable} [bits] Bits to remove
|
* @param {...BitFieldResolvable} [bits] Bits to remove
|
||||||
*/
|
*/
|
||||||
remove(...bits: BitFieldResolvable[]) {
|
remove(...bits: BitFieldResolvable[]) {
|
||||||
let total = 0;
|
let total = 0n;
|
||||||
for (const bit of bits) {
|
for (const bit of bits) {
|
||||||
total |= BitField.resolve(bit);
|
total |= BitField.resolve(bit);
|
||||||
}
|
}
|
||||||
@ -136,10 +127,11 @@ export class BitField {
|
|||||||
* @param {BitFieldResolvable} [bit=0] - bit(s) to resolve
|
* @param {BitFieldResolvable} [bit=0] - bit(s) to resolve
|
||||||
* @returns {number}
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
static resolve(bit: BitFieldResolvable = 0): number {
|
static resolve(bit: BitFieldResolvable = 0n): bigint {
|
||||||
if (typeof bit === "number" && bit >= 0) return bit;
|
if ((typeof bit === "number" || typeof bit === "bigint") && bit >= 0n) return BigInt(bit);
|
||||||
if (bit instanceof BitField) return bit.bitfield;
|
if (bit instanceof BitField) return bit.bitfield;
|
||||||
if (Array.isArray(bit)) return bit.map((p) => this.resolve(p)).reduce((prev, p) => prev | p, 0);
|
if (Array.isArray(bit))
|
||||||
|
return bit.map((p) => this.resolve(p)).reduce((prev, p) => BigInt(prev) | BigInt(p), 0n);
|
||||||
if (typeof bit === "string" && typeof this.FLAGS[bit] !== "undefined") return this.FLAGS[bit];
|
if (typeof bit === "string" && typeof this.FLAGS[bit] !== "undefined") return this.FLAGS[bit];
|
||||||
throw new RangeError("BITFIELD_INVALID: " + bit);
|
throw new RangeError("BITFIELD_INVALID: " + bit);
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,10 @@ import { BitField } from "./BitField";
|
|||||||
|
|
||||||
export class MessageFlags extends BitField {
|
export class MessageFlags extends BitField {
|
||||||
static FLAGS = {
|
static FLAGS = {
|
||||||
CROSSPOSTED: 1 << 0,
|
CROSSPOSTED: 1n << 0n,
|
||||||
IS_CROSSPOST: 1 << 1,
|
IS_CROSSPOST: 1n << 1n,
|
||||||
SUPPRESS_EMBEDS: 1 << 2,
|
SUPPRESS_EMBEDS: 1n << 2n,
|
||||||
SOURCE_MESSAGE_DELETED: 1 << 3,
|
SOURCE_MESSAGE_DELETED: 1n << 3n,
|
||||||
URGENT: 1 << 4,
|
URGENT: 1n << 4n,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -7,37 +7,37 @@ export type PermissionResolvable = string | number | Permissions | PermissionRes
|
|||||||
|
|
||||||
export class Permissions extends BitField {
|
export class Permissions extends BitField {
|
||||||
static FLAGS = {
|
static FLAGS = {
|
||||||
CREATE_INSTANT_INVITE: 1 << 0,
|
CREATE_INSTANT_INVITE: 1n << 0n,
|
||||||
KICK_MEMBERS: 1 << 1,
|
KICK_MEMBERS: 1n << 1n,
|
||||||
BAN_MEMBERS: 1 << 2,
|
BAN_MEMBERS: 1n << 2n,
|
||||||
ADMINISTRATOR: 1 << 3,
|
ADMINISTRATOR: 1n << 3n,
|
||||||
MANAGE_CHANNELS: 1 << 4,
|
MANAGE_CHANNELS: 1n << 4n,
|
||||||
MANAGE_GUILD: 1 << 5,
|
MANAGE_GUILD: 1n << 5n,
|
||||||
ADD_REACTIONS: 1 << 6,
|
ADD_REACTIONS: 1n << 6n,
|
||||||
VIEW_AUDIT_LOG: 1 << 7,
|
VIEW_AUDIT_LOG: 1n << 7n,
|
||||||
PRIORITY_SPEAKER: 1 << 8,
|
PRIORITY_SPEAKER: 1n << 8n,
|
||||||
STREAM: 1 << 9,
|
STREAM: 1n << 9n,
|
||||||
VIEW_CHANNEL: 1 << 10,
|
VIEW_CHANNEL: 1n << 10n,
|
||||||
SEND_MESSAGES: 1 << 11,
|
SEND_MESSAGES: 1n << 11n,
|
||||||
SEND_TTS_MESSAGES: 1 << 12,
|
SEND_TTS_MESSAGES: 1n << 12n,
|
||||||
MANAGE_MESSAGES: 1 << 13,
|
MANAGE_MESSAGES: 1n << 13n,
|
||||||
EMBED_LINKS: 1 << 14,
|
EMBED_LINKS: 1n << 14n,
|
||||||
ATTACH_FILES: 1 << 15,
|
ATTACH_FILES: 1n << 15n,
|
||||||
READ_MESSAGE_HISTORY: 1 << 16,
|
READ_MESSAGE_HISTORY: 1n << 16n,
|
||||||
MENTION_EVERYONE: 1 << 17,
|
MENTION_EVERYONE: 1n << 17n,
|
||||||
USE_EXTERNAL_EMOJIS: 1 << 18,
|
USE_EXTERNAL_EMOJIS: 1n << 18n,
|
||||||
VIEW_GUILD_INSIGHTS: 1 << 19,
|
VIEW_GUILD_INSIGHTS: 1n << 19n,
|
||||||
CONNECT: 1 << 20,
|
CONNECT: 1n << 20n,
|
||||||
SPEAK: 1 << 21,
|
SPEAK: 1n << 21n,
|
||||||
MUTE_MEMBERS: 1 << 22,
|
MUTE_MEMBERS: 1n << 22n,
|
||||||
DEAFEN_MEMBERS: 1 << 23,
|
DEAFEN_MEMBERS: 1n << 23n,
|
||||||
MOVE_MEMBERS: 1 << 24,
|
MOVE_MEMBERS: 1n << 24n,
|
||||||
USE_VAD: 1 << 25,
|
USE_VAD: 1n << 25n,
|
||||||
CHANGE_NICKNAME: 1 << 26,
|
CHANGE_NICKNAME: 1n << 26n,
|
||||||
MANAGE_NICKNAMES: 1 << 27,
|
MANAGE_NICKNAMES: 1n << 27n,
|
||||||
MANAGE_ROLES: 1 << 28,
|
MANAGE_ROLES: 1n << 28n,
|
||||||
MANAGE_WEBHOOKS: 1 << 29,
|
MANAGE_WEBHOOKS: 1n << 29n,
|
||||||
MANAGE_EMOJIS: 1 << 30,
|
MANAGE_EMOJIS: 1n << 30n,
|
||||||
};
|
};
|
||||||
|
|
||||||
any(permission: PermissionResolvable, checkAdmin = true) {
|
any(permission: PermissionResolvable, checkAdmin = true) {
|
||||||
|
@ -5,18 +5,18 @@ import { BitField } from "./BitField";
|
|||||||
|
|
||||||
export class UserFlags extends BitField {
|
export class UserFlags extends BitField {
|
||||||
static FLAGS = {
|
static FLAGS = {
|
||||||
DISCORD_EMPLOYEE: 1 << 0,
|
DISCORD_EMPLOYEE: 1n << 0n,
|
||||||
PARTNERED_SERVER_OWNER: 1 << 1,
|
PARTNERED_SERVER_OWNER: 1n << 1n,
|
||||||
HYPESQUAD_EVENTS: 1 << 2,
|
HYPESQUAD_EVENTS: 1n << 2n,
|
||||||
BUGHUNTER_LEVEL_1: 1 << 3,
|
BUGHUNTER_LEVEL_1: 1n << 3n,
|
||||||
HOUSE_BRAVERY: 1 << 6,
|
HOUSE_BRAVERY: 1n << 6n,
|
||||||
HOUSE_BRILLIANCE: 1 << 7,
|
HOUSE_BRILLIANCE: 1n << 7n,
|
||||||
HOUSE_BALANCE: 1 << 8,
|
HOUSE_BALANCE: 1n << 8n,
|
||||||
EARLY_SUPPORTER: 1 << 9,
|
EARLY_SUPPORTER: 1n << 9n,
|
||||||
TEAM_USER: 1 << 10,
|
TEAM_USER: 1n << 10n,
|
||||||
SYSTEM: 1 << 12,
|
SYSTEM: 1n << 12n,
|
||||||
BUGHUNTER_LEVEL_2: 1 << 14,
|
BUGHUNTER_LEVEL_2: 1n << 14n,
|
||||||
VERIFIED_BOT: 1 << 16,
|
VERIFIED_BOT: 1n << 16n,
|
||||||
EARLY_VERIFIED_BOT_DEVELOPER: 1 << 17,
|
EARLY_VERIFIED_BOT_DEVELOPER: 1n << 17n,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user