AdminNotesExtensions.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Content.Server.Database;
  2. using Content.Shared.Administration.Notes;
  3. using Content.Shared.Database;
  4. namespace Content.Server.Administration.Notes;
  5. public static class AdminNotesExtensions
  6. {
  7. public static SharedAdminNote ToShared(this IAdminRemarksRecord note)
  8. {
  9. NoteSeverity? severity = null;
  10. var secret = false;
  11. NoteType type;
  12. string[]? bannedRoles = null;
  13. string? unbannedByName = null;
  14. DateTime? unbannedTime = null;
  15. bool? seen = null;
  16. switch (note)
  17. {
  18. case AdminNoteRecord adminNote:
  19. type = NoteType.Note;
  20. severity = adminNote.Severity;
  21. secret = adminNote.Secret;
  22. break;
  23. case AdminWatchlistRecord:
  24. type = NoteType.Watchlist;
  25. secret = true;
  26. break;
  27. case AdminMessageRecord adminMessage:
  28. type = NoteType.Message;
  29. seen = adminMessage.Seen;
  30. break;
  31. case ServerBanNoteRecord ban:
  32. type = NoteType.ServerBan;
  33. severity = ban.Severity;
  34. unbannedTime = ban.UnbanTime;
  35. unbannedByName = ban.UnbanningAdmin?.LastSeenUserName ?? Loc.GetString("system-user");
  36. break;
  37. case ServerRoleBanNoteRecord roleBan:
  38. type = NoteType.RoleBan;
  39. severity = roleBan.Severity;
  40. bannedRoles = roleBan.Roles;
  41. unbannedTime = roleBan.UnbanTime;
  42. unbannedByName = roleBan.UnbanningAdmin?.LastSeenUserName ?? Loc.GetString("system-user");
  43. break;
  44. default:
  45. throw new ArgumentOutOfRangeException(nameof(type), note.GetType(), "Unknown note type");
  46. }
  47. // There may be bans without a user, but why would we ever be converting them to shared notes?
  48. if (note.Player is null)
  49. throw new ArgumentNullException(nameof(note), "Player user ID cannot be null for a note");
  50. return new SharedAdminNote(
  51. note.Id,
  52. note.Player!.UserId,
  53. note.Round?.Id,
  54. note.Round?.Server.Name,
  55. note.PlaytimeAtNote,
  56. type,
  57. note.Message,
  58. severity,
  59. secret,
  60. note.CreatedBy?.LastSeenUserName ?? Loc.GetString("system-user"),
  61. note.LastEditedBy?.LastSeenUserName ?? string.Empty,
  62. note.CreatedAt.UtcDateTime,
  63. note.LastEditedAt?.UtcDateTime,
  64. note.ExpirationTime?.UtcDateTime,
  65. bannedRoles,
  66. unbannedTime,
  67. unbannedByName,
  68. seen
  69. );
  70. }
  71. }