telegram_bot/util/
messages.rs1use crate::prelude::CanGetFile;
6use crate::types::{
7 requests::get_file::GetFile, ChannelPost, Message, MessageKind, MessageOrChannelPost,
8};
9
10pub trait MessageText {
14 fn text<'a>(&'a self) -> Option<String>;
16}
17
18impl MessageText for MessageOrChannelPost {
19 fn text<'a>(&'a self) -> Option<String> {
20 match self {
21 MessageOrChannelPost::Message(msg) => msg.text(),
22 MessageOrChannelPost::ChannelPost(post) => post.text(),
23 }
24 }
25}
26
27impl MessageText for Message {
28 fn text<'a>(&'a self) -> Option<String> {
29 self.kind.text()
30 }
31}
32
33impl MessageText for MessageKind {
34 fn text<'a>(&'a self) -> Option<String> {
35 match self {
36 MessageKind::Text { data, .. } => Some(data.to_owned()),
37 MessageKind::Audio { data } => data.title.to_owned(),
38 MessageKind::Document { data, caption } => {
39 caption.clone().or_else(|| data.file_name.clone())
40 }
41 MessageKind::Photo { caption, .. } => caption.to_owned(),
42 MessageKind::Sticker { .. } => None,
43 MessageKind::Video { caption, .. } => caption.to_owned(),
44 MessageKind::Voice { .. } => None,
45 MessageKind::VideoNote { .. } => None,
46 MessageKind::Contact { data } => Some(data.first_name.to_owned()),
47 MessageKind::Location { .. } => None,
48 MessageKind::Poll { data } => Some(data.question.to_owned()),
49 MessageKind::Venue { data } => Some(data.title.to_owned()),
50 MessageKind::NewChatMembers { .. } => None,
51 MessageKind::LeftChatMember { .. } => None,
52 MessageKind::NewChatTitle { data } => Some(data.to_owned()),
53 MessageKind::NewChatPhoto { .. } => None,
54 MessageKind::DeleteChatPhoto => None,
55 MessageKind::GroupChatCreated => None,
56 MessageKind::SupergroupChatCreated => None,
57 MessageKind::ChannelChatCreated => None,
58 MessageKind::MigrateToChatId { .. } => None,
59 MessageKind::MigrateFromChatId { .. } => None,
60 MessageKind::PinnedMessage { data } => data.text(),
61 MessageKind::Unknown { .. } => None,
62 }
63 }
64}
65
66impl MessageText for ChannelPost {
67 fn text<'a>(&'a self) -> Option<String> {
68 self.kind.text()
69 }
70}
71
72pub trait MessageGetFiles {
78 fn get_files<'a>(&'a self) -> Option<Vec<GetFile>>;
80}
81
82impl MessageGetFiles for MessageOrChannelPost {
83 fn get_files<'a>(&'a self) -> Option<Vec<GetFile>> {
84 match self {
85 MessageOrChannelPost::Message(msg) => msg.get_files(),
86 MessageOrChannelPost::ChannelPost(post) => post.get_files(),
87 }
88 }
89}
90
91impl MessageGetFiles for Message {
92 fn get_files<'a>(&'a self) -> Option<Vec<GetFile>> {
93 self.kind.get_files()
94 }
95}
96
97impl MessageGetFiles for MessageKind {
98 fn get_files<'a>(&'a self) -> Option<Vec<GetFile>> {
99 match self {
100 MessageKind::Text { .. } => None,
101 MessageKind::Audio { data } => Some(vec![data.get_file()]),
102 MessageKind::Document { data, .. } => {
103 let mut files = vec![data.get_file()];
104 if let Some(thumb) = &data.thumb {
105 files.push(thumb.get_file());
106 }
107 Some(files)
108 }
109 MessageKind::Photo { data, .. } => {
110 Some(data.into_iter().map(|f| f.get_file()).collect())
111 }
112 MessageKind::Sticker { data } => Some(vec![data.get_file()]),
113 MessageKind::Video { data, .. } => {
114 let mut files = vec![data.get_file()];
115 if let Some(thumb) = &data.thumb {
116 files.push(thumb.get_file());
117 }
118 Some(files)
119 }
120 MessageKind::Voice { data } => Some(vec![data.get_file()]),
121 MessageKind::VideoNote { data, .. } => {
122 let mut files = vec![data.get_file()];
123 if let Some(thumb) = &data.thumb {
124 files.push(thumb.get_file());
125 }
126 Some(files)
127 }
128 MessageKind::Contact { .. } => None,
129 MessageKind::Location { .. } => None,
130 MessageKind::Poll { .. } => None,
131 MessageKind::Venue { .. } => None,
132 MessageKind::NewChatMembers { .. } => None,
133 MessageKind::LeftChatMember { .. } => None,
134 MessageKind::NewChatTitle { .. } => None,
135 MessageKind::NewChatPhoto { data } => {
136 Some(data.into_iter().map(|f| f.get_file()).collect())
137 }
138 MessageKind::DeleteChatPhoto => None,
139 MessageKind::GroupChatCreated => None,
140 MessageKind::SupergroupChatCreated => None,
141 MessageKind::ChannelChatCreated => None,
142 MessageKind::MigrateToChatId { .. } => None,
143 MessageKind::MigrateFromChatId { .. } => None,
144 MessageKind::PinnedMessage { .. } => None,
145 MessageKind::Unknown { .. } => None,
146 }
147 }
148}
149
150impl MessageGetFiles for ChannelPost {
151 fn get_files<'a>(&'a self) -> Option<Vec<GetFile>> {
152 self.kind.get_files()
153 }
154}