Preventing sub gift spam
When someone gifts a batch of subscriptions to a channel, this sends one onCommunitySub
event
followed by one onSubGift
event for each subscription that was gifted.
If you're writing an alert system or you're replying to each gift in chat, this can quickly lead to spam and rate limit violations.
Here's a helpful snippet that can help with this:
// adding undefined as possible key because of anonymous gifts
const giftCounts = new Map<string | undefined, number>();
chatClient.onCommunitySub((channel, user, subInfo) => {
const previousGiftCount = giftCounts.get(user) ?? 0;
giftCounts.set(user, previousGiftCount + subInfo.count);
chatClient.say(channel, `Thanks ${user} for gifting ${subInfo.count} subs to the community!`);
});
chatClient.onSubGift((channel, recipient, subInfo) => {
const user = subInfo.gifter;
const previousGiftCount = giftCounts.get(user) ?? 0;
if (previousGiftCount > 0) {
giftCounts.set(user, previousGiftCount - 1);
} else {
chatClient.say(channel, `Thanks ${user} for gifting a sub to ${recipient}!`);
}
});