import { GuildMember } from "discord.js"; import { getRepository, In } from "typeorm"; import { KnownUser } from "@shared/db/entity/KnownUser"; const VALID_EXTENSIONS = new Set([ "png", "jpg", "jpeg", "bmp", ]); export function isDevelopment() { return process.env.NODE_ENV == "dev"; } export function isValidImage(fileName: string) { let extPosition = fileName.lastIndexOf("."); if (extPosition < 0) return false; let ext = fileName.substring(extPosition + 1).toLowerCase(); return VALID_EXTENSIONS.has(ext); } export async function isAuthorisedAsync(member: GuildMember) { if (!member) return false; let repo = getRepository(KnownUser); let user = await repo.findOne({ where: { userID: member.id }, select: ["canModerate"] }); if (user && user.canModerate) return true; let role = await repo.findOne({ select: ["userID"], where: { userID: In(member.roles.cache.keyArray()), canModerate: true } }); if (role) return true; return false; } export function compareNumbers(prop: (o: T) => number) { return (a: T, b: T) => { let ap = prop(a); let bp = prop(b); if (ap < bp) return 1; else if (ap > bp) return -1; return 0; }; } export type Dict = { [key: string]: TVal }; export class NeighBuilder { private data: any[]; constructor() { } append(...data: any[]) { this.data.concat(data); } appendLine(...data: any[]) { this.append(data); this.data.push("\n"); } toString() { return this.data.reduce((prev, cur) => cur + `${prev}`, ""); } } export function getNumberEnums(e: any): number[] { return Object.keys(e).filter(k => typeof e[k as any] === "number").map(k => e[k as any]); }