forked from simrail/simrail.pro
51 lines
2.3 KiB
TypeScript
51 lines
2.3 KiB
TypeScript
import { Server, Station } from '@simrail/types';
|
|
import { MLog } from '../mongo/logs.js';
|
|
import { IPlayer } from '../types/player.js';
|
|
import { SimrailClientEvents } from '../util/SimrailClient.js';
|
|
import { v4 } from 'uuid';
|
|
import { MProfile } from '../mongo/profile.js';
|
|
import { SteamUtil } from '../util/SteamUtil.js';
|
|
|
|
export class StationsModule {
|
|
public static load() {
|
|
|
|
client.on(SimrailClientEvents.StationLeft, async (server: Server, station: Station, player: IPlayer, joinedAt: number) => {
|
|
const stats = await SteamUtil.getPlayerStats(player.steamid);
|
|
const date = new Date();
|
|
if (stats) {
|
|
const time = joinedAt ? (date.getTime() - joinedAt) : 0;
|
|
|
|
const userProfile = await MProfile.findOne({ steam: player.steamid }) ?? await MProfile.create({ steam: player.steamid, id: v4(), steamName: player.personaname });
|
|
if (!userProfile.dispatcherStats) userProfile.dispatcherStats = {};
|
|
|
|
if (userProfile.dispatcherStats[station.Name]) {
|
|
userProfile.dispatcherStats[station.Name].time = userProfile.dispatcherStats[station.Name].time + time;
|
|
} else {
|
|
userProfile.dispatcherStats[station.Name] = {
|
|
time
|
|
}
|
|
}
|
|
|
|
if (Number.isNaN(userProfile.dispatcherStats[station.Name].time)) userProfile.dispatcherStats[station.Name].time = 0;
|
|
|
|
if (!userProfile.dispatcherTime) userProfile.dispatcherTime = 0;
|
|
|
|
userProfile.dispatcherTime = userProfile.dispatcherTime + time;
|
|
|
|
await MProfile.findOneAndUpdate({ id: userProfile.id }, { dispatcherStats: userProfile.dispatcherStats, dispatcherTime: userProfile.dispatcherTime })
|
|
}
|
|
|
|
MLog.create({
|
|
id: v4(),
|
|
userSteamId: player.steamid,
|
|
userAvatar: player.avatarfull,
|
|
userUsername: player.personaname,
|
|
joinedDate: joinedAt,
|
|
leftDate: date.getTime(),
|
|
stationName: station.Name,
|
|
stationShort: station.Prefix,
|
|
server: server.ServerCode
|
|
});
|
|
})
|
|
}
|
|
} |