def get_member(self, user_id: int) -> Member:
"""Найти пользователя по ID (возвращает либо Member, либо None (если профиль закрыт / не существует))"""
request = self.session.get(f"{MAIN_URL}/members/{user_id}?_xfResponseType=json&_xfToken={self.token}").json()
if request['status'] == 'error':
return None
content = unescape(request['html']['content'])
content = BeautifulSoup(content, 'lxml')
username = unescape(request['html']['title'])
activity = content.find('dd', {'dir': 'auto'}).get_text(strip=False).strip('\n')
roles = []
for i in content.find('div', {'class': 'memberHeader-banners'}).children:
if i.text != '\n': roles.append(i.text)
try: user_title = content.find('span', {'class': 'userTitle'}).text
except AttributeError: user_title = None
try: avatar = MAIN_URL + content.find('a', {'class': 'avatar avatar--l'})['href']
except TypeError: avatar = None
messages_count = int(content.find('a', {'href': f'/search/member?user_id={user_id}'}).text.strip().replace(',', ''))
reactions_count = int(content.find('dl', {'class': 'pairs pairs--rows pairs--rows--centered'}).find('dd').text.strip().replace(',', ''))
trophies_count = int(content.find('a', {'href': f'/members/{user_id}/trophies'}).text.strip().replace(',', ''))
return Member(self, user_id, username, user_title, avatar, roles, messages_count, reactions_count, trophies_count, activity)