added !mbucks command, minor fixes

This commit is contained in:
2025-04-01 12:27:17 +02:00
parent 9c3a0a9235
commit b456c2e37e
5 changed files with 34 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
import { createBotCommand } from "@twurple/easy-bot"; import { createBotCommand } from "@twurple/easy-bot";
import api from "../lib/api"; import api from "../lib/api";
import { changeItemCount } from "../lib/items"; import { changeItemCount } from "../lib/items";
import { changeBalance } from "../lib/userHelper";
export default createBotCommand('give', async (params, { say, broadcasterId, userId }) => { export default createBotCommand('give', async (params, { say, broadcasterId, userId }) => {
if (userId !== broadcasterId) return if (userId !== broadcasterId) return
@@ -10,7 +11,7 @@ export default createBotCommand('give', async (params, { say, broadcasterId, use
if (isNaN(parseInt(params[2]))) { await say(`Specify the amount`); return } if (isNaN(parseInt(params[2]))) { await say(`Specify the amount`); return }
const data = await changeItemCount(target, params[1].toLowerCase(), parseInt(params[2])) const data = params[1].toLowerCase() === 'mbucks' ? await changeBalance(target, parseInt(params[2])) : await changeItemCount(target, params[1].toLowerCase(), parseInt(params[2]))
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 }

View File

@@ -3,5 +3,6 @@ import thank from "./thank"
import give from "./give" import give from "./give"
import inventory from "./inventory"; import inventory from "./inventory";
import stats from "./stats"; import stats from "./stats";
import mbucks from "./mbucks";
export default [timeout, thank, give, inventory, stats] export default [timeout, thank, give, inventory, stats, mbucks]

View File

@@ -43,6 +43,8 @@ export default createBotCommand('inv', async (params, { userName, say }) => {
messagedata.push(`${item.name + (item.amount === 1 ? '' : item.plural)}: ${item.amount}`) 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 mandoooYikes`); return}
await say(` await say(`
inventory of ${data.me ? userName : params[0]}: inventory of ${data.me ? userName : params[0]}:
${messagedata.join(', ')} ${messagedata.join(', ')}

19
src/commands/mbucks.ts Normal file
View File

@@ -0,0 +1,19 @@
import { createBotCommand } from "@twurple/easy-bot";
import { HelixUser } from "@twurple/api";
import api from "../lib/api";
import { getBalance } from "../lib/userHelper";
export default createBotCommand('mbucks', async (params, { userName, say }) => {
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 = await getBalance(user)
await say(`${user.name} has ${data.balance} mbucks ${data.balance === 0 ? 'mandoooYikes' : 'mandoooSmile'}`)
}, { aliases: ['mbux', 'mandoobucks'] })

View File

@@ -27,29 +27,27 @@ export async function getDBID(user: HelixUser) {
type balanceGetResult = { type balanceGetResult = {
balance: number, balance: number,
user: HelixUser data: any // TODO: propet type for data returned from database
} }
export async function getBalance(user: HelixUser): Promise<balanceGetResult> { export async function getBalance(user: HelixUser): Promise<balanceGetResult> {
await DBValidation(user) await DBValidation(user)
const data = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`) const data = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`)
return { balance: data.balance, user } return { balance: data.balance, data }
} }
type balanceChangeResult = { type balanceChangeResult = {
result: boolean, result: boolean,
userBalance: balanceGetResult reason: string,
count: number
} }
export async function changeBalance(user: HelixUser, amount: number): Promise<balanceChangeResult> { export async function changeBalance(user: HelixUser, amount: number): Promise<balanceChangeResult> {
let userBalance = await getBalance(user) let { balance, data } = await getBalance(user)
if (amount < 0 && userBalance.balance - amount < 0) return { result: false, userBalance } if (amount < 0 && balance - amount < 0) return { result: false, reason: 'negative', count: balance }
const dbuser = await pb.collection('users').getFirstListItem(`twitchid="${userBalance.user.id}"`) data.balance = balance + amount
let data = dbuser await pb.collection('users').update(data.id, data)
data.balance += amount return { result: true, reason: '', count: data.balance }
userBalance.balance += amount
await pb.collection('users').update(dbuser.id, data)
return { result: true, userBalance }
} }
interface timeoutsGetResult { interface timeoutsGetResult {