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

Python如何监测ping状态变化 让Discord bot仅在服务器离线时发一次消息

问题根源

原有代码未存储上一次的ping状态,且每次循环都会重置状态标记变量,所以只要满足状态条件就会每次循环都发送消息,导致重复推送。

修改后代码

# 循环外定义全局变量存储上一次的状态,初始默认设为在线状态1
last_status = 1

# 建议给循环设置合理的运行间隔,比如每30秒检测一次,避免占用过多资源
@tasks.loop(seconds=30)
async def serverstatus():
    global last_status
    channel = bot.get_channel(850531139403776040)
    # 注意提前定义好ip变量为你要监测的服务器地址
    status = os.system("ping -c 1 " + ip)
    
    # 仅当状态从在线1切换为离线0时,发送1次离线提醒
    if status == 0 and last_status == 1:
        await channel.send(f"<@&850539902675845170> Server Offline")
        last_status = 0
    # 可选配置:服务器从离线恢复为在线时,发送1次上线提醒
    elif status == 1 and last_status == 0:
        await channel.send("Server Online")
        last_status = 1

补充说明

  • 注意确认你的系统ping命令返回值规则:Linux默认ping成功返回0、失败返回非0,如果你实际测试后发现状态码和预期逻辑相反,调整判断条件里的数值即可。
  • 如果你不想用全局变量,可以把状态存储在bot实例属性中,比如用bot.last_status替代全局变量,避免全局变量污染。
  • 合理设置检测间隔,不要太过频繁,避免触发Discord的消息限流规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 02:15:03