mirror of
https://gitlab.com/qwerinope/qweribot.git
synced 2026-02-04 13:56:57 +01:00
part 1 of full item/inventory rework
This commit is contained in:
76
src/items/explosives.ts
Normal file
76
src/items/explosives.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import api from "../lib/api";
|
||||
import { addTimeoutToDB } from "../lib/timeoutHelper";
|
||||
import { addUsedItem, updateInventory } from "../lib/userHelper";
|
||||
import { changeItemCount } from "../lib/items";
|
||||
import { vulnerableUsers, timeout } from "../lib/timeoutHelper";
|
||||
import { HelixUser } from "@twurple/api";
|
||||
|
||||
function shuffle(arrayold: any[]) {
|
||||
let array = arrayold
|
||||
let currentIndex = array.length;
|
||||
while (currentIndex != 0) {
|
||||
let randomIndex = Math.floor(Math.random() * currentIndex);
|
||||
currentIndex--;
|
||||
[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
|
||||
}
|
||||
return array
|
||||
}
|
||||
|
||||
export const grenade = {
|
||||
name: 'grenade',
|
||||
prettyname: 'Grenade',
|
||||
aliases: ['grenade'],
|
||||
plural: 's',
|
||||
description: "Use: grenade, Function: Times a random chatter out for 60 seconds. Aliases: !grenade",
|
||||
execute: async (user: HelixUser, say: (arg0: string) => Promise<void>, broadcasterId: string) => {
|
||||
if (vulnerableUsers.length === 0) { await say('No chatters to blow up!'); return }
|
||||
const itemResult = await changeItemCount(user, 'grenade')
|
||||
|
||||
if (!itemResult.result && itemResult.reason === 'negative') { await say('You have no grenades!'); return }
|
||||
const target = await api.users.getUserById(vulnerableUsers[Math.floor(Math.random() * vulnerableUsers.length)])
|
||||
const result = await timeout(broadcasterId, target!, 60, `You got hit by ${user.name}'s grenade`)
|
||||
if (result.status) {
|
||||
await say(`${target?.name} got blown up by ${user.name}'s grenade!`)
|
||||
await addTimeoutToDB(user, target!, 'grenade')
|
||||
await addUsedItem(user, 'grenade')
|
||||
await updateInventory(user, itemResult.inv!)
|
||||
} else {
|
||||
// Banned is not an option, and neither is noexist
|
||||
await say(`something went wrong`)
|
||||
console.error(result.reason)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const tnt = {
|
||||
name: 'tnt',
|
||||
prettyname: 'TNT',
|
||||
aliases: ['tnt'],
|
||||
plural: 's',
|
||||
description: "Use: tnt, Function: Times out 1 to 10 chatters for 60 seconds. Aliases: !tnt",
|
||||
execute: async (user: HelixUser, say: (args0: string) => Promise<void>, broadcasterId: string) => {
|
||||
if (vulnerableUsers.length === 0) { await say('No chatters to blow up!'); return }
|
||||
const itemResult = await changeItemCount(user, 'tnt')
|
||||
|
||||
if (!itemResult.result && itemResult.reason === 'negative') { await say('You have no TNT!'); return }
|
||||
const min = vulnerableUsers.length < 3 ? vulnerableUsers.length : 3 //if less than 3 chatters, use that else 3
|
||||
const max = vulnerableUsers.length > 10 ? 10 : vulnerableUsers.length //if more than 10 chatters do 10 else 10
|
||||
const blastedusers = Math.floor(Math.random() * (max - min + 1)) + min
|
||||
const soontobedeadusers = shuffle(vulnerableUsers).slice(vulnerableUsers.length - blastedusers)
|
||||
const targets = await api.users.getUsersByIds(soontobedeadusers)
|
||||
for (const target of targets) {
|
||||
const result = await timeout(broadcasterId, target!, 60, `You got hit by ${user.name}'s TNT`)
|
||||
if (result.status) {
|
||||
await say(`${target?.name} got blown up by TNT!`)
|
||||
await addTimeoutToDB(user, target!, 'tnt')
|
||||
await updateInventory(user, itemResult.inv!)
|
||||
} else {
|
||||
await say(`something went wrong`)
|
||||
console.error(result.reason)
|
||||
}
|
||||
}
|
||||
|
||||
await addUsedItem(user, 'tnt')
|
||||
await say(`${user.name} blew up ${blastedusers} chatters with their TNT! ${user.name} has ${itemResult.count} tnt${itemResult.count === 1 ? '' : 's'} remaining`)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user