@piton-vas

Отправка сообщения aiogram в произвольной функции без handler использовав существующий bot?

При использовании бота несть необходимость в произвольный момент времени(без handler) запускать отправку(редактирование) сообщения. Грубо говоря, по мере обновления сообщения от опен АИ, бот должен отправить, а потом редактировать это сообщение.
Как при вызове функции send_msg_without_hendler(msg), использовать уже готовый объект Bot, а не создавать новый? Как будто в очередь ему нужно пихнуть сообщение

main.py

async def aiogram_bot():
    bot = Bot(token=BOT_TOKEN, parse_mode=ParseMode.HTML)
    dp = Dispatcher(storage=MemoryStorage())
    dp.include_router(router)
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())

if __name__ == "__main__":
    if server_mode=="PROD":
        asyncio.run(aiogram_bot())


hendler.py

async def send_msg_without_hendler(message):
    client = TelegramClient('.venv/session_name', telethon_api_id, telethon_api_hash) # Здесь каждый раз создается новый клиент, но хочется использовать существующий
    send_message = await client.send_message(chat_id, message)
    id_send_message = send_message.to_dict()["id"]
    logging.info("Сообщение отправили, записали его id:" + str(id_message_to_china))

  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Очевидно, хранить существующего бота где-то. Или в глобальной переменной, или переделать функцию в метод класса и хранить ссылку на бота в поле класса. Главное, чтобы эта ссылка была в поле видимости твоего кода.

Но я бы заметил, что слишком частое редактирование сообщения - не лучшая идея. Я бы разбил процесс на две части - обработчик обновлений от OpenAI складывает в какой-то буфер полученные части текста, а бот время от времени проверяет буфер и дописывает всё, что там лежит, в сообщение.
Ответ написан
@seratkac
Bot имеет встроенный метод send_message
main.py
from aiogram import Bot
from os import getenv
import asyncio

bot = Bot(getenv('TOKEN'))

chat_id = 123456789

async def main():
    await bot.send_message(chat_id=chat_id, text="your message")

if __name__ == '__main__':
    asyncio.run(main())


Документация
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы