多聊天电报机器人 aiogram 的问题

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

我有一个与创建 Telegram 机器人有关的问题,该机器人将同时在多个聊天中运行。

命令之一是帮助请求命令。用户使用/help {请求文本}。然后这条短信会被发送到同名的其他聊天室

help_cb = CallbackData("help",'SenderId', "SenderName", 'action')
appeal_cb = CallbackData("appeal",'SenderId', 'action')

@dp.message_handler(commands="help")
async def help(message: types.Message):
    print("help")
    result = await db.check_if_allow(message.chat.id)
    if not result:
        await message.answer("Поки-що вам не дозволено відправляти запити про допогу. Спробуйте пізніше")
    else:
        if len(message.text) < 3:
            await message.answer("Опишіть вашу проблему детальніше.")
        else:
            forms, form = await db.get_chats_name(message.chat.id)
            await db.update_cooldown(message.chat.id)

            markup = InlineKeyboardMarkup()
            markup.add(InlineKeyboardButton("📨 Відповісти", callback_data=help_cb.new(SenderId = message.chat.id, SenderName = form[0],  action='answer')))
            markup.add(InlineKeyboardButton("🗑️ Видалити", callback_data=help_cb.new(SenderId = message.chat.id, SenderName = form[0], action='delete')))
            markup.add(InlineKeyboardButton("⛔ Поскаржитися", callback_data=help_cb.new(SenderId = message.chat.id, SenderName = form[0], action='appeal')))

            await message.answer("Запит на допомогу успішно надіслана")
            
            text = f"<b>🔔 Новий запит про допомогу!</b>\nКлас: {form[0]}\nЗапитання: {message.text}"

            for form in forms:
                await bot.send_message(form[0], text=text, reply_markup = markup)

            await AnswerState.helpInfo.set()

发送的文本中附有“回复”按钮。单击后,机器人会期望得到文本形式的回复,发送后,该回复会自动转发到请求帮助的聊天室。

@dp.callback_query_handler(help_cb.filter(action='answer'))
async def help_handler_answer(query: CallbackQuery, callback_data: dict, state: FSMContext):
    print("answer")
    await state.update_data(helpInfo = [callback_data["SenderId"], callback_data["SenderName"]])
    text = f"<b>Введіть відповідь на запитання</b>"
    await query.message.edit_reply_markup(None)
    await query.answer(text=text)
    await AnswerState.text.set()
@dp.message_handler(state=AnswerState.text)
async def process_title(message: Message, state: FSMContext):
    print("text")
    if len(message.text) < 3:
        await message.answer("В пояснені напишіть більше 2 слів.")
    else:
        await state.update_data(text = message.text)
        data = await state.get_data()

        await message.answer(f"<b>{data['helpInfo'][1]} щиро вдячний за допомогу!</b>")
        await state.finish()
        await bot.send_message(chat_id=data["helpInfo"][0], text=f"<b>🎉 Відповідь отримана!</b>\n\n{message.text}")

问题是,在输入命令的聊天之后,它将无法使用机器人功能,直到另一个聊天输入相同的命令。

示例: Exemple

我需要一个解释或一个已经修复的导致问题的代码

python bots telegram aiogram
1个回答
0
投票

发生这种情况是因为您正在处理 /help 命令的处理程序中设置状态:

await AnswerState.helpInfo.set()

据我所知,你实际上并不需要它。

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