aiogram/aiogram/types/user.py

84 lines
2.1 KiB
Python
Raw Normal View History

2018-06-25 01:31:57 +03:00
from __future__ import annotations
2019-08-10 17:55:39 +03:00
from typing import Optional
2018-06-10 13:40:33 +03:00
import babel
2017-10-12 16:43:23 +03:00
from . import base
from . import fields
2017-10-18 23:25:22 +03:00
from ..utils import markdown
2017-10-12 16:43:23 +03:00
class User(base.TelegramObject):
"""
This object represents a Telegram user or bot.
https://core.telegram.org/bots/api#user
"""
id: base.Integer = fields.Field()
is_bot: base.Boolean = fields.Field()
first_name: base.String = fields.Field()
last_name: base.String = fields.Field()
username: base.String = fields.Field()
language_code: base.String = fields.Field()
2017-10-18 23:25:22 +03:00
@property
def full_name(self):
"""
You can get full name of user.
:return: str
"""
full_name = self.first_name
if self.last_name:
full_name += ' ' + self.last_name
return full_name
@property
def mention(self):
"""
2018-03-15 20:40:16 +03:00
You can get user's username to mention him
Full name will be returned if user has no username
2017-10-18 23:25:22 +03:00
:return: str
"""
if self.username:
return '@' + self.username
return self.full_name
@property
2019-08-10 17:55:39 +03:00
def locale(self) -> Optional[babel.core.Locale]:
2017-10-18 23:25:22 +03:00
"""
2018-06-11 00:28:14 +03:00
Get user's locale
2017-10-18 23:25:22 +03:00
:return: :class:`babel.core.Locale`
"""
if not self.language_code:
return None
if not hasattr(self, '_locale'):
setattr(self, '_locale', babel.core.Locale.parse(self.language_code, sep='-'))
return getattr(self, '_locale')
@property
def url(self):
return f"tg://user?id={self.id}"
2018-01-24 02:29:48 +02:00
def get_mention(self, name=None, as_html=None):
if as_html is None and self.bot.parse_mode and self.bot.parse_mode.lower() == 'html':
as_html = True
2017-10-18 23:25:22 +03:00
if name is None:
name = self.full_name
2017-10-18 23:25:22 +03:00
if as_html:
return markdown.hlink(name, self.url)
return markdown.link(name, self.url)
async def get_user_profile_photos(self, offset=None, limit=None):
return await self.bot.get_user_profile_photos(self.id, offset, limit)
2017-10-22 17:18:44 +03:00
def __hash__(self):
2018-02-23 13:19:23 +02:00
return self.id
2017-10-22 17:18:44 +03:00
def __int__(self):
return self.id