replace id row in users collection with twitchid

reduce spamming of pocketbase api
This commit is contained in:
2025-04-07 20:34:02 +02:00
parent 17f557f808
commit 9a2ce6b3a4
6 changed files with 33 additions and 64 deletions

View File

@@ -16,9 +16,9 @@ migrate(app => {
const data = [
{
"id": "pbc_279239694",
"listRule": null,
"viewRule": null,
"createRule": null,
"listRule": "",
"viewRule": "",
"createRule": "",
"updateRule": null,
"deleteRule": null,
"name": "itemuses",
@@ -28,8 +28,8 @@ migrate(app => {
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"max": 0,
"min": 0,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
@@ -59,7 +59,7 @@ migrate(app => {
"id": "relation1542800728",
"maxSelect": 1,
"minSelect": 0,
"name": "field",
"name": "user",
"presentable": false,
"required": false,
"system": false,
@@ -103,8 +103,8 @@ migrate(app => {
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"max": 0,
"min": 0,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
@@ -268,8 +268,8 @@ migrate(app => {
"autogeneratePattern": "[a-z0-9]{15}",
"hidden": false,
"id": "text3208210256",
"max": 15,
"min": 15,
"max": 0,
"min": 0,
"name": "id",
"pattern": "^[a-z0-9]+$",
"presentable": false,
@@ -278,20 +278,6 @@ migrate(app => {
"system": true,
"type": "text"
},
{
"autogeneratePattern": "",
"hidden": false,
"id": "text3605594593",
"max": 0,
"min": 0,
"name": "twitchid",
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"system": false,
"type": "text"
},
{
"autogeneratePattern": "",
"hidden": false,
@@ -302,7 +288,7 @@ migrate(app => {
"pattern": "",
"presentable": false,
"primaryKey": false,
"required": true,
"required": false,
"system": false,
"type": "text"
},
@@ -360,9 +346,7 @@ migrate(app => {
"type": "autodate"
}
],
"indexes": [
"CREATE UNIQUE INDEX `idx_MR0pV8SUAF` ON `users` (`twitchid`)"
],
"indexes": [],
"system": false
}
]

View File

@@ -25,7 +25,7 @@ bot.onConnect(async () => {
await broadcasterAuthProvider.refreshAccessTokenForUser(broadcastername?.id!)
}
setTimeout(() => {
setTimeout(async () => {
console.log('Bot is ready to accept commands!')
}, 1000 * 5)
})

View File

@@ -2,7 +2,7 @@ import { HelixUser } from "@twurple/api"
import pb, { User } from "./pocketbase"
export const COOLDOWN = !process.env.COOLDOWN ? 60 * 60 * 24 : Number(process.env.COOLDOWN)
export const COOLDOWN = (!process.env.COOLDOWN ? 60 * 60 * 24 : Number(process.env.COOLDOWN)) * 1000
interface lootboxReadyResult {
result: boolean,
@@ -11,7 +11,7 @@ interface lootboxReadyResult {
}
export async function lootboxReady(user: HelixUser | null): Promise<lootboxReadyResult> {
const DBuser = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`)
const DBuser = await pb.collection('users').getFirstListItem(`id="${user!.id}"`)
if ((Date.parse(DBuser.lastlootbox) + COOLDOWN) > Date.now()) return { result: false, lastlootbox: Date.parse(DBuser.lastlootbox), DBuser }
return { result: true, lastlootbox: 0, DBuser }
}

View File

@@ -2,7 +2,6 @@ import PocketBase, { BaseModel, RecordService } from 'pocketbase'
import { inventory } from "./userHelper"
export interface User extends BaseModel {
twitchid: string,
firstname: string,
inventory: inventory,
itemuses: inventory,

View File

@@ -1,7 +1,7 @@
import { ApiClient, HelixUser } from "@twurple/api";
import api, { broadcasterApi } from "./api";
import pb from "./pocketbase";
import { getDBID } from "./userHelper";
import { DBValidation } from "./userHelper";
type shooter = 'blaster' | 'grenade' | 'silverbullet' | 'tnt'
@@ -22,6 +22,7 @@ export async function timeout(broadcasterid: string, target: HelixUser, duration
remodMod(broadcasterid, target, duration, tmpapi)
}
await tmpapi.moderation.banUser(broadcasterid, { duration, reason, user: target })
await DBValidation(target)
return { status: true, reason: '' }
} catch (err) {
console.error(err)
@@ -31,13 +32,11 @@ export async function timeout(broadcasterid: string, target: HelixUser, duration
export async function addTimeoutToDB(attacker: HelixUser, target: HelixUser, source: shooter) {
// This has passed the existance check so there's no need to check if the users exist (twitch)
const attackerDB = await getDBID(attacker)
const targetDB = await getDBID(target)
const timeoutobj = {
source,
attacker: attackerDB,
target: targetDB,
attacker: attacker.id,
target: target.id,
attackername: attacker.name,
targetname: target.name
}

View File

@@ -13,17 +13,6 @@ export const EMPTYINV: inventory = {
lootbox: 0
}
export async function getDBID(user: HelixUser) {
try {
const DBuser = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`)
return DBuser.id
} catch (error) {
await createUser(user!)
const DBuser = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`)
return DBuser.id
}
}
type balanceGetResult = {
balance: number,
data: User
@@ -31,7 +20,7 @@ type balanceGetResult = {
export async function getBalance(user: HelixUser): Promise<balanceGetResult> {
await DBValidation(user)
const data = await pb.collection('users').getFirstListItem(`twitchid="${user!.id}"`)
const data = await pb.collection('users').getFirstListItem(`id="${user!.id}"`)
return { balance: data.balance, data }
}
@@ -62,11 +51,11 @@ interface timeoutsGetResult {
const BLASTERS = ['blaster', 'grenade', 'tnt']
async function getTimeouts(userDBID: string, monthdata?: string): Promise<timeoutsGetResult> {
async function getTimeouts(userId: string, monthdata?: string): Promise<timeoutsGetResult> {
let monthquery = ''
if (monthdata) monthquery = ` && created~"${monthdata}"`
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userDBID}"${monthquery}` })
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userDBID}"${monthquery}` })
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userId}"${monthquery}` })
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userId}"${monthquery}` })
const blasterhit = hit.filter((item) => BLASTERS.includes(item.source)).length
const silverbullethit = hit.length - blasterhit
@@ -85,10 +74,10 @@ async function getTimeouts(userDBID: string, monthdata?: string): Promise<timeou
}
}
async function getItemUses(userDBID: string, monthdata?: string): Promise<inventory> {
async function getItemUses(userId: string, monthdata?: string): Promise<inventory> {
let monthquery = ''
if (monthdata) monthquery = ` && created~"${monthdata}"`
const items = await pb.collection('itemuses').getFullList({ filter: `user="${userDBID}"${monthquery}` })
const items = await pb.collection('itemuses').getFullList({ filter: `user="${userId}"${monthquery}` })
return {
version: 1,
blaster: items.filter((item) => item.name === 'blaster').length,
@@ -114,7 +103,7 @@ export interface inventory {
export async function getInventory(user: HelixUser): Promise<inventory> {
await DBValidation(user)
const data = await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
const data = await pb.collection('users').getFirstListItem(`id="${user.id}"`)
return data.inventory
}
@@ -124,28 +113,26 @@ interface statsGetResult extends timeoutsGetResult {
export async function getStats(user: HelixUser, monthdata?: string): Promise<statsGetResult> {
await DBValidation(user)
const userDBID = await getDBID(user)
const { hit, shot } = await getTimeouts(userDBID, monthdata)
const uses = await getItemUses(userDBID, monthdata)
const { hit, shot } = await getTimeouts(user.id, monthdata)
const uses = await getItemUses(user.id, monthdata)
return { hit, shot, used: uses }
}
export async function updateInventory(user: HelixUser, newinv: inventory) {
await DBValidation(user)
const data = await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
const data = await pb.collection('users').getFirstListItem(`id="${user.id}"`)
const recordid = data.id
await pb.collection('users').update(recordid, { inventory: newinv })
}
export async function addUsedItem(user: HelixUser, item: string) {
await DBValidation(user)
const userDBID = await getDBID(user)
await pb.collection('itemuses').create({ user: userDBID, name: item })
await pb.collection('itemuses').create({ user: user.id, name: item })
}
async function DBValidation(user: HelixUser) {
export async function DBValidation(user: HelixUser) {
try {
await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
await pb.collection('users').getFirstListItem(`id="${user.id}"`)
} catch (error) {
await createUser(user!)
}
@@ -153,7 +140,7 @@ async function DBValidation(user: HelixUser) {
async function createUser(user: HelixUser) {
const data = {
twitchid: user.id,
id: user.id,
firstname: user.name,
inventory: EMPTYINV,
itemuses: EMPTYINV,