我有一个与创建 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}")
问题是,在输入命令的聊天之后,它将无法使用机器人功能,直到另一个聊天输入相同的命令。
我需要一个解释或一个已经修复的导致问题的代码
发生这种情况是因为您正在处理 /help 命令的处理程序中设置状态:
await AnswerState.helpInfo.set()
据我所知,你实际上并不需要它。