如何让我的电报机器人的处理程序不互相阻止?

问题描述 投票:0回答:1

我有一个用

python-telegram-bot
库制作的机器人。在这里,我必须通过
block=False
来使函数不会互相阻塞。但随着我的代码变得越来越大,向每个处理程序添加
block=True
变得相当麻烦。有没有办法让所有的处理程序
block=False

这是我的代码现在的样子。

from telegram.ext import ApplicationBuilder, CommandHandler, CallbackContext, Defaults
from telegram import Update, Bot, constants


async def start_c(u: Update, c: CallbackContext):
    bot: Bot = c.bot
    chat_id = u.message.chat_id
    await bot.sendMessage(chat_id, "<b>I'm alive!</b>")


async def help_c(u: Update, c: CallbackContext):
    bot: Bot = c.bot
    chat_id = u.message.chat_id
    await bot.sendMessage(chat_id, "Help Command!")


def main():
    key = "MY TOKEN"
    df = Defaults(parse_mode=constants.ParseMode.HTML)
    app = ApplicationBuilder().token(key).connect_timeout(30).defaults(df).build()

    app.add_handler(CommandHandler("start", start_c, block=False))
    app.add_handler(CommandHandler("help", help_c, block=False))

    app.run_polling()


if __name__ == "__main__":
    main()

我尝试将 commandNamesfunctions 存储在 dict 中,然后迭代它们并向每一个添加

block=False
。但这也只是一些代码!

python-3.x telegram-bot python-telegram-bot
1个回答
0
投票

好吧,如果您先阅读了文档,您可以很容易地完成此操作。 Defaults 类就是您要寻找的。

使用方法如下:

from telegram.ext import Defaults # import the Defaults class

# Your Other Code Here

def main():
    key = "MY TOKEN"
    df = Defaults(parse_mode=constants.ParseMode.HTML, block=False) # This will be set for all handlers
    app = ApplicationBuilder().token(key).connect_timeout(30).defaults(df).build()

    app.add_handler(CommandHandler("start", start_c)) # No need to set here anymore.
    app.add_handler(CommandHandler("help", help_c))

    app.run_polling()


if __name__ == "__main__":
    main()

下次请注意先阅读文档。事情在那里得到了很好的解释。

© www.soinside.com 2019 - 2024. All rights reserved.