feat(discord-bot): improve 'track', 'tejtrack' commands and tracking service
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user