mirror of
https://github.com/teloxide/teloxide.git
synced 2024-12-22 22:46:39 +01:00
Merge pull request #764 from Veetaha/feat/add-missing-restricted-fields
Add missing fields for `Restricted` chat member
This commit is contained in:
commit
9095aaa839
3 changed files with 79 additions and 27 deletions
|
@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## unreleased
|
## unreleased
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- The methods `ChatMember::{can_pin_messages, can_invite_users, can_change_info}` now take into account the permissions of `Restricted` chat member kind ([#764][pr764])
|
||||||
|
- The method `ChatMemberKind::is_present` now takes into account the value of `Restricted::is_member` field ([#764][pr764])
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `Restricted::{is_member, can_change_info, can_invite_users, can_pin_messages, can_send_polls}` fields ([#764][pr764])
|
||||||
|
- `ChatMember::can_send_polls` method ([#764][pr764])
|
||||||
|
|
||||||
|
[pr764]: https://github.com/teloxide/teloxide/pull/764
|
||||||
|
|
||||||
## 0.8.0 - 2022-10-03
|
## 0.8.0 - 2022-10-03
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -101,6 +101,9 @@ pub struct Restricted {
|
||||||
/// Date when restrictions will be lifted for this user.
|
/// Date when restrictions will be lifted for this user.
|
||||||
pub until_date: UntilDate,
|
pub until_date: UntilDate,
|
||||||
|
|
||||||
|
/// `true` if the user is a member of the chat at the moment of the request.
|
||||||
|
pub is_member: bool,
|
||||||
|
|
||||||
/// `true` if the user can send text messages, contacts, locations and
|
/// `true` if the user can send text messages, contacts, locations and
|
||||||
/// venues.
|
/// venues.
|
||||||
pub can_send_messages: bool,
|
pub can_send_messages: bool,
|
||||||
|
@ -116,6 +119,19 @@ pub struct Restricted {
|
||||||
/// `true` if the user is allowed to add web page previews to their
|
/// `true` if the user is allowed to add web page previews to their
|
||||||
/// messages.
|
/// messages.
|
||||||
pub can_add_web_page_previews: bool,
|
pub can_add_web_page_previews: bool,
|
||||||
|
|
||||||
|
/// `true` if the user is allowed to change the chat title, photo
|
||||||
|
/// and other settings.
|
||||||
|
pub can_change_info: bool,
|
||||||
|
|
||||||
|
/// `true` if the user is allowed to invite new users to the chat.
|
||||||
|
pub can_invite_users: bool,
|
||||||
|
|
||||||
|
/// `true` if the user is allowed to pin messages.
|
||||||
|
pub can_pin_messages: bool,
|
||||||
|
|
||||||
|
/// `true` if the user is allowed to send polls.
|
||||||
|
pub can_send_polls: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// User that was banned in the chat and can't return to it or view chat
|
/// User that was banned in the chat and can't return to it or view chat
|
||||||
|
@ -244,13 +260,18 @@ impl ChatMemberKind {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `true` if the user is currently present in the chat. i.e. if the
|
/// Returns `true` if the user is currently present in the chat. i.e. if the
|
||||||
/// user **hasn't** [left] or been [banned].
|
/// user **hasn't** [left] or been [banned]. It also returns `false` if the
|
||||||
|
/// user left the chat, but was [restricted].
|
||||||
///
|
///
|
||||||
/// [left]: ChatMemberKind::Left
|
/// [left]: ChatMemberKind::Left
|
||||||
/// [banned]: ChatMemberKind::Banned
|
/// [banned]: ChatMemberKind::Banned
|
||||||
|
/// [restricted]: ChatMemberKind::Restricted
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn is_present(&self) -> bool {
|
pub fn is_present(&self) -> bool {
|
||||||
!(self.is_left() || self.is_banned())
|
let is_restricted_non_member =
|
||||||
|
matches!(self, Self::Restricted(Restricted { is_member: false, .. }));
|
||||||
|
|
||||||
|
!(self.is_left() || self.is_banned() || is_restricted_non_member)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,17 +355,17 @@ impl ChatMemberKind {
|
||||||
///
|
///
|
||||||
/// I.e. returns `true` if the user
|
/// I.e. returns `true` if the user
|
||||||
/// - is the owner of the chat
|
/// - is the owner of the chat
|
||||||
/// - is an administrator in the given chat and has the [`can_change_info`]
|
/// - is an administrator in the given chat and has the
|
||||||
/// privilege.
|
/// [`Administrator::can_change_info`] privilege.
|
||||||
|
/// - is restricted, but does have [`Restricted::can_change_info`] privilege
|
||||||
/// Returns `false` otherwise.
|
/// Returns `false` otherwise.
|
||||||
///
|
|
||||||
/// [`can_change_info`]: Administrator::can_change_info
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn can_change_info(&self) -> bool {
|
pub fn can_change_info(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Self::Owner(_) => true,
|
Self::Owner(_) => true,
|
||||||
Self::Administrator(Administrator { can_change_info, .. }) => *can_change_info,
|
Self::Administrator(Administrator { can_change_info, .. })
|
||||||
Self::Member | Self::Restricted(_) | Self::Left | Self::Banned(_) => false,
|
| Self::Restricted(Restricted { can_change_info, .. }) => *can_change_info,
|
||||||
|
Self::Member | Self::Left | Self::Banned(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,17 +458,18 @@ impl ChatMemberKind {
|
||||||
///
|
///
|
||||||
/// I.e. returns `true` if the user
|
/// I.e. returns `true` if the user
|
||||||
/// - is the owner of the chat
|
/// - is the owner of the chat
|
||||||
/// - is an administrator in the given chat and has the [`can_invite_users`]
|
/// - is an administrator in the given chat and has the
|
||||||
/// privilege.
|
/// [`Administrator::can_invite_users`] privilege.
|
||||||
|
/// - is restricted, but does have [`Restricted::can_invite_users`]
|
||||||
|
/// privilege
|
||||||
/// Returns `false` otherwise.
|
/// Returns `false` otherwise.
|
||||||
///
|
|
||||||
/// [`can_invite_users`]: Administrator::can_invite_users
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn can_invite_users(&self) -> bool {
|
pub fn can_invite_users(&self) -> bool {
|
||||||
match &self {
|
match &self {
|
||||||
Self::Owner(_) => true,
|
Self::Owner(_) => true,
|
||||||
Self::Administrator(Administrator { can_invite_users, .. }) => *can_invite_users,
|
Self::Administrator(Administrator { can_invite_users, .. })
|
||||||
Self::Member | Self::Restricted(_) | Self::Left | Self::Banned(_) => false,
|
| Self::Restricted(Restricted { can_invite_users, .. }) => *can_invite_users,
|
||||||
|
Self::Member | Self::Left | Self::Banned(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,11 +497,11 @@ impl ChatMemberKind {
|
||||||
///
|
///
|
||||||
/// I.e. returns `true` if the user
|
/// I.e. returns `true` if the user
|
||||||
/// - is the owner of the chat (even if the chat is not a supergroup)
|
/// - is the owner of the chat (even if the chat is not a supergroup)
|
||||||
/// - is an administrator in the given chat and has the [`can_pin_messages`]
|
/// - is an administrator in the given chat and has the
|
||||||
/// privilege.
|
/// [`Administrator::can_pin_messages`] privilege.
|
||||||
|
/// - is restricted, but does have [`Restricted::can_pin_messages`]
|
||||||
|
/// privilege
|
||||||
/// Returns `false` otherwise.
|
/// Returns `false` otherwise.
|
||||||
///
|
|
||||||
/// [`can_pin_messages`]: Administrator::can_pin_messages
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn can_pin_messages(&self) -> bool {
|
pub fn can_pin_messages(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
|
@ -487,7 +509,8 @@ impl ChatMemberKind {
|
||||||
Self::Administrator(Administrator { can_pin_messages, .. }) => {
|
Self::Administrator(Administrator { can_pin_messages, .. }) => {
|
||||||
can_pin_messages.unwrap_or_default()
|
can_pin_messages.unwrap_or_default()
|
||||||
}
|
}
|
||||||
Self::Member | Self::Restricted(_) | Self::Left | Self::Banned(_) => false,
|
Self::Restricted(Restricted { can_pin_messages, .. }) => *can_pin_messages,
|
||||||
|
Self::Member | Self::Left | Self::Banned(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,6 +615,23 @@ impl ChatMemberKind {
|
||||||
Self::Left | Self::Banned(_) => false,
|
Self::Left | Self::Banned(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns `true` if the user is allowed to send polls.
|
||||||
|
///
|
||||||
|
/// I.e. returns **`false`** if the user
|
||||||
|
/// - has left or has been banned from the chat
|
||||||
|
/// - is restricted and doesn't have the [`can_send_polls`] right
|
||||||
|
/// Returns `true` otherwise.
|
||||||
|
///
|
||||||
|
/// [`can_send_polls`]: Restricted::can_send_polls
|
||||||
|
#[must_use]
|
||||||
|
pub fn can_send_polls(&self) -> bool {
|
||||||
|
match &self {
|
||||||
|
Self::Restricted(Restricted { can_send_polls, .. }) => *can_send_polls,
|
||||||
|
Self::Owner(_) | Self::Administrator(_) | Self::Member => true,
|
||||||
|
Self::Left | Self::Banned(_) => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
||||||
|
|
Loading…
Reference in a new issue