From fc0bc936cebdaa3caed1556c1258d3fc38bceb9b Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Wed, 8 Oct 2025 21:28:48 +0800 Subject: [PATCH] :sparkles: New version of sticker rendering support --- DysonNetwork.Sphere/Sticker/StickerService.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/DysonNetwork.Sphere/Sticker/StickerService.cs b/DysonNetwork.Sphere/Sticker/StickerService.cs index 6256822..d5ac1c6 100644 --- a/DysonNetwork.Sphere/Sticker/StickerService.cs +++ b/DysonNetwork.Sphere/Sticker/StickerService.cs @@ -26,7 +26,7 @@ public class StickerService( { FileId = sticker.Image.Id, Usage = StickerFileUsageIdentifier, - ResourceId = sticker.ResourceIdentifier + ResourceId = sticker.ResourceIdentifier }); return sticker; @@ -109,9 +109,25 @@ public class StickerService( // If not in cache, fetch from the database IQueryable query = db.Stickers .Include(e => e.Pack); - query = Guid.TryParse(identifier, out var guid) - ? query.Where(e => e.Id == guid) - : query.Where(e => EF.Functions.ILike(e.Pack.Prefix + e.Slug, identifier)); + + var isV2 = identifier.Contains("+"); + + var identifierParts = identifier.Split('+'); + if (identifierParts.Length < 2) isV2 = false; + + if (isV2) + { + var packPart = identifierParts[0]; + var stickerPart = identifierParts[1]; + query = query.Where(e => EF.Functions.ILike(e.Pack.Prefix, packPart) && EF.Functions.ILike(e.Slug, stickerPart)); + } + else + { + query = Guid.TryParse(identifier, out var guid) + ? query.Where(e => e.Id == guid) + : query.Where(e => EF.Functions.ILike(e.Pack.Prefix + e.Slug, identifier)); + } + var sticker = await query.FirstOrDefaultAsync(); @@ -128,4 +144,4 @@ public class StickerService( await cache.RemoveAsync($"sticker:lookup:{sticker.Id}"); await cache.RemoveAsync($"sticker:lookup:{sticker.Pack.Prefix}{sticker.Slug}"); } -} \ No newline at end of file +}