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

如何为对接CoinMarketCap的Telegram BTC价格提醒Python bot添加/start命令

Telegram BTC价格提醒机器人添加/start命令解决方案

问题根源

原代码仅实现了定时拉取BTC价格、硬编码单发消息的逻辑,没有监听Telegram的消息更新,因此无法响应/start命令,也无法适配群组场景。

实现思路

  1. 使用python-telegram-bot库监听Telegram消息,实现/start命令响应,自动收集触发命令的聊天ID(支持私聊、群组)
  2. 用多线程分离「消息监听」和「价格监控定时任务」两个逻辑,避免互相阻塞
  3. 支持多用户/多群组同时订阅提醒

前置依赖

先安装所需第三方库:

pip install python-telegram-bot==13.7 requests

完整修改后代码

import requests
import time
import threading
from telegram.ext import Updater, CommandHandler

# 配置项
api_key = 'your_coinmarketcap_api_key'
bot_token = 'your_telegram_bot_token'
threshold = 30000
time_interval = 5 * 60 # 价格拉取间隔,单位秒

# 存储所有订阅提醒的聊天ID(支持多个私聊/群组)
subscribed_chats = set()

def get_btc_price():
    url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
    headers = {
        'Accepts': 'application/json',
        'X-CMC_PRO_API_KEY': api_key
    }
    response = requests.get(url, headers=headers)
    response_json = response.json()
    btc_price = response_json['data'][0]
    return btc_price['quote']['USD']['price']

def send_message(chat_id, msg):
    url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={msg}"
    requests.get(url)

# /start命令处理逻辑
def start(update, context):
    chat_id = update.effective_chat.id
    subscribed_chats.add(chat_id)
    context.bot.send_message(chat_id=chat_id, text="✅ BTC价格提醒已启动\n当前提醒阈值:低于30000USDT即时推送\n每30分钟推送一次最近6次价格记录")

# 价格监控任务,单独线程运行
def price_monitor():
    price_list = []
    while True:
        try:
            price = get_btc_price()
            price_list.append(round(price, 2))
            # 仅给已订阅的聊天发消息
            for chat_id in subscribed_chats:
                # 低于阈值触发告警
                if price < threshold:
                    send_message(chat_id=chat_id, msg=f'⚠️ BTC价格下跌提醒:{price} USDT')
                # 存够6次推送历史
                if len(price_list) >= 6:
                    send_message(chat_id=chat_id, msg=f'📊 最近30分钟BTC价格记录:\n{"、".join(map(str, price_list))}')
            if len(price_list) >= 6:
                price_list = []
        except Exception as e:
            print(f"运行异常:{str(e)}")
        time.sleep(time_interval)

def main():
    # 启动价格监控线程
    monitor_thread = threading.Thread(target=price_monitor, daemon=True)
    monitor_thread.start()

    # 启动Telegram消息监听
    updater = Updater(bot_token)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

部署注意事项

  • 群组使用前需要先在BotFather处关闭隐私模式:给@BotFather发送/setprivacy,选择你的机器人,点击Disable,否则机器人无法接收群组内的/start命令
  • 若群组开启了全员禁言,需要将机器人设为管理员,开放发消息权限
  • 代码启动后,在需要接收提醒的私聊窗口或群组发送/start即可触发订阅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:27:04