Загрузить файлы в «/»
Ищет из открытых источников инфо об человеке
This commit is contained in:
@@ -0,0 +1,191 @@
|
|||||||
|
# meta developer: @origsama
|
||||||
|
from .. import loader, utils
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
@loader.tds
|
||||||
|
class UserInfoMod(loader.Module):
|
||||||
|
"""Информация о пользователе"""
|
||||||
|
strings = {"name": "UserInfo"}
|
||||||
|
|
||||||
|
async def uicmd(self, message):
|
||||||
|
"""[reply] - Информация о пользователе"""
|
||||||
|
# Получаем целевого пользователя
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
if reply:
|
||||||
|
user = await reply.get_sender()
|
||||||
|
else:
|
||||||
|
user = await message.get_sender()
|
||||||
|
|
||||||
|
if not user:
|
||||||
|
await utils.answer(message, "❌ Не удалось получить информацию")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Получаем полную информацию
|
||||||
|
full_user = await message.client.get_entity(user.id)
|
||||||
|
|
||||||
|
# Получаем общие чаты
|
||||||
|
common_chats = await self.get_common_chats(message, user.id)
|
||||||
|
|
||||||
|
# Формируем информацию
|
||||||
|
text = f"<b>📋 Информация о пользователе</b>\n\n"
|
||||||
|
|
||||||
|
# Основная информация
|
||||||
|
text += f"<b>👤 Основное:</b>\n"
|
||||||
|
text += f"├ ID: <code>{user.id}</code>\n"
|
||||||
|
text += f"├ Имя: {user.first_name or ''}"
|
||||||
|
if user.last_name:
|
||||||
|
text += f" {user.last_name}"
|
||||||
|
text += "\n"
|
||||||
|
if user.username:
|
||||||
|
text += f"├ Юзернейм: @{user.username}\n"
|
||||||
|
|
||||||
|
# Статусы
|
||||||
|
text += f"├ Бот: {'✅' if user.bot else '❌'}\n"
|
||||||
|
text += f"├ Прем: {'✅' if user.premium else '❌'}\n"
|
||||||
|
if hasattr(user, 'verified') and user.verified:
|
||||||
|
text += f"├ Верифицирован: ✅\n"
|
||||||
|
if hasattr(user, 'scam') and user.scam:
|
||||||
|
text += f"├ Скам: ⚠️\n"
|
||||||
|
if hasattr(user, 'fake') and user.fake:
|
||||||
|
text += f"├ Фейк: ⚠️\n"
|
||||||
|
|
||||||
|
# Контактная информация
|
||||||
|
text += f"\n<b>📞 Контакты:</b>\n"
|
||||||
|
if hasattr(user, 'phone') and user.phone:
|
||||||
|
text += f"├ Телефон: <code>{user.phone}</code>\n"
|
||||||
|
else:
|
||||||
|
text += f"├ Телефон: скрыт\n"
|
||||||
|
|
||||||
|
# Язык
|
||||||
|
if hasattr(user, 'lang_code') and user.lang_code:
|
||||||
|
lang_flags = {
|
||||||
|
'ru': '🇷🇺', 'en': '🇬🇧', 'uk': '🇺🇦',
|
||||||
|
'es': '🇪🇸', 'fr': '🇫🇷', 'de': '🇩🇪',
|
||||||
|
'it': '🇮🇹', 'ja': '🇯🇵', 'zh': '🇨🇳'
|
||||||
|
}
|
||||||
|
flag = lang_flags.get(user.lang_code, '🌐')
|
||||||
|
text += f"├ Язык: {flag} {user.lang_code.upper()}\n"
|
||||||
|
|
||||||
|
# Био
|
||||||
|
if hasattr(full_user, 'bio') and full_user.bio:
|
||||||
|
bio = full_user.bio.replace('\n', ' ').strip()
|
||||||
|
if len(bio) > 100:
|
||||||
|
bio = bio[:97] + "..."
|
||||||
|
text += f"\n<b>📝 О себе:</b>\n"
|
||||||
|
text += f"├ {bio}\n"
|
||||||
|
|
||||||
|
# Фото
|
||||||
|
if hasattr(full_user, 'photo') and full_user.photo:
|
||||||
|
text += f"\n<b>🖼 Фото:</b> есть\n"
|
||||||
|
else:
|
||||||
|
text += f"\n<b>🖼 Фото:</b> нет\n"
|
||||||
|
|
||||||
|
# Общие чаты
|
||||||
|
text += f"\n<b>💬 Общие чаты:</b>\n"
|
||||||
|
if common_chats:
|
||||||
|
for i, chat in enumerate(common_chats[:5], 1):
|
||||||
|
chat_name = chat.title or chat.first_name or "Без названия"
|
||||||
|
if len(chat_name) > 30:
|
||||||
|
chat_name = chat_name[:27] + "..."
|
||||||
|
text += f"├ {i}. {chat_name}\n"
|
||||||
|
if len(common_chats) > 5:
|
||||||
|
text += f"└ и ещё {len(common_chats) - 5} чатов\n"
|
||||||
|
else:
|
||||||
|
text += f"├ Нет общих чатов\n"
|
||||||
|
|
||||||
|
# Дата регистрации (примерная)
|
||||||
|
if user.id:
|
||||||
|
# Примерная оценка по ID
|
||||||
|
registration_year = 2013 + (user.id // 10000000)
|
||||||
|
text += f"\n<b>📅 Примерная дата регистрации:</b> {registration_year} год\n"
|
||||||
|
|
||||||
|
# Подпись
|
||||||
|
text += f"\n<i>🛸 Neko-chan info</i>"
|
||||||
|
|
||||||
|
await utils.answer(message, text)
|
||||||
|
|
||||||
|
async def get_common_chats(self, message, user_id):
|
||||||
|
"""Получает список общих чатов"""
|
||||||
|
try:
|
||||||
|
common = []
|
||||||
|
async for dialog in message.client.iter_dialogs():
|
||||||
|
if dialog.is_chat or dialog.is_group:
|
||||||
|
try:
|
||||||
|
participants = await message.client.get_participants(dialog.id, limit=100)
|
||||||
|
if any(p.id == user_id for p in participants):
|
||||||
|
common.append(dialog)
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
return common
|
||||||
|
except:
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def whoiscmd(self, message):
|
||||||
|
"""[@username или reply] - Кто этот человек?"""
|
||||||
|
args = utils.get_args_raw(message)
|
||||||
|
|
||||||
|
# Поиск по юзернейму
|
||||||
|
if args:
|
||||||
|
try:
|
||||||
|
if args.startswith('@'):
|
||||||
|
args = args[1:]
|
||||||
|
user = await message.client.get_entity(args)
|
||||||
|
except:
|
||||||
|
await utils.answer(message, "❌ Пользователь не найден")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
# По реплаю
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
if reply:
|
||||||
|
user = await reply.get_sender()
|
||||||
|
else:
|
||||||
|
await utils.answer(message, "❌ Укажи юзернейм или ответь на сообщение")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Показываем информацию
|
||||||
|
await self.uicmd(message)
|
||||||
|
|
||||||
|
async def idcmd(self, message):
|
||||||
|
"""Показать ID пользователя/чата"""
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
|
||||||
|
if reply:
|
||||||
|
user = await reply.get_sender()
|
||||||
|
text = f"<b>🆔 ID пользователя:</b> <code>{user.id}</code>\n"
|
||||||
|
else:
|
||||||
|
text = f"<b>🆔 ID чата:</b> <code>{message.chat_id}</code>\n"
|
||||||
|
|
||||||
|
if message.chat_id:
|
||||||
|
text += f"<b>🆔 Ваш ID:</b> <code>{(await message.client.get_me()).id}</code>"
|
||||||
|
|
||||||
|
await utils.answer(message, text)
|
||||||
|
|
||||||
|
async def chatscmd(self, message):
|
||||||
|
"""Список чатов где есть пользователь"""
|
||||||
|
reply = await message.get_reply_message()
|
||||||
|
if not reply:
|
||||||
|
await utils.answer(message, "❌ Ответь на сообщение пользователя")
|
||||||
|
return
|
||||||
|
|
||||||
|
user = await reply.get_sender()
|
||||||
|
|
||||||
|
status = await utils.answer(message, f"🔍 Ищу чаты где есть @{user.username or user.id}...")
|
||||||
|
|
||||||
|
common = await self.get_common_chats(message, user.id)
|
||||||
|
|
||||||
|
if not common:
|
||||||
|
await status.edit("❌ Нет общих чатов")
|
||||||
|
return
|
||||||
|
|
||||||
|
text = f"<b>💬 Чаты с {user.first_name}:</b>\n\n"
|
||||||
|
|
||||||
|
for i, chat in enumerate(common[:10], 1):
|
||||||
|
chat_name = chat.title or chat.first_name or "Без названия"
|
||||||
|
chat_type = "Группа" if chat.is_group else "Чат"
|
||||||
|
text += f"{i}. {chat_type} — {chat_name}\n"
|
||||||
|
text += f" ID: <code>{chat.id}</code>\n"
|
||||||
|
|
||||||
|
if len(common) > 10:
|
||||||
|
text += f"\n...и ещё {len(common) - 10} чатов"
|
||||||
|
|
||||||
|
await status.edit(text)
|
||||||
Reference in New Issue
Block a user