Telegram Bot重置状态后出现无限错误消息问题求助
Telegram Bot重置状态后出现无限错误消息问题求助
兄弟,我一眼就揪出问题的根源了!你这段代码里藏着一个无限递归调用,这就是导致Bot不停发送错误消息的罪魁祸首。
先看看你的原代码:
@dp.message_handler(state=StateInfo.user_answer) async def reset_bot(message: types.Message, state: FSMContext): await state.reset_state(True) if message.text == 'Send new task': await start_uma(message) else: await bot.send_message(text="Error!", chat_id=message.chat.id) await reset_bot(message, state) # 这里就是问题所在!
你在reset_bot函数的最后一行,又调用了它自己——这会让函数陷入无限循环:每次执行完逻辑后,它会立刻再次调用自己,Bot就会不停地执行这个流程,反复发送错误消息,根本停不下来。
修正方案
把最后那行多余的递归调用删掉就行,修正后的代码如下:
@dp.message_handler(state=StateInfo.user_answer) async def reset_bot(message: types.Message, state: FSMContext): await state.reset_state(True) if message.text == 'Send new task': await start_uma(message) else: await bot.send_message(text="Error!", chat_id=message.chat.id)
另外再提个小细节:state.reset_state(True)里的True参数表示重置状态时保留上下文数据,如果你的需求是完全清空状态数据,可以改成await state.reset_state(False)(或者直接省略参数,默认就是False)。
如果修复后还有问题,可以检查一下start_uma函数里有没有触发重复消息的逻辑,但目前来看递归是最直接的问题根源。
备注:内容来源于stack exchange,提问作者Misha Slipchenko
相关产品推荐
相关产品推荐

