Files
skidfire fe3468c65d yikes,
2026-09-06 19:59:27 -04:00

56 lines
1.9 KiB
C#

using System;
using System.IO;
using LiteDB;
using Vanadium.Classes.DBs.DBClasses;
using static Vanadium.Classes.DBs.DBClasses.AntiCheatDBClasses;
namespace Vanadium.Classes.DBs
{
public static class AntiCheatDB
{
public static LiteDatabase DBFile = new LiteDatabase("Filename=" + Path.Join(Program.dataDir, "DBs", "AntiCheat.db") + ";Connection=shared");
public static readonly ILiteCollection<Detection> Detections = DBFile.GetCollection<Detection>("Detections");
static AntiCheatDB()
{
Detections.EnsureIndex(x => x.PlayerId);
Detections.EnsureIndex(x => x.SteamId);
}
public static Detection Record(long playerId, string username, ulong steamId, string type,
string reason, string modVersion, long? roomId, TimeSpan dedupWindow, out bool isNew)
{
var cutoff = DateTime.UtcNow - dedupWindow;
var existing = Detections.FindOne(d =>
d.PlayerId == playerId && d.Type == type && d.Reason == reason && d.LastSeen >= cutoff);
if (existing != null)
{
existing.Count++;
existing.LastSeen = DateTime.UtcNow;
Detections.Update(existing);
isNew = false;
return existing;
}
var detection = new Detection
{
Id = ObjectId.NewObjectId(),
PlayerId = playerId,
Username = username,
SteamId = steamId,
Type = type,
Reason = reason,
ModVersion = modVersion,
RoomId = roomId,
DetectedAt = DateTime.UtcNow,
LastSeen = DateTime.UtcNow,
Count = 1
};
Detections.Insert(detection);
isNew = true;
return detection;
}
}
}