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 = [
|
const data = [
|
||||||
{
|
{
|
||||||
"id": "pbc_279239694",
|
"id": "pbc_279239694",
|
||||||
"listRule": null,
|
"listRule": "",
|
||||||
"viewRule": null,
|
"viewRule": "",
|
||||||
"createRule": null,
|
"createRule": "",
|
||||||
"updateRule": null,
|
"updateRule": null,
|
||||||
"deleteRule": null,
|
"deleteRule": null,
|
||||||
"name": "itemuses",
|
"name": "itemuses",
|
||||||
@@ -28,8 +28,8 @@ migrate(app => {
|
|||||||
"autogeneratePattern": "[a-z0-9]{15}",
|
"autogeneratePattern": "[a-z0-9]{15}",
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
"id": "text3208210256",
|
"id": "text3208210256",
|
||||||
"max": 15,
|
"max": 0,
|
||||||
"min": 15,
|
"min": 0,
|
||||||
"name": "id",
|
"name": "id",
|
||||||
"pattern": "^[a-z0-9]+$",
|
"pattern": "^[a-z0-9]+$",
|
||||||
"presentable": false,
|
"presentable": false,
|
||||||
@@ -59,7 +59,7 @@ migrate(app => {
|
|||||||
"id": "relation1542800728",
|
"id": "relation1542800728",
|
||||||
"maxSelect": 1,
|
"maxSelect": 1,
|
||||||
"minSelect": 0,
|
"minSelect": 0,
|
||||||
"name": "field",
|
"name": "user",
|
||||||
"presentable": false,
|
"presentable": false,
|
||||||
"required": false,
|
"required": false,
|
||||||
"system": false,
|
"system": false,
|
||||||
@@ -103,8 +103,8 @@ migrate(app => {
|
|||||||
"autogeneratePattern": "[a-z0-9]{15}",
|
"autogeneratePattern": "[a-z0-9]{15}",
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
"id": "text3208210256",
|
"id": "text3208210256",
|
||||||
"max": 15,
|
"max": 0,
|
||||||
"min": 15,
|
"min": 0,
|
||||||
"name": "id",
|
"name": "id",
|
||||||
"pattern": "^[a-z0-9]+$",
|
"pattern": "^[a-z0-9]+$",
|
||||||
"presentable": false,
|
"presentable": false,
|
||||||
@@ -268,8 +268,8 @@ migrate(app => {
|
|||||||
"autogeneratePattern": "[a-z0-9]{15}",
|
"autogeneratePattern": "[a-z0-9]{15}",
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
"id": "text3208210256",
|
"id": "text3208210256",
|
||||||
"max": 15,
|
"max": 0,
|
||||||
"min": 15,
|
"min": 0,
|
||||||
"name": "id",
|
"name": "id",
|
||||||
"pattern": "^[a-z0-9]+$",
|
"pattern": "^[a-z0-9]+$",
|
||||||
"presentable": false,
|
"presentable": false,
|
||||||
@@ -278,20 +278,6 @@ migrate(app => {
|
|||||||
"system": true,
|
"system": true,
|
||||||
"type": "text"
|
"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": "",
|
"autogeneratePattern": "",
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
@@ -302,7 +288,7 @@ migrate(app => {
|
|||||||
"pattern": "",
|
"pattern": "",
|
||||||
"presentable": false,
|
"presentable": false,
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"required": true,
|
"required": false,
|
||||||
"system": false,
|
"system": false,
|
||||||
"type": "text"
|
"type": "text"
|
||||||
},
|
},
|
||||||
@@ -360,9 +346,7 @@ migrate(app => {
|
|||||||
"type": "autodate"
|
"type": "autodate"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"indexes": [
|
"indexes": [],
|
||||||
"CREATE UNIQUE INDEX `idx_MR0pV8SUAF` ON `users` (`twitchid`)"
|
|
||||||
],
|
|
||||||
"system": false
|
"system": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ bot.onConnect(async () => {
|
|||||||
await broadcasterAuthProvider.refreshAccessTokenForUser(broadcastername?.id!)
|
await broadcasterAuthProvider.refreshAccessTokenForUser(broadcastername?.id!)
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(async () => {
|
||||||
console.log('Bot is ready to accept commands!')
|
console.log('Bot is ready to accept commands!')
|
||||||
}, 1000 * 5)
|
}, 1000 * 5)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { HelixUser } from "@twurple/api"
|
|||||||
import pb, { User } from "./pocketbase"
|
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 {
|
interface lootboxReadyResult {
|
||||||
result: boolean,
|
result: boolean,
|
||||||
@@ -11,7 +11,7 @@ interface lootboxReadyResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function lootboxReady(user: HelixUser | null): Promise<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 }
|
if ((Date.parse(DBuser.lastlootbox) + COOLDOWN) > Date.now()) return { result: false, lastlootbox: Date.parse(DBuser.lastlootbox), DBuser }
|
||||||
return { result: true, lastlootbox: 0, DBuser }
|
return { result: true, lastlootbox: 0, DBuser }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import PocketBase, { BaseModel, RecordService } from 'pocketbase'
|
|||||||
import { inventory } from "./userHelper"
|
import { inventory } from "./userHelper"
|
||||||
|
|
||||||
export interface User extends BaseModel {
|
export interface User extends BaseModel {
|
||||||
twitchid: string,
|
|
||||||
firstname: string,
|
firstname: string,
|
||||||
inventory: inventory,
|
inventory: inventory,
|
||||||
itemuses: inventory,
|
itemuses: inventory,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { ApiClient, HelixUser } from "@twurple/api";
|
import { ApiClient, HelixUser } from "@twurple/api";
|
||||||
import api, { broadcasterApi } from "./api";
|
import api, { broadcasterApi } from "./api";
|
||||||
import pb from "./pocketbase";
|
import pb from "./pocketbase";
|
||||||
import { getDBID } from "./userHelper";
|
import { DBValidation } from "./userHelper";
|
||||||
|
|
||||||
type shooter = 'blaster' | 'grenade' | 'silverbullet' | 'tnt'
|
type shooter = 'blaster' | 'grenade' | 'silverbullet' | 'tnt'
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ export async function timeout(broadcasterid: string, target: HelixUser, duration
|
|||||||
remodMod(broadcasterid, target, duration, tmpapi)
|
remodMod(broadcasterid, target, duration, tmpapi)
|
||||||
}
|
}
|
||||||
await tmpapi.moderation.banUser(broadcasterid, { duration, reason, user: target })
|
await tmpapi.moderation.banUser(broadcasterid, { duration, reason, user: target })
|
||||||
|
await DBValidation(target)
|
||||||
return { status: true, reason: '' }
|
return { status: true, reason: '' }
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(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) {
|
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)
|
// 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 = {
|
const timeoutobj = {
|
||||||
source,
|
source,
|
||||||
attacker: attackerDB,
|
attacker: attacker.id,
|
||||||
target: targetDB,
|
target: target.id,
|
||||||
attackername: attacker.name,
|
attackername: attacker.name,
|
||||||
targetname: target.name
|
targetname: target.name
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,17 +13,6 @@ export const EMPTYINV: inventory = {
|
|||||||
lootbox: 0
|
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 = {
|
type balanceGetResult = {
|
||||||
balance: number,
|
balance: number,
|
||||||
data: User
|
data: User
|
||||||
@@ -31,7 +20,7 @@ type balanceGetResult = {
|
|||||||
|
|
||||||
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(`id="${user!.id}"`)
|
||||||
return { balance: data.balance, data }
|
return { balance: data.balance, data }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,11 +51,11 @@ interface timeoutsGetResult {
|
|||||||
|
|
||||||
const BLASTERS = ['blaster', 'grenade', 'tnt']
|
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 = ''
|
let monthquery = ''
|
||||||
if (monthdata) monthquery = ` && created~"${monthdata}"`
|
if (monthdata) monthquery = ` && created~"${monthdata}"`
|
||||||
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userDBID}"${monthquery}` })
|
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userId}"${monthquery}` })
|
||||||
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userDBID}"${monthquery}` })
|
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userId}"${monthquery}` })
|
||||||
|
|
||||||
const blasterhit = hit.filter((item) => BLASTERS.includes(item.source)).length
|
const blasterhit = hit.filter((item) => BLASTERS.includes(item.source)).length
|
||||||
const silverbullethit = hit.length - blasterhit
|
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 = ''
|
let monthquery = ''
|
||||||
if (monthdata) monthquery = ` && created~"${monthdata}"`
|
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 {
|
return {
|
||||||
version: 1,
|
version: 1,
|
||||||
blaster: items.filter((item) => item.name === 'blaster').length,
|
blaster: items.filter((item) => item.name === 'blaster').length,
|
||||||
@@ -114,7 +103,7 @@ export interface inventory {
|
|||||||
|
|
||||||
export async function getInventory(user: HelixUser): Promise<inventory> {
|
export async function getInventory(user: HelixUser): Promise<inventory> {
|
||||||
await DBValidation(user)
|
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
|
return data.inventory
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,28 +113,26 @@ 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 userDBID = await getDBID(user)
|
const { hit, shot } = await getTimeouts(user.id, monthdata)
|
||||||
const { hit, shot } = await getTimeouts(userDBID, monthdata)
|
const uses = await getItemUses(user.id, monthdata)
|
||||||
const uses = await getItemUses(userDBID, monthdata)
|
|
||||||
return { hit, shot, used: uses }
|
return { hit, shot, used: uses }
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateInventory(user: HelixUser, newinv: inventory) {
|
export async function updateInventory(user: HelixUser, newinv: inventory) {
|
||||||
await DBValidation(user)
|
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
|
const recordid = data.id
|
||||||
await pb.collection('users').update(recordid, { inventory: newinv })
|
await pb.collection('users').update(recordid, { inventory: newinv })
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addUsedItem(user: HelixUser, item: string) {
|
export async function addUsedItem(user: HelixUser, item: string) {
|
||||||
await DBValidation(user)
|
await DBValidation(user)
|
||||||
const userDBID = await getDBID(user)
|
await pb.collection('itemuses').create({ user: user.id, name: item })
|
||||||
await pb.collection('itemuses').create({ user: userDBID, name: item })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function DBValidation(user: HelixUser) {
|
export async function DBValidation(user: HelixUser) {
|
||||||
try {
|
try {
|
||||||
await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
|
await pb.collection('users').getFirstListItem(`id="${user.id}"`)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
await createUser(user!)
|
await createUser(user!)
|
||||||
}
|
}
|
||||||
@@ -153,7 +140,7 @@ async function DBValidation(user: HelixUser) {
|
|||||||
|
|
||||||
async function createUser(user: HelixUser) {
|
async function createUser(user: HelixUser) {
|
||||||
const data = {
|
const data = {
|
||||||
twitchid: user.id,
|
id: user.id,
|
||||||
firstname: user.name,
|
firstname: user.name,
|
||||||
inventory: EMPTYINV,
|
inventory: EMPTYINV,
|
||||||
itemuses: EMPTYINV,
|
itemuses: EMPTYINV,
|
||||||
|
|||||||
Reference in New Issue
Block a user