mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 05:27:38 +03:00
## Mirror of PR #26223: [Improve admin message seen/dismiss state.](https://github.com/space-wizards/space-station-14/pull/26223) from <img src="https://avatars.githubusercontent.com/u/10567778?v=4" alt="space-wizards" width="22"/> [space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14) ###### `d776c4b392a082dba7539d77cfa20fc904ed4091` PR opened by <img src="https://avatars.githubusercontent.com/u/8107459?v=4" width="16"/><a href="https://github.com/PJB3005"> PJB3005</a> at 2024-03-18 04:02:20 UTC --- PR changed 21 files with 3748 additions and 108 deletions. The PR had the following labels: - Changes: UI - Status: Needs Review --- <details open="true"><summary><h1>Original Body</h1></summary> > As part of this, it has become impossible for a player to play without dismissing the message in some form. Instead of a shitty popup window, the popup is now a fullscreen overlay that blocks clicks behind it, making the game unplayable. Also, if a user somehow has multiple messages they will be combined into one popup. > > ## About the PR > Admin messages now have separate "seen" and "dismissed" fields. The idea is that an admin should be able to tell whether a user pressed the "dismiss for now" button. Instead of using "seen" as "show this message to players when they join", "dismissed" is now used for this. > > ## Why / Balance > Fixes #26211 > > ## Technical details > Existing notes in the database will automatically be marked as dismissed on migration. A note cannot be dismissed without being seen (enforced via constraint in the database too, aren't I fancy). > > ## Media > - [X] I have added screenshots/videos to this PR showcasing its changes ingame, **or** this PR does not require an ingame showcase > >  > >  > > **Changelog** > <!-- > Make players aware of new features and changes that could affect how they play the game by adding a Changelog entry. Please read the Changelog guidelines located at: https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog > --> > > 🆑 > ADMIN: > - tweak: Admin messages are now shown as "seen" even if the player dismisses them only temporarily. Also, it is impossible for players to play without dismissing the message (temporary or permanent). </details> Co-authored-by: SimpleStation14 <Unknown>
129 lines
3.4 KiB
C#
129 lines
3.4 KiB
C#
using System.Collections.Immutable;
|
|
using System.Net;
|
|
using Content.Shared.Database;
|
|
using Robust.Shared.Network;
|
|
|
|
namespace Content.Server.Database;
|
|
|
|
// This file contains copies of records returned from the database.
|
|
// We can't return the raw EF Core entities as they are often unsuited.
|
|
// (e.g. datetime handling of Microsoft.Data.Sqlite)
|
|
|
|
public interface IAdminRemarksRecord
|
|
{
|
|
public int Id { get; }
|
|
|
|
public RoundRecord? Round { get; }
|
|
|
|
public PlayerRecord? Player { get; }
|
|
public TimeSpan PlaytimeAtNote { get; }
|
|
|
|
public string Message { get; }
|
|
|
|
public PlayerRecord? CreatedBy { get; }
|
|
|
|
public DateTimeOffset CreatedAt { get; }
|
|
|
|
public PlayerRecord? LastEditedBy { get; }
|
|
|
|
public DateTimeOffset? LastEditedAt { get; }
|
|
public DateTimeOffset? ExpirationTime { get; }
|
|
|
|
public bool Deleted { get; }
|
|
}
|
|
|
|
public sealed record ServerRoleBanNoteRecord(
|
|
int Id,
|
|
RoundRecord? Round,
|
|
PlayerRecord? Player,
|
|
TimeSpan PlaytimeAtNote,
|
|
string Message,
|
|
NoteSeverity Severity,
|
|
PlayerRecord? CreatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
PlayerRecord? LastEditedBy,
|
|
DateTimeOffset? LastEditedAt,
|
|
DateTimeOffset? ExpirationTime,
|
|
bool Deleted,
|
|
string[] Roles,
|
|
PlayerRecord? UnbanningAdmin,
|
|
DateTime? UnbanTime) : IAdminRemarksRecord;
|
|
|
|
public sealed record ServerBanNoteRecord(
|
|
int Id,
|
|
RoundRecord? Round,
|
|
PlayerRecord? Player,
|
|
TimeSpan PlaytimeAtNote,
|
|
string Message,
|
|
NoteSeverity Severity,
|
|
PlayerRecord? CreatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
PlayerRecord? LastEditedBy,
|
|
DateTimeOffset? LastEditedAt,
|
|
DateTimeOffset? ExpirationTime,
|
|
bool Deleted,
|
|
PlayerRecord? UnbanningAdmin,
|
|
DateTime? UnbanTime) : IAdminRemarksRecord;
|
|
|
|
public sealed record AdminNoteRecord(
|
|
int Id,
|
|
RoundRecord? Round,
|
|
PlayerRecord? Player,
|
|
TimeSpan PlaytimeAtNote,
|
|
string Message,
|
|
NoteSeverity Severity,
|
|
PlayerRecord? CreatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
PlayerRecord? LastEditedBy,
|
|
DateTimeOffset? LastEditedAt,
|
|
DateTimeOffset? ExpirationTime,
|
|
bool Deleted,
|
|
PlayerRecord? DeletedBy,
|
|
DateTimeOffset? DeletedAt,
|
|
bool Secret) : IAdminRemarksRecord;
|
|
|
|
public sealed record AdminWatchlistRecord(
|
|
int Id,
|
|
RoundRecord? Round,
|
|
PlayerRecord? Player,
|
|
TimeSpan PlaytimeAtNote,
|
|
string Message,
|
|
PlayerRecord? CreatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
PlayerRecord? LastEditedBy,
|
|
DateTimeOffset? LastEditedAt,
|
|
DateTimeOffset? ExpirationTime,
|
|
bool Deleted,
|
|
PlayerRecord? DeletedBy,
|
|
DateTimeOffset? DeletedAt) : IAdminRemarksRecord;
|
|
|
|
public sealed record AdminMessageRecord(
|
|
int Id,
|
|
RoundRecord? Round,
|
|
PlayerRecord? Player,
|
|
TimeSpan PlaytimeAtNote,
|
|
string Message,
|
|
PlayerRecord? CreatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
PlayerRecord? LastEditedBy,
|
|
DateTimeOffset? LastEditedAt,
|
|
DateTimeOffset? ExpirationTime,
|
|
bool Deleted,
|
|
PlayerRecord? DeletedBy,
|
|
DateTimeOffset? DeletedAt,
|
|
bool Seen,
|
|
bool Dismissed) : IAdminRemarksRecord;
|
|
|
|
|
|
public sealed record PlayerRecord(
|
|
NetUserId UserId,
|
|
DateTimeOffset FirstSeenTime,
|
|
string LastSeenUserName,
|
|
DateTimeOffset LastSeenTime,
|
|
IPAddress LastSeenAddress,
|
|
ImmutableArray<byte>? HWId);
|
|
|
|
public sealed record RoundRecord(int Id, DateTimeOffset StartDate, ServerRecord Server);
|
|
|
|
public sealed record ServerRecord(int Id, string Name);
|