mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-19 01:01:39 +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 { sendMessage } from "commands";
|
||||||
import { getUserRecord } from "db/dbUser";
|
import { getUserRecord } from "db/dbUser";
|
||||||
import { changeItemCount } from "items";
|
import { changeItemCount } from "items";
|
||||||
|
import logger from "lib/logger";
|
||||||
import { eventSub, streamerApi, streamerId } from "main";
|
import { eventSub, streamerApi, streamerId } from "main";
|
||||||
import User from "user";
|
import User from "user";
|
||||||
|
|
||||||
eventSub.onChannelRaidTo(streamerId, async msg => {
|
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 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 raider = await User.initUsername(msg.raidingBroadcasterName);
|
||||||
const result = await changeItemCount(raider!, await getUserRecord(raider!), 'tnt', 3);
|
const result = await changeItemCount(raider!, await getUserRecord(raider!), 'tnt', 3);
|
||||||
if (!result) await sendMessage("oopsies, no tnt for you!");
|
if (!result) await sendMessage("oopsies, no tnt for you!");
|
||||||
|
|||||||
@@ -1,32 +1,122 @@
|
|||||||
|
import { redis } from "bun";
|
||||||
import { sendMessage } from "commands";
|
import { sendMessage } from "commands";
|
||||||
import { getUserRecord } from "db/dbUser";
|
import { getUserRecord, updateUserRecord } from "db/dbUser";
|
||||||
import { changeBalance } from "lib/changeBalance";
|
import { changeBalance } from "lib/changeBalance";
|
||||||
import { eventSub, streamerId } from "main";
|
import { eventSub, streamerId } from "main";
|
||||||
import User from "user";
|
import User from "user";
|
||||||
|
|
||||||
eventSub.onChannelSubscription(streamerId, async msg => {
|
eventSub.onChannelSubscription(streamerId, async msg => {
|
||||||
|
await redis.set(`user:${msg.userId}:subbed`, msg.tier.slice(0, 1));
|
||||||
if (msg.isGift) return;
|
if (msg.isGift) return;
|
||||||
const user = await User.initUsername(msg.userName);
|
const user = await User.initUsername(msg.userName);
|
||||||
await Promise.all([
|
const userRecord = await getUserRecord(user!);
|
||||||
sendMessage(`YO THANKS FOR THE SUB ${msg.userDisplayName}! YOU GET 500 QBUCKS`),
|
switch (msg.tier) {
|
||||||
changeBalance(user!, await getUserRecord(user!), 500)
|
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 => {
|
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 user = await User.initUsername(msg.gifterName);
|
||||||
const amount = msg.amount;
|
const amount = msg.amount;
|
||||||
await Promise.all([
|
const userRecord = await getUserRecord(user!);
|
||||||
sendMessage(`YO THANKS FOR THE SCAM GIFTS ${msg.gifterDisplayName}! YOU GET ${amount * 500} QBUCKS`),
|
switch (msg.tier) {
|
||||||
changeBalance(user!, await getUserRecord(user!), amount * 500)
|
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 => {
|
eventSub.onChannelSubscriptionEnd(streamerId, async msg => {
|
||||||
|
await redis.del(`user:${msg.userId}:subbed`);
|
||||||
});
|
});
|
||||||
|
|
||||||
eventSub.onChannelSubscriptionMessage(streamerId, async msg => {
|
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.`);
|
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);
|
const streamdata = await streamerApi.streams.getStreamByUserId(streamerId);
|
||||||
if (streamdata) await redis.set('streamIsLive', '1');
|
if (streamdata) await redis.set('streamIsLive', '1');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user