@skvor1n

Не срабатывает handler в telebot в webhook, как исправить?

Мне нужно сделать так, чтобы один сервер отвечал сразу и одинаково за большое количество ботов и при этом сильно не нагружался как это происходит при polling. То есть в запросы которые пользователи будут делать в @qwerty1_bot и @qwerty2_bot будут обрабатываться одинаково, весь функционал и база данных, всё одно и тоже, своего рода зеркала. Бот очень большой и изначально работал на асинхронном telebot и содержал код, который отвечал за ответы пользователю примерно таким образом
@bot.message_handler(commands=['start'])
    async def send_welcome(message):
        await bot.reply_to(message, 'Добро пожаловать в бота!')

потому переделывать под что-то другое вообще не вариант, слишком много времени займёт, потому обратился за помощью к ChatGPT как можно с минимальными изменениями добиться этого и после небольших моих правок скрипт бота выглядел вот так вот:

from flask import Flask, request, abort
import telebot
from telebot.async_telebot import AsyncTeleBot
import asyncio
import ipaddress

app = Flask(__name__)

# Допустимые IP-адреса Telegram
ALLOWED_IP_RANGES = [
    ipaddress.ip_network('149.154.160.0/20'),
    ipaddress.ip_network('91.108.4.0/22')
]

def is_ip_allowed(ip):
    ip = ipaddress.ip_address(ip)
    print(any(ip in network for network in ALLOWED_IP_RANGES))
    return any(ip in network for network in ALLOWED_IP_RANGES)

async def process_message(bot_token, update):
    bot = AsyncTeleBot(bot_token, parse_mode=None)

    @bot.message_handler(commands=['start'])
    async def send_welcome(message):
        await bot.reply_to(message, 'Добро пожаловать в бота!')

    print('something sended')
    await bot.process_new_updates([telebot.types.Update.de_json(update)])

@app.route('/webhook/<bot_token>', methods=['POST'])
async def webhook(bot_token):
    if not is_ip_allowed(request.remote_addr):
        abort(403)
    
    if request.headers.get('content-type') == 'application/json':
        update = request.get_json()
        asyncio.create_task(process_message(bot_token, update))
        return '', 200
    else:
        abort(403)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=443, ssl_context=('webhook_cert.pem', 'webhook_pkey.pem'))


Вроде бы всё хорошо, запрос приходит, мой webhook возвращает успех серверам telegram, something sended появляется в консоли, но... бот мне как пользователю в самом telegram ничего не отвечает. Как быть?
Заранее спасибо!
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Зачем бежать к чатгпт, когда надо открыть гитхаб самой библиотеки и посмотреть пример реализации мультибота?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы