feat(username): add opportunity to get full name instead of username if user doesn't have one

This commit is contained in:
doryan 2025-04-11 12:14:59 +04:00
parent 0901ebce4d
commit f03f511778

View File

@ -1,6 +1,9 @@
use std::ops::Deref;
use telers::{ use telers::{
errors::SessionErrorKind, errors::SessionErrorKind,
methods::GetChatMember, methods::GetChatMember,
types::User,
types::{ChatMember, Message}, types::{ChatMember, Message},
Bot, Bot,
}; };
@ -53,6 +56,14 @@ impl TargetUser {
} }
} }
fn _inner_get_user_name(&self, user: User) -> Option<Box<str>> {
if let Some(user_name) = user.username.as_ref() {
return Some(user_name.clone());
} else {
return Some(Box::from(user.full_name()));
}
}
pub async fn get_user_name(&self, bot: &Bot, msg: &Message) -> Option<Box<str>> { pub async fn get_user_name(&self, bot: &Bot, msg: &Message) -> Option<Box<str>> {
match self { match self {
Self::Id(id) => { Self::Id(id) => {
@ -60,13 +71,13 @@ impl TargetUser {
bot.send(GetChatMember::new(msg.chat().id(), *id)).await; bot.send(GetChatMember::new(msg.chat().id(), *id)).await;
if let Ok(member_kind) = get_chat_member_result { if let Ok(member_kind) = get_chat_member_result {
return match member_kind { match member_kind {
ChatMember::Owner(member) => member.user.username, ChatMember::Owner(member) => self._inner_get_user_name(member.user),
ChatMember::Administrator(member) => member.user.username, ChatMember::Administrator(member) => self._inner_get_user_name(member.user),
ChatMember::Member(member) => member.user.username, ChatMember::Member(member) => self._inner_get_user_name(member.user),
ChatMember::Restricted(member) => member.user.username, ChatMember::Restricted(member) => self._inner_get_user_name(member.user),
ChatMember::Left(member) => member.user.username, ChatMember::Left(member) => self._inner_get_user_name(member.user),
ChatMember::Banned(member) => member.user.username, ChatMember::Banned(member) => self._inner_get_user_name(member.user),
}; };
} }
None None