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

