util.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { GuildMember } from "discord.js";
  2. import { getRepository, In } from "typeorm";
  3. import { KnownUser } from "@shared/db/entity/KnownUser";
  4. const VALID_EXTENSIONS = new Set([
  5. "png",
  6. "jpg",
  7. "jpeg",
  8. "bmp",
  9. ]);
  10. export function isDevelopment() {
  11. return process.env.NODE_ENV == "dev";
  12. }
  13. export function isValidImage(fileName?: string) {
  14. if (!fileName)
  15. return false;
  16. let extPosition = fileName.lastIndexOf(".");
  17. if (extPosition < 0)
  18. return false;
  19. let ext = fileName.substring(extPosition + 1).toLowerCase();
  20. return VALID_EXTENSIONS.has(ext);
  21. }
  22. export async function isAuthorisedAsync(member: GuildMember | null | undefined) {
  23. if (!member)
  24. return false;
  25. let repo = getRepository(KnownUser);
  26. let user = await repo.findOne({
  27. where: { userID: member.id },
  28. select: ["canModerate"]
  29. });
  30. if (user && user.canModerate)
  31. return true;
  32. let role = await repo.findOne({
  33. select: ["userID"],
  34. where: {
  35. userID: In(member.roles.cache.keyArray()),
  36. canModerate: true
  37. }
  38. });
  39. if (role)
  40. return true;
  41. return false;
  42. }
  43. export function compareNumbers<T>(prop: (o: T) => number) {
  44. return (a: T, b: T) => {
  45. let ap = prop(a);
  46. let bp = prop(b);
  47. if (ap < bp)
  48. return 1;
  49. else if (ap > bp)
  50. return -1;
  51. return 0;
  52. };
  53. }
  54. export type Dict<TVal> = { [key: string]: TVal };
  55. export function getNumberEnums(e: any): number[] {
  56. return Object.keys(e).filter(k => typeof e[k as any] === "number").map(k => e[k as any]);
  57. }