33import json
44import logging
55import urllib
6+ import urllib .parse
67import uuid
8+ from typing import Optional
79
810from fake_useragent import UserAgent
911from httpx import AsyncClient
@@ -83,17 +85,16 @@ def _getRandomUserAgent():
8385
8486
8587async def pushNotification (baseURL : str , msg : str , icon : str = '' , click_url : str = '' , is_passive : bool = False ,
86- headers = None ):
88+ headers : Optional [ dict ] = None ):
8789 """
8890 推送通知
89- :param baseURL: str
90- :param msg: str
91- :param icon: str
92- :param click_url: str
93- :param is_passive: bool
94- :param headers: dict
95- :param data: dict
96- :param log_data: dict -> {'push_id': str, 'push_receiver': str}
91+ :param baseURL: 推送服务基础 URL
92+ :param msg: 推送消息内容
93+ :param icon: 图标 URL,可选
94+ :param click_url: 点击跳转 URL,可选
95+ :param is_passive: 是否被动推送(静默)
96+ :param headers: 额外请求头,可选
97+ :return: bool 是否推送成功
9798 """
9899 # url = https://api.day.app/uKeSrwm3ainGgn5SAmRyg9/{msg}?icon={icon}&url={url}&passive={is_passive}
99100 if headers is None :
@@ -118,25 +119,29 @@ async def pushNotification(baseURL: str, msg: str, icon: str = '', click_url: st
118119
119120# url 编码关键词
120121def url_encode (keyword ):
121- return urllib .parse .quote (keyword .encode ())
122+ # ensure str input and use urllib.parse.quote for encoding
123+ if isinstance (keyword , bytes ):
124+ keyword = keyword .decode ('utf-8' , errors = 'ignore' )
125+ return urllib .parse .quote (str (keyword ))
122126
123127
124128async def generatePushTask (baseURL : str , msg : str , user_id : str , receiver : str , icon = None , click_url = None ,
125- is_passive = None , headers : dict = None , taskID : str = uuid .uuid4 ().hex ,
129+ is_passive = None , headers : Optional [ dict ] = None , taskID : str = uuid .uuid4 ().hex ,
126130 push_receiver : str = "yuki" , push_by : str = "system" ):
127131 """
128- :param push_by: 推送者 默认为system
129- :param push_channel: 推送渠道 默认为bark
130- :param push_receiver: 用户email
131- :param taskID: 任务ID 默认为uuid
132- :param headers: 请求头
133- :param icon: 图标
134- :param user_id: 用户ID
135- :param msg: 消息
136- :param baseURL: 基础URL
137- :param click_url: 点击通知后跳转的URL
138- :param receiver: 接收者
139- :param is_passive: 是否被动推送 就是不会有声音
132+ 生成推送任务并暂存到 Redis 队列
133+ :param baseURL: 推送服务基础 URL
134+ :param msg: 推送消息内容
135+ :param user_id: 用户 ID
136+ :param receiver: 接收者标识
137+ :param icon: 图标 URL,可选
138+ :param click_url: 点击跳转 URL,可选
139+ :param is_passive: 是否被动推送(静默)
140+ :param headers: 请求头,可选
141+ :param taskID: 任务 ID(默认随机)
142+ :param push_receiver: 推送接收者(日志)
143+ :param push_by: 推送发起者(日志)
144+ :return: bool
140145 示例: generatePushTask("https://api.day.app/uKeSrwm3ainGgn5SAmRyg9/", "You have a new notification!", str(12345),
141146 "https://example.com", False, None, None, None, uuid.uuid4().hex, "system",
142147 "bark")
0 commit comments