python-telegram-bot 错误 'CallbackContext' 对象没有属性 'message'
python-telegram-bot ERROR 'CallbackContext' object has no attribute 'message'
下面是一个电报机器人的例子。
帮助我理解为什么函数 message_handler 在我的代码中有效,而 greet_user - 不工作。
error_log 装饰器出错:'CallbackContext' object has no attribute 'message'
from telegram import Update, Bot
from telegram.ext import Updater, MessageHandler, Filters, CallbackContext, CommandHandler
from telegram.utils.request import Request
def log_error(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as exc:
print(f'Error: {exc}')
raise exc
return wrapper
def message_handler(update: Update, context: CallbackContext):
update.message.reply_text(text='Example')
@log_error
def greet_user(bot, update):
update.message.reply_text('hello')
def main():
req = Request(connect_timeout=0.5)
t_bot = Bot(
request=req,
token='xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
base_url='https://telegg.ru/orig/bot',
)
updater = Updater(bot=t_bot, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', greet_user))
dp.add_handler(MessageHandler(filters=Filters.all, callback=message_handler))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我明白问题出在哪里了。
如果我们在 Updater
中使用 use_context=True
,我们应该以这种方式将参数传递给函数:
def greet_user(`update: Update, context: CallbackContext`):
update.message.reply_text('hello')
https://github.com/python-telegram-bot/python-telegram-bot/wiki/Transition-guide-to-Version-12.0
下面是一个电报机器人的例子。 帮助我理解为什么函数 message_handler 在我的代码中有效,而 greet_user - 不工作。
error_log 装饰器出错:'CallbackContext' object has no attribute 'message'
from telegram import Update, Bot
from telegram.ext import Updater, MessageHandler, Filters, CallbackContext, CommandHandler
from telegram.utils.request import Request
def log_error(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as exc:
print(f'Error: {exc}')
raise exc
return wrapper
def message_handler(update: Update, context: CallbackContext):
update.message.reply_text(text='Example')
@log_error
def greet_user(bot, update):
update.message.reply_text('hello')
def main():
req = Request(connect_timeout=0.5)
t_bot = Bot(
request=req,
token='xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
base_url='https://telegg.ru/orig/bot',
)
updater = Updater(bot=t_bot, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', greet_user))
dp.add_handler(MessageHandler(filters=Filters.all, callback=message_handler))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
我明白问题出在哪里了。
如果我们在 Updater
中使用 use_context=True
,我们应该以这种方式将参数传递给函数:
def greet_user(`update: Update, context: CallbackContext`):
update.message.reply_text('hello')
https://github.com/python-telegram-bot/python-telegram-bot/wiki/Transition-guide-to-Version-12.0