use crate::types::*;
use crate::vision::possibility::PossibilityMessage;
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct Message {
pub id: i64,
pub from: Option<User>,
pub date: i64,
pub forward: Option<Forward>,
pub reply_to_message: Option<PossibilityMessage>,
pub edit_date: Option<i64>,
pub chat: VMessageChat,
pub is_edited: bool,
}
impl Message {
pub fn is_channel(&self) -> bool {
match self.chat {
VMessageChat::Channel(_) => true,
_ => false
}
}
pub fn is_group(&self) -> bool {
match self.chat {
VMessageChat::Message(MessageChat::Group(_)) => true,
_ => false
}
}
pub fn is_private(&self) -> bool {
match self.chat {
VMessageChat::Message(MessageChat::Private(_)) => true,
_ => false
}
}
pub fn is_supergroup(&self) -> bool {
match self.chat {
VMessageChat::Message(MessageChat::Supergroup(_)) => true,
_ => false
}
}
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub enum VMessageChat {
Message(MessageChat),
Channel(Channel),
}
impl VMessageChat {
pub fn id(&self) -> i64 {
match *self {
VMessageChat::Message(ref x) => x.id(),
VMessageChat::Channel(ref x) => x.id
}
}
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VTextMessage {
pub message: Message,
pub text: String,
pub entities: Vec<MessageEntity>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VAudioMessage {
pub message: Message,
pub audio: Audio,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VDocumentMessage {
pub message: Message,
pub document: Document,
pub caption: Option<String>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VPhotoMessage {
pub message: Message,
pub photo: Vec<PhotoSize>,
pub caption: Option<String>,
pub media_group_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VStickerMessage {
pub message: Message,
pub sticker: Sticker,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VVideoMessage {
pub message: Message,
pub video: Video,
pub caption: Option<String>,
pub media_group_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VVoiceMessage {
pub message: Message,
pub voice: Voice,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VVideoNoteMessage {
pub message: Message,
pub video_note: VideoNote,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VContactMessage {
pub message: Message,
pub contact: Contact,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VLocationMessage {
pub message: Message,
pub location: Location,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VVenueMessage {
pub message: Message,
pub venue: Venue,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VNewChatMembersMessage {
pub message: Message,
pub members: Vec<User>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VLeftChatMemberMessage {
pub message: Message,
pub member: User,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VChatTitleMessage {
pub message: Message,
pub title: String,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VChatPhotoMessage {
pub message: Message,
pub photos: Vec<PhotoSize>,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VMigrateToChatIdMessage {
pub message: Message,
pub migrate_to_chat_id: i64,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VMigrateFromChatIdMessage {
pub message: Message,
pub migrate_from_chat_id: i64,
}
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct VPinnedMessageMessage {
pub message: Message,
pub pinned: Box<RawMessage>,
}