diff --git a/pb/migrations/initialize.js b/pb/migrations/initialize.js index 59c1772..855a2d5 100644 --- a/pb/migrations/initialize.js +++ b/pb/migrations/initialize.js @@ -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 } ] diff --git a/src/bot.ts b/src/bot.ts index a86e226..982cce3 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -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) }) diff --git a/src/lib/lootboxes.ts b/src/lib/lootboxes.ts index 4f5807f..1cd9a71 100644 --- a/src/lib/lootboxes.ts +++ b/src/lib/lootboxes.ts @@ -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 { - 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 } } diff --git a/src/lib/pocketbase.ts b/src/lib/pocketbase.ts index 24f2765..3503973 100644 --- a/src/lib/pocketbase.ts +++ b/src/lib/pocketbase.ts @@ -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, diff --git a/src/lib/timeoutHelper.ts b/src/lib/timeoutHelper.ts index 799e6ab..f0bbd9e 100644 --- a/src/lib/timeoutHelper.ts +++ b/src/lib/timeoutHelper.ts @@ -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 } diff --git a/src/lib/userHelper.ts b/src/lib/userHelper.ts index 399ff38..ba38890 100644 --- a/src/lib/userHelper.ts +++ b/src/lib/userHelper.ts @@ -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 { 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 { +async function getTimeouts(userId: string, monthdata?: string): Promise { 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 { +async function getItemUses(userId: string, monthdata?: string): Promise { 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 { 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 { 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,