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

如何在Telethon中实现类似python-telegram-bot的命令参数提取功能

Telethon分离命令和参数的优雅实现方案

Telethon 原生支持通过正则匹配直接提取命令参数,不用手动拆分字符串、捕获异常,可实现和 python-telegram-bot 完全一致的参数获取效果:

方案1:使用事件pattern参数(最推荐)

在注册消息事件时直接通过正则捕获命令后的参数,Telethon 会自动完成匹配和参数提取,代码最简洁:

from telethon import events

# 正则说明:
# ^!raw 匹配以!raw开头的消息
# (?:\s+(.+))? 是可选非捕获组,匹配命令后的空格和内容,捕获组1就是命令后的所有文本
# 没有参数时也能正常触发命令
@client.on(events.NewMessage(pattern=r'^!raw(?:\s+(.+))?$'))
async def raw_command_handler(event):
    # 获取命令后所有文本,无参数时默认是空字符串
    full_args_text = event.pattern_match.group(1) or ''
    # 按空格拆分得到参数列表,和python-telegram-bot的context.args效果完全一致
    args = full_args_text.split() if full_args_text else []
    
    # 直接获取第一个参数
    if args:
        first_arg = args[0]
        print(first_arg)
        # 执行业务逻辑
        do_something()

方案2:全局消息处理时的参数拆分

如果你需要统一监听所有消息再做命令判断,也可以用以下无异常、无硬编码的实现:

from telethon import events

# 统一配置命令前缀,修改时不用调整切片长度
RAW_COMMAND = "!raw"

@client.on(events.NewMessage)
async def global_msg_handler(event):
    raw_text = event.raw_text
    # 先判断是否匹配目标命令
    if raw_text.lower().startswith(RAW_COMMAND):
        # 去掉命令前缀后去除首尾空格
        args_text = raw_text[len(RAW_COMMAND):].strip()
        # 拆分得到参数列表
        args = args_text.split() if args_text else []
        
        if args:
            # 执行业务逻辑
            do_something()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:39:01