# На модуль распространяется лицензия "GNU General Public License v3.0"
# https://github.com/all-licenses/GNU-General-Public-License-v3.0
# -*- coding: utf-8 -*-
# Name: UserParser
# Description: Данный модуль позволяет копировать ID, Username и Name участников чата при помощи команды .userpars
# meta developer: @PyModule
from .. import loader, utils
import json
import os
class UserIDParserMod(loader.Module):
"""Парсер ID, имени, фамилии и юзернейма пользователей с выбором формата файла"""
strings = {
"name": "UserParser",
"format_set": "✔️ Формат файла успешно установлен на: {}",
"invalid_format": "❗️ Неверный формат! Используйте: json, txt или html.",
}
def __init__(self):
self.file_format = "json"
async def client_ready(self, client, db):
self.client = client
self.db = db
saved_format = self.db.get("UserParser", "file_format", None)
if saved_format:
self.file_format = saved_format
async def formatparscmd(self, message):
"""Устанавливает формат файла: json, txt или html"""
args = utils.get_args_raw(message)
if args and args.lower() in ["json", "txt", "html"]:
self.file_format = args.lower()
self.db.set("UserParser", "file_format", self.file_format)
await message.edit(self.strings["format_set"].format(self.file_format))
else:
await message.edit(self.strings["invalid_format"])
async def userparscmd(self, message):
"""Собирает информацию о пользователях из чата и сохраняет в файл"""
chat = message.chat
if not chat:
await message.edit("❌ Это не чат!")
return
user_data = []
async for user in self.client.iter_participants(chat.id):
user_info = {
"id": user.id,
"username": user.username or "None",
"first_name": user.first_name or "None",
"last_name": user.last_name or "None"
}
user_data.append(user_info)
chat_title = chat.title or "Без названия"
chat_id = chat.id
chat_info = f"Чат: {chat_title}\nID чата: {chat_id}"
file_format = self.file_format
if file_format == "json":
file_path = "user_data.json"
with open(file_path, "w", encoding="utf-8") as f:
json.dump(user_data, f, indent=4, ensure_ascii=False)
caption = f"Список пользователей из чата (JSON):\n{chat_info}"
elif file_format == "txt":
file_path = "user_data.txt"
with open(file_path, "w", encoding="utf-8") as f:
f.write(f"{chat_info}\n\n")
for user in user_data:
f.write(
f"ID: {user['id']}, "
f"Username: {user['username']}, "
f"Имя: {user['first_name']}, "
f"Фамилия: {user['last_name']}\n"
)
caption = f"Список пользователей из чата (TXT):\n{chat_info}"
elif file_format == "html":
file_path = "user_data.html"
with open(file_path, "w", encoding="utf-8") as f:
f.write(f"""
Список пользователей
Список пользователей из чата
Чат: {chat_title}
ID чата: {chat_id}
| ID |
Username |
Имя |
Фамилия |
""")
for user in user_data:
f.write(f"""
| {user['id']} |
{user['username']} |
{user['first_name']} |
{user['last_name']} |
""")
f.write("""
""")
caption = f"Список пользователей из чата (HTML):\n{chat_info}"
else:
await message.edit("❗️ Неверный формат файла! Укажите 'json', 'txt' или 'html' с помощью команды .formatpars.")
return
await self.client.send_file("me", file_path, caption=caption)
os.remove(file_path)
await message.edit("✔️ Успешно!")