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

如何在Telethon中实现带参数的/price价格查询命令

Telethon实现/price命令方案

核心实现思路

  • 直接使用Telethon内置的events.NewMessage事件的commands参数匹配/price命令,Telethon会自动兼容带bot后缀的命令格式(比如/price@your_bot_username),无需额外处理
  • 提取消息文本后复用原有逻辑处理参数,异常兜底为1倍乘数
  • 计算价格后直接调用事件对象的reply方法返回结果即可

完整代码示例

from telethon import TelegramClient, events
from decimal import Decimal, InvalidOperation
from telethon.tl.types import ParseMode

# 替换为自己的api_id、api_hash、bot_token
API_ID = 你的API_ID
API_HASH = "你的API_HASH"
BOT_TOKEN = "你的BOT_TOKEN"
COMMAND_PRICE = "price"

# 原有获取加密货币价格的方法
def getCurrentCoinPrice():
    # 保留原有实现即可,以下为示例值
    return Decimal("1234.56")

client = TelegramClient('price_bot', API_ID, API_HASH).start(bot_token=BOT_TOKEN)

@client.on(events.NewMessage(commands=[COMMAND_PRICE]))
async def handle_price_command(event):
    text = event.raw_text
    try:
        # 移除命令前缀和空格,转Decimal,逻辑和原有代码完全一致
        priceMultiplier = Decimal(text.replace("/" + COMMAND_PRICE, "").replace(" ", ""))
    except InvalidOperation:
        priceMultiplier = Decimal(1)
    
    priceMultiplied = getCurrentCoinPrice() * priceMultiplier
    priceMultiplied = round(priceMultiplied, 5)
    
    await event.reply(f"$ {priceMultiplied}", parse_mode=ParseMode.HTML)

if __name__ == "__main__":
    client.run_until_disconnected()

额外注意点

  • Telethon所有IO操作都是异步的,所以处理函数要加async关键字,调用回复方法时要加await
  • 如果需要限制只有私聊能触发命令,可以给events.NewMessage加func=lambda e: e.is_private参数
  • 可以额外添加参数范围校验逻辑,避免用户输入过大数字导致计算异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:36:01