From 81d6448e65cbf4e4a21a313cc914b1d57dbcd081 Mon Sep 17 00:00:00 2001 From: qwerinope Date: Mon, 31 Mar 2025 22:23:48 +0200 Subject: [PATCH] minor fixes and stats implemented next will be !mbucks (easy), !getloot (medium) and !use (+ aliases) (hard) --- src/commands/index.ts | 3 ++- src/commands/inventory.ts | 2 +- src/commands/stats.ts | 31 +++++++++++++++++++++++++++++++ src/lib/userHelper.ts | 7 +++++-- 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 src/commands/stats.ts diff --git a/src/commands/index.ts b/src/commands/index.ts index d3f0cdc..790c27b 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -2,5 +2,6 @@ import timeout from "./timeout"; import thank from "./thank" import give from "./give" import inventory from "./inventory"; +import stats from "./stats"; -export default [timeout, thank, give, inventory] +export default [timeout, thank, give, inventory, stats] diff --git a/src/commands/inventory.ts b/src/commands/inventory.ts index e8c3ea4..85b47eb 100644 --- a/src/commands/inventory.ts +++ b/src/commands/inventory.ts @@ -9,7 +9,7 @@ export default createBotCommand('inv', async (params, { userName, say }) => { user = await api.users.getUserByName(params[0]) } else user = await api.users.getUserByName(userName) if (!user) { - say(`User ${params[0]} not found`) + await say(`User ${params[0]} not found`) return } diff --git a/src/commands/stats.ts b/src/commands/stats.ts new file mode 100644 index 0000000..f596d6c --- /dev/null +++ b/src/commands/stats.ts @@ -0,0 +1,31 @@ +import { createBotCommand } from "@twurple/easy-bot"; +import api from "../lib/api"; +import { getStats } from "../lib/userHelper"; +import { HelixUser } from "@twurple/api"; + +export default createBotCommand('stats', async (params, { say, userName }) => { + let user: HelixUser | null + if (params.length !== 0) { + user = await api.users.getUserByName(params[0]) + } else user = await api.users.getUserByName(userName) + if (!user) { + await say(`User ${params[0]} not found`) + return + } + + const data = params.length === 0 ? { me: true, stats: await getStats(user!) } : { me: false, stats: await getStats(user!) } + + const KD = data.stats.shot.blaster / data.stats.hit.blaster + + await say( + ` + Stats of ${data.me ? userName : params[0]}: + Users blasted: ${data.stats.shot.blaster}, + Blasted by others: ${data.stats.hit.blaster} (${isNaN(KD) ? 0 : KD} K/D). + Grenades lobbed: ${data.stats.used.grenade} + TNTs lit: ${data.stats.used.tnt}, + Silver bullets fired: ${data.stats.shot.silverbullet}, + Silver bullets taken: ${data.stats.hit.silverbullet} + ` + ) +}) diff --git a/src/lib/userHelper.ts b/src/lib/userHelper.ts index b231b1e..d246a38 100644 --- a/src/lib/userHelper.ts +++ b/src/lib/userHelper.ts @@ -66,7 +66,7 @@ interface timeoutsGetResult { const BLASTERS = ['blaster', 'grenade', 'tnt'] -export async function getTimeouts(user: HelixUser): Promise { +async function getTimeouts(user: HelixUser): Promise { await DBValidation(user) const userDBID = await getDBID(user) const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userDBID}"` }) @@ -110,7 +110,9 @@ export async function getInventory(user: HelixUser): Promise { } export async function getStats(user: HelixUser) { - + const { hit, shot } = await getTimeouts(user) + const dbuser = await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`) + return { hit, shot, used: dbuser.itemuses } } export async function updateInventory(user: HelixUser, newinv: inventory) { @@ -133,6 +135,7 @@ async function createUser(user: HelixUser) { twitchid: user.id, firstname: user.name, inventory: EMPTYINV, + itemuses: EMPTYINV, balance: 0 } await pb.collection('users').create(data)