telebot.TeleBot.process_new_updates не обрабатывает сообщения

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2023

Я пишу telegram бота на Yandex Cloud Functions с помощью библиотеки pyTelegramBotApi. Вот мой код (упрощённый):

import os

import telebot
import json

MY_BOT: telebot.TeleBot

def message_handler(message: telebot.types.Message):
    MY_BOT.send_message(chat_id=message.chat.id, text=message.text)

# Functions for Yandex.Cloud
def register_handlers(bot: telebot.TeleBot):
    """Registration all handlers before processing update."""

    bot.register_message_handler(callback=message_handler)


def process_event(event, bot):
    """
    Converting an Yandex.Cloud functions event to an update and
    handling tha update.
    """

    json_string = event['body']
    update = telebot.types.Update.de_json(json_string)
    bot.process_new_updates([update])


def handler(event, context):
    """Yandex.Cloud functions handler."""

    if event['httpMethod'] == 'POST':

        global MY_BOT
        # Bot initialization
        MY_BOT = telebot.TeleBot(token=os.environ.get('TOKEN'))
        register_handlers(MY_BOT)
        process_event(event, MY_BOT)

        return {'statusCode': 200, 'body': 'ok'}
    return {'statusCode': 405}

Сначала я подумал, что глобальная переменная не изменяет своего значения, но заглянув сюда поменял свое мнение.

Пробовал прокси, просто добавив

from telebot import apihelper
apihelper.proxy = {'https': 'https://x.x.x.x:port'}

Перед MY_BOT = telebot.TeleBot(token=os.environ.get('TOKEN'))

Пробовал также telebot.TeleBot(token=os.environ.get('TOKEN'), threaded=False)

Всё же осталось мнение, что до обработчика сообщения просто не доходит message.

Ошибку код не выдаёт, по логам функции: Логи Yandex Cloud Functions

То есть Update заходит в process_new_updates, якобы обрабатывает и функция завершает свою работу. Прошу также заметить, что с aiogram всё работало, но в нем не достает register_next_step_handler(), который мне очень нужен. К сожалению не могу сейчас найти github с кодом aiogram, чтобы показать, что там было подобно написано и всё работало.

Ответы

▲ 0

Попробуйте использовать пример из их репозитория: https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/serverless/aws_lambda_function.py

Я только функцию-хендлер переименовал и всё завелось. Часа за 3 прототип накидал. Использовал вместе с api-gateway.