Простейший автоответчик сообщений в Telegram
Сегодняшнюю тему я поставил замечательной библиотеке https://docs.pyrogram.org/7, поскольку с этой штукой можно делать реально годные проги для Telegram.
Одна из таких программ является Автоответчик, который будет отправлять сообщение человеку если тот написал ему (хочу добавить, что стоит фильтр сообщений из-за чего сообщения из групп считаться не будут)
Код https://main.py:
from pyrogram import Client, filters
from pyrogram.handlers.message_handler import MessageHandler
from pyrogram.types import Message
import logging
from data import check_user
import sys
api_id = 25131136
api_hash = "cbb345642927ec700650518160e75b56"
client = Client(name="account_data", api_id=api_id, api_hash=api_hash)
logging.basicConfig(level=logging.INFO, filename="app.log", filemode="w", encoding="utf-8", format="%(filename)s[%(funcName)s]: %(message)s")
stream_handler = logging.StreamHandler(stream=sys.stdout)
stream_handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(filename)s[%(funcName)s]: %(message)s")
stream_handler.setFormatter(formatter)
logger = logging.getLogger("AutoResponse")
logger.addHandler(stream_handler)
def auto_response(client: Client, message: Message):
if check_user(message.from_user.id):
user = f"@{message.from_user.username}" if message.from_user.username else message.from_user.first_name
logger.info(f"Приветственное сообщение отправлено в чат с {user} ({message.from_user.id})")
message.reply(f"Привет! @{message.from_user.username}")
else:
user = f"@{message.from_user.username}" if message.from_user.username else message.from_user.first_name
logger.warn(f"Пользователь {user} ({message.from_user.id}) уже есть в истории чата...")
client.add_handler(MessageHandler(auto_response, filters.private & ~filters.me))
if __name__ == "__main__":
client.run()
Разберемся что и как, думаю с импортами ни у кого проблем возникнуть не должно, НО есть какая то функция check_user, которая непонятно откуда вылезла. Так вот, предварительно я хотел сделать весь код в один файл, но подумал что так будет неудобно да и в целом когда все на своих местах всем спокойнее. Разберем файл https://data.py:
import json
# Читаем файл
def read_data(file):
try:
with open(file, 'r', encoding='utf-8') as file:
users_data = json.load(file)
except (FileNotFoundError, json.decoder.JSONDecodeError):
users_data = {}
return users_data
# Записываем все изменения
def write_data(db, file):
with open(file, 'w', encoding='utf-8') as file:
json.dump(db, file, indent=4, ensure_ascii=False)
# Проверка пользователя на наличие его ID в базе данных
def check_user(user_id):
db = read_data("users.json")
if str(user_id) not in db:
db = str(user_id)
write_data(db, "users.json")
return True
else:
return
Думаю с этим все предельно понятно. Если есть какие либо вопросы можете писать их в комментариях под темой :finger_up:
Если вам лень что либо разбирать, загрузил файл на https://github.com/xllebbSQ/AutoResponseScript