Files
PrimoPiarBot/code/sender.py
2025-10-03 09:31:12 +07:00

80 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)