mirror of
https://github.com/qwerinope/qweribot.git
synced 2025-12-19 08:41:39 +01:00
#4 done. added qbucks, monthly and alltime leaderboards
This commit is contained in:
43
src/commands/alltimekdleaderboard.ts
Normal file
43
src/commands/alltimekdleaderboard.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { Command, sendMessage } from "commands";
|
||||
import { getAllUserRecords } from "db/dbUser";
|
||||
import { getTimeoutStats } from "lib/getStats";
|
||||
import User from "user";
|
||||
|
||||
type KD = { user: User; kd: number; };
|
||||
|
||||
export default new Command({
|
||||
name: 'alltimekdleaderboard',
|
||||
aliases: ['alltimeleaderboard', 'alltimekdleaderboard'],
|
||||
usertype: 'chatter',
|
||||
execution: async msg => {
|
||||
const users = await getAllUserRecords();
|
||||
if (!users) return;
|
||||
|
||||
const userKDs: KD[] = [];
|
||||
await Promise.all(users.map(async userRecord => {
|
||||
const user = await User.initUserId(userRecord.id);
|
||||
if (!user) return;
|
||||
const data = await getTimeoutStats(user, false);
|
||||
if (!data) return;
|
||||
if (data.hit.blaster < 5) return;
|
||||
|
||||
let kd = data.shot.blaster / data.hit.blaster;
|
||||
if (isNaN(kd)) kd = 0;
|
||||
userKDs.push({ user, kd });
|
||||
}));
|
||||
|
||||
if (userKDs.length === 0) {
|
||||
await sendMessage(`No users on leaderboard yet!`, msg.messageId);
|
||||
return;
|
||||
};
|
||||
|
||||
userKDs.sort((a, b) => b.kd - a.kd);
|
||||
|
||||
const txt: string[] = [];
|
||||
for (let i = 0; i < (userKDs.length < 5 ? userKDs.length : 5); i++) {
|
||||
txt.push(`${i + 1}. ${userKDs[i]?.user.displayName}: ${userKDs[i]?.kd.toFixed(2)}`);
|
||||
};
|
||||
|
||||
await sendMessage(`Alltime leaderboard: ${txt.join(' | ')}`, msg.messageId);
|
||||
}
|
||||
});
|
||||
43
src/commands/monthlykdleaderboard.ts
Normal file
43
src/commands/monthlykdleaderboard.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { Command, sendMessage } from "commands";
|
||||
import { getAllUserRecords } from "db/dbUser";
|
||||
import { getTimeoutStats } from "lib/getStats";
|
||||
import User from "user";
|
||||
|
||||
type KD = { user: User; kd: number; };
|
||||
|
||||
export default new Command({
|
||||
name: 'monthlykdleaderboard',
|
||||
aliases: ['monthlyleaderboard', 'kdleaderboard', 'leaderboard'],
|
||||
usertype: 'chatter',
|
||||
execution: async msg => {
|
||||
const users = await getAllUserRecords();
|
||||
if (!users) return;
|
||||
|
||||
const userKDs: KD[] = [];
|
||||
await Promise.all(users.map(async userRecord => {
|
||||
const user = await User.initUserId(userRecord.id);
|
||||
if (!user) return;
|
||||
const data = await getTimeoutStats(user, true);
|
||||
if (!data) return;
|
||||
if (data.hit.blaster < 5) return;
|
||||
|
||||
let kd = data.shot.blaster / data.hit.blaster;
|
||||
if (isNaN(kd)) kd = 0;
|
||||
userKDs.push({ user, kd });
|
||||
}));
|
||||
|
||||
if (userKDs.length === 0) {
|
||||
await sendMessage(`No users on leaderboard yet!`, msg.messageId);
|
||||
return;
|
||||
};
|
||||
|
||||
userKDs.sort((a, b) => b.kd - a.kd);
|
||||
|
||||
const txt: string[] = [];
|
||||
for (let i = 0; i < (userKDs.length < 5 ? userKDs.length : 5); i++) {
|
||||
txt.push(`${i + 1}. ${userKDs[i]?.user.displayName}: ${userKDs[i]?.kd.toFixed(2)}`);
|
||||
};
|
||||
|
||||
await sendMessage(`Monthly leaderboard: ${txt.join(' | ')}`, msg.messageId);
|
||||
}
|
||||
});
|
||||
25
src/commands/qbucksleaderboard.ts
Normal file
25
src/commands/qbucksleaderboard.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { Command, sendMessage } from "commands";
|
||||
import { getBalanceLeaderboard } from "db/dbUser";
|
||||
import User from "user";
|
||||
|
||||
export default new Command({
|
||||
name: 'qbucksleaderboard',
|
||||
aliases: ['qbucksleaderboard', 'baltop', 'moneyleaderboard'],
|
||||
usertype: 'chatter',
|
||||
execution: async msg => {
|
||||
const data = await getBalanceLeaderboard();
|
||||
if (!data) return;
|
||||
|
||||
let index = 1;
|
||||
const txt: string[] = [];
|
||||
for (const userRecord of data) {
|
||||
if (userRecord.balance === 0) continue;
|
||||
const user = await User.initUserId(userRecord.id);
|
||||
if (!user) continue;
|
||||
txt.push(`${index}. ${user.displayName}: ${userRecord.balance}`);
|
||||
index++;
|
||||
};
|
||||
|
||||
await sendMessage(`Balance leaderboard: ${txt.join(' | ')}`, msg.messageId);
|
||||
}
|
||||
});
|
||||
@@ -23,6 +23,10 @@ export async function getUserRecord(user: User): Promise<userRecord> {
|
||||
};
|
||||
};
|
||||
|
||||
export async function getAllUserRecords(): Promise<userRecord[]> {
|
||||
return await pb.getFullList();
|
||||
};
|
||||
|
||||
async function createUserRecord(user: User): Promise<userRecord> {
|
||||
const data = await pb.create({
|
||||
id: user.id,
|
||||
@@ -44,3 +48,11 @@ export async function updateUserRecord(user: User, newData: userRecord): Promise
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
export async function getBalanceLeaderboard() {
|
||||
try {
|
||||
return await pb.getList(1, 10, { sort: '-balance,id' }).then(a => a.items);
|
||||
} catch (err) {
|
||||
logger.err(err as string);
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user