commit
This commit is contained in:
79
code/sender.py
Normal file
79
code/sender.py
Normal file
@@ -0,0 +1,79 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user