如何捕获Telegram机器人start命令后的附加参数?
处理Telegram机器人的start参数链接问题
问题原因
你写的代码没生效,核心有两个问题:
- Telegram会自动把链接
https://t.me/MyBot?start=aff_1234转换成用户发送/start aff_1234给机器人,不是带=的格式,所以你用split('=aff_')根本匹配不到内容。 - 你的
MessageHandler没有指定过滤规则,无法精准捕获start命令的消息。
正确实现代码
直接用Pyrogram的命令过滤器捕获start命令,通过message.command获取参数:
from pyrogram import Client, filters # 替换成你的机器人信息 c = Client( "bot", api_id=123456, api_hash="你的API_HASH", bot_token="你的BOT_TOKEN" ) @c.on_message(filters.command("start")) async def handle_start(client, message): # 检查是否携带参数 if len(message.command) > 1: param = message.command[1] # 判断参数是否为aff_开头的推广ID if param.startswith("aff_"): aff_id = param.split("_")[1] print(f"捕获到推广ID:{aff_id}") await message.reply(f"欢迎!你的推广ID是 {aff_id}") else: await message.reply("欢迎使用机器人!") else: await message.reply("欢迎使用机器人!") c.run()
关键说明
filters.command("start"):精准过滤所有包含/start命令的消息,包括带参数的情况。message.command:Pyrogram自动将命令拆分为列表,比如/start aff_1234会被解析为['start', 'aff_1234'],直接取索引1就能拿到参数。
内容的提问来源于stack exchange,提问作者Kon
相关产品推荐
相关产品推荐

