如何通过bash及Linux AT命令实现向Discord用户发送私信通知
可行方案及最优实现推荐
方案1(最优选择:复用现有Discord机器人能力)
你已经有运行中的Python Discord机器人,不需要额外在bash中重复实现Discord接口逻辑,该方案稳定性最高、维护成本最低:
- 你在Python侧存储定时任务时,同时绑定对应任务触发用户的唯一Snowflake ID(注意不要仅存用户名,Discord用户名可重复,唯一标识是用户ID,该ID可在用户创建定时任务时直接从Discord事件对象中获取)
- 给Python机器人增加简单的本地通知监听逻辑,可选监听本地目录的文件变化、本地日志文件的追加内容、或者本地Redis队列,实现成本都很低
- bash脚本执行完成后,仅需要加一行命令向监听的位置写入
任务ID + 执行状态的记录即可,不需要处理任何Discord相关逻辑 - Python机器人监听到完成记录后,取对应任务绑定的用户ID,直接调用Discord机器人内置的私信发送接口发通知,发完删除对应完成记录即可
方案2:直接从bash调用Discord接口发私信
如果你的场景必须要求bash独立完成发送动作,可以直接调用Discord官方REST接口实现:
- 提前准备两个必要参数:你的机器人的鉴权Token(和机器人启动用的Token一致)、接收私信用户的唯一Snowflake ID
- 首先调用接口创建机器人和用户的私信通道,示例命令:
# 需提前安装jq用于解析JSON返回结果 CHANNEL_ID=$(curl -s -H "Authorization: Bot ${BOT_TOKEN}" -H "Content-Type: application/json" -d "{\"recipient_id\": \"${USER_ID}\"}" https://discord.com/api/v10/users/@me/channels | jq -r '.id') - 再调用接口往私信通道发通知,示例命令:
curl -s -H "Authorization: Bot ${BOT_TOKEN}" -H "Content-Type: application/json" -d "{\"content\": \"你设置的定时任务已执行完成\"}" https://discord.com/api/v10/channels/${CHANNEL_ID}/messages > /dev/null - 注意事项:
- 不要把机器人Token硬编码在bash脚本中,建议存到环境变量或者只读权限的配置文件中避免泄露
- Discord接口有频率限制,短时间内大量发送会被限流
- 无法直接用用户名发送私信,必须提前获取并存储对应用户的唯一ID
内容的提问来源于stack exchange,提问作者Leon Boon
相关产品推荐
相关产品推荐

