Telegram流量查询机器人开发全攻略
### 🏗️ 准备工作 #### 所需依赖 - `python-telegram-bot`:用于创建 Telegram Bot。 - `requests`:用于发送 HTTP 请求。 - `base64`:用于处理 Base64 编码。 - `yaml`:用于解析 YAML 文件。 - `re`:用于正则表达式匹配。 #### 安装命令 使用 `pip` 安装所需依赖: ```bash pip install python-telegram-bot requests pyyaml ``` #### 版本要求 - Python 版本:Python 3.7 及以上。 - `python-telegram-bot` 版本:20.0 及以上。 #### 常见环境问题 - **网络问题**:确保你的服务器可以正常访问 Telegram 服务器和订阅服务器。 - **依赖安装问题**:如果安装依赖时出现问题,检查网络连接和 Python 环境是否正确配置。 ### 📝 代码实现 ```python import base64 import re import requests import yaml from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext # 初始化 Telegram Bot TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' updater = Updater(token=TOKEN, use_context=True) dispatcher = updater.dispatcher def parse_subscription_link(link): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(link, headers=headers) if response.status_code == 200: # 解析响应头中的机场名称与流量信息 airport_name = response.headers.get('X-Airport-Name', 'Unknown') used_traffic = response.headers.get('X-Used-Traffic', 'Unknown') total_traffic = response.headers.get('X-Total-Traffic', 'Unknown') remaining_traffic = float(total_traffic) - float(used_traffic) if total_traffic != 'Unknown' and used_traffic != 'Unknown' else 'Unknown' # 计算流量消耗百分比 if total_traffic != 'Unknown' and used_traffic != 'Unknown': consumption_percentage = (float(used_traffic) / float(total_traffic)) * 100 else: consumption_percentage = 'Unknown' # 计算订阅到期时间与剩余天数/小时/分钟 expiration_time = response.headers.get('X-Subscription-Expiration', 'Unknown') if expiration_time != 'Unknown': # 这里需要根据具体的时间格式进行解析和计算 remaining_time = 'TODO: Calculate remaining time' else: remaining_time = 'Unknown' return { 'airport_name': airport_name, 'used_traffic': used_traffic, 'remaining_traffic': remaining_traffic, 'total_traffic': total_traffic, 'consumption_percentage': consumption_percentage, 'expiration_time': expiration_time, 'remaining_time': remaining_time } else: return None except Exception as e: print(f"Error parsing subscription link: {e}") return None def handle_subscription_link(update: Update, context: CallbackContext): link = update.message.text result = parse_subscription_link(link) if result: message = f"机场名称: {result['airport_name']}\n" message += f"已用流量: {result['used_traffic']}\n" message += f"剩余流量: {result['remaining_traffic']}\n" message += f"总流量: {result['total_traffic']}\n" message += f"流量消耗百分比: {result['consumption_percentage']}%\n" message += f"订阅到期时间: {result['expiration_time']}\n" message += f"剩余时间: {result['remaining_time']}" update.message.reply_text(message) else: update.message.reply_text("无法解析订阅链接。") # 注册消息处理函数 subscription_handler = MessageHandler(Filters.text & ~Filters.command, handle_subscription_link) dispatcher.add_handler(subscription_handler) # 启动 Bot updater.start_polling() updater.idle() ``` ### 💡 关键概念解释 - **Telegram Bot**:通过 Telegram API 创建的机器人,可以接收用户消息并回复。 - **订阅链接**:用于获取代理节点信息的链接,通常包含节点配置和流量信息。 - **Base64 编码**:一种将二进制数据转换为 ASCII 字符串的编码方式,常用于传输和存储数据。 - **YAML 文件**:一种人类可读的数据序列化格式,常用于配置文件。 ### 🚀 进阶使用指南 #### 性能优化 - 使用异步请求库(如 `aiohttp`)代替 `requests`,提高并发处理能力。 - 对解析结果进行缓存,避免重复解析相同的订阅链接。 #### 错误处理 - 在请求订阅链接时,捕获各种异常(如网络异常、超时异常等),并给用户友好的提示。 - 对无效或无法访问的链接,记录错误信息并定期清理。 #### 扩展功能 - 支持更多的代理协议和客户端。 - 增加用户管理功能,如用户注册、登录、权限管理等。 #### 安全建议 - 对用户输入的链接进行合法性检查,避免恶意链接。 - 定期更新依赖库,修复安全漏洞。 #### 常见陷阱规避 - 注意订阅服务器的反爬虫机制,避免频繁请求导致 IP 被封禁。 - 处理好不同格式的订阅链接和节点配置,避免解析错误。 ### 📚 相关技术栈推荐 - **Telegram Bot API**:官方文档:[https://core.telegram.org/bots/api](https://core.telegram.org/bots/api) - **Python 官方文档**:[https://docs.python.org/3/](https://docs.python.org/3/) - **requests 库文档**:[https://requests.readthedocs.io/en/latest/](https://requests.readthedocs.io/en/latest/) - **PyYAML 库文档**:[https://pyyaml.org/wiki/PyYAMLDocumentation](https://pyyaml.org/wiki/PyYAMLDocumentation) ### 💡 开发建议 - 模块化开发:将不同的功能封装成独立的函数或类,提高代码的可维护性和可扩展性。 - 单元测试:编写单元测试代码,确保每个功能模块的正确性。 - 日志记录:使用 Python 的 `logging` 模块记录程序运行过程中的信息,方便调试和问题排查。 ######[AI写代码神器 | 1598点数解答 | 2026-05-31 14:15:26]
- Telegram流量查询机器人开发全攻略(字节豆包 | 1598点数解答 | 2026-05-31 14:15:26)5
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)459
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)254
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)202
- 2024 年三维设计成果:21 项目、双专利论文,新技术研发大突破 (字节豆包 | 764点数解答 | 2024-12-17 20:54:46)221
- 2024 年三维设计:21 项目成果闪耀,自动建模技术创新突破(阿里通义 | 1339点数解答 | 2024-12-17 20:56:07)183
- 2024年三维设计:21个项目成果、新技术突破与专业产出大揭秘(讯飞星火 | 1950点数解答 | 2024-12-17 20:56:19)233
- Matlab编程:血管机器人订购与生物学习,实现104周运营成本最低方案(字节豆包 | 3384点数解答 | 2025-06-22 13:25:13)199
- 揭秘C++面向对象编程:特性助力代码高效管理与扩展(阿里通义 | 285点数解答 | 2023-11-09 00:36:11)322
- C++开发必知:虚函数揭秘与多态性实例展示(阿里通义 | 289点数解答 | 2023-11-09 00:36:17)275
- C++ 开发必知:揭秘多线程——同一时间运行多任务的魔法! (阿里通义 | 64点数解答 | 2023-11-09 00:36:19)268
- C++开发必知:解锁死锁——为何进程会陷入互相等待困局? (阿里通义 | 61点数解答 | 2023-11-09 00:36:21)295