Update for new chyat

This commit is contained in:
barelyprofessional
2026-02-28 15:34:36 -06:00
parent 8a827a17de
commit c8016b4fc6
23 changed files with 178 additions and 104 deletions

View File

@@ -24,6 +24,8 @@ public class ChatClient
public event EventHandlers.OnWsDisconnectionEventHandler? OnWsDisconnection;
public event EventHandlers.OnFailedToJoinRoom? OnFailedToJoinRoom;
public event EventHandlers.OnUnknownCommand? OnUnknownCommand;
public event EventHandlers.OnPermissionsEventHandler? OnPermissions;
public event EventHandlers.OnSystemMessage? OnSystemMessage;
private WebsocketClient? _wsClient;
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
private ChatClientConfigModel _config;
@@ -188,6 +190,20 @@ public class ChatClient
return;
}
if (packetType.ContainsKey("permissions"))
{
_logger.Debug("Looks like we got permissions");
WsPermissions(message);
return;
}
if (packetType.ContainsKey("system"))
{
_logger.Debug("Looks like a system message");
WsSystemMessage(message);
return;
}
if (packetType.ContainsKey("delete"))
{
_logger.Debug($"Looks like this is a message deletion packet");
@@ -226,22 +242,22 @@ public class ChatClient
_wsClient.Send($"/delete {messageId}");
}
public async Task DeleteMessageAsync(int messageId)
public async Task DeleteMessageAsync(string messageUuid)
{
_logger.Debug($"Deleting {messageId}");
_logger.Debug($"Deleting {messageUuid}");
if (_wsClient == null) throw new WebSocketNotInitializedException();
await _wsClient.SendInstant($"/delete {messageId}");
await _wsClient.SendInstant($"/delete {messageUuid}");
}
public void EditMessage(int messageId, string newMessage)
public void EditMessage(string messageUuid, string newMessage)
{
var payload = JsonSerializer.Serialize(new EditMessageJsonModel {Id = messageId, Message = newMessage});
_logger.Debug($"Editing {messageId} with '{newMessage}'");
var payload = JsonSerializer.Serialize(new EditMessageJsonModel {Uuid = messageUuid, Message = newMessage});
_logger.Debug($"Editing {messageUuid} with '{newMessage}'");
if (_wsClient == null) throw new WebSocketNotInitializedException();
_wsClient.Send($"/edit {payload}");
}
public async Task EditMessageAsync(int messageId, string newMessage)
public async Task EditMessageAsync(string messageUuid, string newMessage)
{
var settings = new TextEncoderSettings();
settings.AllowRange(UnicodeRanges.All);
@@ -249,8 +265,8 @@ public class ChatClient
{
Encoder = JavaScriptEncoder.Create(settings)
};
var payload = JsonSerializer.Serialize(new EditMessageJsonModel {Id = messageId, Message = newMessage}, options);
_logger.Debug($"Editing {messageId} with '{newMessage}'");
var payload = JsonSerializer.Serialize(new EditMessageJsonModel {Uuid = messageUuid, Message = newMessage}, options);
_logger.Debug($"Editing {messageUuid} with '{newMessage}'");
if (_wsClient == null) throw new WebSocketNotInitializedException();
var msg = $"/edit {payload}";
var length = Encoding.UTF8.GetByteCount(msg);
@@ -285,7 +301,7 @@ public class ChatClient
LastActivity = null
},
Message = chatMessage.Message,
MessageId = chatMessage.MessageId,
MessageUuid = chatMessage.MessageUuid,
MessageRaw = chatMessage.MessageRaw,
RoomId = chatMessage.RoomId,
MessageRawHtmlDecoded = WebUtility.HtmlDecode(chatMessage.MessageRaw),
@@ -347,6 +363,35 @@ public class ChatClient
_logger.Debug($"Following users have parted: {string.Join(',', usersParted)}");
OnUsersParted?.Invoke(this, usersParted);
}
private void WsPermissions(ResponseMessage message)
{
var data = JsonSerializer.Deserialize<JsonElement>(message.Text);
var permissions = data.GetProperty("permissions").Deserialize<PermissionsJsonModel>();
try
{
OnPermissions?.Invoke(this, permissions);
}
catch (Exception e)
{
_logger.Error("Caught error when invoking OnPermissions");
_logger.Error(e);
}
}
private void WsSystemMessage(ResponseMessage message)
{
var msg = JsonSerializer.Deserialize<JsonElement>(message.Text).GetProperty("system").GetString();
try
{
OnSystemMessage?.Invoke(this, msg);
}
catch (Exception e)
{
_logger.Error("Caught error when invoking OnSystemMessage");
_logger.Error(e);
}
}
}
public class WebSocketNotInitializedException : Exception;

View File

@@ -25,4 +25,8 @@ public class EventHandlers
public delegate void OnFailedToJoinRoom(object sender, string message);
public delegate void OnUnknownCommand(object sender, string message);
public delegate void OnPermissionsEventHandler(object sender, PermissionsJsonModel permissions);
public delegate void OnSystemMessage(object sender, string message);
}

View File

@@ -7,7 +7,7 @@ public class MessageModel
/// HTML formatted message
/// </summary>
public required string Message { get; set; }
public required int MessageId { get; set; }
public required string MessageUuid { get; set; }
public DateTimeOffset? MessageEditDate { get; set; }
public required DateTimeOffset MessageDate { get; set; }
/// <summary>

View File

@@ -4,8 +4,8 @@ namespace KfChatDotNetWsClient.Models.Json;
public class EditMessageJsonModel
{
[JsonPropertyName("id")]
public required int Id { get; set; }
[JsonPropertyName("uuid")]
public required string Uuid { get; set; }
[JsonPropertyName("message")]
public required string Message { get; set; }

View File

@@ -41,8 +41,8 @@ public class MessagesJsonModel
public required AuthorModel Author { get; set; }
[JsonPropertyName("message")]
public required string Message { get; set; }
[JsonPropertyName("message_id")]
public int MessageId { get; set; }
[JsonPropertyName("message_uuid")]
public required string MessageUuid { get; set; }
[JsonPropertyName("message_edit_date")]
public int MessageEditDate { get; set; }
[JsonPropertyName("message_date")]

View File

@@ -0,0 +1,27 @@
using System.Text.Json.Serialization;
namespace KfChatDotNetWsClient.Models.Json;
public class PermissionsJsonModel
{
[JsonPropertyName("can_view")]
public required bool CanView { get; set; }
[JsonPropertyName("can_send")]
public required bool CanSend { get; set; }
[JsonPropertyName("can_edit_own")]
public required bool CanEditOwn { get; set; }
[JsonPropertyName("can_edit_other")]
public required bool CanEditOther { get; set; }
[JsonPropertyName("can_delete_own")]
public required bool CanDeleteOwn { get; set; }
[JsonPropertyName("can_delete_other")]
public required bool CanDeleteOther { get; set; }
[JsonPropertyName("can_report")]
public required bool CanReport { get; set; }
[JsonPropertyName("can_view_deleted")]
public required bool CanViewDeleted { get; set; }
[JsonPropertyName("can_undelete")]
public required bool CanUndelete { get; set; }
[JsonPropertyName("can_motd")]
public required bool CanMotd { get; set; }
}