feat(discord-bot): improve 'track', 'tejtrack' commands and tracking service

This commit is contained in:
Pihkaal
2025-12-05 19:42:02 +01:00
parent 66474dc813
commit 8c78725e65
5 changed files with 126 additions and 161 deletions

View File

@@ -11,33 +11,40 @@ export async function listTrackedPlayers(): Promise<string[]> {
return players.map((p) => p.playerId);
}
export async function untrackWovPlayer(
playerId: string,
): Promise<{ event: "notTracked" } | { event: "trackerRemoved" }> {
export async function isWovPlayerTracked(playerId: string): Promise<boolean> {
const player = await db.query.trackedPlayers.findFirst({
where: eq(tables.trackedPlayers.playerId, playerId),
});
if (!player) return { event: "notTracked" };
return player !== undefined;
}
export async function untrackWovPlayer(playerId: string): Promise<void> {
await db
.delete(tables.trackedPlayers)
.where(eq(tables.trackedPlayers.playerId, playerId));
return { event: "trackerRemoved" };
}
export async function trackWovPlayer(playerId: string): Promise<
| { event: "notFound" }
| {
event: "registered";
}
| { event: "changed"; oldUsernames: string[]; newUsername: string }
| { event: "none" }
> {
const player = await getPlayer(playerId);
if (!player) return { event: "notFound" };
export async function trackWovPlayer(playerId: string): Promise<void> {
const alreadyTracked = await isWovPlayerTracked(playerId);
if (alreadyTracked) return;
const player = await getPlayer(playerId);
if (!player) return;
await db.insert(tables.trackedPlayers).values({
playerId,
});
await db.insert(tables.usernameHistory).values({
playerId,
username: player.username,
});
}
export async function getTrackedPlayerUsernames(
playerId: string,
): Promise<string[]> {
const tracked = await db.query.trackedPlayers.findFirst({
where: eq(tables.trackedPlayers.playerId, playerId),
with: {
@@ -47,40 +54,21 @@ export async function trackWovPlayer(playerId: string): Promise<
},
});
if (tracked) {
const currentUsernames = tracked.usernameHistory.map((h) => h.username);
if (!currentUsernames.includes(player.username)) {
await db.insert(tables.usernameHistory).values({
playerId,
username: player.username,
});
await db
.update(tables.trackedPlayers)
.set({ updatedAt: new Date() })
.where(eq(tables.trackedPlayers.playerId, playerId));
return {
event: "changed",
oldUsernames: currentUsernames,
newUsername: player.username,
};
} else {
return {
event: "none",
};
}
} else {
await db.insert(tables.trackedPlayers).values({
playerId,
});
await db.insert(tables.usernameHistory).values({
playerId,
username: player.username,
});
return { event: "registered" };
}
if (!tracked) return [];
return tracked.usernameHistory.map((h) => h.username);
}
export async function addUsernameToHistory(
playerId: string,
username: string,
): Promise<void> {
await db.insert(tables.usernameHistory).values({
playerId,
username,
});
await db
.update(tables.trackedPlayers)
.set({ updatedAt: new Date() })
.where(eq(tables.trackedPlayers.playerId, playerId));
}