mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-19 08:41:39 +01:00
replace id row in users collection with twitchid
reduce spamming of pocketbase api
This commit is contained in:
@@ -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
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user