diff --git a/README.md b/README.md index 952d008..a4b3bed 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ COMMAND|FUNCTION|USER|ALIASES|DISABLEABLE `ping`|Testing command|anyone|`ping`|:white_check_mark: `yabai`|Random number|anyone|`yabai` `goon`|:white_check_mark: `seiso`|Random number|anyone|`seiso`|:white_check_mark: +`timeout {target}`|Times targeted user out for 60 seconds (costs 100 qweribucks)|anyone|`timeout`|:white_check_mark: ### Qweribucks commands @@ -104,4 +105,5 @@ TNT|`tnt`|Give 5-10 random chatters 60 second timeouts|`tnt` NAME|AMOUNT|USAGE|FUNCTION -|-|-|- -`timeout`|100|`cheer100 {target}`|Times specified user out for 1 minute +`timeout`|100|`cheer100 {target}`|Times specified user out for 1 minute. On failure gives cheerer a blaster +`execute`|6666|`cheer6666 {target}`|Times specified user out for 24 hours. On failure gives cheerer a silver bullet diff --git a/src/cheers/execute.ts b/src/cheers/execute.ts new file mode 100644 index 0000000..89938a5 --- /dev/null +++ b/src/cheers/execute.ts @@ -0,0 +1,54 @@ +import { Cheer } from "."; +import { EventSubChannelChatMessageEvent } from "@twurple/eventsub-base" +import { changeItemCount } from "../items"; +import { sendMessage } from "../commands"; +import { getUserRecord } from "../db/dbUser"; +import { User } from "../user"; +import { timeout } from "../lib/timeout"; +import { createTimeoutRecord } from "../db/dbTimeouts"; +import logger from "../lib/logger"; +import { parseCheerArgs } from "../lib/parseCommandArgs"; + +export default new Cheer('execute', 6666, async (msg, user) => { + const args = parseCheerArgs(msg.messageText); + if (!args[0]) { await handleNoExecuteTarget(msg, user, false); return; }; + const target = await User.initUsername(args[0].toLowerCase()); + if (!target) { await handleNoExecuteTarget(msg, user, false); return; }; + await getUserRecord(target); + + const result = await timeout(target, `You got executed by ${user.displayName}!`, 60 * 60 * 24); + if (result.status) await Promise.all([ + sendMessage(`${target.displayName} RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO`), + createTimeoutRecord(user, target, 'silverbullet'), + ]); + else { + await handleNoExecuteTarget(msg, user); + switch (result.reason) { + case "banned": + await sendMessage(`${target.displayName} is already timed out/banned`, msg.messageId); + break; + case "illegal": + await Promise.all([ + sendMessage(`${user.displayName} Nou Nou Nou`), + timeout(user, 'nah', 60) + ]); + break; + case "unknown": + await sendMessage('Something went wrong...', msg.messageId); + break; + }; + }; +}); + +async function handleNoExecuteTarget(msg: EventSubChannelChatMessageEvent, user: User, silent = true) { + if (await user.itemLock()) { + await sendMessage(`Cannot give ${user.displayName} a silver bullet`, msg.messageId); + logger.err(`Failed to give ${user.displayName} a silver bullet for their cheer`); + return; + }; + await user.setLock(); + const userRecord = await getUserRecord(user); + if (!silent) await sendMessage('No (valid) target specified. You got a silver bullet!', msg.messageId); + await changeItemCount(user, userRecord, 'silverbullet', 1); + await user.clearLock(); +}; diff --git a/src/commands/timeout.ts b/src/commands/timeout.ts new file mode 100644 index 0000000..0bb7838 --- /dev/null +++ b/src/commands/timeout.ts @@ -0,0 +1,41 @@ +import { Command, sendMessage } from "."; +import { getUserRecord } from "../db/dbUser"; +import parseCommandArgs from "../lib/parseCommandArgs"; +import { User } from "../user"; +import { timeout } from "../lib/timeout"; +import { changeBalance } from "../lib/changeBalance"; +import { createTimeoutRecord } from "../db/dbTimeouts"; + +export default new Command('timeout', ['timeout'], 'chatter', async (msg, user) => { + const userObj = await getUserRecord(user); + if (userObj.balance < 100) { await sendMessage(`You don't have enough qweribucks (need 100, have ${userObj.balance})`, msg.messageId); return; }; + const messagequery = parseCommandArgs(msg.messageText); + if (!messagequery[0]) { await sendMessage('Please specify a target'); return; }; + const target = await User.initUsername(messagequery[0].toLowerCase()); + if (!target) { await sendMessage(`${messagequery[0]} doesn't exist`); return; }; + await getUserRecord(target); // make sure the user record exist in the database + + const result = await timeout(target, `You got BLASTED by ${user.displayName}`, 60); + if (result.status) { + await Promise.all([ + sendMessage(`GOTTEM ${target.displayName} got BLASTED by ${user.displayName} GOTTEM`), + changeBalance(user, userObj, -100), + createTimeoutRecord(user, target, 'blaster') + ]); + } else { + switch (result.reason) { + case "banned": + await sendMessage(`${target.displayName} is already timed out/banned`, msg.messageId); + break; + case "illegal": + await Promise.all([ + sendMessage(`${user.displayName} Nou Nou Nou`), + timeout(user, 'nah', 60) + ]); + break; + case "unknown": + await sendMessage('Something went wrong...', msg.messageId); + break; + }; + }; +});