From 72f5998a7ec429d89c96cff9e9cb04d5f966e581 Mon Sep 17 00:00:00 2001 From: gc <30398469+gc@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:14:08 +1000 Subject: [PATCH] Add badges to redis --- dist/TSRedis.d.ts | 10 ++++++++-- dist/TSRedis.js | 16 ++++++++++++++-- src/TSRedis.ts | 18 ++++++++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/dist/TSRedis.d.ts b/dist/TSRedis.d.ts index 8b9a8a1..58ec5d9 100644 --- a/dist/TSRedis.d.ts +++ b/dist/TSRedis.d.ts @@ -7,12 +7,12 @@ declare const messageSchema: z.ZodUnion<[z.ZodObject<{ channel: z.ZodEnum<["main"]>; }, "strip", z.ZodTypeAny, { type: "text"; - text: string; channel: "main"; + text: string; }, { type: "text"; - text: string; channel: "main"; + text: string; }>, z.ZodObject<{ type: z.ZodLiteral<"ping">; channel: z.ZodEnum<["main"]>; @@ -28,12 +28,18 @@ type Channel = z.infer<typeof channels>; declare const userSchema: z.ZodObject<{ username: z.ZodNullable<z.ZodString>; perk_tier: z.ZodNullable<z.ZodNumber>; + osb_badges: z.ZodNullable<z.ZodString>; + bso_badges: z.ZodNullable<z.ZodString>; }, "strip", z.ZodTypeAny, { username: string | null; perk_tier: number | null; + osb_badges: string | null; + bso_badges: string | null; }, { username: string | null; perk_tier: number | null; + osb_badges: string | null; + bso_badges: string | null; }>; type RedisUser = z.infer<typeof userSchema>; export declare class TSRedis { diff --git a/dist/TSRedis.js b/dist/TSRedis.js index 1d3e1e6..da41ec4 100644 --- a/dist/TSRedis.js +++ b/dist/TSRedis.js @@ -4,9 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TSRedis = void 0; +const discord_js_1 = require("discord.js"); const ioredis_1 = __importDefault(require("ioredis")); const ioredis_mock_1 = __importDefault(require("ioredis-mock")); const zod_1 = require("zod"); +const misc_1 = require("./util/misc"); +function cleanUsername(username) { + return (0, discord_js_1.escapeMarkdown)((0, misc_1.stripEmojis)(username)).substring(0, 32); +} const channels = zod_1.z.enum(['main']); const patronUpdateMessageSchema = zod_1.z.object({ type: zod_1.z.literal('text'), @@ -20,7 +25,9 @@ const pingMessageSchema = zod_1.z.object({ const messageSchema = zod_1.z.union([patronUpdateMessageSchema, pingMessageSchema]); const userSchema = zod_1.z.object({ username: zod_1.z.string().nullable(), - perk_tier: zod_1.z.number().nullable() + perk_tier: zod_1.z.number().nullable(), + osb_badges: zod_1.z.string().nullable(), + bso_badges: zod_1.z.string().nullable() }); class TSRedis { constructor(options = { mocked: false }) { @@ -68,13 +75,18 @@ class TSRedis { return `user.${userID}`; } async setUser(userID, changes) { + if (changes.username) { + changes.username = cleanUsername(changes.username); + } return this.redis.hset(this.getUserHash(userID), changes); } async getUser(userID) { const user = await this.redis.hgetall(this.getUserHash(userID)); return { username: user.username ?? null, - perk_tier: user.perk_tier ? Number.parseInt(user.perk_tier) : null + perk_tier: user.perk_tier ? Number.parseInt(user.perk_tier) : null, + osb_badges: user.osb_badges ?? null, + bso_badges: user.bso_badges ?? null }; } } diff --git a/src/TSRedis.ts b/src/TSRedis.ts index 130ac79..c36d6e6 100644 --- a/src/TSRedis.ts +++ b/src/TSRedis.ts @@ -1,7 +1,14 @@ +import { escapeMarkdown } from 'discord.js'; import Redis, { type RedisOptions } from 'ioredis'; import MockRedis from 'ioredis-mock'; import { z } from 'zod'; +import { stripEmojis } from './util/misc'; + +function cleanUsername(username: string) { + return escapeMarkdown(stripEmojis(username)).substring(0, 32); +} + const channels = z.enum(['main']); const patronUpdateMessageSchema = z.object({ @@ -22,7 +29,9 @@ type Channel = z.infer<typeof channels>; const userSchema = z.object({ username: z.string().nullable(), - perk_tier: z.number().nullable() + perk_tier: z.number().nullable(), + osb_badges: z.string().nullable(), + bso_badges: z.string().nullable() }); type RedisUser = z.infer<typeof userSchema>; @@ -74,6 +83,9 @@ export class TSRedis { } async setUser(userID: string, changes: Partial<RedisUser>) { + if (changes.username) { + changes.username = cleanUsername(changes.username); + } return this.redis.hset(this.getUserHash(userID), changes); } @@ -82,7 +94,9 @@ export class TSRedis { return { username: user.username ?? null, - perk_tier: user.perk_tier ? Number.parseInt(user.perk_tier) : null + perk_tier: user.perk_tier ? Number.parseInt(user.perk_tier) : null, + osb_badges: user.osb_badges ?? null, + bso_badges: user.bso_badges ?? null }; } }