mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-19 08:41:39 +01:00
move itemuses to a seperate table, finish !stats implementation
This commit is contained in:
@@ -14,6 +14,81 @@ migrate(app => {
|
|||||||
|
|
||||||
app.save(record)
|
app.save(record)
|
||||||
const data = [
|
const data = [
|
||||||
|
{
|
||||||
|
"id": "pbc_279239694",
|
||||||
|
"listRule": null,
|
||||||
|
"viewRule": null,
|
||||||
|
"createRule": null,
|
||||||
|
"updateRule": null,
|
||||||
|
"deleteRule": null,
|
||||||
|
"name": "itemuses",
|
||||||
|
"type": "base",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"autogeneratePattern": "[a-z0-9]{15}",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "text3208210256",
|
||||||
|
"max": 15,
|
||||||
|
"min": 15,
|
||||||
|
"name": "id",
|
||||||
|
"pattern": "^[a-z0-9]+$",
|
||||||
|
"presentable": false,
|
||||||
|
"primaryKey": true,
|
||||||
|
"required": true,
|
||||||
|
"system": true,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"autogeneratePattern": "",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "text1579384326",
|
||||||
|
"max": 0,
|
||||||
|
"min": 0,
|
||||||
|
"name": "name",
|
||||||
|
"pattern": "",
|
||||||
|
"presentable": false,
|
||||||
|
"primaryKey": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cascadeDelete": false,
|
||||||
|
"collectionId": "pbc_3754236674",
|
||||||
|
"hidden": false,
|
||||||
|
"id": "relation1542800728",
|
||||||
|
"maxSelect": 1,
|
||||||
|
"minSelect": 0,
|
||||||
|
"name": "field",
|
||||||
|
"presentable": false,
|
||||||
|
"required": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "relation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "autodate2990389176",
|
||||||
|
"name": "created",
|
||||||
|
"onCreate": true,
|
||||||
|
"onUpdate": false,
|
||||||
|
"presentable": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "autodate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hidden": false,
|
||||||
|
"id": "autodate3332085495",
|
||||||
|
"name": "updated",
|
||||||
|
"onCreate": true,
|
||||||
|
"onUpdate": true,
|
||||||
|
"presentable": false,
|
||||||
|
"system": false,
|
||||||
|
"type": "autodate"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"indexes": [],
|
||||||
|
"system": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "pbc_1170220047",
|
"id": "pbc_1170220047",
|
||||||
"listRule": "",
|
"listRule": "",
|
||||||
@@ -241,16 +316,6 @@ migrate(app => {
|
|||||||
"system": false,
|
"system": false,
|
||||||
"type": "json"
|
"type": "json"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"hidden": false,
|
|
||||||
"id": "json1357546519",
|
|
||||||
"maxSize": 0,
|
|
||||||
"name": "itemuses",
|
|
||||||
"presentable": false,
|
|
||||||
"required": false,
|
|
||||||
"system": false,
|
|
||||||
"type": "json"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
"id": "number2901680126",
|
"id": "number2901680126",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { HelixUser } from "@twurple/api"
|
import { HelixUser } from "@twurple/api"
|
||||||
import { changeBalance, getInventory, updateInventory } from "../lib/userHelper"
|
import { addUsedItem, changeBalance, getInventory, updateInventory } from "../lib/userHelper"
|
||||||
import { timeout, addTimeoutToDB, vulnerableUsers } from "./timeoutHelper"
|
import { timeout, addTimeoutToDB, vulnerableUsers } from "./timeoutHelper"
|
||||||
import api, { broadcasterApi } from "./api"
|
import api, { broadcasterApi } from "./api"
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ export async function changeItemCount(user: HelixUser, item: string, amount = -1
|
|||||||
value: newcount,
|
value: newcount,
|
||||||
})
|
})
|
||||||
await updateInventory(user, inv)
|
await updateInventory(user, inv)
|
||||||
|
await addUsedItem(user, item)
|
||||||
return { result: true, reason: '', count: inv[item] }
|
return { result: true, reason: '', count: inv[item] }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,11 +23,17 @@ export interface Timeout extends BaseModel {
|
|||||||
targetname: string
|
targetname: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface UsedItem extends BaseModel {
|
||||||
|
name: string,
|
||||||
|
user: string
|
||||||
|
}
|
||||||
|
|
||||||
interface TypedPocketBase extends PocketBase {
|
interface TypedPocketBase extends PocketBase {
|
||||||
collection(idOrName: string): RecordService,
|
collection(idOrName: string): RecordService,
|
||||||
collection(idOrName: 'users'): RecordService<User>,
|
collection(idOrName: 'users'): RecordService<User>,
|
||||||
collection(idOrName: 'ttvauth'): RecordService<TTVAuth>
|
collection(idOrName: 'ttvauth'): RecordService<TTVAuth>
|
||||||
collection(idOrName: 'timeouts'): RecordService<Timeout>
|
collection(idOrName: 'timeouts'): RecordService<Timeout>
|
||||||
|
collection(idOrName: 'itemuses'): RecordService<UsedItem>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ export async function changeBalance(user: HelixUser, amount: number): Promise<ba
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface timeoutsGetResult {
|
interface timeoutsGetResult {
|
||||||
user: HelixUser,
|
|
||||||
hit: {
|
hit: {
|
||||||
blaster: number, // I'm going to combine blaster, grenade and tnt into one.
|
blaster: number, // I'm going to combine blaster, grenade and tnt into one.
|
||||||
silverbullet: number,
|
silverbullet: number,
|
||||||
@@ -63,9 +62,7 @@ interface timeoutsGetResult {
|
|||||||
|
|
||||||
const BLASTERS = ['blaster', 'grenade', 'tnt']
|
const BLASTERS = ['blaster', 'grenade', 'tnt']
|
||||||
|
|
||||||
async function getTimeouts(user: HelixUser): Promise<timeoutsGetResult> {
|
async function getTimeouts(userDBID: string): Promise<timeoutsGetResult> {
|
||||||
await DBValidation(user)
|
|
||||||
const userDBID = await getDBID(user)
|
|
||||||
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userDBID}"` })
|
const hit = await pb.collection('timeouts').getFullList({ filter: `target="${userDBID}"` })
|
||||||
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userDBID}"` })
|
const shot = await pb.collection('timeouts').getFullList({ filter: `attacker="${userDBID}"` })
|
||||||
|
|
||||||
@@ -75,7 +72,6 @@ async function getTimeouts(user: HelixUser): Promise<timeoutsGetResult> {
|
|||||||
const silverbulletshot = shot.length - blastershot
|
const silverbulletshot = shot.length - blastershot
|
||||||
|
|
||||||
return {
|
return {
|
||||||
user,
|
|
||||||
hit: {
|
hit: {
|
||||||
blaster: blasterhit,
|
blaster: blasterhit,
|
||||||
silverbullet: silverbullethit
|
silverbullet: silverbullethit
|
||||||
@@ -87,6 +83,19 @@ async function getTimeouts(user: HelixUser): Promise<timeoutsGetResult> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getItemUses(userDBID: string): Promise<inventory> {
|
||||||
|
const items = await pb.collection('itemuses').getFullList({ filter: `user="${userDBID}"` })
|
||||||
|
return {
|
||||||
|
version: 1,
|
||||||
|
blaster: items.filter((item) => item.name === 'blaster').length,
|
||||||
|
grenade: items.filter((item) => item.name === 'grenade').length,
|
||||||
|
silverbullet: items.filter((item) => item.name === 'silverbullet').length,
|
||||||
|
tnt: items.filter((item) => item.name === 'tnt').length,
|
||||||
|
clipboard: items.filter((item) => item.name === 'clipboard').length,
|
||||||
|
lootbox: items.filter((item) => item.name === 'lootbox').length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export interface inventory {
|
export interface inventory {
|
||||||
version: number,
|
version: number,
|
||||||
|
|
||||||
@@ -110,9 +119,11 @@ interface statsGetResult extends timeoutsGetResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getStats(user: HelixUser): Promise<statsGetResult> {
|
export async function getStats(user: HelixUser): Promise<statsGetResult> {
|
||||||
const { hit, shot } = await getTimeouts(user)
|
await DBValidation(user)
|
||||||
const dbuser = await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
|
const userDBID = await getDBID(user)
|
||||||
return { user, hit, shot, used: dbuser.itemuses }
|
const { hit, shot } = await getTimeouts(userDBID)
|
||||||
|
const uses = await getItemUses(userDBID)
|
||||||
|
return { hit, shot, used: uses }
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateInventory(user: HelixUser, newinv: inventory) {
|
export async function updateInventory(user: HelixUser, newinv: inventory) {
|
||||||
@@ -122,6 +133,12 @@ export async function updateInventory(user: HelixUser, newinv: inventory) {
|
|||||||
await pb.collection('users').update(recordid, { inventory: newinv })
|
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 })
|
||||||
|
}
|
||||||
|
|
||||||
async function DBValidation(user: HelixUser) {
|
async function DBValidation(user: HelixUser) {
|
||||||
try {
|
try {
|
||||||
await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
|
await pb.collection('users').getFirstListItem(`twitchid="${user.id}"`)
|
||||||
|
|||||||
Reference in New Issue
Block a user