Files
crystall-punk-14/Content.Server/Info/RulesManager.cs

49 lines
1.5 KiB
C#
Raw Normal View History

using System.Net;
using Content.Server.Database;
using Content.Shared.CCVar;
using Content.Shared.Info;
using Robust.Shared.Configuration;
2021-12-28 23:31:18 -08:00
using Robust.Shared.Network;
namespace Content.Server.Info;
public sealed class RulesManager : SharedRulesManager
2021-12-28 23:31:18 -08:00
{
[Dependency] private readonly IServerDbManager _dbManager = default!;
2021-12-28 23:31:18 -08:00
[Dependency] private readonly INetManager _netManager = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
2021-12-28 23:31:18 -08:00
private static DateTime LastValidReadTime => DateTime.UtcNow - TimeSpan.FromDays(60);
2021-12-28 23:31:18 -08:00
public void Initialize()
{
_netManager.RegisterNetMessage<ShouldShowRulesPopupMessage>();
2021-12-28 23:31:18 -08:00
_netManager.RegisterNetMessage<ShowRulesPopupMessage>();
_netManager.RegisterNetMessage<RulesAcceptedMessage>(OnRulesAccepted);
_netManager.Connected += OnConnected;
}
private async void OnConnected(object? sender, NetChannelArgs e)
{
if (IPAddress.IsLoopback(e.Channel.RemoteEndPoint.Address) && _cfg.GetCVar(CCVars.RulesExemptLocal))
{
return;
}
var lastRead = await _dbManager.GetLastReadRules(e.Channel.UserId);
if (lastRead > LastValidReadTime)
{
return;
}
var message = new ShouldShowRulesPopupMessage();
_netManager.ServerSendMessage(message, e.Channel);
}
private async void OnRulesAccepted(RulesAcceptedMessage message)
{
var date = DateTime.UtcNow;
await _dbManager.SetLastReadRules(message.MsgChannel.UserId, date);
2021-12-28 23:31:18 -08:00
}
}