jank-client-fork/src/webpage/rights.ts

116 lines
3.2 KiB
TypeScript

import {I18n} from "./i18n.js";
class Rights {
allow!: bigint;
constructor(allow: string | number) {
this.update(allow);
}
update(allow: string | number) {
try {
this.allow = BigInt(allow);
} catch {
this.allow = 875069521787904n;
console.error(
`Something really stupid happened with a permission with allow being ${allow}, execution will still happen, but something really stupid happened, please report if you know what caused this.`,
);
}
}
getPermissionbit(b: number, big: bigint): boolean {
return Boolean((big >> BigInt(b)) & 1n);
}
setPermissionbit(b: number, state: boolean, big: bigint): bigint {
const bit = 1n << BigInt(b);
return (big & ~bit) | (BigInt(state) << BigInt(b)); //thanks to geotale for this code :3
}
static *info(): Generator<{name: string; readableName: string; description: string}> {
throw new Error("Isn't implemented");
for (const thing of this.permisions) {
yield {
name: thing,
readableName: I18n.getTranslation("permissions.readableNames." + thing),
description: I18n.getTranslation("permissions.descriptions." + thing),
};
}
}
static readonly permisions = [
"OPERATOR",
"MANAGE_APPLICATIONS",
"MANAGE_GUILDS",
"MANAGE_MESSAGES",
"MANAGE_RATE_LIMITS",
"MANAGE_ROUTING",
"MANAGE_TICKETS",
"MANAGE_USERS",
"ADD_MEMBERS",
"BYPASS_RATE_LIMITS",
"CREATE_APPLICATIONS",
"CREATE_CHANNELS",
"CREATE_DMS",
"CREATE_DM_GROUPS",
"CREATE_GUILDS",
"CREATE_INVITES",
"CREATE_ROLES",
"CREATE_TEMPLATES",
"CREATE_WEBHOOKS",
"JOIN_GUILDS",
"PIN_MESSAGES",
"SELF_ADD_REACTIONS",
"SELF_DELETE_MESSAGES",
"SELF_EDIT_MESSAGES",
"SELF_EDIT_NAME",
"SEND_MESSAGES",
"USE_ACTIVITIES",
"USE_VIDEO",
"USE_VOICE",
"INVITE_USERS",
"SELF_DELETE_DISABLE",
"DEBTABLE",
"CREDITABLE",
"KICK_BAN_MEMBERS",
"SELF_LEAVE_GROUPS",
"PRESENCE",
"SELF_ADD_DISCOVERABLE",
"MANAGE_GUILD_DIRECTORY",
"POGGERS",
"USE_ACHIEVEMENTS",
"INITIATE_INTERACTIONS",
"RESPOND_TO_INTERACTIONS",
"SEND_BACKDATED_EVENTS",
"USE_MASS_INVITES",
"ACCEPT_INVITES",
"SELF_EDIT_FLAGS",
"EDIT_FLAGS",
"MANAGE_GROUPS",
"VIEW_SERVER_STATS",
"RESEND_VERIFICATION_EMAIL",
"CREATE_REGISTRATION_TOKENS",
];
getPermission(name: string): boolean {
if (undefined === Rights.permisions.indexOf(name)) {
console.error(name + " is not found in map", Rights.permisions);
}
return this.getPermissionbit(Rights.permisions.indexOf(name), this.allow);
}
hasPermission(name: string, adminOverride = true): boolean {
if (this.getPermissionbit(Rights.permisions.indexOf(name), this.allow)) return true;
if (name !== "OPERATOR" && adminOverride) return this.hasPermission("OPERATOR");
return false;
}
setPermission(name: string, setto: number): void {
const bit = Rights.permisions.indexOf(name);
if (bit === undefined) {
return console.error(
"Tried to set permission to " + setto + " for " + name + " but it doesn't exist",
);
}
if (setto === 0) {
this.allow = this.setPermissionbit(bit, false, this.allow);
} else if (setto === 1) {
this.allow = this.setPermissionbit(bit, true, this.allow);
} else {
console.error("invalid number entered:" + setto);
}
}
}
export {Rights};