use super::InputFile;
use crate::model::{utils::unix_date_formatting, Chat, ChatPermissions};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct KickChatMember {
pub chat_id: i64,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub until_date: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub revoke_messages: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct UnbanChatMember {
pub chat_id: i64,
pub user_id: i64,
#[serde(default)]
pub only_if_banned: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RestrictChatMember {
pub chat_id: i64,
pub user_id: i64,
pub permissions: ChatPermissions,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "unix_date_formatting::optional")]
pub until_date: Option<DateTime<Utc>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct PromoteChatMember {
pub chat_id: i64,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_anonymous: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_post_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_edit_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_delete_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_restrict_members: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_promote_members: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_change_info: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_invite_users: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_pin_messages: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_voice_chats: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub can_manage_chat: Option<bool>,
}
impl PromoteChatMember {
pub fn new(chat_id: i64, user_id: i64) -> Self {
Self {
chat_id,
user_id,
is_anonymous: None,
can_manage_chat: None,
can_post_messages: None,
can_edit_messages: None,
can_delete_messages: None,
can_restrict_members: None,
can_promote_members: None,
can_change_info: None,
can_invite_users: None,
can_pin_messages: None,
can_manage_voice_chats: None,
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatAdministratorCustomTitle {
pub chat_id: i64,
pub user_id: i64,
pub custom_title: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatPermissions {
pub chat_id: i64,
pub permissions: ChatPermissions,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct ExportChatInviteLink {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatPhoto {
pub chat_id: i64,
pub photo: InputFile,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct DeleteChatPhoto {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatTitle {
pub chat_id: i64,
pub title: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatDescription {
pub chat_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct PinChatMessage {
pub chat_id: i64,
pub message_id: i64,
pub disable_notification: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct UnpinChatMessage {
pub chat_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct UnpinAllChatMessages {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct LeaveChat {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct GetChat {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct GetChatAdministrators {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct GetChatMembersCount {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct GetChatMember {
pub chat_id: i64,
pub user_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SetChatStickerSet {
pub chat_id: i64,
pub sticker_set_name: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct DeleteChatStickerSet {
pub chat_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct CreateChatInviteLink {
pub chat_id: i64,
pub expire_date: Option<i64>,
pub member_limit: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct EditChatInviteLink {
pub chat_id: i64,
pub invite_link: String,
pub expire_date: Option<i64>,
pub member_limit: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RevokeChatInviteLink {
pub chat_id: i64,
pub invite_link: String,
}
macro_rules! impl_from_chat {
($name:ident) => {
impl From<Chat> for $name {
fn from(chat: Chat) -> Self {
Self {
chat_id: chat.get_id(),
}
}
}
};
}
impl_from_chat!(ExportChatInviteLink);
impl_from_chat!(DeleteChatPhoto);
impl_from_chat!(UnpinAllChatMessages);
impl_from_chat!(LeaveChat);
impl_from_chat!(GetChat);
impl_from_chat!(GetChatAdministrators);
impl_from_chat!(GetChatMembersCount);
impl_from_chat!(DeleteChatStickerSet);