use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayEvent {
#[serde(rename = "id")]
pub id: Option<String>,
#[serde(rename = "t")]
pub event_type: Option<String>,
#[serde(rename = "d")]
pub data: Option<serde_json::Value>,
#[serde(rename = "s")]
pub sequence: Option<u64>,
#[serde(rename = "op")]
pub opcode: u8,
}
pub mod opcodes {
pub const DISPATCH: u8 = 0;
pub const HEARTBEAT: u8 = 1;
pub const IDENTIFY: u8 = 2;
pub const RESUME: u8 = 6;
pub const RECONNECT: u8 = 7;
pub const INVALID_SESSION: u8 = 9;
pub const HELLO: u8 = 10;
pub const HEARTBEAT_ACK: u8 = 11;
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Hello {
pub heartbeat_interval: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Identify {
pub token: String,
pub intents: u32,
pub shard: Option<[u32; 2]>,
pub properties: IdentifyProperties,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IdentifyProperties {
#[serde(rename = "$os")]
pub os: String,
#[serde(rename = "$browser")]
pub browser: String,
#[serde(rename = "$device")]
pub device: String,
}
impl Default for IdentifyProperties {
fn default() -> Self {
Self {
os: std::env::consts::OS.to_string(),
browser: "botrs".to_string(),
device: "botrs".to_string(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Resume {
pub token: String,
pub session_id: String,
pub seq: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Ready {
pub version: u32,
pub session_id: String,
pub user: crate::models::robot::Robot,
pub shard: Option<[u32; 2]>,
}