Skip to content

Commit 91fca72

Browse files
authored
Merge pull request #45 from BP602/fix/7tv-cosmetics-subscription-id
fix(7tv): use correct user ID for cosmetic subscriptions
2 parents ac2bbae + 94e7852 commit 91fca72

4 files changed

Lines changed: 54 additions & 3 deletions

File tree

src/renderer/src/providers/ChatProvider.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,6 +1908,12 @@ const useChatStore = create((set, get) => ({
19081908
useCosmeticsStore?.getState()?.addUserStyle(transformedUsername, body);
19091909
break;
19101910
}
1911+
case "entitlement.delete": {
1912+
const username = body?.object?.user?.connections?.find((c) => c.platform === "KICK")?.username;
1913+
const transformedUsername = username?.replaceAll("-", "_").toLowerCase();
1914+
useCosmeticsStore?.getState()?.removeUserStyle(transformedUsername, body);
1915+
break;
1916+
}
19111917
default:
19121918
break;
19131919
}

src/renderer/src/providers/CosmeticsProvider.jsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,50 @@ const useCosmeticsStore = create((set, get) => ({
3535
});
3636
},
3737

38+
removeUserStyle: (username, body) => {
39+
if (!username) return;
40+
const transformedUsername = username.toLowerCase();
41+
const refId = body?.object?.ref_id;
42+
const kind = body?.object?.kind;
43+
44+
if (!refId || !kind) return;
45+
46+
set((state) => {
47+
const currentStyle = state.userStyles[transformedUsername];
48+
if (!currentStyle) return state;
49+
50+
// Remove by kind and ref_id
51+
let updatedStyle = { ...currentStyle };
52+
let hasChanges = false;
53+
54+
if (kind === "BADGE" && currentStyle.badgeId === refId) {
55+
updatedStyle.badgeId = null;
56+
hasChanges = true;
57+
} else if (kind === "PAINT" && currentStyle.paintId === refId) {
58+
updatedStyle.paintId = null;
59+
hasChanges = true;
60+
}
61+
62+
if (!hasChanges) return state;
63+
64+
// If both badge and paint are removed, remove the entire user style entry
65+
if (!updatedStyle.badgeId && !updatedStyle.paintId) {
66+
const { [transformedUsername]: removed, ...restUserStyles } = state.userStyles;
67+
return { userStyles: restUserStyles };
68+
}
69+
70+
return {
71+
userStyles: {
72+
...state.userStyles,
73+
[transformedUsername]: {
74+
...updatedStyle,
75+
updatedAt: new Date().toISOString(),
76+
},
77+
},
78+
};
79+
});
80+
},
81+
3882
getUserStyle: (username) => {
3983
if (!username) return null;
4084
const transformedUsername = username.toLowerCase();

utils/services/connectionManager.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ class ConnectionManager {
311311
span.addEvent('7tv_websocket_add_start');
312312
this.stvWebSocket.addChatroom(
313313
chatroom.id,
314-
chatroom.streamerData.id, // Use the Kick channel ID for cosmetic/entitlement subscriptions
314+
chatroom.streamerData.user_id, // Use the correct Kick user ID for cosmetic/entitlement subscriptions
315315
stvId,
316316
stvEmoteSetId
317317
);
@@ -591,7 +591,7 @@ class ConnectionManager {
591591

592592
this.stvWebSocket.addChatroom(
593593
chatroom.id,
594-
chatroom.streamerData?.id,
594+
chatroom.streamerData?.user_id,
595595
stvId,
596596
stvEmoteSetId,
597597
);

utils/services/seventv/sharedStvWebSocket.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,13 @@ class SharedStvWebSocket extends EventTarget {
615615
break;
616616

617617
case "entitlement.create":
618+
case "entitlement.delete":
618619
if (body.kind === 10) {
619620
this.dispatchEvent(
620621
new CustomEvent("message", {
621622
detail: {
622623
body,
623-
type: "entitlement.create",
624+
type: type, // Use the actual event type (create or delete)
624625
chatroomId,
625626
},
626627
}),

0 commit comments

Comments
 (0)