util.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. let extPosition = fileName.lastIndexOf(".");
  15. if (extPosition < 0)
  16. return false;
  17. let ext = fileName.substring(extPosition + 1).toLowerCase();
  18. return VALID_EXTENSIONS.has(ext);
  19. }
  20. export async function isAuthorisedAsync(member: GuildMember) {
  21. if (!member)
  22. return false;
  23. let repo = getRepository(KnownUser);
  24. let user = await repo.findOne({
  25. where: { userID: member.id },
  26. select: ["canModerate"]
  27. });
  28. if (user && user.canModerate)
  29. return true;
  30. let role = await repo.findOne({
  31. select: ["userID"],
  32. where: {
  33. userID: In(member.roles.cache.keyArray()),
  34. canModerate: true
  35. }
  36. });
  37. if (role)
  38. return true;
  39. return false;
  40. }
  41. export function compareNumbers<T>(prop: (o: T) => number) {
  42. return (a: T, b: T) => {
  43. let ap = prop(a);
  44. let bp = prop(b);
  45. if (ap < bp)
  46. return 1;
  47. else if (ap > bp)
  48. return -1;
  49. return 0;
  50. };
  51. }
  52. export type Dict<TVal> = { [key: string]: TVal };
  53. export class NeighBuilder {
  54. private data: any[];
  55. constructor() { }
  56. append(...data: any[]) {
  57. this.data.concat(data);
  58. }
  59. appendLine(...data: any[]) {
  60. this.append(data);
  61. this.data.push("\n");
  62. }
  63. toString() {
  64. return this.data.reduce((prev, cur) => cur + `${prev}`, "");
  65. }
  66. }
  67. export function getNumberEnums(e: any): number[] {
  68. return Object.keys(e).filter(k => typeof e[k as any] === "number").map(k => e[k as any]);
  69. }