1

我已经完成了,就像在这个官方示例中一样:https ://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/webhook_examples/webhook_aiohttp_echo_bot.py 。不过,似乎没有任何效果。它也不会压碎。

WEBHOOK_URL 格式为http://adress.io。WEBHOOK_PATH = '/'。

import telebot
    from aiohttp import web

    from config import *
    from messages import *

    bot = telebot.TeleBot(TOKEN)


    app = web.Application()
    bot.remove_webhook()
    bot.set_webhook(url=WEBHOOK_URL + WEBHOOK_PATH)

    async def handle(request):
        if request.match_info.get('token') == bot.token:
            request_body_dict = await request.json()
            update = telebot.types.Update.de_json(request_body_dict)
            bot.process_new_updates([update])
            return web.Response()
        else:
            return web.Response(status=403)

    # main loop
    if __name__ == '__main__':
        @bot.message_handler(content_types=['text'])
        def reply(message):
            if message.text == "/start":
                bot.send_message(message.from_user.id, MESSAGE_START)
            elif message.text == "/help":
                bot.send_message(message.from_user.id, MESSAGE_HELP)
            elif message.text == "/seeagreement":
                bot.send_message(message.from_user.id, MESSAGE_AGREEMENT)

        web.run_app(
            app,
            host=WEBHOOK_IP,
            port=WEBHOOK_PORT,
        )
4

1 回答 1

0

我是电报api和telebot的新手,但我看到这个问题没有答案,所以我会提出我认为可以帮助你找到答案的内容(或任何面临这个问题的人)

我决定将我的机器人部署到 Heroku,完成了它想要的一切,但出现了一个奇怪的错误,即 'TeleBot' 没有'message_handler' attr,但没有找到 webhook 的错误。所以我只是要解释我做了什么。

我使用CPython代码而不是您使用的aiohttp。您的代码进行了一些更改将变成这样(更改与源代码不完全相同,因此请看一下):

import telebot
from http.server import BaseHTTPRequestHandler, HTTPServer

from config import *
from messages import *

bot = telebot.TeleBot(TOKEN)

WEBHOOK_HOST = '<ip/host where the bot is running>'
WEBHOOK_PORT = int(os.environ.get('PORT', 5000))
WEBHOOK_LISTEN = '0.0.0.0'

WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (TOKEN)

async def handle(request):
    if request.match_info.get('token') == bot.token:
        request_body_dict = await request.json()
        update = telebot.types.Update.de_json(request_body_dict)
        bot.process_new_updates([update])
        return web.Response()
    else:
        return web.Response(status=403)

# main loop
if __name__ == '__main__':
    @bot.message_handler(content_types=['text'])
    def reply(message):
        if message.text == "/start":
            bot.send_message(message.from_user.id, MESSAGE_START)
        elif message.text == "/help":
            bot.send_message(message.from_user.id, MESSAGE_HELP)
        elif message.text == "/seeagreement":
            bot.send_message(message.from_user.id, MESSAGE_AGREEMENT)

    httpd = HTTPServer((WEBHOOK_LISTEN, WEBHOOK_PORT), WebhookHandler)
    httpd.serve_forever()

对我来说很好。希望它对您或其他正在阅读本文的人有所帮助。

PS。由于该错误,我将切换到电报 pkg(主要 api)(在我住的地方,我不能使用任何外国主机,而且这里太贵了。我会坚持使用 Heroku 看看它是否有效)

于 2020-11-26T09:59:16.573 回答