我有一个用
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()
我尝试将 commandNames 和 functions 存储在 dict 中,然后迭代它们并向每一个添加
block=False
。但这也只是一些代码!
好吧,如果您先阅读了文档,您可以很容易地完成此操作。 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()
下次请注意先阅读文档。事情在那里得到了很好的解释。