⚡ 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 = "/" }) {
|
||||
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()) || {
|
||||
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
|
||||
// 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.
|
||||
*/
|
||||
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) {
|
||||
/**
|
||||
* Bitfield of the packed bits
|
||||
* @type {number}
|
||||
*/
|
||||
this.bitfield = BitField.resolve(bits);
|
||||
}
|
||||
|
||||
@ -30,7 +21,7 @@ export class BitField {
|
||||
* Checks whether the bitfield has a bit, or any of multiple bits.
|
||||
*/
|
||||
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 {
|
||||
if (Array.isArray(bit)) return bit.every((p) => this.has(p));
|
||||
bit = BitField.resolve(bit);
|
||||
return (this.bitfield & bit) === bit;
|
||||
const BIT = BitField.resolve(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.
|
||||
*/
|
||||
add(...bits: BitFieldResolvable[]): BitField {
|
||||
let total = 0;
|
||||
let total = 0n;
|
||||
for (const bit of bits) {
|
||||
total |= BitField.resolve(bit);
|
||||
}
|
||||
@ -84,7 +75,7 @@ export class BitField {
|
||||
* @param {...BitFieldResolvable} [bits] Bits to remove
|
||||
*/
|
||||
remove(...bits: BitFieldResolvable[]) {
|
||||
let total = 0;
|
||||
let total = 0n;
|
||||
for (const bit of bits) {
|
||||
total |= BitField.resolve(bit);
|
||||
}
|
||||
@ -136,10 +127,11 @@ export class BitField {
|
||||
* @param {BitFieldResolvable} [bit=0] - bit(s) to resolve
|
||||
* @returns {number}
|
||||
*/
|
||||
static resolve(bit: BitFieldResolvable = 0): number {
|
||||
if (typeof bit === "number" && bit >= 0) return bit;
|
||||
static resolve(bit: BitFieldResolvable = 0n): bigint {
|
||||
if ((typeof bit === "number" || typeof bit === "bigint") && bit >= 0n) return BigInt(bit);
|
||||
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];
|
||||
throw new RangeError("BITFIELD_INVALID: " + bit);
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ import { BitField } from "./BitField";
|
||||
|
||||
export class MessageFlags extends BitField {
|
||||
static FLAGS = {
|
||||
CROSSPOSTED: 1 << 0,
|
||||
IS_CROSSPOST: 1 << 1,
|
||||
SUPPRESS_EMBEDS: 1 << 2,
|
||||
SOURCE_MESSAGE_DELETED: 1 << 3,
|
||||
URGENT: 1 << 4,
|
||||
CROSSPOSTED: 1n << 0n,
|
||||
IS_CROSSPOST: 1n << 1n,
|
||||
SUPPRESS_EMBEDS: 1n << 2n,
|
||||
SOURCE_MESSAGE_DELETED: 1n << 3n,
|
||||
URGENT: 1n << 4n,
|
||||
};
|
||||
}
|
||||
|
@ -7,37 +7,37 @@ export type PermissionResolvable = string | number | Permissions | PermissionRes
|
||||
|
||||
export class Permissions extends BitField {
|
||||
static FLAGS = {
|
||||
CREATE_INSTANT_INVITE: 1 << 0,
|
||||
KICK_MEMBERS: 1 << 1,
|
||||
BAN_MEMBERS: 1 << 2,
|
||||
ADMINISTRATOR: 1 << 3,
|
||||
MANAGE_CHANNELS: 1 << 4,
|
||||
MANAGE_GUILD: 1 << 5,
|
||||
ADD_REACTIONS: 1 << 6,
|
||||
VIEW_AUDIT_LOG: 1 << 7,
|
||||
PRIORITY_SPEAKER: 1 << 8,
|
||||
STREAM: 1 << 9,
|
||||
VIEW_CHANNEL: 1 << 10,
|
||||
SEND_MESSAGES: 1 << 11,
|
||||
SEND_TTS_MESSAGES: 1 << 12,
|
||||
MANAGE_MESSAGES: 1 << 13,
|
||||
EMBED_LINKS: 1 << 14,
|
||||
ATTACH_FILES: 1 << 15,
|
||||
READ_MESSAGE_HISTORY: 1 << 16,
|
||||
MENTION_EVERYONE: 1 << 17,
|
||||
USE_EXTERNAL_EMOJIS: 1 << 18,
|
||||
VIEW_GUILD_INSIGHTS: 1 << 19,
|
||||
CONNECT: 1 << 20,
|
||||
SPEAK: 1 << 21,
|
||||
MUTE_MEMBERS: 1 << 22,
|
||||
DEAFEN_MEMBERS: 1 << 23,
|
||||
MOVE_MEMBERS: 1 << 24,
|
||||
USE_VAD: 1 << 25,
|
||||
CHANGE_NICKNAME: 1 << 26,
|
||||
MANAGE_NICKNAMES: 1 << 27,
|
||||
MANAGE_ROLES: 1 << 28,
|
||||
MANAGE_WEBHOOKS: 1 << 29,
|
||||
MANAGE_EMOJIS: 1 << 30,
|
||||
CREATE_INSTANT_INVITE: 1n << 0n,
|
||||
KICK_MEMBERS: 1n << 1n,
|
||||
BAN_MEMBERS: 1n << 2n,
|
||||
ADMINISTRATOR: 1n << 3n,
|
||||
MANAGE_CHANNELS: 1n << 4n,
|
||||
MANAGE_GUILD: 1n << 5n,
|
||||
ADD_REACTIONS: 1n << 6n,
|
||||
VIEW_AUDIT_LOG: 1n << 7n,
|
||||
PRIORITY_SPEAKER: 1n << 8n,
|
||||
STREAM: 1n << 9n,
|
||||
VIEW_CHANNEL: 1n << 10n,
|
||||
SEND_MESSAGES: 1n << 11n,
|
||||
SEND_TTS_MESSAGES: 1n << 12n,
|
||||
MANAGE_MESSAGES: 1n << 13n,
|
||||
EMBED_LINKS: 1n << 14n,
|
||||
ATTACH_FILES: 1n << 15n,
|
||||
READ_MESSAGE_HISTORY: 1n << 16n,
|
||||
MENTION_EVERYONE: 1n << 17n,
|
||||
USE_EXTERNAL_EMOJIS: 1n << 18n,
|
||||
VIEW_GUILD_INSIGHTS: 1n << 19n,
|
||||
CONNECT: 1n << 20n,
|
||||
SPEAK: 1n << 21n,
|
||||
MUTE_MEMBERS: 1n << 22n,
|
||||
DEAFEN_MEMBERS: 1n << 23n,
|
||||
MOVE_MEMBERS: 1n << 24n,
|
||||
USE_VAD: 1n << 25n,
|
||||
CHANGE_NICKNAME: 1n << 26n,
|
||||
MANAGE_NICKNAMES: 1n << 27n,
|
||||
MANAGE_ROLES: 1n << 28n,
|
||||
MANAGE_WEBHOOKS: 1n << 29n,
|
||||
MANAGE_EMOJIS: 1n << 30n,
|
||||
};
|
||||
|
||||
any(permission: PermissionResolvable, checkAdmin = true) {
|
||||
|
@ -5,18 +5,18 @@ import { BitField } from "./BitField";
|
||||
|
||||
export class UserFlags extends BitField {
|
||||
static FLAGS = {
|
||||
DISCORD_EMPLOYEE: 1 << 0,
|
||||
PARTNERED_SERVER_OWNER: 1 << 1,
|
||||
HYPESQUAD_EVENTS: 1 << 2,
|
||||
BUGHUNTER_LEVEL_1: 1 << 3,
|
||||
HOUSE_BRAVERY: 1 << 6,
|
||||
HOUSE_BRILLIANCE: 1 << 7,
|
||||
HOUSE_BALANCE: 1 << 8,
|
||||
EARLY_SUPPORTER: 1 << 9,
|
||||
TEAM_USER: 1 << 10,
|
||||
SYSTEM: 1 << 12,
|
||||
BUGHUNTER_LEVEL_2: 1 << 14,
|
||||
VERIFIED_BOT: 1 << 16,
|
||||
EARLY_VERIFIED_BOT_DEVELOPER: 1 << 17,
|
||||
DISCORD_EMPLOYEE: 1n << 0n,
|
||||
PARTNERED_SERVER_OWNER: 1n << 1n,
|
||||
HYPESQUAD_EVENTS: 1n << 2n,
|
||||
BUGHUNTER_LEVEL_1: 1n << 3n,
|
||||
HOUSE_BRAVERY: 1n << 6n,
|
||||
HOUSE_BRILLIANCE: 1n << 7n,
|
||||
HOUSE_BALANCE: 1n << 8n,
|
||||
EARLY_SUPPORTER: 1n << 9n,
|
||||
TEAM_USER: 1n << 10n,
|
||||
SYSTEM: 1n << 12n,
|
||||
BUGHUNTER_LEVEL_2: 1n << 14n,
|
||||
VERIFIED_BOT: 1n << 16n,
|
||||
EARLY_VERIFIED_BOT_DEVELOPER: 1n << 17n,
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user