Better notes and bans (#14228)
Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.Administration.Managers;
|
||||
using Content.Server.EUI;
|
||||
using Content.Shared.Administration.Notes;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Eui;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.Database;
|
||||
using Robust.Shared.Network;
|
||||
using static Content.Shared.Administration.Notes.AdminNoteEuiMsg;
|
||||
|
||||
namespace Content.Server.Administration.Notes;
|
||||
@@ -11,6 +15,8 @@ public sealed class AdminNotesEui : BaseEui
|
||||
{
|
||||
[Dependency] private readonly IAdminManager _admins = default!;
|
||||
[Dependency] private readonly IAdminNotesManager _notesMan = default!;
|
||||
[Dependency] private readonly IPlayerLocator _locator = default!;
|
||||
[Dependency] private readonly IServerDbManager _db = default!;
|
||||
|
||||
public AdminNotesEui()
|
||||
{
|
||||
@@ -19,7 +25,8 @@ public sealed class AdminNotesEui : BaseEui
|
||||
|
||||
private Guid NotedPlayer { get; set; }
|
||||
private string NotedPlayerName { get; set; } = string.Empty;
|
||||
private Dictionary<int, SharedAdminNote> Notes { get; set; } = new();
|
||||
private bool HasConnectedBefore { get; set; }
|
||||
private Dictionary<(int, NoteType), SharedAdminNote> Notes { get; set; } = new();
|
||||
|
||||
public override async void Opened()
|
||||
{
|
||||
@@ -46,7 +53,7 @@ public sealed class AdminNotesEui : BaseEui
|
||||
return new AdminNotesEuiState(
|
||||
NotedPlayerName,
|
||||
Notes,
|
||||
_notesMan.CanCreate(Player),
|
||||
_notesMan.CanCreate(Player) && HasConnectedBefore,
|
||||
_notesMan.CanDelete(Player),
|
||||
_notesMan.CanEdit(Player)
|
||||
);
|
||||
@@ -58,49 +65,51 @@ public sealed class AdminNotesEui : BaseEui
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case CreateNoteRequest {Message: var message}:
|
||||
{
|
||||
if (!_notesMan.CanCreate(Player))
|
||||
case CreateNoteRequest request:
|
||||
{
|
||||
Close();
|
||||
if (!_notesMan.CanCreate(Player))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.Message))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (request.ExpiryTime is not null && request.ExpiryTime <= DateTime.UtcNow)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.AddAdminRemark(Player, NotedPlayer, request.NoteType, request.Message, request.NoteSeverity, request.Secret, request.ExpiryTime);
|
||||
break;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(message))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.AddNote(Player, NotedPlayer, message);
|
||||
break;
|
||||
}
|
||||
case DeleteNoteRequest request:
|
||||
{
|
||||
if (!_notesMan.CanDelete(Player))
|
||||
{
|
||||
Close();
|
||||
if (!_notesMan.CanDelete(Player))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.DeleteAdminRemark(request.Id, request.Type, Player);
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.DeleteNote(request.Id, Player);
|
||||
break;
|
||||
}
|
||||
case EditNoteRequest request:
|
||||
{
|
||||
if (!_notesMan.CanEdit(Player))
|
||||
{
|
||||
Close();
|
||||
if (!_notesMan.CanEdit(Player))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.Message))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.ModifyAdminRemark(request.Id, request.Type, Player, request.Message, request.NoteSeverity, request.Secret, request.ExpiryTime);
|
||||
break;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.Message))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
await _notesMan.ModifyNote(request.Id, Player, request.Message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +124,7 @@ public sealed class AdminNotesEui : BaseEui
|
||||
if (note.Player != NotedPlayer)
|
||||
return;
|
||||
|
||||
Notes[note.Id] = note;
|
||||
Notes[(note.Id, note.NoteType)] = note;
|
||||
StateDirty();
|
||||
}
|
||||
|
||||
@@ -124,28 +133,29 @@ public sealed class AdminNotesEui : BaseEui
|
||||
if (note.Player != NotedPlayer)
|
||||
return;
|
||||
|
||||
Notes.Remove(note.Id);
|
||||
Notes.Remove((note.Id, note.NoteType));
|
||||
StateDirty();
|
||||
}
|
||||
|
||||
private async Task LoadFromDb()
|
||||
{
|
||||
NotedPlayerName = await _notesMan.GetPlayerName(NotedPlayer);
|
||||
|
||||
var notes = new Dictionary<int, SharedAdminNote>();
|
||||
foreach (var note in await _notesMan.GetNotes(NotedPlayer))
|
||||
{
|
||||
notes.Add(note.Id, note.ToShared());
|
||||
}
|
||||
|
||||
Notes = notes;
|
||||
|
||||
var locatedPlayer = await _locator.LookupIdAsync((NetUserId) NotedPlayer);
|
||||
NotedPlayerName = locatedPlayer?.Username ?? string.Empty;
|
||||
HasConnectedBefore = locatedPlayer?.LastAddress is not null;
|
||||
Notes = (from note in await _notesMan.GetAllAdminRemarks(NotedPlayer)
|
||||
select note.ToShared())
|
||||
.ToDictionary(sharedNote => (sharedNote.Id, sharedNote.NoteType));
|
||||
StateDirty();
|
||||
}
|
||||
|
||||
private void OnPermsChanged(AdminPermsChangedEventArgs args)
|
||||
{
|
||||
if (args.Player == Player && !_notesMan.CanView(Player))
|
||||
if (args.Player != Player)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_notesMan.CanView(Player))
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user