Decoupled StoredEventInfo from the User class.

This commit is contained in:
flash 2025-04-27 00:48:57 +00:00
parent b4aa5873c3
commit 8eff4127b5
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
5 changed files with 48 additions and 42 deletions

View file

@ -29,7 +29,7 @@ public class DeleteMessageClientCommand : ClientCommand {
StoredEventInfo? delMsg = await ctx.Chat.Events.GetEvent(delSeqId); StoredEventInfo? delMsg = await ctx.Chat.Events.GetEvent(delSeqId);
if(delMsg?.Sender is null || delMsg.Sender.Rank > ctx.User.Rank || (!deleteAnyMessage && delMsg.Sender.UserId != ctx.User.UserId)) { if(delMsg?.SenderId is null || delMsg.SenderRank > ctx.User.Rank || (!deleteAnyMessage && delMsg.SenderId != ctx.User.UserId)) {
await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.MESSAGE_DELETE_ERROR)); await ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.MESSAGE_DELETE_ERROR));
return; return;
} }

View file

@ -70,14 +70,12 @@ public partial class MariaDBEventStorage(string connString) : EventStorage {
return new StoredEventInfo( return new StoredEventInfo(
reader.GetInt64("event_id"), reader.GetInt64("event_id"),
Encoding.ASCII.GetString((byte[])reader["event_type"]), Encoding.ASCII.GetString((byte[])reader["event_type"]),
reader.IsDBNull(reader.GetOrdinal("event_sender")) ? null : new User( reader.IsDBNull(reader.GetOrdinal("event_sender")) ? null : reader.GetInt64("event_sender").ToString(),
reader.GetInt64("event_sender").ToString(), reader.IsDBNull(reader.GetOrdinal("event_sender_name")) ? string.Empty : reader.GetString("event_sender_name"),
reader.IsDBNull(reader.GetOrdinal("event_sender_name")) ? string.Empty : reader.GetString("event_sender_name"), ColourInheritable.FromMisuzu(reader.GetInt32("event_sender_colour")),
ColourInheritable.FromMisuzu(reader.GetInt32("event_sender_colour")), reader.GetInt32("event_sender_rank"),
reader.GetInt32("event_sender_rank"), FromStoredPermissions((StoredUserPermissions)reader.GetInt32("event_sender_perms")),
FromStoredPermissions((StoredUserPermissions)reader.GetInt32("event_sender_perms")), reader.IsDBNull(reader.GetOrdinal("event_sender_nick")) ? string.Empty : reader.GetString("event_sender_nick"),
reader.IsDBNull(reader.GetOrdinal("event_sender_nick")) ? string.Empty : reader.GetString("event_sender_nick")
),
DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created")), DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created")),
reader.IsDBNull(reader.GetOrdinal("event_deleted")) ? null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_deleted")), reader.IsDBNull(reader.GetOrdinal("event_deleted")) ? null : DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_deleted")),
reader.IsDBNull(reader.GetOrdinal("event_target")) ? null : Encoding.ASCII.GetString((byte[])reader["event_target"]), reader.IsDBNull(reader.GetOrdinal("event_target")) ? null : Encoding.ASCII.GetString((byte[])reader["event_target"]),

View file

@ -5,19 +5,31 @@ namespace SharpChat.EventStorage;
public class StoredEventInfo( public class StoredEventInfo(
long id, long id,
string type, string type,
User? sender, string? senderId,
string senderName,
ColourInheritable senderColour,
int senderRank,
UserPermissions senderPermissions,
string senderNickName,
DateTimeOffset created, DateTimeOffset created,
DateTimeOffset? deleted, DateTimeOffset? deleted,
string? channelName, string? channelName,
JsonDocument data, JsonDocument data,
StoredEventFlags flags StoredEventFlags flags
) { ) {
public long Id { get; set; } = id; public long Id { get; } = id;
public string Type { get; set; } = type; public string Type { get; } = type;
public User? Sender { get; set; } = sender; public string? SenderId { get; } = senderId;
public DateTimeOffset Created { get; set; } = created; public string SenderName { get; } = senderName;
public DateTimeOffset? Deleted { get; set; } = deleted; public ColourInheritable SenderColour { get; } = senderColour;
public string? ChannelName { get; set; } = channelName; public int SenderRank { get; } = senderRank;
public StoredEventFlags Flags { get; set; } = flags; public UserPermissions SenderPermissions { get; } = senderPermissions;
public JsonDocument Data { get; set; } = data; public string SenderNickName { get; } = senderNickName;
public DateTimeOffset Created { get; } = created;
public DateTimeOffset? Deleted { get; } = deleted;
public string? ChannelName { get; } = channelName;
public StoredEventFlags Flags { get; } = flags;
public JsonDocument Data { get; } = data;
public string SenderLegacyName => string.IsNullOrWhiteSpace(SenderNickName) ? SenderName : $"~{SenderNickName}";
} }

View file

@ -23,23 +23,19 @@ public class VirtualEventStorage : EventStorage {
new( new(
id, id,
type, type,
long.TryParse(senderId, out long senderId64) && senderId64 > 0 long.TryParse(senderId, out long senderId64) && senderId64 > 0 ? senderId : null,
? new User( senderName,
senderId, senderColour,
senderName, senderRank,
senderColour, senderPerms,
senderRank, senderNick,
senderPerms,
senderNick
)
: null,
DateTimeOffset.Now, DateTimeOffset.Now,
null, null,
channelName, channelName,
JsonDocument.Parse(data == null ? "{}" : JsonSerializer.Serialize(data)), JsonDocument.Parse(data == null ? "{}" : JsonSerializer.Serialize(data)),
flags flags
) )
); );
return Task.CompletedTask; return Task.CompletedTask;
} }

View file

@ -20,24 +20,24 @@ public class ContextMessageS2CPacket(StoredEventInfo evt, bool notify = false) :
switch(Event.Type) { switch(Event.Type) {
case "msg:add": case "msg:add":
case "SharpChat.Events.ChatMessage": case "SharpChat.Events.ChatMessage":
if(isBroadcast || Event.Sender is null) { if(isBroadcast || Event.SenderId is null) {
sb.Append("-1\tChatBot\tinherit\t\t0\fsay\f"); sb.Append("-1\tChatBot\tinherit\t\t0\fsay\f");
} else { } else {
sb.Append(Event.Sender.UserId); sb.Append(Event.SenderId);
sb.Append('\t'); sb.Append('\t');
sb.Append(Event.Sender.LegacyNameWithStatus); sb.Append(Event.SenderLegacyName);
sb.Append('\t'); sb.Append('\t');
sb.Append(Event.Sender.Colour); sb.Append(Event.SenderColour);
sb.Append('\t'); sb.Append('\t');
sb.Append(Event.Sender.Rank); sb.Append(Event.SenderRank);
sb.Append(' '); sb.Append(' ');
sb.Append(Event.Sender.Permissions.HasFlag(UserPermissions.KickUser) ? '1' : '0'); sb.Append(Event.SenderPermissions.HasFlag(UserPermissions.KickUser) ? '1' : '0');
sb.Append(' '); sb.Append(' ');
sb.Append(Event.Sender.Permissions.HasFlag(UserPermissions.ViewLogs) ? '1' : '0'); sb.Append(Event.SenderPermissions.HasFlag(UserPermissions.ViewLogs) ? '1' : '0');
sb.Append(' '); sb.Append(' ');
sb.Append(Event.Sender.Permissions.HasFlag(UserPermissions.SetOwnNickname) ? '1' : '0'); sb.Append(Event.SenderPermissions.HasFlag(UserPermissions.SetOwnNickname) ? '1' : '0');
sb.Append(' '); sb.Append(' ');
sb.Append(Event.Sender.Permissions.HasFlag(UserPermissions.CreateChannel) ? (Event.Sender.Permissions.HasFlag(UserPermissions.SetChannelPermanent) ? '2' : '1') : '0'); sb.Append(Event.SenderPermissions.HasFlag(UserPermissions.CreateChannel) ? (Event.SenderPermissions.HasFlag(UserPermissions.SetChannelPermanent) ? '2' : '1') : '0');
sb.Append('\t'); sb.Append('\t');
} }
@ -59,19 +59,19 @@ public class ContextMessageS2CPacket(StoredEventInfo evt, bool notify = false) :
case "user:connect": case "user:connect":
case "SharpChat.Events.UserConnectEvent": case "SharpChat.Events.UserConnectEvent":
sb.Append("-1\tChatBot\tinherit\t\t0\fjoin\f"); sb.Append("-1\tChatBot\tinherit\t\t0\fjoin\f");
sb.Append(Event.Sender?.LegacyName ?? "?????"); sb.Append(Event.SenderLegacyName);
break; break;
case "chan:join": case "chan:join":
case "SharpChat.Events.UserChannelJoinEvent": case "SharpChat.Events.UserChannelJoinEvent":
sb.Append("-1\tChatBot\tinherit\t\t0\fjchan\f"); sb.Append("-1\tChatBot\tinherit\t\t0\fjchan\f");
sb.Append(Event.Sender?.LegacyName ?? "?????"); sb.Append(Event.SenderLegacyName);
break; break;
case "chan:leave": case "chan:leave":
case "SharpChat.Events.UserChannelLeaveEvent": case "SharpChat.Events.UserChannelLeaveEvent":
sb.Append("-1\tChatBot\tinherit\t\t0\flchan\f"); sb.Append("-1\tChatBot\tinherit\t\t0\flchan\f");
sb.Append(Event.Sender?.LegacyName ?? "?????"); sb.Append(Event.SenderLegacyName);
break; break;
case "user:disconnect": case "user:disconnect":
@ -95,7 +95,7 @@ public class ContextMessageS2CPacket(StoredEventInfo evt, bool notify = false) :
} }
sb.Append('\f'); sb.Append('\f');
sb.Append(Event.Sender?.LegacyName ?? "?????"); sb.Append(Event.SenderLegacyName);
break; break;
} }