求能将Discord指定频道消息转发至手机SMS的Python代码
Discord频道消息转SMS短信的Python实现方案
准备工作
- 安装依赖库:
pip install discord.py twilio python-dotenv - 所需凭据:
- Discord机器人Token(在Discord开发者平台创建机器人并获取)
- 目标Discord频道ID(开启开发者模式后右键频道复制)
- Twilio账号SID、Auth Token(注册Twilio账号后在控制台获取)
- Twilio分配的发送短信号码
- 接收短信的手机号(需在Twilio控制台验证)
代码实现
创建.env文件存储敏感信息:
DISCORD_TOKEN=你的Discord机器人Token CHANNEL_ID=目标频道的ID数字 TWILIO_SID=你的Twilio账号SID TWILIO_AUTH_TOKEN=你的TwilioAuthToken TWILIO_PHONE_NUMBER=你的Twilio号码 RECIPIENT_PHONE_NUMBER=接收短信的手机号
编写Python脚本:
import os import discord from twilio.rest import Client from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 初始化Discord客户端 intents = discord.Intents.default() intents.message_content = True # 需要开启消息内容权限 client = discord.Client(intents=intents) # 初始化Twilio客户端 twilio_client = Client(os.getenv('TWILIO_SID'), os.getenv('TWILIO_AUTH_TOKEN')) @client.event async def on_ready(): print(f"已登录为 {client.user}") # 确认目标频道是否可访问 channel = client.get_channel(int(os.getenv('CHANNEL_ID'))) if channel: print(f"已监听频道:{channel.name}") else: print("无法找到目标频道,请检查频道ID是否正确") @client.event async def on_message(message): # 忽略机器人自身发送的消息 if message.author.bot: return # 只处理目标频道的消息 if message.channel.id == int(os.getenv('CHANNEL_ID')): # 构造短信内容,限制长度(SMS单条通常限制160字符,超过会拆分) sms_content = f"Discord消息来自{message.author.name}:{message.content[:150]}..." if len(message.content) > 150 else f"Discord消息来自{message.author.name}:{message.content}" try: # 发送短信 message = twilio_client.messages.create( body=sms_content, from_=os.getenv('TWILIO_PHONE_NUMBER'), to=os.getenv('RECIPIENT_PHONE_NUMBER') ) print(f"短信已发送,SID:{message.sid}") except Exception as e: print(f"发送短信失败:{str(e)}") # 启动Discord客户端 client.run(os.getenv('DISCORD_TOKEN'))
注意事项
- Discord机器人需要在服务器中拥有查看频道和读取消息历史的权限,邀请机器人时要勾选对应权限
- Twilio账号需要有足够余额,未验证的号码只能发送到已验证的接收手机号,正式使用需要升级账号
- 短信内容长度有限制,超过会自动拆分为多条,可根据需求调整截断逻辑
- 不要将敏感凭据硬编码到代码中,始终使用环境变量或配置文件管理
内容的提问来源于stack exchange,提问作者swaroop
相关产品推荐
相关产品推荐

