1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
use serde::{Deserialize, Serialize};
use crate::entities::{
chat_member_administrator::ChatMemberAdministrator, chat_member_banned::ChatMemberBanned,
chat_member_left::ChatMemberLeft, chat_member_member::ChatMemberMember,
chat_member_owner::ChatMemberOwner, chat_member_restricted::ChatMemberRestricted,
};
/// This object contains information about one member of a chat. Currently, the following 6 types of chat members are supported:
///
/// * [ChatMemberOwner](https://core.telegram.org/bots/api/#chatmemberowner)
/// * [ChatMemberAdministrator](https://core.telegram.org/bots/api/#chatmemberadministrator)
/// * [ChatMemberMember](https://core.telegram.org/bots/api/#chatmembermember)
/// * [ChatMemberRestricted](https://core.telegram.org/bots/api/#chatmemberrestricted)
/// * [ChatMemberLeft](https://core.telegram.org/bots/api/#chatmemberleft)
/// * [ChatMemberBanned](https://core.telegram.org/bots/api/#chatmemberbanned)
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmember)
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "status")]
pub enum ChatMember {
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that owns the chat and has all administrator privileges.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmemberowner)
#[serde(rename = "creator")]
Owner(ChatMemberOwner),
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that has some additional privileges.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmemberadministrator)
#[serde(rename = "administrator")]
Administrator(ChatMemberAdministrator),
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that has no additional privileges or restrictions.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmembermember)
#[serde(rename = "member")]
Member(ChatMemberMember),
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that is under certain restrictions in the chat. Supergroups only.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmemberrestricted)
#[serde(rename = "restricted")]
Restricted(ChatMemberRestricted),
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that isn't currently a member of the chat, but may join it themselves.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmemberleft)
#[serde(rename = "left")]
Left(ChatMemberLeft),
/// Represents a [chat member](https://core.telegram.org/bots/api/#chatmember) that was banned in the chat and can't return to the chat or view chat messages.
///
/// API Reference: [link](https://core.telegram.org/bots/api/#chatmemberbanned)
#[serde(rename = "kicked")]
Banned(ChatMemberBanned),
}
impl Default for ChatMember {
fn default() -> Self {
Self::Owner(ChatMemberOwner::default())
}
}
impl From<ChatMemberOwner> for ChatMember {
fn from(value: ChatMemberOwner) -> Self {
Self::Owner(value)
}
}
impl From<ChatMemberAdministrator> for ChatMember {
fn from(value: ChatMemberAdministrator) -> Self {
Self::Administrator(value)
}
}
impl From<ChatMemberMember> for ChatMember {
fn from(value: ChatMemberMember) -> Self {
Self::Member(value)
}
}
impl From<ChatMemberRestricted> for ChatMember {
fn from(value: ChatMemberRestricted) -> Self {
Self::Restricted(value)
}
}
impl From<ChatMemberLeft> for ChatMember {
fn from(value: ChatMemberLeft) -> Self {
Self::Left(value)
}
}
impl From<ChatMemberBanned> for ChatMember {
fn from(value: ChatMemberBanned) -> Self {
Self::Banned(value)
}
}
// Divider: all content below this line will be preserved after code regen
use super::user::User;
impl ChatMember {
/// Returns a User object from underlying value
pub const fn user(&self) -> &User {
match self {
Self::Owner(m) => &m.user,
Self::Administrator(m) => &m.user,
Self::Member(m) => &m.user,
Self::Restricted(m) => &m.user,
Self::Left(m) => &m.user,
Self::Banned(m) => &m.user,
}
}
pub const fn is_admin(&self) -> bool {
matches!(self, Self::Owner(_) | Self::Administrator(_))
}
pub const fn is_in_chat(&self) -> bool {
match self {
Self::Owner(_) | Self::Administrator(_) | Self::Member(_) => true,
Self::Restricted(m) => m.is_member,
_ => false,
}
}
pub const fn get_until_date(&self) -> Option<i64> {
if let Self::Banned(m) = &self {
Some(m.until_date)
} else {
None
}
}
pub const fn is_banned(&self) -> bool {
matches!(self, Self::Banned(_))
}
pub const fn is_restricted(&self) -> bool {
matches!(self, Self::Restricted(_))
}
}