You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyTelegramBotAPI开发Telegram机器人时如何分离命令与消息其余内容

pyTelegramBotAPI 分离命令与参数的实现方案

针对/set first_name, last_name这类带参数的命令,有三种常用的实现方式可以分离/set命令与后续内容:

1. 空格分割法

最通用的简单方案,按第一个空格将整段消息分割为命令和参数两部分:

full_text = message.text.strip()
# maxsplit=1 保证参数部分的空格不会被分割
parts = full_text.split(maxsplit=1)
command = parts[0] # 输出为 /set
params = parts[1] if len(parts) > 1 else "" # 输出为 first_name, last_name,无参数时为空字符串

如果只需要移除命令部分,直接取params即可。

2. 前缀替换法

适合明确触发的是/set命令的场景,还可以兼容命令带机器人后缀的情况(比如/set@your_bot_name):

full_text = message.text.strip()
bot_username = bot.get_me().username
# 依次移除命令前缀和可能存在的机器人后缀,再去除首尾空格
params = full_text.removeprefix("/set").removeprefix(f"@{bot_username}").strip()

如果使用Python 3.9以下版本,没有removeprefix方法,可以用切片实现:

full_text = message.text.strip()
if full_text.startswith("/set"):
    params = full_text[4:].strip()
    # 处理带机器人后缀的情况
    if params.startswith("@"):
        params = params.split(maxsplit=1)[1].strip() if " " in params else ""

3. 内置实体识别法

利用Telegram消息自带的命令实体识别,准确性最高,不会误判消息正文中其他位置出现的/set字符串:

full_text = message.text.strip()
params = ""
if message.entities:
    for entity in message.entities:
        if entity.type == "bot_command":
            command = full_text[entity.offset : entity.offset + entity.length]
            # 匹配/set命令和带机器人后缀的/set命令
            if command == "/set" or command.startswith("/set@"):
                # 截取命令结束位置之后的所有内容作为参数
                params = full_text[entity.offset + entity.length :].strip()
                break

单命令固定场景用替换法最便捷,通用多命令场景用分割法开发效率最高,需要高精度识别命令的场景用实体法最稳妥。

内容的提问来源于stack exchange,提问作者Wardah Aftab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:24:03