package models import "time" type User struct { ID string `json:"id"` Username string `json:"username"` Avatar string `json:"avatar,omitempty"` Bio string `json:"bio,omitempty"` PublicKey []byte `json:"public_key"` CreatedAt time.Time `json:"created_at"` } type Guild struct { ID string `json:"id"` Name string `json:"name"` OwnerID string `json:"owner_id"` Icon string `json:"icon,omitempty"` Description string `json:"description,omitempty"` CreatedAt time.Time `json:"created_at"` } type Channel struct { ID string `json:"id"` GuildID string `json:"guild_id"` Name string `json:"name"` Type string `json:"type"` Topic string `json:"topic,omitempty"` Position int `json:"position"` Category string `json:"category,omitempty"` CreatedAt time.Time `json:"created_at"` } type Role struct { ID string `json:"id"` GuildID string `json:"guild_id"` Name string `json:"name"` Color int `json:"color"` Position int `json:"position"` Permissions []string `json:"permissions"` IsDefault bool `json:"is_default"` } type Message struct { ID string `json:"id"` ChannelID string `json:"channel_id"` AuthorID string `json:"author_id"` Content []byte `json:"content,omitempty"` Encrypted bool `json:"encrypted"` Nonce []byte `json:"nonce,omitempty"` MessageType string `json:"message_type"` ReplyTo string `json:"reply_to,omitempty"` Attachments []string `json:"attachments,omitempty"` EditedAt *time.Time `json:"edited_at,omitempty"` Pinned bool `json:"pinned"` SelfDestruct *time.Time `json:"self_destruct,omitempty"` CreatedAt time.Time `json:"created_at"` } type VoiceState struct { UserID string `json:"user_id"` ChannelID string `json:"channel_id"` GuildID string `json:"guild_id"` Muted bool `json:"muted"` Deafened bool `json:"deafened"` } type Stream struct { ID string `json:"id"` ChannelID string `json:"channel_id"` UserID string `json:"user_id"` Title string `json:"title"` StartedAt time.Time `json:"started_at"` } type Reaction struct { MessageID string `json:"message_id"` UserID string `json:"user_id"` Emoji string `json:"emoji"` } type Attachment struct { ID string `json:"id"` MessageID string `json:"message_id"` Filename string `json:"filename"` FileType string `json:"file_type"` Size int64 `json:"size"` Compressed bool `json:"compressed"` OriginalSize int64 `json:"original_size,omitempty"` URL string `json:"url"` Hash string `json:"hash"` } type Sticker struct { ID string `json:"id"` GuildID string `json:"guild_id"` Name string `json:"name"` Data []byte `json:"data"` Format string `json:"format"` } type FederationPeer struct { Domain string `json:"domain"` Name string `json:"name"` PublicKey []byte `json:"public_key"` LastSeen time.Time `json:"last_seen"` IsActive bool `json:"is_active"` }