client: basic message parsing, gateway listening
2 files changed, 179 insertions, 0 deletions
diff --git a/extra/admin-api/Models/Spacebar.Models.Generic/Channel.cs b/extra/admin-api/Models/Spacebar.Models.Generic/Channel.cs
index 01a91c649..93a7592ec 100644
--- a/extra/admin-api/Models/Spacebar.Models.Generic/Channel.cs
+++ b/extra/admin-api/Models/Spacebar.Models.Generic/Channel.cs
@@ -3,7 +3,53 @@ using System.Text.Json.Serialization;
namespace Spacebar.Models.Generic;
public class Channel {
+ [JsonPropertyName("id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public required long Id { get; set; }
+ [JsonPropertyName("created_at")]
+ public DateTimeOffset CreatedAt { get; set; }
+
+ [JsonPropertyName("default_thread_rate_limit_per_user")]
+ public int DefaultThreadRateLimitPerUser { get; set; }
+
+ [JsonPropertyName("flags")]
+ public int Flags { get; set; } //TODO: enum
+
+ [JsonPropertyName("guild_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? GuildId { get; set; }
+
+ [JsonPropertyName("icon")]
+ public string? Icon { get; set; }
+
+ [JsonPropertyName("last_message_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? LastMessageId { get; set; }
+
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ [JsonPropertyName("nsfw")]
+ public bool Nsfw { get; set; }
+
+ [JsonPropertyName("parent_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? ParentId { get; set; }
+
+ [JsonPropertyName("permission_overwrites")]
+ public List<ChannelPermissionOverwrite> PermissionOverwrites { get; set; }
+
+ [JsonPropertyName("position")]
+ public int Position { get; set; }
+
+ [JsonPropertyName("status")]
+ public string? Status { get; set; }
+
+ [JsonPropertyName("topic")]
+ public string? Topic { get; set; }
+
+ [JsonPropertyName("type")]
+ public int Type { get; set; } //TODO enum
+
+ [JsonPropertyName("video_quality_mode")]
+ public object? VideoQualityMode { get; set; }
}
public class ChannelPermissionOverwrite {
diff --git a/extra/admin-api/Models/Spacebar.Models.Generic/Message.cs b/extra/admin-api/Models/Spacebar.Models.Generic/Message.cs
new file mode 100644
index 000000000..4898daafd
--- /dev/null
+++ b/extra/admin-api/Models/Spacebar.Models.Generic/Message.cs
@@ -0,0 +1,133 @@
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace Spacebar.Models.Generic;
+
+public class Message {
+ [JsonPropertyName("id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public required long Id { get; set; }
+
+ [JsonPropertyName("channel_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? ChannelId { get; set; }
+
+ [JsonPropertyName("guild_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? GuildId { get; set; }
+
+ [JsonPropertyName("webhook_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? WebhookId { get; set; }
+
+ [JsonPropertyName("application_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? ApplicationId { get; set; }
+
+ [JsonPropertyName("content")]
+ public string? Content { get; set; }
+
+ [JsonPropertyName("timestamp")]
+ public DateTime Timestamp { get; set; }
+
+ [JsonPropertyName("edited_timestamp")]
+ public DateTime? EditedTimestamp { get; set; }
+
+ [JsonPropertyName("tts")]
+ public bool? Tts { get; set; }
+
+ [JsonPropertyName("mention_everyone")]
+ public bool? MentionEveryone { get; set; }
+
+ [JsonPropertyName("mentions")]
+ public List<PartialUser>? Mentions { get; set; }
+
+ [JsonPropertyName("embeds")]
+ public JsonObject[] Embeds { get; set; }
+
+ [JsonPropertyName("reactions")]
+ public JsonObject[] Reactions { get; set; } = null!;
+
+ [JsonPropertyName("nonce")]
+ public string? Nonce { get; set; }
+
+ [JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ [JsonPropertyName("activity")]
+ public string? Activity { get; set; }
+
+ [JsonPropertyName("message_reference")]
+ public MessageReference? MessageReference { get; set; }
+
+ [JsonPropertyName("referenced_message")]
+ public Message? ReferencedMessage { get; set; }
+
+ [JsonPropertyName("interaction")]
+ public string? Interaction { get; set; }
+
+ [JsonPropertyName("components")]
+ public JsonObject[] Components { get; set; }
+
+ [JsonPropertyName("flags")]
+ public int Flags { get; set; }
+
+ [JsonPropertyName("poll")]
+ public string? Poll { get; set; }
+
+ [JsonPropertyName("username")]
+ public string? Username { get; set; }
+
+ [JsonPropertyName("avatar")]
+ public string? Avatar { get; set; }
+
+ [JsonPropertyName("pinned_at")]
+ public DateTime? PinnedAt { get; set; }
+
+ [JsonPropertyName("interaction_metadata")]
+ public JsonObject? InteractionMetadata { get; set; }
+
+ [JsonPropertyName("message_snapshots")]
+ public JsonObject[]? MessageSnapshots { get; set; }
+
+ [JsonPropertyName("thread_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? ThreadId { get; set; }
+
+ [JsonPropertyName("author")]
+ public PartialUser Author { get; set; }
+
+ [JsonPropertyName("attachments")]
+ public List<MessageAttachment> Attachments { get; set; }
+}
+
+public class MessageReference {
+ [JsonPropertyName("guild_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? GuildId { get; set; }
+
+ [JsonPropertyName("channel_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long ChannelId { get; set; }
+
+ [JsonPropertyName("message_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long MessageId { get; set; }
+}
+
+public class MessageAttachment {
+ [JsonPropertyName("id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long Id { get; set; }
+
+ [JsonPropertyName("filename")]
+ public string Filename { get; set; }
+
+ [JsonPropertyName("size")]
+ public int Size { get; set; }
+
+ [JsonPropertyName("height")]
+ public int? Height { get; set; }
+ [JsonPropertyName("width")]
+ public int? Width { get; set; }
+
+ [JsonPropertyName("content_type")]
+ public string ContentType { get; set; }
+
+ // channel id? message id? are these leaked properties?
+ [JsonPropertyName("url")]
+ public string Url { get; set; }
+
+ [JsonPropertyName("proxy_url")]
+ public string ProxyUrl { get; set; }
+}
\ No newline at end of file
|