mirror of
https://gitlab.com/qwerinope/qweribot.git
synced 2026-02-04 12:36:59 +01:00
add basic redeem handling, nerf silver bullets to 30 minutes
This commit is contained in:
77
src/pointRedeems/index.ts
Normal file
77
src/pointRedeems/index.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { EventSubChannelRedemptionAddEvent } from "@twurple/eventsub-base";
|
||||
import User from "user";
|
||||
|
||||
export type pointRedeemOptions = {
|
||||
name: string;
|
||||
title: string;
|
||||
prompt?: string;
|
||||
cost: number;
|
||||
color?: string;
|
||||
execution: (message: EventSubChannelRedemptionAddEvent, sender: User) => Promise<void>;
|
||||
};
|
||||
|
||||
/** The Command class represents a command */
|
||||
export default class PointRedeem {
|
||||
public readonly name: string;
|
||||
public readonly title: string;
|
||||
public readonly prompt?: string;
|
||||
public readonly cost: number;
|
||||
public readonly color?: string;
|
||||
public readonly execute: (message: EventSubChannelRedemptionAddEvent, sender: User) => Promise<void>;
|
||||
constructor(options: pointRedeemOptions) {
|
||||
this.name = options.name
|
||||
this.title = options.title;
|
||||
this.prompt = options.prompt;
|
||||
this.cost = options.cost;
|
||||
this.color = options.color;
|
||||
this.execute = options.execution;
|
||||
};
|
||||
};
|
||||
|
||||
import { readdir } from 'node:fs/promises';
|
||||
|
||||
const pointRedeems = new Map<number, PointRedeem>;
|
||||
|
||||
/** A map of all (including inactive) redeems mapped to names */
|
||||
const namedRedeems = new Map<string, PointRedeem>;
|
||||
|
||||
const files = await readdir(import.meta.dir);
|
||||
for (const file of files) {
|
||||
if (!file.endsWith('.ts')) continue;
|
||||
if (file === import.meta.file) continue;
|
||||
const redeem: PointRedeem = await import(import.meta.dir + '/' + file.slice(0, -3)).then(a => a.default);
|
||||
pointRedeems.set(redeem.cost, redeem);
|
||||
namedRedeems.set(redeem.name, redeem);
|
||||
};
|
||||
|
||||
export { namedRedeems };
|
||||
|
||||
const activeRedeems = new Map<string, PointRedeem>;
|
||||
|
||||
import { streamerApi, streamerId } from "main";
|
||||
import logger from "lib/logger";
|
||||
|
||||
const currentRedeems = new Map<string, string>;
|
||||
await streamerApi.channelPoints.getCustomRewards(streamerId).then(a => a.map(b => currentRedeems.set(b.title, b.id)));
|
||||
for (const [_, redeem] of Array.from(pointRedeems)) {
|
||||
const selection = currentRedeems.get(redeem.title);
|
||||
if (selection) {
|
||||
currentRedeems.delete(redeem.title);
|
||||
activeRedeems.set(selection, redeem);
|
||||
} else {
|
||||
const creation = await streamerApi.channelPoints.createCustomReward(streamerId, {
|
||||
title: redeem.title,
|
||||
prompt: redeem.prompt,
|
||||
cost: redeem.cost,
|
||||
backgroundColor: redeem.color
|
||||
});
|
||||
logger.ok(`Created custom point redeem ${redeem.title}`);
|
||||
activeRedeems.set(creation.id, redeem);
|
||||
};
|
||||
};
|
||||
|
||||
Array.from(currentRedeems).map(async ([title, redeem]) => { await streamerApi.channelPoints.deleteCustomReward(streamerId, redeem); logger.ok(`Deleted custom point redeem ${title}`); });
|
||||
|
||||
logger.ok("Successfully synced all custom point redeems");
|
||||
|
||||
export { activeRedeems };
|
||||
16
src/pointRedeems/qbucksredeem.ts
Normal file
16
src/pointRedeems/qbucksredeem.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { sendMessage } from "commands";
|
||||
import { getUserRecord } from "db/dbUser";
|
||||
import { changeBalance } from "lib/changeBalance";
|
||||
import PointRedeem from "pointRedeems";
|
||||
|
||||
export default new PointRedeem({
|
||||
name: "qbucksredeem",
|
||||
title: "FREE MONEY",
|
||||
prompt: "GET 100 QBUCKS!",
|
||||
color: '#00FF00',
|
||||
cost: 1000,
|
||||
execution: async (_msg, user) => {
|
||||
await changeBalance(user, await getUserRecord(user), 100);
|
||||
await sendMessage(`${user.displayName} got 100 qbucks for their point redeem`);
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user