from typing import Optional from asyncio import sleep from pyrogram import Client from pyrogram.types import Message from loguru import logger from .config import settings __all__ = ("send_inline_request", "copy_channel_message", "periodic_send",) async def send_inline_request(client: Client) -> None: """Отправка inline-запроса от имени бота.""" for group_id in settings.GROUP_IDS.keys(): try: inline_results = await client.get_inline_bot_results( settings.BOT_USERNAME, "Реклама" ) if not inline_results.results: logger.bind(user=group_id).warning( f"Нет inline-результатов для группы {group_id}" ) continue result_id = inline_results.results[0].id await client.send_inline_bot_result( chat_id=group_id, query_id=inline_results.query_id, result_id=result_id, ) logger.bind(user=group_id).info(f"Inline результат отправлен в {group_id}") except Exception as e: logger.bind(user=group_id).error(f"Ошибка inline: {e}") async def copy_channel_message(client: Client) -> None: """Копирование последнего сообщения с канала и отправка в группы без авторства.""" message: Optional[Message] = None try: # Получаем последнее сообщение с канала async for msg in client.get_chat_history(settings.SOURCE_CHANNEL, limit=1): message = msg break # берём только первое (последнее) сообщение if not message: logger.bind(user="@Console").warning("Нет сообщений для копирования") return except Exception as e: logger.bind(user="@Console").error(f"Не удалось получить сообщение с канала: {e}") return for group_id, reply_id in settings.GROUP_IDS.items(): try: # Копируем сообщение без авторства await client.copy_message( chat_id=group_id, from_chat_id=settings.SOURCE_CHANNEL, message_id=message.id, # <-- используем id вместо message_id reply_to_message_id=reply_id, ) logger.bind(user=group_id).info(f"Сообщение скопировано в {group_id}") except Exception as e: logger.bind(user=group_id).error(f"Ошибка при отправке сообщения: {e}") async def periodic_send(client: Client) -> None: """Цикл отправки сообщений с заданным периодом.""" while True: if settings.MSG_PHOTO: # Старый функционал фотографий заменяем на копирование сообщений await copy_channel_message(client) else: await send_inline_request(client) await sleep(settings.PERIOD)