# Major change by @Fl1yd
#
# Channel: @ftgmodulesbyfl1yd
# ============================
import os
from .. import loader, utils
from telethon.tl.functions.photos import GetUserPhotosRequest
from telethon.tl.functions.users import GetFullUserRequest
from telethon.tl.types import MessageEntityMentionName
def register(cb):
cb(WhoIsMod())
class WhoIsMod(loader.Module):
"""Получает информацию о пользователе в Телеграме (включая вас!)."""
strings = {'name': 'WhoIs'}
async def whoiscmd(self, whos):
"""Используй .whois <@ или реплай>; ничего"""
await whos.edit("Получаю информацию о пользователе...")
replied_user = await get_user(whos)
try:
photo, caption = await fetch_info(replied_user, whos)
except AttributeError:
whos.edit("Не могу найти информацию об этом пользователе.")
return
message_id_to_reply = whos.reply_to_msg_id
if not message_id_to_reply:
message_id_to_reply = None
try:
await whos.client.send_file(whos.chat_id, photo, caption=caption,
link_preview=False, force_document=False,
reply_to=message_id_to_reply, parse_mode="html")
if not photo.startswith("http"):
os.remove(photo)
await whos.delete()
except TypeError:
await whos.edit(caption, parse_mode="html")
async def get_user(event):
"""Получение информации о пользователе с реплая или аргумента."""
if event.reply_to_msg_id and not utils.get_args_raw(event):
previous_message = await event.get_reply_message()
replied_user = await event.client(GetFullUserRequest(previous_message.from_id))
else:
user = utils.get_args_raw(event)
if user.isnumeric():
user = int(user)
if not user:
self_user = await event.client.get_me()
user = self_user.id
if event.entities is not None:
probable_user_mention_entity = event.entities[0]
if isinstance(probable_user_mention_entity, MessageEntityMentionName):
user_id = probable_user_mention_entity.user_id
replied_user = await event.client(GetFullUserRequest(user_id))
return replied_user
try:
user_object = await event.client.get_entity(user)
replied_user = await event.client(GetFullUserRequest(user_object.id))
except:
self_user = await event.client.get_me()
user = self_user.id
user_object = await event.client.get_entity(user)
replied_user = await event.client(GetFullUserRequest(user_object.id))
return replied_user
return replied_user
async def fetch_info(replied_user, event):
"""Подробная информация о пользователе."""
replied_user_profile_photos = await event.client(GetUserPhotosRequest(user_id=replied_user.user.id,
offset=42, max_id=0, limit=80))
replied_user_profile_photos_count = "Пользователю нужна помощь с загрузкой аватарки."
try:
replied_user_profile_photos_count = replied_user_profile_photos.count
except AttributeError as e:
pass
user_id = replied_user.user.id
first_name = replied_user.user.first_name
last_name = replied_user.user.last_name
common_chat = replied_user.common_chats_count
username = replied_user.user.username
user_bio = replied_user.about
is_bot = replied_user.user.bot
if is_bot == False:
is_bot = "Нет"
else:
is_bot = "Да"
restricted = replied_user.user.restricted
if restricted == False:
restricted = "Нет"
else:
restricted = "Да"
verified = replied_user.user.verified
if verified == False:
verified = "Нет"
else:
verified = "Да"
photo = await event.client.download_profile_photo(user_id, str(user_id) + ".jpg", download_big=True)
first_name = first_name.replace("\u2060", "") if first_name else "Пользователь не указал имя."
last_name = last_name.replace("\u2060", "") if last_name else "Пользователь не указал фамилию."
username = "@{}".format(username) if username else "У пользователя нет юзернейма."
user_bio = "У пользователя нет информации о себе." if not user_bio else user_bio
caption = "ИНФОРМАЦИЯ О ПОЛЬЗОВАТЕЛЕ:\n\n"
caption += f"Имя: {first_name}\n"
caption += f"Фамилия: {last_name}\n"
caption += f"Юзернейм: {username}\n"
caption += f"ID: {user_id}\n"
caption += f"Бот: {is_bot}\n"
caption += f"Ограничен: {restricted}\n"
caption += f"Верифицирован: {verified}\n\n"
caption += f"О себе: \n{user_bio}\n\n"
caption += f"Кол-во аватарок в профиле: {replied_user_profile_photos_count}\n"
caption += f"Общие чаты: {common_chat}\n"
caption += f"Пермалинк: "
caption += f"клик"
return photo, caption