nonebot-plugin-bililive 2.1.7__tar.gz → 2.1.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/PKG-INFO +1 -1
  2. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/pusher/dynamic_pusher.py +33 -28
  3. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/version.py +1 -1
  4. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/pyproject.toml +1 -1
  5. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/LICENSE +0 -0
  6. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/README.md +0 -0
  7. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/__init__.py +0 -0
  8. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/__main__.py +0 -0
  9. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/bilibili_api.py +0 -0
  10. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/cli/__init__.py +0 -0
  11. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/cli/bot.py +0 -0
  12. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/cli/utils.py +0 -0
  13. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/config.py +0 -0
  14. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/database/__init__.py +0 -0
  15. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/database/db.py +0 -0
  16. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/database/models.py +0 -0
  17. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/__init__.py +0 -0
  18. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/__init__.py +0 -0
  19. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/card.py +0 -0
  20. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/desc.py +0 -0
  21. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/display.py +0 -0
  22. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/user_profile.py +0 -0
  23. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/libs/dynamic/web.py +0 -0
  24. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/__init__.py +0 -0
  25. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/at/__init__.py +0 -0
  26. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/at/at_off.py +0 -0
  27. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/at/at_on.py +0 -0
  28. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/auto_agree.py +0 -0
  29. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/auto_delete.py +0 -0
  30. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/dynamic/__init__.py +0 -0
  31. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/dynamic/dynamic_off.py +0 -0
  32. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/dynamic/dynamic_on.py +0 -0
  33. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/help.py +0 -0
  34. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/live/__init__.py +0 -0
  35. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/live/live_now.py +0 -0
  36. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/live/live_off.py +0 -0
  37. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/live/live_on.py +0 -0
  38. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/permission/__init__.py +0 -0
  39. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/permission/permission_off.py +0 -0
  40. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/permission/permission_on.py +0 -0
  41. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/pusher/__init__.py +0 -0
  42. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/pusher/live_pusher.py +0 -0
  43. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/sub/__init__.py +0 -0
  44. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/sub/add_sub.py +0 -0
  45. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/sub/delete_sub.py +0 -0
  46. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/plugins/sub/sub_list.py +0 -0
  47. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/utils/__init__.py +0 -0
  48. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/utils/browser.py +0 -0
  49. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/utils/captcha_solver.py +0 -0
  50. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/utils/fonts_provider.py +0 -0
  51. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/nonebot_plugin_bililive/utils/mobile.js +0 -0
  52. {nonebot_plugin_bililive-2.1.7 → nonebot_plugin_bililive-2.1.8}/tests/test_maintenance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-bililive
3
- Version: 2.1.7
3
+ Version: 2.1.8
4
4
  Summary: Push bilibili dynamics and live notifications to QQ with NoneBot2.
5
5
  Keywords: nonebot,nonebot2,nonebot-plugin,bilibili,onebot,onebot-v11
6
6
  Author-Email: Akiyy_Lab <2806578374@qq.com>
@@ -1,5 +1,5 @@
1
1
  import asyncio
2
- from datetime import datetime
2
+ from datetime import datetime, timedelta
3
3
  from time import monotonic
4
4
 
5
5
  from apscheduler.events import (
@@ -45,11 +45,7 @@ WEB_DYNAMIC_TYPE_MESSAGES = {
45
45
  "DYNAMIC_TYPE_MUSIC": "发布了新音频",
46
46
  }
47
47
  DYNAMIC_FETCH_CONCURRENCY = 4
48
-
49
-
50
- async def throttle_dynamic_loop():
51
- if plugin_config.bililive_dynamic_interval == 0:
52
- await asyncio.sleep(1)
48
+ DYNAMIC_THROTTLE_SECONDS = 1
53
49
 
54
50
 
55
51
  def get_dynamic_id(dynamic, use_web_fallback: bool) -> int:
@@ -108,7 +104,6 @@ async def process_dynamic_uid(uid: int):
108
104
  if retry_at is not None:
109
105
  if retry_at > monotonic():
110
106
  logger.debug(f"动态接口风控冷却中,跳过 {name}({uid})")
111
- await throttle_dynamic_loop()
112
107
  return
113
108
  del dynamic_risk_control_until[uid]
114
109
 
@@ -191,36 +186,46 @@ async def process_dynamic_uid(uid: int):
191
186
 
192
187
  async def dy_sched():
193
188
  """动态推送"""
194
- if not await db.wait_until_ready():
195
- logger.debug("数据库尚未初始化完成,跳过本轮动态推送")
196
- await throttle_dynamic_loop()
197
- return
189
+ try:
190
+ if not await db.wait_until_ready():
191
+ logger.debug("数据库尚未初始化完成,跳过本轮动态推送")
192
+ return
198
193
 
199
- uids = await db.get_uid_list("dynamic")
200
- if not uids:
201
- # 没有订阅先暂停一秒再跳过,不然会导致 CPU 占用过高
202
- await throttle_dynamic_loop()
203
- return
194
+ uids = await db.get_uid_list("dynamic")
195
+ if not uids:
196
+ return
204
197
 
205
- logger.debug(f"爬取动态列表,总共 {len(uids)} 人")
206
- semaphore = asyncio.Semaphore(DYNAMIC_FETCH_CONCURRENCY)
198
+ logger.debug(f"爬取动态列表,总共 {len(uids)} 人")
199
+ semaphore = asyncio.Semaphore(DYNAMIC_FETCH_CONCURRENCY)
207
200
 
208
- async def run_for_uid(uid: int):
209
- async with semaphore:
210
- await process_dynamic_uid(uid)
201
+ async def run_for_uid(uid: int):
202
+ async with semaphore:
203
+ await process_dynamic_uid(uid)
211
204
 
212
- await asyncio.gather(*(run_for_uid(uid) for uid in uids))
213
- await throttle_dynamic_loop()
205
+ await asyncio.gather(*(run_for_uid(uid) for uid in uids))
206
+ except asyncio.CancelledError:
207
+ logger.debug("动态推送任务已取消")
208
+
209
+
210
+ def schedule_next_dynamic_job(*, immediate: bool = False):
211
+ if scheduler.get_job("dynamic_sched"):
212
+ return
213
+ delay = timedelta(0) if immediate else timedelta(seconds=DYNAMIC_THROTTLE_SECONDS)
214
+ scheduler.add_job(
215
+ dy_sched,
216
+ id="dynamic_sched",
217
+ next_run_time=datetime.now(scheduler.timezone) + delay,
218
+ )
214
219
 
215
220
 
216
221
  def dynamic_lisener(event):
217
222
  if hasattr(event, "job_id") and event.job_id != "dynamic_sched":
218
223
  return
219
- job = scheduler.get_job("dynamic_sched")
220
- if not job:
221
- scheduler.add_job(
222
- dy_sched, id="dynamic_sched", next_run_time=datetime.now(scheduler.timezone)
223
- )
224
+ if event.code == EVENT_JOB_ERROR and isinstance(
225
+ getattr(event, "exception", None), asyncio.CancelledError
226
+ ):
227
+ logger.debug("动态推送任务已取消,将重新调度")
228
+ schedule_next_dynamic_job(immediate=event.code == EVENT_SCHEDULER_STARTED)
224
229
 
225
230
 
226
231
  if plugin_config.bililive_dynamic_interval == 0:
@@ -1,4 +1,4 @@
1
1
  from packaging.version import Version
2
2
 
3
- __version__ = "2.1.7"
3
+ __version__ = "2.1.8"
4
4
  VERSION = Version(__version__)
@@ -39,7 +39,7 @@ dependencies = [
39
39
  "msvc-runtime>=14.34.31931; sys_platform == \"win32\"",
40
40
  ]
41
41
  dynamic = []
42
- version = "2.1.7"
42
+ version = "2.1.8"
43
43
 
44
44
  [project.license]
45
45
  text = "AGPL-3.0-or-later"