如何在aiogram中实现类似PremiumBot的分享个人资料按钮?
在aiogram中实现分享个人资料按钮
这个功能完全可行,对应的是Telegram Bot API里的request_user参数,aiogram已经封装了这个能力,下面是具体实现步骤:
1. 导入依赖类
从aiogram中导入所需的键盘相关类:
from aiogram.types import KeyboardButton, ReplyKeyboardMarkup, ContentType from aiogram import types, Dispatcher
2. 创建分享资料按钮
使用KeyboardButton的request_user参数定义按钮,其中request_id是自定义标识,用于区分不同的请求按钮:
share_profile_btn = KeyboardButton( text="分享我的个人资料", request_user={"request_id": 1} )
3. 组装回复键盘
把按钮添加到回复键盘中,设置自适应大小:
profile_keyboard = ReplyKeyboardMarkup( keyboard=[[share_profile_btn]], resize_keyboard=True )
4. 发送带键盘的消息
在命令或消息处理器中,给用户发送带这个键盘的提示消息:
@dp.message_handler(commands=['start']) async def start_handler(message: types.Message): await message.answer("请点击下方按钮分享你的个人资料", reply_markup=profile_keyboard)
5. 处理用户分享的资料
监听USER_SHARED类型的消息,获取用户分享的ID:
@dp.message_handler(content_types=ContentType.USER_SHARED) async def handle_shared_profile(message: types.Message): shared_user_id = message.user_shared.user_id trigger_request_id = message.user_shared.request_id # 可根据request_id判断是哪个按钮触发的请求,再进行后续逻辑处理 await message.answer(f"你分享的用户ID是:{shared_user_id}")
注意事项
- aiogram 2.x及以上版本均支持该功能,建议使用最新稳定版
- 用户点击按钮后会弹出确认窗口,仅在用户确认后,bot才能获取到用户ID,不会泄露其他隐私信息
内容的提问来源于stack exchange,提问作者Ewtizzz
相关产品推荐
相关产品推荐

