feat: sending messages works

This commit is contained in:
Andrew Glaze
2026-03-20 17:53:29 -04:00
parent df3cb95c91
commit 4d39ed8053
8 changed files with 240 additions and 157 deletions

View File

@@ -35,27 +35,28 @@ public struct Intents: OptionSet, Sendable {
}
public struct GetGatewayResponse: Codable, Sendable {
let url: URL
let shards: Int
let session_start_limit: SessionStartLimit
public let url: URL
public let shards: Int
public let session_start_limit: SessionStartLimit
}
public struct SessionStartLimit: Codable, Sendable {
let total: Int
let remaining: Int
let reset_after: Int
let max_concurrency: Int
public let total: Int
public let remaining: Int
public let reset_after: Int
public let max_concurrency: Int
}
public enum GatewayPayload: Decodable, Sendable {
case hello(HelloPayload)
case hello(GatewayHello)
case messageCreate(MessageCreate)
}
public struct GatewayMessage: Decodable, Sendable {
let op: Int
let d: GatewayPayload?
let s: Int?
let t: String?
public let op: Int
public let d: GatewayPayload?
public let s: Int?
public let t: String?
enum CodingKeys: String, CodingKey {
case t
@@ -71,8 +72,11 @@ public struct GatewayMessage: Decodable, Sendable {
t = try container.decode(String?.self, forKey: .t)
switch op {
case 10:
let hello = try container.decode(HelloPayload.self, forKey: .d)
let hello = try container.decode(GatewayHello.self, forKey: .d)
d = .hello(hello)
case 0 where t == "MESSAGE_CREATE":
let messageCreate = try container.decode(MessageCreate.self, forKey: .d)
d = .messageCreate(messageCreate)
default:
d = nil
break
@@ -87,7 +91,46 @@ public struct GatewayMessage: Decodable, Sendable {
}
}
public struct HelloPayload: Codable, Sendable {
public struct GatewayHello: Codable, Sendable {
let heartbeat_interval: Int
}
public struct CreateMessageReq: Codable, Sendable {
public init(content: String? = nil, message_reference: MessageRefrence? = nil) {
self.content = content
self.message_reference = message_reference
}
public let content: String?
public let message_reference: MessageRefrence?
}
public struct MessageRefrence: Codable, Sendable {
public init(type: Int? = nil, message_id: String? = nil, channel_id: String? = nil, guild_id: String? = nil) {
self.type = type
self.message_id = message_id
self.channel_id = channel_id
self.guild_id = guild_id
}
let type: Int?
let message_id: String?
let channel_id: String?
let guild_id: String?
}
public struct MessageCreate: Codable, Sendable {
public let id: String
public let channel_id: String
public let guild_id: String?
public let author: User?
public let content: String
public let mentions: [User]
}
public struct User: Codable, Sendable {
public let id: String?
public let bot: Bool?
}