diff --git a/server/api.go b/server/api.go index ed8de30..c610b5b 100644 --- a/server/api.go +++ b/server/api.go @@ -1536,10 +1536,6 @@ func (p *Plugin) getUserBadges(w http.ResponseWriter, r *http.Request, actingUse p.mm.Log.Debug("Error getting the badges for user", "error", err, "user", userID) } - for _, ub := range badges { - p.sanitizeBadgeEmoji(&ub.Badge) - } - b, _ := json.Marshal(badges) _, _ = w.Write(b) } @@ -1568,7 +1564,6 @@ func (p *Plugin) getBadgeDetails(w http.ResponseWriter, r *http.Request, actingU resp := BadgeDetailsResponse{BadgeDetails: badge} if badge != nil { - p.sanitizeBadgeEmoji(&badge.Badge) actingUser, userErr := p.mm.User.Get(actingUserID) if userErr == nil { bt, typeErr := p.store.GetType(badge.Type) @@ -1588,10 +1583,6 @@ func (p *Plugin) getAllBadges(w http.ResponseWriter, r *http.Request, actingUser p.mm.Log.Debug("Cannot get all badges", "error", err) } - for _, ab := range badges { - p.sanitizeBadgeEmoji(&ab.Badge) - } - b, _ := json.Marshal(badges) _, _ = w.Write(b) } diff --git a/server/utils.go b/server/utils.go index 6f5dd4f..56b284d 100644 --- a/server/utils.go +++ b/server/utils.go @@ -140,27 +140,6 @@ func dumpObject(o interface{}) { fmt.Println(string(b)) } -const fallbackEmoji = "question" - -// sanitizeBadgeEmoji checks if a badge's custom emoji still exists. -// If the emoji was deleted, it replaces it with a fallback and persists the change. -func (p *Plugin) sanitizeBadgeEmoji(badge *badgesmodel.Badge) { - if badge.ImageType != badgesmodel.ImageTypeEmoji { - return - } - if _, ok := model.SystemEmojis[badge.Image]; ok { - return - } - _, appErr := p.API.GetEmojiByName(badge.Image) - if appErr == nil { - return - } - badge.Image = fallbackEmoji - if err := p.store.UpdateBadge(badge); err != nil { - p.mm.Log.Warn("Failed to replace deleted emoji on badge", "badge_id", badge.ID, "error", err.Error()) - } -} - func (p *Plugin) notifyGrant(badgeID badgesmodel.BadgeID, granter string, granted *model.User, inChannel bool, channelID string, reason string) { b, errBadge := p.store.GetBadgeDetails(badgeID) granterUser, errUser := p.mm.User.Get(granter) diff --git a/webapp/src/components/utils/emoji.tsx b/webapp/src/components/utils/emoji.tsx index d9c135a..f36eb0c 100644 --- a/webapp/src/components/utils/emoji.tsx +++ b/webapp/src/components/utils/emoji.tsx @@ -14,6 +14,8 @@ interface ComponentProps { emojiStyle?: React.CSSProperties; } +const FALLBACK_EMOJI = 'question'; + const RenderEmoji = ({emojiName, emojiStyle, size}: ComponentProps) => { const emojiMap = useSelector((state: GlobalState) => getEmojiMap(state)); @@ -21,9 +23,12 @@ const RenderEmoji = ({emojiName, emojiStyle, size}: ComponentProps) => { return null; } - const emojiFromMap = emojiMap.get(emojiName); + let emojiFromMap = emojiMap.get(emojiName); if (!emojiFromMap) { - return null; + emojiFromMap = emojiMap.get(FALLBACK_EMOJI); + if (!emojiFromMap) { + return null; + } } const emojiImageUrl = getEmojiImageUrl(emojiFromMap);