mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-18 15:01:38 +01:00
add better raid handling, add real subscription handling, sub data is now also stored in redis
This commit is contained in:
@@ -1,12 +1,22 @@
|
||||
import { redis } from "bun";
|
||||
import { sendMessage } from "commands";
|
||||
import { getUserRecord } from "db/dbUser";
|
||||
import { changeItemCount } from "items";
|
||||
import logger from "lib/logger";
|
||||
import { eventSub, streamerApi, streamerId } from "main";
|
||||
import User from "user";
|
||||
|
||||
eventSub.onChannelRaidTo(streamerId, async msg => {
|
||||
if (await redis.exists(`user:${msg.raidingBroadcasterId}:recentraid`)) { await sendMessage(`Another raid from ${msg.raidedBroadcasterDisplayName}??? SMH`); return; };
|
||||
await redis.set(`user:${msg.raidingBroadcasterId}:recentraid`, '1');
|
||||
await redis.expire(`user:${msg.raidingBroadcasterId}:recentraid`, 60 * 30); // raid cooldown is 30 minutes
|
||||
await sendMessage(`Ty for raiding ${msg.raidingBroadcasterDisplayName}. You get 3 pieces of TNT. Enjoy!`);
|
||||
await streamerApi.chat.shoutoutUser(streamerId, msg.raidingBroadcasterId);
|
||||
try {
|
||||
await streamerApi.chat.shoutoutUser(streamerId, msg.raidingBroadcasterId);
|
||||
} catch (e) {
|
||||
logger.warn(`Failed to give automatic shoutout to ${msg.raidedBroadcasterDisplayName}`);
|
||||
logger.warn(e as string);
|
||||
};
|
||||
const raider = await User.initUsername(msg.raidingBroadcasterName);
|
||||
const result = await changeItemCount(raider!, await getUserRecord(raider!), 'tnt', 3);
|
||||
if (!result) await sendMessage("oopsies, no tnt for you!");
|
||||
|
||||
@@ -1,32 +1,122 @@
|
||||
import { redis } from "bun";
|
||||
import { sendMessage } from "commands";
|
||||
import { getUserRecord } from "db/dbUser";
|
||||
import { getUserRecord, updateUserRecord } from "db/dbUser";
|
||||
import { changeBalance } from "lib/changeBalance";
|
||||
import { eventSub, streamerId } from "main";
|
||||
import User from "user";
|
||||
|
||||
eventSub.onChannelSubscription(streamerId, async msg => {
|
||||
await redis.set(`user:${msg.userId}:subbed`, msg.tier.slice(0, 1));
|
||||
if (msg.isGift) return;
|
||||
const user = await User.initUsername(msg.userName);
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SUB ${msg.userDisplayName}! YOU GET 500 QBUCKS`),
|
||||
changeBalance(user!, await getUserRecord(user!), 500)
|
||||
]);
|
||||
const userRecord = await getUserRecord(user!);
|
||||
switch (msg.tier) {
|
||||
case "1000":
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SUB ${msg.userDisplayName}! YOU GET 500 QBUCKS`),
|
||||
changeBalance(user!, userRecord, 500)
|
||||
]);
|
||||
break;
|
||||
case "2000":
|
||||
userRecord.balance += 1500;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += 1
|
||||
else userRecord.inventory.silverbullet = 1
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE TIER 2 SUB ${msg.userDisplayName}! YOU GET 1500 QBUCKS AND A SILVER BULLET`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
case "3000":
|
||||
userRecord.balance += 3000;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += 2
|
||||
else userRecord.inventory.silverbullet = 2;
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE TIER 3 SUB ${msg.userDisplayName}! YOU GET 3000 QBUCKS AND 2 SILVER BULLETS`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
};
|
||||
});
|
||||
|
||||
eventSub.onChannelSubscriptionGift(streamerId, async msg => {
|
||||
if (msg.isAnonymous) { await sendMessage(`YO THANKS ANON FOR THE SCAM SUBS`); return; };
|
||||
if (msg.isAnonymous) {
|
||||
switch (msg.tier) {
|
||||
case "1000":
|
||||
await sendMessage(`YO THANKS ANON FOR THE SCAM SUB${msg.amount === 1 ? '' : 'S'}`);
|
||||
break;
|
||||
case "2000":
|
||||
await sendMessage(`YO THANKS ANON FOR THE ${msg.amount} TIER 2 SCAM SUB${msg.amount === 1 ? '' : 'S'}`);
|
||||
break;
|
||||
case "3000":
|
||||
await sendMessage(`YO THANKS ANON FOR THE ${msg.amount} TIER 3 SCAM SUB${msg.amount === 1 ? '' : 'S'}`);
|
||||
break;
|
||||
};
|
||||
return;
|
||||
};
|
||||
|
||||
const user = await User.initUsername(msg.gifterName);
|
||||
const amount = msg.amount;
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SCAM GIFTS ${msg.gifterDisplayName}! YOU GET ${amount * 500} QBUCKS`),
|
||||
changeBalance(user!, await getUserRecord(user!), amount * 500)
|
||||
]);
|
||||
const userRecord = await getUserRecord(user!);
|
||||
switch (msg.tier) {
|
||||
case "1000":
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SCAM GIFTS ${msg.gifterDisplayName}! YOU GET ${amount * 500} QBUCKS`),
|
||||
changeBalance(user!, userRecord, amount * 500)
|
||||
]);
|
||||
break;
|
||||
case "2000":
|
||||
userRecord.balance += 1500 * amount;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += amount
|
||||
else userRecord.inventory.silverbullet = amount;
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SCAM TIER 2 GIFTS ${msg.gifterDisplayName}! YOU GET ${amount * 1500} QBUCKS AND ${amount} SILVER BULLET${amount === 1 ? '' : 'S'}`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
case "3000":
|
||||
userRecord.balance += 3000 * amount;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += amount * 2
|
||||
else userRecord.inventory.silverbullet = amount * 2;
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE SCAM TIER 3 GIFTS ${msg.gifterDisplayName}! YOU GET ${amount * 3000} QBUCKS AND ${amount * 2} SILVER BULLETS`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
eventSub.onChannelSubscriptionEnd(streamerId, async msg => {
|
||||
|
||||
await redis.del(`user:${msg.userId}:subbed`);
|
||||
});
|
||||
|
||||
eventSub.onChannelSubscriptionMessage(streamerId, async msg => {
|
||||
|
||||
await redis.set(`user:${msg.userId}:subbed`, msg.tier.slice(0, 1));
|
||||
const user = await User.initUsername(msg.userName);
|
||||
const userRecord = await getUserRecord(user!);
|
||||
switch (msg.tier) {
|
||||
case "1000":
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE RESUB ${msg.userDisplayName}! YOU GET 500 QBUCKS`),
|
||||
changeBalance(user!, userRecord, 500)
|
||||
]);
|
||||
break;
|
||||
case "2000":
|
||||
userRecord.balance += 1500;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += 1
|
||||
else userRecord.inventory.silverbullet = 1
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE TIER 2 RESUB ${msg.userDisplayName}! YOU GET 1500 QBUCKS AND A SILVER BULLET`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
case "3000":
|
||||
userRecord.balance += 3000;
|
||||
if (userRecord.inventory.silverbullet) userRecord.inventory.silverbullet += 2
|
||||
else userRecord.inventory.silverbullet = 2;
|
||||
await Promise.all([
|
||||
sendMessage(`YO THANKS FOR THE TIER 3 RESUB ${msg.userDisplayName}! YOU GET 3000 QBUCKS AND 2 SILVER BULLETS`),
|
||||
updateUserRecord(user!, userRecord)
|
||||
]);
|
||||
break;
|
||||
};
|
||||
});
|
||||
|
||||
13
src/index.ts
13
src/index.ts
@@ -67,6 +67,19 @@ for (const remod of bannedmods) {
|
||||
logger.info(`Set the remod timer for ${target?.displayName} to ${duration} seconds.`);
|
||||
};
|
||||
|
||||
const subs = await streamerApi.subscriptions.getSubscriptions(streamerId).then(a => a.data);
|
||||
const redisSubs = await redis.keys('user:*:subbed').then(a => a.map(b => b.slice(5, -7)));
|
||||
for (const sub of subs) {
|
||||
if (redisSubs.includes(sub.userId)) {
|
||||
const index = redisSubs.indexOf(sub.userId);
|
||||
redisSubs.splice(index, 1);
|
||||
continue;
|
||||
};
|
||||
await redis.set(`user:${sub.userId}:subbed`, sub.tier.slice(0, 1));
|
||||
};
|
||||
|
||||
redisSubs.map(async a => await redis.del(`user:${a}:subbed`));
|
||||
|
||||
const streamdata = await streamerApi.streams.getStreamByUserId(streamerId);
|
||||
if (streamdata) await redis.set('streamIsLive', '1');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user