mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-19 08:41:39 +01:00
add lootbox and tnt
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { createBotCommand } from "@twurple/easy-bot";
|
import { createBotCommand } from "@twurple/easy-bot";
|
||||||
import { lootboxReady, resetLootboxTimer } from "../lib/lootboxes";
|
import { COOLDOWN, lootboxReady, resetLootboxTimer } from "../lib/lootboxes";
|
||||||
import { changeItemCount } from "../lib/items"
|
import { changeItemCount } from "../lib/items"
|
||||||
import api from "../lib/api"
|
import api from "../lib/api"
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ export default createBotCommand('getloot', async (_params, { reply, userId/*, br
|
|||||||
// if (!user?.isSubscribedTo(broadcasterId)) {await reply('Subscribe to get loot mandoooSmile'); return}
|
// if (!user?.isSubscribedTo(broadcasterId)) {await reply('Subscribe to get loot mandoooSmile'); return}
|
||||||
const data = await lootboxReady(user)
|
const data = await lootboxReady(user)
|
||||||
if (!data.result) {
|
if (!data.result) {
|
||||||
const { days, hours, minutes, seconds } = getTimeDifference(data.lastlootbox, Date.now() - 1000 * 60 * 60 * 24 * 30)
|
const { days, hours, minutes, seconds } = getTimeDifference(data.lastlootbox, Date.now() - COOLDOWN)
|
||||||
await reply(`lootbox ready in:
|
await reply(`lootbox ready in:
|
||||||
${days === 0 ? '' : `${days} day${days === 1 ? '' : 's'}, `}
|
${days === 0 ? '' : `${days} day${days === 1 ? '' : 's'}, `}
|
||||||
${hours === 0 ? '' : `${hours} hour${hours === 1 ? '' : 's'}, `}
|
${hours === 0 ? '' : `${hours} hour${hours === 1 ? '' : 's'}, `}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createBotCommand } from "@twurple/easy-bot";
|
import { createBotCommand } from "@twurple/easy-bot";
|
||||||
|
|
||||||
import { useBlaster, useGrenade, useSilverBullet } from "../lib/items";
|
import { useBlaster, useGrenade, useLootbox, useSilverBullet, useTNT } from "../lib/items";
|
||||||
import api from "../lib/api";
|
import api from "../lib/api";
|
||||||
|
|
||||||
const blaster = createBotCommand('blaster', async (params, { say, broadcasterId, userId }) => {
|
const blaster = createBotCommand('blaster', async (params, { say, broadcasterId, userId }) => {
|
||||||
@@ -20,4 +20,14 @@ const grenade = createBotCommand('grenade', async (_params, { say, broadcasterId
|
|||||||
await useGrenade(broadcasterId, user!, say)
|
await useGrenade(broadcasterId, user!, say)
|
||||||
})
|
})
|
||||||
|
|
||||||
export default [blaster, silverbullet, grenade]
|
const tnt = createBotCommand('tnt', async (_params, { say, broadcasterId, userId }) => {
|
||||||
|
const user = await api.users.getUserById(userId)
|
||||||
|
await useTNT(broadcasterId, user!, say)
|
||||||
|
})
|
||||||
|
|
||||||
|
const lootbox = createBotCommand('lootbox', async (_params, { say, userId }) => {
|
||||||
|
const user = await api.users.getUserById(userId)
|
||||||
|
await useLootbox(user!, say)
|
||||||
|
})
|
||||||
|
|
||||||
|
export default [blaster, silverbullet, grenade, tnt, lootbox]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createBotCommand } from "@twurple/easy-bot";
|
import { createBotCommand } from "@twurple/easy-bot";
|
||||||
import { useBlaster, useGrenade, useSilverBullet } from "../lib/items";
|
import { useBlaster, useGrenade, useLootbox, useSilverBullet, useTNT } from "../lib/items";
|
||||||
import api from "../lib/api";
|
import api from "../lib/api";
|
||||||
|
|
||||||
export default createBotCommand('use', async (params, { say, broadcasterId, userId }) => {
|
export default createBotCommand('use', async (params, { say, broadcasterId, userId }) => {
|
||||||
@@ -20,6 +20,13 @@ export default createBotCommand('use', async (params, { say, broadcasterId, user
|
|||||||
case 'grenade':
|
case 'grenade':
|
||||||
await useGrenade(broadcasterId, user!, say)
|
await useGrenade(broadcasterId, user!, say)
|
||||||
break
|
break
|
||||||
|
case 'tnt':
|
||||||
|
await useTNT(broadcasterId, user!, say)
|
||||||
|
break
|
||||||
|
case 'lootbox':
|
||||||
|
case 'loot':
|
||||||
|
await useLootbox(user!, say)
|
||||||
|
break
|
||||||
default:
|
default:
|
||||||
await say(`${params[0]} does not exist mandoooYikes`)
|
await say(`${params[0]} does not exist mandoooYikes`)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { HelixUser } from "@twurple/api"
|
import { HelixUser } from "@twurple/api"
|
||||||
import { getInventory, updateInventory } from "../lib/userHelper"
|
import { changeBalance, getInventory, updateInventory } from "../lib/userHelper"
|
||||||
import { timeout, addTimeoutToDB, vulnerableUsers } from "./timeoutHelper"
|
import { timeout, addTimeoutToDB, vulnerableUsers } from "./timeoutHelper"
|
||||||
import api from "./api"
|
import api from "./api"
|
||||||
|
|
||||||
@@ -95,3 +95,45 @@ export async function useGrenade(broadcasterId: string, attacker: HelixUser, say
|
|||||||
console.error(result.reason)
|
console.error(result.reason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export async function useTNT(broadcasterId: string, attacker: HelixUser, say: (args0: string) => Promise<void>) {
|
||||||
|
if (vulnerableUsers.length === 0) { await say('No chatters to blow up!'); return }
|
||||||
|
const itemResult = await changeItemCount(attacker, 'tnt')
|
||||||
|
|
||||||
|
if (!itemResult.result && itemResult.reason === 'negative') { await say('You have no TNT mandoooYikes'); 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
|
||||||
|
for (let i = 0; blastedusers > i; i++) {
|
||||||
|
const target = await api.users.getUserById(vulnerableUsers[Math.floor(Math.random() * vulnerableUsers.length)])
|
||||||
|
const result = await timeout(broadcasterId, target!, 60, `You got hit by ${attacker.name}'s TNT`)
|
||||||
|
if (result.status) {
|
||||||
|
await say(`${target?.name} got blown up by TNT! mandoooTnt`)
|
||||||
|
await addTimeoutToDB(attacker, target!, 'tnt')
|
||||||
|
} else {
|
||||||
|
await say(`something went wrong mandoooYikes`)
|
||||||
|
console.error(result.reason)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await say(`${attacker.name} blew up ${blastedusers} with their TNT mandoooGOTTEM ${attacker.name} has ${itemResult.count} tnt${itemResult.count === 1 ? '' : 's'} remaining`)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRandom(): number {
|
||||||
|
return Math.floor(Math.random() * 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function useLootbox(user: HelixUser, say: (arg0: string) => Promise<void>) {
|
||||||
|
const itemResult = await changeItemCount(user, 'lootbox')
|
||||||
|
if (!itemResult.result && itemResult.reason === 'negative') { await say('You have no lootboxes mandoooYikes'); return }
|
||||||
|
// Lootbox logic will for now just be get 25 mbucks, with 50% chance to get a grenade 25% chance to get a blaster and 10% chance to get TNT
|
||||||
|
let inventory = await getInventory(user)
|
||||||
|
let newitems: string[] = []
|
||||||
|
await changeBalance(user, 25)
|
||||||
|
newitems.push('25 mbucks')
|
||||||
|
if (getRandom() <= 50) { newitems.push('1 grenade'); await changeItemCount(user, 'grenade', 1) }
|
||||||
|
if (getRandom() <= 25) { newitems.push('1 blaster'); await changeItemCount(user, 'blaster', 1) }
|
||||||
|
if (getRandom() <= 10) { newitems.push('1 tnt'); await changeItemCount(user, 'tnt', 1) }
|
||||||
|
|
||||||
|
await say(`${user.name} got: ${newitems.join(' and ')}`)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { HelixUser } from "@twurple/api"
|
import { HelixUser } from "@twurple/api"
|
||||||
import pb from "./pocketbase"
|
import pb from "./pocketbase"
|
||||||
|
|
||||||
const COOLDOWN = 1000 * 60 * 60 * 24 * 30 // 1000 milliseconds * 60 seconds * 60 minutes * 24 hours * 30 days
|
// const COOLDOWN = 1000 * 60 * 60 * 24 * 30 // 1000 milliseconds * 60 seconds * 60 minutes * 24 hours * 30 days
|
||||||
|
export const COOLDOWN = 1000 * 60 * 15
|
||||||
|
|
||||||
interface lootboxReadyResult {
|
interface lootboxReadyResult {
|
||||||
result: boolean,
|
result: boolean,
|
||||||
|
|||||||
Reference in New Issue
Block a user