mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-18 23:01:38 +01:00
added basic aniv timeouts
This commit is contained in:
@@ -47,6 +47,13 @@ export type cheerRecord = {
|
||||
amount: number;
|
||||
};
|
||||
|
||||
export type anivTimeoutRecord = {
|
||||
id?: string;
|
||||
message: string;
|
||||
user: string;
|
||||
duration: number;
|
||||
};
|
||||
|
||||
interface TypedPocketBase extends PocketBase {
|
||||
collection(idOrName: 'auth'): RecordService<authRecord>;
|
||||
collection(idOrName: 'users'): RecordService<userRecord>;
|
||||
@@ -54,6 +61,7 @@ interface TypedPocketBase extends PocketBase {
|
||||
collection(idOrName: 'timeouts'): RecordService<timeoutRecord>;
|
||||
collection(idOrName: 'cheerEvents'): RecordService<cheerEventRecord>;
|
||||
collection(idOrName: 'cheers'): RecordService<cheerRecord>;
|
||||
collection(idOrName: 'anivTimeouts'): RecordService<anivTimeoutRecord>;
|
||||
};
|
||||
|
||||
export default new PocketBase(pocketbaseurl).autoCancellation(false) as TypedPocketBase;
|
||||
|
||||
14
src/db/dbAnivTimeouts.ts
Normal file
14
src/db/dbAnivTimeouts.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import pocketbase from "db/connection";
|
||||
import User from "user";
|
||||
import logger from "lib/logger";
|
||||
|
||||
const pb = pocketbase.collection('anivTimeouts');
|
||||
|
||||
export async function createAnivTimeoutRecord(message: string, user: User, duration: number) {
|
||||
try {
|
||||
await pb.create({ message, user: user.id, duration });
|
||||
} catch (e) {
|
||||
logger.err(`Failed to create anivTimeoutRecord: user: ${user.displayName} message: "${message}" duration: ${duration}`);
|
||||
logger.err(e as string);
|
||||
};
|
||||
};
|
||||
@@ -10,6 +10,7 @@ import { addMessageToChatWidget } from "web/chatWidget/message";
|
||||
import { isInvuln, setTemporaryInvuln } from "lib/invuln";
|
||||
import { getUserRecord } from "db/dbUser";
|
||||
import { createCheerRecord } from "db/dbCheers";
|
||||
import handleAnivMessage from "lib/handleAnivMessage";
|
||||
|
||||
logger.info(`Loaded the following commands: ${commands.keys().toArray().join(', ')}`);
|
||||
|
||||
@@ -41,6 +42,9 @@ async function parseChatMessage(msg: EventSubChannelChatMessageEvent) {
|
||||
};
|
||||
|
||||
async function handleChatMessage(msg: EventSubChannelChatMessageEvent, user: User) {
|
||||
// Aniv message filter
|
||||
handleAnivMessage(msg, user);
|
||||
|
||||
// Parse commands:
|
||||
if (msg.messageText.startsWith(commandPrefix)) {
|
||||
const commandSelection = msg.messageText.slice(commandPrefix.length).split(' ')[0]!;
|
||||
|
||||
19
src/lib/handleAnivMessage.ts
Normal file
19
src/lib/handleAnivMessage.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { EventSubChannelChatMessageEvent } from "@twurple/eventsub-base"
|
||||
import { redis } from "bun";
|
||||
import type User from "user";
|
||||
import { timeout } from "lib/timeout";
|
||||
import { sendMessage } from "commands";
|
||||
import { createAnivTimeoutRecord } from "db/dbAnivTimeouts";
|
||||
|
||||
const ANIVNAMES = ['a_n_e_e_v', 'a_n_i_v', 'a_c_a_c'];
|
||||
|
||||
export default async function handleMessage(msg: EventSubChannelChatMessageEvent, user: User) {
|
||||
if (ANIVNAMES.includes(user.displayName)) {
|
||||
await redis.set('lastanivmessage', msg.messageText);
|
||||
await redis.expire('lastanivmessage', 120); // store for 2 minutes
|
||||
} else if (msg.messageText === await redis.get('lastanivmessage')) await Promise.all([
|
||||
timeout(user, 'copied an aniv message', 30),
|
||||
sendMessage(`${user.displayName} got timed out for copying an a_n_e_e_v message`),
|
||||
createAnivTimeoutRecord(msg.messageText, user, 30)
|
||||
]);
|
||||
};
|
||||
Reference in New Issue
Block a user