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

Python实现机器人勿扰模式 控制playsound通知音播放

机器人请勿打扰模式实现修复方案

核心修复点

  • 修正赋值错误:所有给dont_disturb赋值的位置把比较运算符==替换为赋值运算符=,==仅用于值相等判断,不能用来修改变量值
  • 修正分支缩进:两个指令判断的if逻辑为平级关系,移除错误的嵌套缩进
  • 新增状态判断:消息打印完成后先校验dont_disturb状态,仅在通知开启状态下触发音效播放
  • 补全停止逻辑:收到关闭通知指令时,终止正在播放的提示音,同时修正原代码里的拼写错误、字符串断行问题
  • 采用非阻塞模式加载音效,避免播放逻辑卡住主程序,同时支持随时中断播放

可直接运行的修复后代码

from playsound import playsound
# 状态初始化:0=通知开启,1=请勿打扰模式(通知关闭)
dont_disturb = 0
current_play_obj = None

# 保留原有彩色消息打印逻辑
print(Fore.CYAN + "[", current_time, "]",Fore.WHITE + "[", nickname, "]", Fore.WHITE + content, Fore.CYAN + "[", title, "(", chatName, ")", "]")

# 仅非请勿打扰状态播放通知音
if not dont_disturb:
    # block=False 为非阻塞播放,不卡主流程,同时返回播放对象支持后续停止
    current_play_obj = playsound('notification.mp3', block=False)

# 关闭通知指令分支
if content.lower().startswith("disable notifications"):
    dont_disturb = 1
    # 停掉正在播放的提示音
    if current_play_obj is not None:
        current_play_obj.stop()
        current_play_obj = None
    sub_client.send_message(
        message="Sound notifications were successfully deactivated.",
        chatId=chatId,
        replyTo=id
    )

# 开启通知指令分支(和上一个分支平级,不要嵌套)
if content.lower().startswith("activate notifications"):
    dont_disturb = 0
    sub_client.send_message(
        message="Sound notifications were successfully activated.",
        chatId=chatId,
        replyTo=id
    )

补充说明

如果你使用的playsound版本较高,存在非阻塞模式失效、无法调用stop()方法的问题,可以替换为pygame.mixer做音频播放控制,兼容性和稳定性会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:48:19