Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 8c4ada0

Browse files
committed
Patch v1.3.2
1 parent 890ca17 commit 8c4ada0

File tree

3 files changed

+107
-64
lines changed

3 files changed

+107
-64
lines changed

CHANGELOG

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
-- 2024. 05. 21 - v1.3.2
2+
3+
- feat: Added option to disable join logs
4+
- feat: Added the user's account oldness in days too
5+
- fix: Lag spikes caused by database
6+
- refactor: Violation check function readability improved
7+
18
-- 2024. 05. 19 - v1.3.1
29

310
- feat: Added detection to know if database is used

src/KitsuneSteamRestrict.cs

Lines changed: 98 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@
66

77
using System.Text.Json.Serialization;
88
using Microsoft.Extensions.Logging;
9+
using Steamworks;
10+
using CounterStrikeSharp.API.Modules.Cvars;
911

1012
namespace KitsuneSteamRestrict;
1113

1214
public class PluginConfig : BasePluginConfig
1315
{
16+
[JsonPropertyName("LogProfileInformations")]
17+
public bool LogProfileInformations { get; set; } = true;
18+
1419
[JsonPropertyName("SteamWebAPI")]
1520
public string SteamWebAPI { get; set; } = "";
1621

@@ -54,7 +59,7 @@ public class PluginConfig : BasePluginConfig
5459
public DatabaseSettings DatabaseSettings { get; set; } = new DatabaseSettings();
5560

5661
[JsonPropertyName("ConfigVersion")]
57-
public override int Version { get; set; } = 2;
62+
public override int Version { get; set; } = 3;
5863
}
5964

6065
public sealed class DatabaseSettings
@@ -88,7 +93,7 @@ public sealed class DatabaseSettings
8893
public class SteamRestrictPlugin : BasePlugin, IPluginConfig<PluginConfig>
8994
{
9095
public override string ModuleName => "Steam Restrict";
91-
public override string ModuleVersion => "1.3.1";
96+
public override string ModuleVersion => "1.3.2";
9297
public override string ModuleAuthor => "K4ryuu, Cruze @ KitsuneLab";
9398
public override string ModuleDescription => "Restrict certain players from connecting to your server.";
9499

@@ -120,7 +125,7 @@ public override void Load(bool hotReload)
120125
if (!IsDatabaseConfigDefault())
121126
{
122127
var databaseService = new DatabaseService(Config.DatabaseSettings);
123-
_ = databaseService.EnsureTablesExistAsync();
128+
Task.Run(databaseService.EnsureTablesExistAsync);
124129
}
125130

126131
RegisterListener<Listeners.OnGameServerSteamAPIActivated>(() => { g_bSteamAPIActivated = true; });
@@ -198,44 +203,63 @@ private void OnPlayerConnectFull(CCSPlayerController player)
198203

199204
private void CheckUserViolations(nint handle, ulong authorizedSteamID)
200205
{
201-
SteamService steamService = new SteamService(this);
202-
steamService.FetchSteamUserInfo(handle, authorizedSteamID);
206+
CSteamID cSteamID = new CSteamID(authorizedSteamID);
203207

204-
SteamUserInfo? userInfo = steamService.UserInfo;
208+
SteamUserInfo UserInfo = new SteamUserInfo
209+
{
210+
HasPrime = SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)624820) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense
211+
|| SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)54029) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense,
212+
CS2Level = new CCSPlayerController_InventoryServices(handle).PersonaDataPublicLevel
213+
};
205214

206-
CCSPlayerController? player = Utilities.GetPlayerFromSteamId(authorizedSteamID);
215+
SteamService steamService = new SteamService(this, UserInfo);
207216

208-
if (player?.IsValid == true && userInfo != null)
217+
Task.Run(async () =>
209218
{
210-
Logger.LogInformation($"{player.PlayerName} info:");
211-
Logger.LogInformation($"CS2Playtime: {userInfo.CS2Playtime}");
212-
Logger.LogInformation($"CS2Level: {userInfo.CS2Level}");
213-
Logger.LogInformation($"SteamLevel: {userInfo.SteamLevel}");
214-
if ((DateTime.Now - userInfo.SteamAccountAge).TotalSeconds > 30)
215-
Logger.LogInformation($"Steam Account Creation Date: {userInfo.SteamAccountAge:dd-MM-yyyy}");
216-
else
217-
Logger.LogInformation($"Steam Account Creation Date: N/A");
218-
Logger.LogInformation($"HasPrime: {userInfo.HasPrime}");
219-
Logger.LogInformation($"HasPrivateProfile: {userInfo.IsPrivate}");
220-
Logger.LogInformation($"IsTradeBanned: {userInfo.IsTradeBanned}");
221-
Logger.LogInformation($"IsGameBanned: {userInfo.IsGameBanned}");
222-
Logger.LogInformation($"IsInSteamGroup: {userInfo.IsInSteamGroup}");
223-
224-
if (IsRestrictionViolated(player, userInfo))
225-
{
226-
Server.ExecuteCommand($"kickid {player.UserId} \"You have been kicked for not meeting the minimum requirements.\"");
227-
}
228-
else if (!IsDatabaseConfigDefault())
219+
await steamService.FetchSteamUserInfo(authorizedSteamID.ToString());
220+
221+
SteamUserInfo? userInfo = steamService.UserInfo;
222+
223+
Server.NextWorldUpdate(() =>
229224
{
230-
ulong steamID = player.AuthorizedSteamID?.SteamId64 ?? 0;
225+
CCSPlayerController? player = Utilities.GetPlayerFromSteamId(authorizedSteamID);
231226

232-
if (steamID != 0)
227+
if (player?.IsValid == true && userInfo != null)
233228
{
234-
var databaseService = new DatabaseService(Config.DatabaseSettings);
235-
Task.Run(async () => await databaseService.AddAllowedUserAsync(steamID, Config.DatabaseSettings.TablePurgeDays));
229+
if (Config.LogProfileInformations)
230+
{
231+
Logger.LogInformation($"{player.PlayerName} info:");
232+
Logger.LogInformation($"CS2Playtime: {userInfo.CS2Playtime}");
233+
Logger.LogInformation($"CS2Level: {userInfo.CS2Level}");
234+
Logger.LogInformation($"SteamLevel: {userInfo.SteamLevel}");
235+
if ((DateTime.Now - userInfo.SteamAccountAge).TotalSeconds > 30)
236+
Logger.LogInformation($"Steam Account Creation Date: {userInfo.SteamAccountAge:dd-MM-yyyy} ({(int)(DateTime.Now - userInfo.SteamAccountAge).TotalDays} days ago)");
237+
else
238+
Logger.LogInformation($"Steam Account Creation Date: N/A");
239+
Logger.LogInformation($"HasPrime: {userInfo.HasPrime}");
240+
Logger.LogInformation($"HasPrivateProfile: {userInfo.IsPrivate}");
241+
Logger.LogInformation($"IsTradeBanned: {userInfo.IsTradeBanned}");
242+
Logger.LogInformation($"IsGameBanned: {userInfo.IsGameBanned}");
243+
Logger.LogInformation($"IsInSteamGroup: {userInfo.IsInSteamGroup}");
244+
}
245+
246+
if (IsRestrictionViolated(player, userInfo))
247+
{
248+
Server.ExecuteCommand($"kickid {player.UserId} \"You have been kicked for not meeting the minimum requirements.\"");
249+
}
250+
else if (!IsDatabaseConfigDefault())
251+
{
252+
ulong steamID = player.AuthorizedSteamID?.SteamId64 ?? 0;
253+
254+
if (steamID != 0)
255+
{
256+
var databaseService = new DatabaseService(Config.DatabaseSettings);
257+
Task.Run(async () => await databaseService.AddAllowedUserAsync(steamID, Config.DatabaseSettings.TablePurgeDays));
258+
}
259+
}
236260
}
237-
}
238-
}
261+
});
262+
});
239263
}
240264

241265
private bool IsRestrictionViolated(CCSPlayerController player, SteamUserInfo userInfo)
@@ -245,25 +269,50 @@ private bool IsRestrictionViolated(CCSPlayerController player, SteamUserInfo use
245269

246270
BypassConfig bypassConfig = _bypassConfig ?? new BypassConfig();
247271
PlayerBypassConfig? playerBypassConfig = bypassConfig.GetPlayerConfig(player.AuthorizedSteamID?.SteamId64 ?? 0);
248-
249272
bool isPrime = userInfo.HasPrime;
250-
var configChecks = new[]
273+
274+
if (isPrime)
251275
{
252-
(isPrime && (playerBypassConfig?.BypassMinimumCS2Level ?? false), Config.MinimumCS2LevelPrime, userInfo.CS2Level),
253-
(!isPrime && (playerBypassConfig?.BypassMinimumCS2Level ?? false), Config.MinimumCS2LevelNonPrime, userInfo.CS2Level),
254-
(isPrime && (playerBypassConfig?.BypassMinimumHours ?? false), Config.MinimumHourPrime, userInfo.CS2Playtime),
255-
(!isPrime && (playerBypassConfig?.BypassMinimumHours ?? false), Config.MinimumHourNonPrime, userInfo.CS2Playtime),
256-
(isPrime && (playerBypassConfig?.BypassMinimumLevel ?? false), Config.MinimumLevelPrime, userInfo.SteamLevel),
257-
(!isPrime && (playerBypassConfig?.BypassMinimumLevel ?? false), Config.MinimumLevelNonPrime, userInfo.SteamLevel),
258-
(playerBypassConfig?.BypassMinimumSteamAccountAge ?? false, Config.MinimumSteamAccountAgeInDays, (DateTime.Now - userInfo.SteamAccountAge).TotalDays),
259-
(Config.BlockPrivateProfile && (playerBypassConfig?.BypassPrivateProfile ?? false), 1, userInfo.IsPrivate ? 0 : 1),
260-
(Config.BlockTradeBanned && (playerBypassConfig?.BypassTradeBanned ?? false), 1, userInfo.IsTradeBanned ? 0 : 1),
261-
(Config.BlockGameBanned && (playerBypassConfig?.BypassGameBanned ?? false), 1, userInfo.IsGameBanned ? 0 : 1),
262-
(!string.IsNullOrEmpty(Config.SteamGroupID) && (playerBypassConfig?.BypassSteamGroupCheck ?? false), 1, userInfo.IsInSteamGroup ? 1 : 0),
263-
(Config.BlockVACBanned && (playerBypassConfig?.BypassVACBanned ?? false), 1, userInfo.IsVACBanned ? 0 : 1),
264-
};
276+
if (!(playerBypassConfig?.BypassMinimumCS2Level ?? false) && Config.MinimumCS2LevelPrime != -1 && userInfo.CS2Level < Config.MinimumCS2LevelPrime)
277+
return true;
278+
279+
if (!(playerBypassConfig?.BypassMinimumHours ?? false) && Config.MinimumHourPrime != -1 && userInfo.CS2Playtime < Config.MinimumHourPrime)
280+
return true;
281+
282+
if (!(playerBypassConfig?.BypassMinimumLevel ?? false) && Config.MinimumLevelPrime != -1 && userInfo.SteamLevel < Config.MinimumLevelPrime)
283+
return true;
284+
}
285+
else
286+
{
287+
if (!(playerBypassConfig?.BypassMinimumCS2Level ?? false) && Config.MinimumCS2LevelNonPrime != -1 && userInfo.CS2Level < Config.MinimumCS2LevelNonPrime)
288+
return true;
289+
290+
if (!(playerBypassConfig?.BypassMinimumHours ?? false) && Config.MinimumHourNonPrime != -1 && userInfo.CS2Playtime < Config.MinimumHourNonPrime)
291+
return true;
292+
293+
if (!(playerBypassConfig?.BypassMinimumLevel ?? false) && Config.MinimumLevelNonPrime != -1 && userInfo.SteamLevel < Config.MinimumLevelNonPrime)
294+
return true;
295+
}
296+
297+
if (!(playerBypassConfig?.BypassMinimumSteamAccountAge ?? false) && Config.MinimumSteamAccountAgeInDays != -1 && (DateTime.Now - userInfo.SteamAccountAge).TotalDays < Config.MinimumSteamAccountAgeInDays)
298+
return true;
299+
300+
if (Config.BlockPrivateProfile && !(playerBypassConfig?.BypassPrivateProfile ?? false) && userInfo.IsPrivate)
301+
return true;
302+
303+
if (Config.BlockTradeBanned && !(playerBypassConfig?.BypassTradeBanned ?? false) && userInfo.IsTradeBanned)
304+
return true;
305+
306+
if (Config.BlockGameBanned && !(playerBypassConfig?.BypassGameBanned ?? false) && userInfo.IsGameBanned)
307+
return true;
308+
309+
if (!string.IsNullOrEmpty(Config.SteamGroupID) && !(playerBypassConfig?.BypassSteamGroupCheck ?? false) && !userInfo.IsInSteamGroup)
310+
return true;
311+
312+
if (Config.BlockVACBanned && !(playerBypassConfig?.BypassVACBanned ?? false) && userInfo.IsVACBanned)
313+
return true;
265314

266-
return configChecks.Any(check => check.Item1 && check.Item2 != -1 && check.Item3 < check.Item2);
315+
return false;
267316
}
268317

269318
public bool IsDatabaseConfigDefault()

src/Models/SteamService.cs

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,13 @@ public class SteamService
2828
private readonly ILogger _logger;
2929
public SteamUserInfo? UserInfo = null;
3030

31-
public SteamService(SteamRestrictPlugin plugin)
31+
public SteamService(SteamRestrictPlugin plugin, SteamUserInfo userInfo)
3232
{
3333
_httpClient = plugin.Client;
3434
_config = plugin.Config;
3535
_logger = plugin.Logger;
3636
_steamWebAPIKey = _config.SteamWebAPI;
37-
}
38-
39-
public void FetchSteamUserInfo(nint handle, ulong authorizedSteamID)
40-
{
41-
CSteamID cSteamID = new CSteamID(authorizedSteamID);
42-
43-
UserInfo = new SteamUserInfo
44-
{
45-
HasPrime = SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)624820) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense
46-
|| SteamGameServer.UserHasLicenseForApp(cSteamID, (AppId_t)54029) == EUserHasLicenseForAppResult.k_EUserHasLicenseResultHasLicense,
47-
CS2Level = new CCSPlayerController_InventoryServices(handle).PersonaDataPublicLevel
48-
};
49-
50-
Task.Run(async () => await FetchSteamUserInfo(authorizedSteamID.ToString())).Wait();
37+
UserInfo = userInfo;
5138
}
5239

5340
public async Task FetchSteamUserInfo(string steamId)

0 commit comments

Comments
 (0)