如何在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
相关产品推荐
相关产品推荐

