Gulag v2 (#21)
* Components или чет типо того * Gulag System * Shared shit * Cvars * Ban manager update * Ghost roles shit * No ooc for gulaged * Connection manager update * Gulag proto shit * Merge conflict issue * Fixing shit * Фикс говняхи плюс QOL * Pendos loc * better loc * More qol * ctrl+s issue * No bwoink for banned * Ore shit * MAP!!!!!! --------- Co-authored-by: Mona Hmiza <you@example.com>
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server._Miracle.GulagSystem;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Database;
|
||||
using Content.Server.GameTicking;
|
||||
@@ -47,6 +48,7 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
public const string UnknownServer = "unknown";
|
||||
|
||||
private readonly Dictionary<NetUserId, HashSet<ServerRoleBanDef>> _cachedRoleBans = new();
|
||||
private readonly Dictionary<NetUserId, HashSet<ServerBanDef>> _cachedServerBans = new(); // Miracle edit
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
@@ -63,6 +65,7 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
var netChannel = e.Session.Channel;
|
||||
ImmutableArray<byte>? hwId = netChannel.UserData.HWId.Length == 0 ? null : netChannel.UserData.HWId;
|
||||
await CacheDbRoleBans(e.Session.UserId, netChannel.RemoteEndPoint.Address, hwId);
|
||||
await CacheDbServerBans(e.Session.UserId, netChannel.RemoteEndPoint.Address, hwId); //Miracle edit
|
||||
|
||||
SendRoleBans(e.Session);
|
||||
}
|
||||
@@ -97,6 +100,17 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
_cachedRoleBans[userId] = userRoleBans;
|
||||
}
|
||||
|
||||
//Miracle edit start
|
||||
private async Task CacheDbServerBans(NetUserId userId, IPAddress? address = null, ImmutableArray<byte>? hwId = null)
|
||||
{
|
||||
var serverBans = await _db.GetServerBansAsync(address, userId, hwId, false);
|
||||
|
||||
var userServerBans = new HashSet<ServerBanDef>(serverBans);
|
||||
|
||||
_cachedServerBans[userId] = userServerBans;
|
||||
}
|
||||
//Miracle edit end
|
||||
|
||||
public void Restart()
|
||||
{
|
||||
// Clear out players that have disconnected.
|
||||
@@ -110,6 +124,7 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
foreach (var player in toRemove)
|
||||
{
|
||||
_cachedRoleBans.Remove(player);
|
||||
_cachedServerBans.Remove(player); //Miracle edit
|
||||
}
|
||||
|
||||
// Check for expired bans
|
||||
@@ -117,6 +132,13 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
{
|
||||
roleBans.RemoveWhere(ban => DateTimeOffset.Now > ban.ExpirationTime);
|
||||
}
|
||||
|
||||
//Miracle edit start
|
||||
foreach (var serverBan in _cachedServerBans.Values)
|
||||
{
|
||||
serverBan.RemoveWhere(ban => DateTimeOffset.Now > ban.ExpirationTime);
|
||||
}
|
||||
//Miracle edit end
|
||||
}
|
||||
|
||||
#region Server Bans
|
||||
@@ -182,6 +204,12 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
_sawmill.Info(logMessage);
|
||||
_chat.SendAdminAlert(logMessage);
|
||||
|
||||
|
||||
if (banDef.UserId.HasValue)
|
||||
{
|
||||
_cachedServerBans.GetOrNew(banDef.UserId.Value).Add(banDef);
|
||||
}
|
||||
|
||||
// If we're not banning a player we don't care about disconnecting people
|
||||
if (target == null)
|
||||
return;
|
||||
@@ -189,12 +217,32 @@ public sealed class BanManager : IBanManager, IPostInjectInit
|
||||
// Is the player connected?
|
||||
if (!_playerManager.TryGetSessionById(target.Value, out var targetPlayer))
|
||||
return;
|
||||
// If they are, kick them
|
||||
var message = banDef.FormatBanMessage(_cfg, _localizationManager);
|
||||
targetPlayer.Channel.Disconnect(message);
|
||||
// Kick when perma
|
||||
if (banDef.ExpirationTime == null)
|
||||
{
|
||||
var message = banDef.FormatBanMessage(_cfg, _localizationManager);
|
||||
targetPlayer.Channel.Disconnect(message);
|
||||
}
|
||||
else // Teleport to gulag
|
||||
{
|
||||
var gulag = _systems.GetEntitySystem<GulagSystem>();
|
||||
gulag.SendToGulag(targetPlayer);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
//Miracle edit start
|
||||
public HashSet<ServerBanDef> GetServerBans(NetUserId userId)
|
||||
{
|
||||
if (_cachedServerBans.TryGetValue(userId, out var bans))
|
||||
{
|
||||
return bans;
|
||||
}
|
||||
|
||||
return new HashSet<ServerBanDef>();
|
||||
}
|
||||
//Miracle edit end
|
||||
|
||||
#region Job Bans
|
||||
// If you are trying to remove timeOfBan, please don't. It's there because the note system groups role bans by time, reason and banning admin.
|
||||
// Removing it will clutter the note list. Please also make sure that department bans are applied to roles with the same DateTimeOffset.
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Collections.Immutable;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server._White.PandaSocket.Interfaces;
|
||||
using Content.Server.Database;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Shared.Network;
|
||||
@@ -28,6 +29,8 @@ public interface IBanManager
|
||||
public HashSet<string>? GetRoleBans(NetUserId playerUserId);
|
||||
public HashSet<string>? GetJobBans(NetUserId playerUserId);
|
||||
|
||||
public HashSet<ServerBanDef> GetServerBans(NetUserId userId); // Miracle edit
|
||||
|
||||
/// <summary>
|
||||
/// Creates a job ban for the specified target, username or GUID
|
||||
/// </summary>
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Text.Json.Nodes;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server._Miracle.GulagSystem;
|
||||
using Content.Server.Administration.Managers;
|
||||
using Content.Server.GameTicking;
|
||||
using Content.Server._White.PandaSocket.Main;
|
||||
@@ -35,6 +36,8 @@ namespace Content.Server.Administration.Systems
|
||||
[Dependency] private readonly GameTicker _gameTicker = default!;
|
||||
[Dependency] private readonly SharedMindSystem _minds = default!;
|
||||
[Dependency] private readonly PandaWebManager _pandaWeb = default!; // WD
|
||||
[Dependency] private readonly GulagSystem _gulagSystem = default!; // Miracle
|
||||
|
||||
|
||||
private ISawmill _sawmill = default!;
|
||||
private readonly HttpClient _httpClient = new();
|
||||
@@ -389,6 +392,12 @@ namespace Content.Server.Administration.Systems
|
||||
base.OnBwoinkTextMessage(message, eventArgs);
|
||||
var senderSession = eventArgs.SenderSession;
|
||||
|
||||
//No bwoink for banned
|
||||
if (_gulagSystem.IsUserGulaged(senderSession.UserId, out _))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Sanitize text?
|
||||
// Confirm that this person is actually allowed to send a message here.
|
||||
var personalChannel = senderSession.UserId == message.UserId;
|
||||
|
||||
Reference in New Issue
Block a user