add new plural system

This commit is contained in:
2025-04-11 14:44:23 +02:00
parent e3fc3465e9
commit 576f28df9d
5 changed files with 18 additions and 40 deletions

View File

@@ -1,5 +1,6 @@
import { createBotCommand } from "@twurple/easy-bot"; import { createBotCommand } from "@twurple/easy-bot";
import api from "../lib/api"; import api from "../lib/api";
import items from "../items"
import { changeItemCount } from "../lib/items"; import { changeItemCount } from "../lib/items";
import { changeBalance } from "../lib/userHelper"; import { changeBalance } from "../lib/userHelper";
import { vulnerableUsers } from "../lib/timeoutHelper"; import { vulnerableUsers } from "../lib/timeoutHelper";
@@ -17,7 +18,8 @@ const give = createBotCommand('give', async (params, { say, broadcasterId, userI
if (data.reason === 'negative') { await say(`${target.name} only has ${data.count}. Cannot yoink ${-parseInt(params[2])} ${params[1]}`); return } if (data.reason === 'negative') { await say(`${target.name} only has ${data.count}. Cannot yoink ${-parseInt(params[2])} ${params[1]}`); return }
else if (data.reason === 'noexist') { await say(`Can't find item ${params[1]}`); return } else if (data.reason === 'noexist') { await say(`Can't find item ${params[1]}`); return }
await say(`${target.name} now has ${data.count} ${params[1]}`) const selection = items.find(item => item.name === params[1].toLowerCase())
await say(`${target.name} now has ${data.count} ${params[1]}${data.count === 1 ? '' : selection?.plural}`)
}) })
const vulnChatters = createBotCommand('vulnchatters', async (_params, { say, userId, broadcasterId, userName }) => { const vulnChatters = createBotCommand('vulnchatters', async (_params, { say, userId, broadcasterId, userName }) => {

View File

@@ -1,12 +1,13 @@
import { createBotCommand } from "@twurple/easy-bot"; import { createBotCommand } from "@twurple/easy-bot";
import { getInventory } from "../lib/userHelper"; import { getInventory } from "../lib/userHelper";
import api from "../lib/api"; import api from "../lib/api";
import items from "../items";
import { HelixUser } from "@twurple/api"; import { HelixUser } from "@twurple/api";
export default createBotCommand('inv', async (params, { userName, say }) => { export default createBotCommand('inv', async (params, { userName, say }) => {
let user: HelixUser | null let user: HelixUser | null
if (params.length !== 0) { if (params.length !== 0) {
user = await api.users.getUserByName(params[0].replace(/[^a-zA-Z0-9]/g, '')) user = await api.users.getUserByName(params[0].replace(/[@]/g, ''))
} else user = await api.users.getUserByName(userName) } else user = await api.users.getUserByName(userName)
if (!user) { if (!user) {
await say(`User ${params[0]} not found`) await say(`User ${params[0]} not found`)
@@ -15,35 +16,15 @@ export default createBotCommand('inv', async (params, { userName, say }) => {
const data = params.length === 0 ? { me: true, inv: await getInventory(user!) } : { me: false, inv: await getInventory(user!) } const data = params.length === 0 ? { me: true, inv: await getInventory(user!) } : { me: false, inv: await getInventory(user!) }
interface parsedData { const messagedata: string[] = []
amount: number,
name: string, for (const [key, amount] of Object.entries(data.inv)) {
plural: string if (amount === 0) continue
const itemselection = items.find(item => item.name === key)
messagedata.push(`${itemselection?.prettyname}${amount === 1 ? '' : itemselection?.plural}: ${amount}`)
} }
let dataparsed: parsedData[] = [] if (messagedata.length === 0) { await say(`${data.me ? userName : params[0]} has no items!`); return }
for (const key of Object.entries(data.inv)) {
if (key[1] === 0) continue
switch (key[0]) {
case 'lootbox':
dataparsed.push({ amount: key[1], name: key[0], plural: 'es' })
break
case 'version':
break
default:
dataparsed.push({ amount: key[1], name: key[0], plural: 's' })
break
}
}
if (!dataparsed) { await say(`${data.me ? userName : params[0]} has no items!`); return }
let messagedata: string[] = []
for (const item of dataparsed) {
messagedata.push(`${item.name + (item.amount === 1 ? '' : item.plural)}: ${item.amount}`)
}
if (messagedata.length === 0) {await say(`${data.me ? userName : params[0]} has no items!`); return}
await say(` await say(`
inventory of ${data.me ? userName : params[0]}: inventory of ${data.me ? userName : params[0]}:

View File

@@ -11,7 +11,7 @@ for (const item of items) {
switch (item.name) { switch (item.name) {
case 'blaster': case 'blaster':
case 'silverbullet': case 'silverbullet':
if (params[0] === undefined) return if (params[0] === undefined) { await say('nice miss bro'); return }
await item.execute(user!, say, broadcasterId, params[0].replace(/[@]/g, '')) await item.execute(user!, say, broadcasterId, params[0].replace(/[@]/g, ''))
break break
case 'grenade': case 'grenade':
@@ -20,7 +20,7 @@ for (const item of items) {
await item.execute(user!, say) await item.execute(user!, say)
break break
case 'clipboard': case 'clipboard':
if (params[0] === undefined) return if (params[0] === undefined) { await say("Please specify what the clipboard asks") }
await item.execute(user!, say, broadcasterId, params.join(' ')) await item.execute(user!, say, broadcasterId, params.join(' '))
break break
} }

View File

@@ -13,7 +13,7 @@ export default createBotCommand('use', async (params, { say, broadcasterId, user
switch (selection.name) { switch (selection.name) {
case 'blaster': case 'blaster':
case 'silverbullet': case 'silverbullet':
if (params[1] === undefined) return if (params[1] === undefined) { await say('nice miss bro'); return }
await selection.execute(user!, say, broadcasterId, params[1].replace(/[@]/g, '')) await selection.execute(user!, say, broadcasterId, params[1].replace(/[@]/g, ''))
break break
case 'grenade': case 'grenade':
@@ -24,7 +24,7 @@ export default createBotCommand('use', async (params, { say, broadcasterId, user
await selection.execute(user!, say) await selection.execute(user!, say)
break break
case 'clipboard': case 'clipboard':
if (params[1] === undefined) return if (params[1] === undefined) { await say("Please specify what the clipboard asks")}
await selection.execute(user!, say, broadcasterId, params.slice(1).join(' ')) await selection.execute(user!, say, broadcasterId, params.slice(1).join(' '))
break break
} }

View File

@@ -77,13 +77,8 @@ async function getItemUses(userId: string, monthdata?: string): Promise<inventor
if (monthdata) monthquery = ` && created~"${monthdata}"` if (monthdata) monthquery = ` && created~"${monthdata}"`
const items = await pb.collection('itemuses').getFullList({ filter: `user="${userId}"${monthquery}` }) const items = await pb.collection('itemuses').getFullList({ filter: `user="${userId}"${monthquery}` })
return { return {
blaster: items.filter((item) => item.name === 'blaster').length,
grenade: items.filter((item) => item.name === 'grenade').length, grenade: items.filter((item) => item.name === 'grenade').length,
silverbullet: items.filter((item) => item.name === 'silverbullet').length,
tnt: items.filter((item) => item.name === 'tnt').length, tnt: items.filter((item) => item.name === 'tnt').length,
clipboard: items.filter((item) => item.name === 'clipboard').length,
lootbox: items.filter((item) => item.name === 'lootbox').length
} }
} }
@@ -100,8 +95,8 @@ interface statsGetResult extends timeoutsGetResult {
export async function getStats(user: HelixUser, monthdata?: string): Promise<statsGetResult> { export async function getStats(user: HelixUser, monthdata?: string): Promise<statsGetResult> {
await DBValidation(user) await DBValidation(user)
const { hit, shot } = await getTimeouts(user.id, monthdata) const { hit, shot } = await getTimeouts(user.id, monthdata)
const uses = await getItemUses(user.id, monthdata) const used = await getItemUses(user.id, monthdata)
return { hit, shot, used: uses } return { hit, shot, used }
} }
export async function updateInventory(user: HelixUser, newinv: inventory) { export async function updateInventory(user: HelixUser, newinv: inventory) {