如何修改Python脚本实现向Telegram多个聊天ID及群组发送消息
Telegram Bot批量向多聊天/群组发消息的修改方案
你现有脚本除了不支持批量发送外,还存在URL拼接错误、参数硬编码、无异常处理的问题,按以下步骤调整即可实现批量发送:
核心调整点
- 将单个
chat_id字符串变量替换为目标ID列表,可同时存入个人聊天ID、群组ID、频道ID;注意群组/私有频道ID为-100开头的负数,需要提前将Bot拉入对应会话并授予发消息权限,公开群/频道可直接填写@格式的用户名。 - 抽离单目标发消息的独立逻辑,不要手动硬拼URL参数,借助HTTP请求库自动处理文本转义、特殊字符编码,避免原脚本中引号错位、特殊字符截断参数的问题。
- 遍历目标ID列表循环发起请求,添加基础异常捕获,单个ID发送失败(如用户拉黑Bot、Bot被移出群、ID填写错误)不会中断剩余消息的发送流程。
调整后可直接运行的代码
首先安装依赖:
pip install requests
完整脚本:
import requests import time # 基础配置 botToken = "替换为你自己的Bot Token" # 所有需要接收消息的目标ID target_chat_ids = [ "123456789", # 普通用户ID "-1001234567890", # 私有群组/频道ID "@your_public_group" # 公开群组/频道用户名 ] def send_to_single_chat(chat_id, send_text): api_addr = f"https://api.telegram.org/bot{botToken}/sendMessage" # 传参自动处理编码,不需要手动拼接URL req_params = { "chat_id": chat_id, "text": send_text, # 若需要发送Markdown格式消息,取消下一行注释即可 # "parse_mode": "MarkdownV2" } try: resp = requests.post(api_addr, params=req_params, timeout=10) resp_data = resp.json() if resp_data.get("ok"): print(f"消息已成功发送至 {chat_id}") return True print(f"发送至 {chat_id} 失败,错误原因:{resp_data.get('description')}") return False except Exception as e: print(f"向 {chat_id} 发起请求失败:{str(e)}") return False if __name__ == "__main__": # 这里替换为你要发送的实际内容,对应原脚本的files变量 message_content = "需要批量发送的消息内容" for cid in target_chat_ids: send_to_single_chat(cid, message_content) # 目标数量多的时候加短延迟,避免触发Telegram接口限流 time.sleep(0.3)
补充说明
如果需要发送图片、文件、音视频等非纯文本内容,只需要把接口地址从
sendMessage换成对应的sendPhoto/sendDocument等接口,遍历ID批量发送的逻辑不需要改动。
不要手动拼接URL参数,手动拼接遇到文本包含&/?/空格/Emoji等内容时很容易出现参数解析错误,用请求库的参数传递能力可以自动规避这类问题。
内容的提问来源于stack exchange,提问作者rodskies
相关产品推荐
相关产品推荐

