The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 60 lines 1.4 kB view raw
1export class Bitfield { 2 constructor(private flags: number) {} 3 4 add(flag: number) { 5 this.flags |= flag; 6 } 7 8 remove(flag: number) { 9 this.flags &= ~flag; 10 } 11 12 has(flag: number) { 13 return (this.flags & flag) === flag; 14 } 15 16 get() { 17 return this.flags; 18 } 19 20 toArray() { 21 const flags: number[] = []; 22 let field = this.flags; 23 let bit = 1; 24 25 while (field > 0) { 26 if (field & bit) { 27 flags.push(bit); 28 field -= bit; 29 } 30 bit <<= 1; 31 } 32 33 return flags; 34 } 35} 36 37export function bitfieldToArray(bitfield: Record<string | number, string | number>) { 38 return Object.entries(bitfield) 39 .filter(([_, value]) => typeof value === "number") 40 .map(([name, value]) => ({ 41 name: name.replace(/[a-z][A-Z]/g, (s) => s[0] + " " + s[1]), 42 value 43 })); 44} 45 46export function arrayToBitfield(array: (number | string)[], obj: Record<string | number, string | number>, flags: number) { 47 const bits = array 48 .map(Number) 49 .reduce((a, b) => a | b, 0); 50 51 const mask = Object.values(obj) 52 .filter((v): v is number => typeof v === "number") 53 .reduce((a, b) => a | b, 0); 54 55 return (flags & ~mask) | bits; 56} 57 58export function transformer(value: boolean, flags: number, flag: number) { 59 return value ? flags | flag : flags & ~flag; 60}