import time
import requests
import sys
import psutil
import copy
import json
import logging
import configparser
import os
from logging.handlers import RotatingFileHandler
from telethon import TelegramClient, events, types, utils
from telethon.tl.types import PeerUser, PeerChat, PeerChannel
from datetime import datetime
config = configparser.ConfigParser()
config.read("settings.ini", encoding="utf-8")
# Подключаем логирование
logger = logging.getLogger()
logger.setLevel(logging.INFO)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
logger.addHandler(stream_handler)
log_rotate = RotatingFileHandler('telegramm.log', maxBytes=57286400, backupCount=5)
logger.addHandler(log_rotate)
formatter = logging.Formatter(
fmt='[%(asctime)s] [%(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
log_rotate.setFormatter(formatter)
logger.info("Запуск скрипта. Чтение конфигурации завершено.")
client = TelegramClient('anon', config["API_TELEGRAMM"]["api_id"], config["API_TELEGRAMM"]["api_hash"])
chatss = []
async def main_flow():
logger.info("Начало получения списка чатов.")
async for dialog in client.iter_dialogs():
logger.info("Получен чат '%s' с ID %s (индекс %d).", dialog.name, dialog.id, len(chatss))
chatss.append({'title': dialog.name, 'id': dialog.id})
logger.info("Получено %d чатов.", len(chatss))
try:
monitor_chat_index = int(input('Выберите чат для мониторинга (0 - {m_ch}): '.format(m_ch=len(chatss) - 1)))
if not 0 <= monitor_chat_index < len(chatss):
raise ValueError("Неверный индекс чата для мониторинга.")
logger.info("Выбран чат для мониторинга '%s' с ID %s.", chatss[monitor_chat_index]['title'], chatss[monitor_chat_index]['id'])
global choosen_chat_id
choosen_chat_id = chatss[monitor_chat_index]['id']
target_chat_index = int(input('Выберите целевой чат для ретрансляции (0 - {m_ch}): '.format(m_ch=len(chatss) - 1)))
if not 0 <= target_chat_index < len(chatss):
raise ValueError("Неверный индекс целевого чата.")
logger.info("Выбран целевой чат '%s' с ID %s.", chatss[target_chat_index]['title'], chatss[target_chat_index]['id'])
global target_chat_id
target_chat_id = chatss[target_chat_index]['id']
except ValueError as e:
logger.error("Ошибка ввода: %s. Завершение работы.", str(e))
sys.exit(1)
with client:
client.loop.run_until_complete(main_flow())
@client.on(events.NewMessage())
async def handler(event):
logger.debug("Получено новое сообщение: %s", event)
if choosen_chat_id == event.chat_id:
logger.info("Сообщение из мониторяемого чата ID %s.", choosen_chat_id)
if config["SETTINGS"]["start_say"] in event.raw_text and event.fwd_from is None:
logger.info("Обнаружено целевое сообщение: '%s'.", event.raw_text)
text_names = event.raw_text.replace('/', '').replace('💵', '')
logger.info("Обработанный текст: '%s'.", text_names)
text_name = text_names.split()
logger.info("Разделенный текст: %s.", text_name)
real_id_help, peer_type_help = utils.resolve_id(target_chat_id)
logger.info("Разрешен ID для отправки: %s, тип: %s.", real_id_help, peer_type_help)
try:
await client.send_message(peer_type_help(real_id_help), text_names)
logger.info("Сообщение успешно отправлено в целевой чат ID %s.", target_chat_id)
except Exception as e:
logger.error("Ошибка отправки сообщения: %s.", str(e))
client.start()
client.run_until_disconnected()