| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using Content.Shared.Database;
- using Robust.Shared.Configuration;
- using Robust.Shared.Player;
- namespace Content.Shared.Players.RateLimiting;
- /// <summary>
- /// Contains all data necessary to register a rate limit with <see cref="SharedPlayerRateLimitManager.Register"/>.
- /// </summary>
- public sealed class RateLimitRegistration(
- CVarDef<float> cVarLimitPeriodLength,
- CVarDef<int> cVarLimitCount,
- Action<ICommonSession>? playerLimitedAction,
- CVarDef<int>? cVarAdminAnnounceDelay = null,
- Action<ICommonSession>? adminAnnounceAction = null,
- LogType adminLogType = LogType.RateLimited)
- {
- /// <summary>
- /// CVar that controls the period over which the rate limit is counted, measured in seconds.
- /// </summary>
- public readonly CVarDef<float> CVarLimitPeriodLength = cVarLimitPeriodLength;
- /// <summary>
- /// CVar that controls how many actions are allowed in a single rate limit period.
- /// </summary>
- public readonly CVarDef<int> CVarLimitCount = cVarLimitCount;
- /// <summary>
- /// An action that gets invoked when this rate limit has been breached by a player.
- /// </summary>
- /// <remarks>
- /// This can be used for informing players or taking administrative action.
- /// </remarks>
- public readonly Action<ICommonSession>? PlayerLimitedAction = playerLimitedAction;
- /// <summary>
- /// CVar that controls the minimum delay between admin notifications, measured in seconds.
- /// This can be omitted to have no admin notification system.
- /// If the cvar is set to 0, there every breach will be reported.
- /// If the cvar is set to a negative number, admin announcements are disabled.
- /// </summary>
- /// <remarks>
- /// If set, <see cref="AdminAnnounceAction"/> must be set too.
- /// </remarks>
- public readonly CVarDef<int>? CVarAdminAnnounceDelay = cVarAdminAnnounceDelay;
- /// <summary>
- /// An action that gets invoked when a rate limit was breached and admins should be notified.
- /// </summary>
- /// <remarks>
- /// If set, <see cref="CVarAdminAnnounceDelay"/> must be set too.
- /// </remarks>
- public readonly Action<ICommonSession>? AdminAnnounceAction = adminAnnounceAction;
- /// <summary>
- /// Log type used to log rate limit violations to the admin logs system.
- /// </summary>
- public readonly LogType AdminLogType = adminLogType;
- }
- /// <summary>
- /// Result of a rate-limited operation.
- /// </summary>
- /// <seealso cref="SharedPlayerRateLimitManager.CountAction"/>
- public enum RateLimitStatus : byte
- {
- /// <summary>
- /// The action was not blocked by the rate limit.
- /// </summary>
- Allowed,
- /// <summary>
- /// The action was blocked by the rate limit.
- /// </summary>
- Blocked,
- }
|