diff --git a/components/pages/inspector/UserActions.tsx b/components/pages/inspector/UserActions.tsx index 9c923bb..cee89ca 100644 --- a/components/pages/inspector/UserActions.tsx +++ b/components/pages/inspector/UserActions.tsx @@ -75,10 +75,13 @@ export function UserActions({ user, bot }: { user: User; bot?: Bot }) { const badges = (decodeTime(user._id) < 1629638578431 ? 256 : 0) | ((userDraft.badges ?? 0) ^ badge); - await updateUserBadges(user._id, badges); + const result = await updateUserBadges(user._id, badges); setUserDraft((user) => ({ ...user!, badges })); toast({ title: "Updated user badges", + description: result.updatePublished + ? undefined + : "Failed to publish event, users will need to reload to see the change", }); } catch (err) { toast({ diff --git a/lib/actions.ts b/lib/actions.ts index b754364..664207a 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -225,7 +225,7 @@ export async function suspendUser(userId: string) { } } -export async function updateUserBadges(userId: string, badges: number) { +export async function updateUserBadges(userId: string, badges: number): Promise<{ updatePublished: boolean }> { await checkPermission("users/update/badges", userId, { badges }); await mongo().db("revolt").collection("users").updateOne( { @@ -238,17 +238,23 @@ export async function updateUserBadges(userId: string, badges: number) { } ); - const memberships = await fetchMembershipsByUser(userId); - for (const topic of [userId, ...memberships.map((x) => x._id.server)]) { - await publishMessage(topic, { - type: "UserUpdate", - id: userId, - data: { - badges, - }, - clear: [], - }); + try { + const memberships = await fetchMembershipsByUser(userId); + for (const topic of [userId, ...memberships.map((x) => x._id.server)]) { + await publishMessage(topic, { + type: "UserUpdate", + id: userId, + data: { + badges, + }, + clear: [], + }); + } + } catch(e) { + return { updatePublished: false }; } + + return { updatePublished: true }; } export async function wipeUser(userId: string, flags = 4) {