1
0

RulesManager.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System.Net;
  2. using Content.Server.Database;
  3. using Content.Shared.CCVar;
  4. using Content.Shared.Info;
  5. using Robust.Shared.Configuration;
  6. using Robust.Shared.Network;
  7. namespace Content.Server.Info;
  8. public sealed class RulesManager
  9. {
  10. [Dependency] private readonly IServerDbManager _dbManager = default!;
  11. [Dependency] private readonly INetManager _netManager = default!;
  12. [Dependency] private readonly IConfigurationManager _cfg = default!;
  13. private static DateTime LastValidReadTime => DateTime.UtcNow - TimeSpan.FromDays(60);
  14. public void Initialize()
  15. {
  16. _netManager.Connected += OnConnected;
  17. _netManager.RegisterNetMessage<SendRulesInformationMessage>();
  18. _netManager.RegisterNetMessage<RulesAcceptedMessage>(OnRulesAccepted);
  19. }
  20. private async void OnConnected(object? sender, NetChannelArgs e)
  21. {
  22. var isLocalhost = IPAddress.IsLoopback(e.Channel.RemoteEndPoint.Address) &&
  23. _cfg.GetCVar(CCVars.RulesExemptLocal);
  24. var lastRead = await _dbManager.GetLastReadRules(e.Channel.UserId);
  25. var hasCooldown = lastRead > LastValidReadTime;
  26. var showRulesMessage = new SendRulesInformationMessage
  27. {
  28. PopupTime = _cfg.GetCVar(CCVars.RulesWaitTime),
  29. CoreRules = _cfg.GetCVar(CCVars.RulesFile),
  30. ShouldShowRules = !isLocalhost && !hasCooldown,
  31. };
  32. _netManager.ServerSendMessage(showRulesMessage, e.Channel);
  33. }
  34. private async void OnRulesAccepted(RulesAcceptedMessage message)
  35. {
  36. var date = DateTime.UtcNow;
  37. await _dbManager.SetLastReadRules(message.MsgChannel.UserId, date);
  38. }
  39. }