Python开发Twitch开播桌面通知 如何避免同次开播重复推送通知
问题根因
notified是stream_notification函数的局部变量,每次调用函数都会被重新初始化为0,无法保留上一次调用的推送状态。同时原有逻辑缺少下播后重置状态的分支,就算状态能保留,主播下播后再次开播也无法触发新的通知。
修复方案
使用函数静态属性存储推送状态,函数多次调用也不会重置属性值,同时补充下播重置逻辑,改动最小可直接运行:
import time # 你原有代码缺失导入逻辑,notification对应是win10toast库的实例,按需替换为你用的通知库即可 from win10toast import ToastNotifier notification = ToastNotifier() def streamer_data(): # 原有获取主播数据的逻辑不变 stream_data = stream.json(); streaming_state = len(stream_data['data']) return streaming_state, streamer_name def stream_notification(streaming_state,streamer_name): # 第一次调用函数时初始化静态属性存储推送状态,后续调用不会重置 if not hasattr(stream_notification, 'notified'): stream_notification.notified = 0 if streaming_state == 1: # 开播且未推送过才触发通知 if stream_notification.notified == 0: notifyMe("Twitch", f"{streamer_name} 正在直播") stream_notification.notified = 1 else: # 主播下播后重置状态,下次开播可以重新触发通知 stream_notification.notified = 0 time.sleep(5) def notifyMe(title,message): notification.notify( title = title, message = message, app_icon = 'Clock_icon.ico', timeout = 5 ) if __name__ == '__main__': while True: streaming_state,streamer_name = streamer_data() stream_notification(streaming_state,streamer_name)
可选优化
如果需要同时监控多个主播,可以把stream_notification.notified改为字典类型,键存储主播名称,值存储对应主播的推送状态,避免不同主播的状态互相干扰。
内容的提问来源于stack exchange,提问作者Hoprap
相关产品推荐
相关产品推荐

