maxbot 0.1.7

Автоматизация работы с чат-ботами MAX
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub user_id: i64,
    pub first_name: String,
    pub last_name: Option<String>,
    pub username: Option<String>,
    pub is_bot: bool,
    pub last_activity_time: Option<i64>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotInfo {
    #[serde(flatten)]
    pub user: User,
    pub description: Option<String>,
    pub avatar_url: Option<String>,
    pub full_avatar_url: Option<String>,
    #[serde(default)]
    pub commands: Vec<BotCommand>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BotCommand {
    pub name: String,
    pub description: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Chat {
    pub chat_id: i64,
    pub r#type: String,       // "chat"
    pub status: String,
    pub title: Option<String>,
    pub icon: Option<Image>,
    pub last_event_time: i64,
    pub participants_count: i32,
    pub owner_id: Option<i64>,
    pub is_public: bool,
    pub link: Option<String>,
    pub description: Option<String>,
    pub dialog_with_user: Option<User>,
    pub chat_message_id: Option<String>,
    pub pinned_message: Option<serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Image {
    pub url: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatMember {
    #[serde(flatten)]
    pub user: User,
    pub description: Option<String>,
    pub avatar_url: Option<String>,
    pub full_avatar_url: Option<String>,
    pub last_access_time: i64,
    pub is_owner: bool,
    pub is_admin: bool,
    pub join_time: i64,
    pub permissions: Vec<String>,
    pub alias: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
    pub sender: Option<User>,
    pub recipient: Recipient,
    pub timestamp: i64,
    pub body: Option<MessageBody>,
    pub url: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Recipient {
    pub chat_id: Option<i64>,
    pub user_id: Option<i64>,
    pub chat_type: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageBody {
    pub mid: String,
    pub seq: i64,
    pub text: Option<String>,
    pub contact: Option<Contact>,
    pub location: Option<Location>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Contact {
    pub name: String,
    pub phone: String,
    pub vcf_info: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
    pub latitude: f64,
    pub longitude: f64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Update {
    pub update_type: UpdateType,
    pub timestamp: i64,
    pub user_locale: String,
    pub message: Option<Message>,
    pub callback: Option<CallbackQuery>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UpdateType {
    MessageCreated,
    MessageCallback,
    Unknown,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallbackQuery {
    pub callback_id: String,
    pub timestamp: i64,
    pub user: User,
    pub payload: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
    pub url: String,
    pub time: i64,
    pub update_types: Vec<String>,
}

#[derive(Debug, Clone, Default)]
pub struct UpdateChatInfo {
    pub title: Option<String>,
    pub description: Option<String>,
    /// Токен загруженного изображения для иконки чата.
    /// Взаимоисключающее с `icon_url`.
    pub icon_token: Option<String>,
    /// URL изображения, которое будет загружено как иконка чата.
    /// Взаимоисключающее с `icon_token`.
    pub icon_url: Option<String>,
    pub link: Option<String>,
    pub is_public: Option<bool>,
    /// MID сообщения, которое нужно закрепить в чате.
    pub pin: Option<String>,
    /// Отправлять ли системное уведомление об изменении.
    pub notify: Option<bool>,
}