大家好,亲爱的。首先,我将向您介绍机器人工作的本质。 有一个管理员(一个电报 ID),他应该收到有关在机器人中写入 /start 的普通用户的通知。 有一个包含用户数据的表(他的昵称、标识号(在用户写入/启动后立即发布给用户)和一列来自管理员的数据)。 一旦管理员收到普通用户激活机器人的通知,就会要求他写入有关该用户的某些信息(管理员在与机器人的聊天中输入此数据),必须对其进行处理并添加到用户的最后一列。
问题如下:机器人收到用户的通知后,无法处理管理员的消息。管理员的消息根本不会发送到任何地方,机器人也会停止工作,因此用户也不会登录到数据库。
请帮我弄清楚。也许有人遇到过这个问题并解决了这样的问题(在telebot中,这非常简单:管理员的消息被注册在一个变量中,然后将其添加到数据库中,在aiogram中,不幸的是,据我所知,这是不可能的明白,但我不能使用远程机器人:机器人必须是异步的)
@router.message(CommandStart())
async def cmd_start(message: Message, state: FSMContext, bot: Bot):
user_id = message.from_user.id
user_name = message.from_user.first_name
if not await rq.user_exists(user_id):
await state.update_data(user_id=user_id, user_name=user_name)
# We send a welcome message to the user
await message.reply("Welcome! The administrator will assign you a tag soon")
# We notify the administrator about the new user and suggest choosing a tag
tags = await rq.get_all_tags()
if tags:
buttons = [[KeyboardButton(text=tag)] for tag in tags]
keyboard = ReplyKeyboardMarkup(keyboard=buttons, resize_keyboard=True)
await bot.send_message(
ADMIN_ID,
f"New user: {user_name} (ID: {user_id}) logged in. Provide information about him:",
reply_markup=keyboard
)
await state.set_state(Form.waiting_for_admin_tag_choice)
# else:
# await bot.send_message(ADMIN_ID, "There are no tags available. Please add tags.")
else:
await message.answer("You are already registered!")
# Notifying the administrator about an existing user
await bot.send_message(ADMIN_ID, f"User: {user_name} (ID: {user_id}) logged in.")
这是来自用户的 /start 消息的处理程序代码。它允许您通知管理员某个用户启动了他的机器人。我不知道要向此函数添加什么才能使我的功能正常工作,或者除了 CommandStart 之外还要添加哪个处理程序
创建一个单独的函数,接受来自管理员的用户 ID 和数据并将其保存到 fsm 示例:“/edit user_id data”这是机器人应该处理的命令 有id伪代码:
@message.handler(command('edit'), Form.waiting_for_admin_tag_choice)
async def edit(message, state, bot):
_, user_id, data = message.text.split()
...