aigram 中的管理员功能

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

大家好,亲爱的。首先,我将向您介绍机器人工作的本质。 有一个管理员(一个电报 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 之外还要添加哪个处理程序

python python-3.x telegram telegram-bot aiogram
1个回答
0
投票

创建一个单独的函数,接受来自管理员的用户 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()
      ...
© www.soinside.com 2019 - 2024. All rights reserved.