Внедрение телеграм бота в скрипт

Рейтинг: 0Ответов: 1Опубликовано: 21.07.2023
import asyncio
from aiogram import Bot, Dispatcher, types

# Вставьте свой токен бота
BOT_TOKEN = "MY_TOKEN"

# Инициализация бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)
loop = asyncio.get_event_loop()

# Переменная для хранения текстового сообщения от пользователя
user_text_message = None
lock = asyncio.Lock()  # Создаем объект блокировки


async def send_photo_to_user(user_id):
    # Вставьте путь к вашей картинке
    photo_path = "my_path"

    # Отправка фото пользователю
    with open(photo_path, "rb") as photo:
        await bot.send_photo(user_id, photo)


@dp.message_handler(content_types=types.ContentType.TEXT)
async def handle_text_message(message: types.Message):
    global user_text_message
    async with lock:  # Получаем блокировку, чтобы безопасно обновить переменную
        user_text_message = message.text
    await message.reply("Спасибо, ваше сообщение записано!")


async def on_startup(dp):
    await bot.send_message(chat_id=1234567890, text="Бот запущен и готов к использованию!")

    # Запускаем отправку фото в отдельном потоке
    asyncio.create_task(send_photo_to_user(6084170896))


if __name__ == "__main__":
    # Запускаем бота
    loop.run_until_complete(on_startup(dp))

    # Запускаем обработку сообщений в основном потоке
    try:
        loop.run_until_complete(dp.start_polling())
    except KeyboardInterrupt:
        pass

    # Выводим значение user_text_message после запуска бота
    print("Значение user_text_message после запуска бота:", user_text_message)

Возможно ли сделать так, чтобы print в этом скрипте работал? Его нельзя убирать с основного потока. Помогите пожалуйста. Может быть нужно разделение на разные файлы (но лучше без него)?

Ответы

▲ 0

Функция print использует изначальную консоль из абсолютно любой точки кода (хоть в корунтине, хоть в другой задаче, хоть потоке). Значит print будет работать. Вероятнее всего, если проблема есть, то в том, что функция вывода вызывается после блокирующей операции запуска бота.