mirror of
https://github.com/barelyprofessional/KfChatDotNet.git
synced 2026-05-02 04:22:04 -04:00
Update for new chyat
This commit is contained in:
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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")]
|
||||
|
||||
27
KfChatDotNetWsClient/Models/Json/PermissionsJsonModel.cs
Normal file
27
KfChatDotNetWsClient/Models/Json/PermissionsJsonModel.cs
Normal 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; }
|
||||
}
|
||||
Reference in New Issue
Block a user