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);
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));
return;
}

View file

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

View file

@ -5,19 +5,31 @@ namespace SharpChat.EventStorage;
public class StoredEventInfo(
long id,
string type,
User? sender,
string? senderId,
string senderName,
ColourInheritable senderColour,
int senderRank,
UserPermissions senderPermissions,
string senderNickName,
DateTimeOffset created,
DateTimeOffset? deleted,
string? channelName,
JsonDocument data,
StoredEventFlags flags
) {
public long Id { get; set; } = id;
public string Type { get; set; } = type;
public User? Sender { get; set; } = sender;
public DateTimeOffset Created { get; set; } = created;
public DateTimeOffset? Deleted { get; set; } = deleted;
public string? ChannelName { get; set; } = channelName;
public StoredEventFlags Flags { get; set; } = flags;
public JsonDocument Data { get; set; } = data;
public long Id { get; } = id;
public string Type { get; } = type;
public string? SenderId { get; } = senderId;
public string SenderName { get; } = senderName;
public ColourInheritable SenderColour { get; } = senderColour;
public int SenderRank { get; } = senderRank;
public UserPermissions SenderPermissions { get; } = senderPermissions;
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(
id,
type,
long.TryParse(senderId, out long senderId64) && senderId64 > 0
? new User(
senderId,
senderName,
senderColour,
senderRank,
senderPerms,
senderNick
)
: null,
long.TryParse(senderId, out long senderId64) && senderId64 > 0 ? senderId : null,
senderName,
senderColour,
senderRank,
senderPerms,
senderNick,
DateTimeOffset.Now,
null,
channelName,
JsonDocument.Parse(data == null ? "{}" : JsonSerializer.Serialize(data)),
flags
)
);
);
return Task.CompletedTask;
}

View file

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