最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - Aiogram FSMContext issue: User's nickname is not correctly processed after adding a friend request - Stack Over

programmeradmin2浏览0评论

I'm working on a Telegram bot using the aiogram library, and I'm encountering an issue with the FSM (Finite State Machine) handling. The problem is that after a user sends a request to add a friend, they are supposed to set a nickname for their friend. However, instead of processing the nickname, the bot just treats the next message as a regular message and does not save the nickname. When a user sends a friend request, the bot asks for the friend’s nickname after receiving the target_id and stores it in the FSM state. But when the user sends the nickname, the bot doesn't process it as intended. It seems to treat the nickname as a regular message instead of storing it.

Here is the flow I'm trying to implement:

  1. The user sends a request to add a friend.
  2. The bot stores the target_id in FSM state.
  3. The bot then asks the user for a nickname.
  4. The user responds with a nickname, and the bot should store it in the database for the friend.

But the issue is that when the user sends the nickname, the bot reads it as a general message and does not associate it with the friend being added.

@dp.message(Form.add_friend)
async def process_friend_request(message: Message, state: FSMContext):
    # Bot asks for a nickname after receiving target_id
    await state.update_data(target_id=message.text)
    await message.answer("✅ Friend added! Now, please provide their nickname.")

@dp.message(Form.set_nickname_requester)
async def handle_requester_nickname(message: Message, state: FSMContext):
    # Bot processes nickname but treats message as regular text
    data = await state.get_data()
    target_id = data.get('target_id')

    if target_id:
        # Here we need to update friend's nickname but it's treated as regular message
        update_friend_name(user_id=message.from_user.id, friend_id=target_id, nickname=message.text.strip())
        await message.answer(f"✅ Friend's nickname saved: {message.text}")
    else:
        await message.answer("❌ Error: target_id is missing!")

Expected Behavior:

After the user sends the friend request, the bot should ask for a nickname.

When the user sends the nickname, the bot should save it as the nickname for the added friend.

Steps Taken:

I have verified that the state is being updated correctly with target_id, but the second message (the nickname) is treated as a regular message, and the bot does not associate it with the target_id. I tried adding additional state checks, but the problem persists.

Actual Behavior:

When the user sends the nickname, it is treated as a regular message, and the bot does not process it as the intended nickname for the friend.

The FSM is not properly associating the nickname with the correct target_id.

Questions:

Why is the nickname not being processed as part of the FSM flow?

How can I ensure the bot recognizes the user's response as the nickname for the friend and not as a regular message?

Are there specific FSM transitions I should handle to make sure the nickname is linked with the correct target_id?

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论