nonebot-plugin-osubot 6.24.2__tar.gz → 6.25.0__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.

Potentially problematic release.


This version of nonebot-plugin-osubot might be problematic. Click here for more details.

Files changed (453) hide show
  1. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/PKG-INFO +1 -1
  2. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/api.py +1 -1
  3. nonebot-plugin-osubot-6.25.0/nonebot_plugin_osubot/file.py +297 -0
  4. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/__init__.py +2 -0
  5. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/map_convert.py +11 -8
  6. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/osudl.py +5 -4
  7. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/recommend.py +1 -1
  8. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/first_response.py +1 -1
  9. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/pyproject.toml +2 -1
  10. nonebot-plugin-osubot-6.24.2/nonebot_plugin_osubot/file.py +0 -127
  11. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/README.md +0 -0
  12. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/__init__.py +0 -0
  13. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/beatmap_stats_moder.py +0 -0
  14. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/config.py +0 -0
  15. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/data/osu/1849145.osz +0 -0
  16. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/data/osu/1849145.zip +0 -0
  17. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/database/__init__.py +0 -0
  18. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/database/models.py +0 -0
  19. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/__init__.py +0 -0
  20. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bmap.py +0 -0
  21. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bp.py +0 -0
  22. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview.py +0 -0
  23. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/css/style.css +0 -0
  24. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/beatmap.js +0 -0
  25. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/hitobject.js +0 -0
  26. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/point.js +0 -0
  27. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/scroll.js +0 -0
  28. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/timingpoint.js +0 -0
  29. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/LegacyRandom.js +0 -0
  30. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/PalpableCatchHitObject.js +0 -0
  31. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/bananashower.js +0 -0
  32. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/catch.js +0 -0
  33. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/fruit.js +0 -0
  34. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/juicestream.js +0 -0
  35. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/fakeaudio.js +0 -0
  36. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/preview.js +0 -0
  37. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/bezier2.js +0 -0
  38. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/catmullcurve.js +0 -0
  39. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/centripetalcatmullrom.js +0 -0
  40. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/circumstancedcircle.js +0 -0
  41. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/curve.js +0 -0
  42. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/curvetype.js +0 -0
  43. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/equaldistancemulticurve.js +0 -0
  44. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/linearbezier.js +0 -0
  45. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/hitcircle.js +0 -0
  46. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/slider.js +0 -0
  47. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/spinner.js +0 -0
  48. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/util.js +0 -0
  49. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/viewbox.js +0 -0
  50. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/zip.min.js +0 -0
  51. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/pic.html +0 -0
  52. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/echarts.py +0 -0
  53. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/info.py +0 -0
  54. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/map.py +0 -0
  55. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/match_history.py +0 -0
  56. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview.py +0 -0
  57. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/css/style.css +0 -0
  58. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/gif.js/README.md +0 -0
  59. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/gif.js/gif.js +0 -0
  60. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/gif.js/gif.js.map +0 -0
  61. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/gif.js/gif.worker.js +0 -0
  62. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/gif.js/gif.worker.js.map +0 -0
  63. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/beatmap/beatmap.js +0 -0
  64. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/beatmap/hitobject.js +0 -0
  65. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/beatmap/point.js +0 -0
  66. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/beatmap/scroll.js +0 -0
  67. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/beatmap/timingpoint.js +0 -0
  68. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/LegacyRandom.js +0 -0
  69. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/PalpableCatchHitObject.js +0 -0
  70. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/bananashower.js +0 -0
  71. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/catch.js +0 -0
  72. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/fruit.js +0 -0
  73. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/catch/juicestream.js +0 -0
  74. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/mania/hitnote.js +0 -0
  75. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/mania/holdnote.js +0 -0
  76. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/mania/mania.js +0 -0
  77. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/preview.js +0 -0
  78. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/bezier2.js +0 -0
  79. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/catmullcurve.js +0 -0
  80. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/centripetalcatmullrom.js +0 -0
  81. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/circumstancedcircle.js +0 -0
  82. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/curve.js +0 -0
  83. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/curvetype.js +0 -0
  84. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/equaldistancemulticurve.js +0 -0
  85. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/curve/linearbezier.js +0 -0
  86. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/hitcircle.js +0 -0
  87. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/slider.js +0 -0
  88. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/spinner.js +0 -0
  89. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/standard/standard.js +0 -0
  90. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/taiko/donkat.js +0 -0
  91. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/taiko/drumroll.js +0 -0
  92. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/taiko/shaker.js +0 -0
  93. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/taiko/taiko.js +0 -0
  94. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/util.js +0 -0
  95. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/pic.html +0 -0
  96. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/rating.py +0 -0
  97. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/score.py +0 -0
  98. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/static.py +0 -0
  99. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/taiko_preview.py +0 -0
  100. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/bpa_chart.html +0 -0
  101. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/echarts.min.js +0 -0
  102. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/mod_chart.html +0 -0
  103. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/pp_rank_line_chart.html +0 -0
  104. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/utils.py +0 -0
  105. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/exceptions.py +0 -0
  106. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/__init__.py +0 -0
  107. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/bg.py +0 -0
  108. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/bind.py +0 -0
  109. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/mania/__init__.py +0 -0
  110. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bind.py +0 -0
  111. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bp.py +0 -0
  112. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bp_analyze.py +0 -0
  113. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/getbg.py +0 -0
  114. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/guess.py +0 -0
  115. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/history.py +0 -0
  116. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/info.py +0 -0
  117. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/map.py +0 -0
  118. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/match.py +0 -0
  119. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/medal.py +0 -0
  120. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/mu.py +0 -0
  121. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/osu_help.py +0 -0
  122. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/pr.py +0 -0
  123. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/preview.py +0 -0
  124. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/rank.py +0 -0
  125. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/rating.py +0 -0
  126. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/score.py +0 -0
  127. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/update.py +0 -0
  128. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/update_mode.py +0 -0
  129. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/url_match.py +0 -0
  130. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/utils.py +0 -0
  131. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/mods.py +0 -0
  132. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/__init__.py +0 -0
  133. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/auto_retry.py +0 -0
  134. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/manager.py +0 -0
  135. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/Best Performance.png +0 -0
  136. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/History Score.jpg +0 -0
  137. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/beatmapinfo.png +0 -0
  138. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/convert.jpg +0 -0
  139. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/detail.png +0 -0
  140. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AD.png +0 -0
  141. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AE.png +0 -0
  142. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AF.png +0 -0
  143. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AG.png +0 -0
  144. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AI.png +0 -0
  145. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AL.png +0 -0
  146. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AM.png +0 -0
  147. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AO.png +0 -0
  148. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AQ.png +0 -0
  149. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AR.png +0 -0
  150. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AS.png +0 -0
  151. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AT.png +0 -0
  152. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AU.png +0 -0
  153. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AW.png +0 -0
  154. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AX.png +0 -0
  155. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AZ.png +0 -0
  156. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BA.png +0 -0
  157. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BB.png +0 -0
  158. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BD.png +0 -0
  159. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BE.png +0 -0
  160. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BF.png +0 -0
  161. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BG.png +0 -0
  162. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BH.png +0 -0
  163. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BI.png +0 -0
  164. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BJ.png +0 -0
  165. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BL.png +0 -0
  166. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BM.png +0 -0
  167. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BN.png +0 -0
  168. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BO.png +0 -0
  169. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BQ (1).png +0 -0
  170. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BQ (2).png +0 -0
  171. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BR.png +0 -0
  172. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BS.png +0 -0
  173. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BT.png +0 -0
  174. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BV.png +0 -0
  175. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BW.png +0 -0
  176. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BY.png +0 -0
  177. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BZ.png +0 -0
  178. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CA.png +0 -0
  179. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CD.png +0 -0
  180. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CF.png +0 -0
  181. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CG.png +0 -0
  182. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CH.png +0 -0
  183. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CI.png +0 -0
  184. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CK.png +0 -0
  185. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CL.png +0 -0
  186. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CM.png +0 -0
  187. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CN.png +0 -0
  188. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CO.png +0 -0
  189. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CR.png +0 -0
  190. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CU.png +0 -0
  191. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CV.png +0 -0
  192. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CX.png +0 -0
  193. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CY.png +0 -0
  194. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CZ.png +0 -0
  195. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DE.png +0 -0
  196. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DJ.png +0 -0
  197. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DK.png +0 -0
  198. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DM.png +0 -0
  199. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DO.png +0 -0
  200. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DZ.png +0 -0
  201. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EC.png +0 -0
  202. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EE.png +0 -0
  203. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EG.png +0 -0
  204. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EH.png +0 -0
  205. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ER.png +0 -0
  206. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ES.png +0 -0
  207. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ET.png +0 -0
  208. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FI.png +0 -0
  209. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FJ.png +0 -0
  210. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FK.png +0 -0
  211. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FO.png +0 -0
  212. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FR.png +0 -0
  213. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GA.png +0 -0
  214. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GB.png +0 -0
  215. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GD.png +0 -0
  216. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GE.png +0 -0
  217. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GF.png +0 -0
  218. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GG.png +0 -0
  219. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GH.png +0 -0
  220. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GI.png +0 -0
  221. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GL.png +0 -0
  222. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GM.png +0 -0
  223. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GN.png +0 -0
  224. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GP.png +0 -0
  225. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GQ.png +0 -0
  226. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GR.png +0 -0
  227. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GS.png +0 -0
  228. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GT.png +0 -0
  229. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GU.png +0 -0
  230. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GW.png +0 -0
  231. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GY.png +0 -0
  232. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HK.png +0 -0
  233. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HM.png +0 -0
  234. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HN.png +0 -0
  235. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HR.png +0 -0
  236. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HT.png +0 -0
  237. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HU.png +0 -0
  238. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ID.png +0 -0
  239. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IE.png +0 -0
  240. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IL.png +0 -0
  241. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IM.png +0 -0
  242. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IN.png +0 -0
  243. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IO.png +0 -0
  244. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IQ.png +0 -0
  245. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IR.png +0 -0
  246. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IS.png +0 -0
  247. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IT.png +0 -0
  248. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JE.png +0 -0
  249. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JM.png +0 -0
  250. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JO.png +0 -0
  251. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JP.png +0 -0
  252. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KE.png +0 -0
  253. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KG.png +0 -0
  254. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KH.png +0 -0
  255. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KI.png +0 -0
  256. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KM.png +0 -0
  257. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KN.png +0 -0
  258. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KP.png +0 -0
  259. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KR.png +0 -0
  260. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KW.png +0 -0
  261. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KY.png +0 -0
  262. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KZ.png +0 -0
  263. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LA.png +0 -0
  264. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LB.png +0 -0
  265. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LC.png +0 -0
  266. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LI.png +0 -0
  267. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LK.png +0 -0
  268. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LR.png +0 -0
  269. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LS.png +0 -0
  270. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LT.png +0 -0
  271. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LU.png +0 -0
  272. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LV.png +0 -0
  273. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LY.png +0 -0
  274. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MA.png +0 -0
  275. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MC.png +0 -0
  276. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MD.png +0 -0
  277. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ME.png +0 -0
  278. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MF.png +0 -0
  279. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MG.png +0 -0
  280. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MH.png +0 -0
  281. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MK.png +0 -0
  282. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ML.png +0 -0
  283. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MM.png +0 -0
  284. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MN.png +0 -0
  285. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MO.png +0 -0
  286. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MP.png +0 -0
  287. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MQ.png +0 -0
  288. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MR.png +0 -0
  289. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MS.png +0 -0
  290. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MT.png +0 -0
  291. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MU.png +0 -0
  292. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MV.png +0 -0
  293. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MW.png +0 -0
  294. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MX.png +0 -0
  295. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MY.png +0 -0
  296. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MZ.png +0 -0
  297. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NA.png +0 -0
  298. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NC.png +0 -0
  299. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NE.png +0 -0
  300. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NF.png +0 -0
  301. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NG.png +0 -0
  302. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NI.png +0 -0
  303. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NL.png +0 -0
  304. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NO.png +0 -0
  305. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NP.png +0 -0
  306. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NR.png +0 -0
  307. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NU.png +0 -0
  308. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NZ.png +0 -0
  309. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/OM.png +0 -0
  310. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PA.png +0 -0
  311. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PE.png +0 -0
  312. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PF.png +0 -0
  313. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PG.png +0 -0
  314. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PH.png +0 -0
  315. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PK.png +0 -0
  316. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PL.png +0 -0
  317. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PM.png +0 -0
  318. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PN.png +0 -0
  319. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PR.png +0 -0
  320. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PS.png +0 -0
  321. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PT.png +0 -0
  322. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PW.png +0 -0
  323. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PY.png +0 -0
  324. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/QA.png +0 -0
  325. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RE.png +0 -0
  326. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RO.png +0 -0
  327. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RS.png +0 -0
  328. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RU.png +0 -0
  329. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RW.png +0 -0
  330. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SA.png +0 -0
  331. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SB.png +0 -0
  332. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SC.png +0 -0
  333. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SD.png +0 -0
  334. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SE.png +0 -0
  335. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SG.png +0 -0
  336. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SH.png +0 -0
  337. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SI.png +0 -0
  338. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SJ.png +0 -0
  339. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SK.png +0 -0
  340. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SL.png +0 -0
  341. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SM.png +0 -0
  342. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SN.png +0 -0
  343. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SO.png +0 -0
  344. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SR.png +0 -0
  345. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SS.png +0 -0
  346. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ST.png +0 -0
  347. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SV.png +0 -0
  348. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SY.png +0 -0
  349. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SZ.png +0 -0
  350. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TC.png +0 -0
  351. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TD.png +0 -0
  352. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TF.png +0 -0
  353. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TG.png +0 -0
  354. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TH.png +0 -0
  355. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TJ.png +0 -0
  356. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TK.png +0 -0
  357. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TL.png +0 -0
  358. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TM.png +0 -0
  359. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TN.png +0 -0
  360. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TO.png +0 -0
  361. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TR.png +0 -0
  362. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TT.png +0 -0
  363. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TV.png +0 -0
  364. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TW.png +0 -0
  365. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TZ.png +0 -0
  366. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UA.png +0 -0
  367. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UG.png +0 -0
  368. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UM.png +0 -0
  369. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/US.png +0 -0
  370. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UY.png +0 -0
  371. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UZ.png +0 -0
  372. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VA.png +0 -0
  373. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VC.png +0 -0
  374. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VE.png +0 -0
  375. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VG.png +0 -0
  376. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VI.png +0 -0
  377. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VN.png +0 -0
  378. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VU.png +0 -0
  379. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/WF.png +0 -0
  380. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/WS.png +0 -0
  381. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/YE.png +0 -0
  382. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/YT.png +0 -0
  383. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZA.png +0 -0
  384. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZM.png +0 -0
  385. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZW.png +0 -0
  386. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Extra.otf +0 -0
  387. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Torus Regular.otf +0 -0
  388. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Torus SemiBold.otf +0 -0
  389. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Venera.otf +0 -0
  390. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/help.png +0 -0
  391. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/info.png +0 -0
  392. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/maniabeatmapinfo.png +0 -0
  393. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/mplink.png +0 -0
  394. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/mplink_map.png +0 -0
  395. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/team_blue.png +0 -0
  396. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/team_red.png +0 -0
  397. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/medals/medals.json +0 -0
  398. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/4K.png +0 -0
  399. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/5K.png +0 -0
  400. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/6K.png +0 -0
  401. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/7K.png +0 -0
  402. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/8K.png +0 -0
  403. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/9K.png +0 -0
  404. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/AP.png +0 -0
  405. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/CL.png +0 -0
  406. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/DT.png +0 -0
  407. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/EZ.png +0 -0
  408. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/FI.png +0 -0
  409. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/FL.png +0 -0
  410. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HD.png +0 -0
  411. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HR.png +0 -0
  412. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HT.png +0 -0
  413. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/MR.png +0 -0
  414. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/NC.png +0 -0
  415. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/NF.png +0 -0
  416. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/PF.png +0 -0
  417. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/RX.png +0 -0
  418. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/SD.png +0 -0
  419. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/SO.png +0 -0
  420. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/TD.png +0 -0
  421. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/V2.png +0 -0
  422. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_ctb.png +0 -0
  423. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_mania.png +0 -0
  424. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_std.png +0 -0
  425. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_taiko.png +0 -0
  426. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-A.png +0 -0
  427. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-B.png +0 -0
  428. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-C.png +0 -0
  429. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-D.png +0 -0
  430. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-F.png +0 -0
  431. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-S.png +0 -0
  432. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-SH.png +0 -0
  433. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-X.png +0 -0
  434. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-XH.png +0 -0
  435. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/bmap.png +0 -0
  436. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/center.png +0 -0
  437. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/left.png +0 -0
  438. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/right.png +0 -0
  439. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stardiff.png +0 -0
  440. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stars.png +0 -0
  441. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stars_expertplus.png +0 -0
  442. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/suppoter.png +0 -0
  443. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/pp.py +0 -0
  444. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/__init__.py +0 -0
  445. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/alphaosu.py +0 -0
  446. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/basemodel.py +0 -0
  447. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/beatmap.py +0 -0
  448. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/beatmapsets.py +0 -0
  449. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/match.py +0 -0
  450. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/ppysb/__init__.py +0 -0
  451. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/score.py +0 -0
  452. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/user.py +0 -0
  453. {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-osubot
3
- Version: 6.24.2
3
+ Version: 6.25.0
4
4
  Summary: OSUbot in NoneBot2
5
5
  License: AGPL-3.0
6
6
  Author-email: yaowan233 <572473053@qq.com>
@@ -428,7 +428,7 @@ async def get_map_bg(mapid, sid, bg_name) -> BytesIO:
428
428
  f"https://dl.sayobot.cn/beatmaps/files/{sid}/{bg_name}",
429
429
  ]
430
430
  )
431
- return BytesIO(res)
431
+ return BytesIO(res.content)
432
432
 
433
433
 
434
434
  async def get_seasonal_bg() -> Optional[dict]:
@@ -0,0 +1,297 @@
1
+ import base64
2
+ import hashlib
3
+ import re
4
+ import urllib
5
+ import random
6
+ import asyncio
7
+ import uuid
8
+ from pathlib import Path
9
+ from typing import Union, Optional
10
+ from io import BytesIO, TextIOWrapper
11
+
12
+ from nonebot.adapters.onebot.v11 import Bot
13
+ from nonebot.log import logger
14
+
15
+ from .schema import Badge
16
+ from .network import auto_retry
17
+ from .api import bg_url, safe_async_get
18
+ from .network.first_response import get_first_response
19
+
20
+ osufile = Path(__file__).parent / "osufile"
21
+ map_path = Path() / "data" / "osu" / "map"
22
+ user_cache_path = Path() / "data" / "osu" / "user"
23
+ badge_cache_path = Path() / "data" / "osu" / "badge"
24
+ team_cache_path = Path() / "data" / "osu" / "team"
25
+ api_ls = [
26
+ "https://osu.direct/api/d/",
27
+ "https://txy1.sayobot.cn/beatmaps/download/novideo/",
28
+ "https://catboy.best/d/",
29
+ ]
30
+ semaphore = asyncio.Semaphore(5)
31
+
32
+ if not map_path.exists():
33
+ map_path.mkdir(parents=True, exist_ok=True)
34
+ if not user_cache_path.exists():
35
+ user_cache_path.mkdir(parents=True, exist_ok=True)
36
+ if not badge_cache_path.exists():
37
+ badge_cache_path.mkdir(parents=True, exist_ok=True)
38
+ if not team_cache_path.exists():
39
+ team_cache_path.mkdir(parents=True, exist_ok=True)
40
+
41
+
42
+ def extract_filename_from_headers(headers: dict[str, str]) -> Optional[str]:
43
+ """
44
+ 从 Content-Disposition 响应头中提取文件名,并处理 URL 编码。
45
+
46
+ Args:
47
+ headers: 响应头字典。
48
+
49
+ Returns:
50
+ 提取到的文件名字符串,如果失败则返回 None。
51
+ """
52
+ disposition = headers.get("content-disposition", "")
53
+ if not disposition:
54
+ return None
55
+
56
+ match_utf8 = re.search(r"filename\*=(?:utf-8''|)(.+?)(?:;|$)", disposition, re.IGNORECASE)
57
+
58
+ if match_utf8:
59
+ # 提取匹配到的文件名部分
60
+ encoded_filename = match_utf8.group(1).strip('"').strip()
61
+
62
+ try:
63
+ return urllib.parse.unquote(encoded_filename)
64
+ except Exception as e:
65
+ # 如果解码失败,记录错误并尝试使用原始编码
66
+ print(f"警告: 解码 filename* 失败: {e}. 使用原始编码.")
67
+ return encoded_filename
68
+
69
+ match_normal = re.search(r"filename=\"?(.+?)\"?(\s|;|$)", disposition, re.IGNORECASE)
70
+ if match_normal:
71
+ # 普通 filename 字段也可能包含 URL 编码,进行解码
72
+ filename = match_normal.group(1).strip('"').strip()
73
+ try:
74
+ return urllib.parse.unquote(filename)
75
+ except Exception:
76
+ return filename
77
+
78
+ return None
79
+
80
+
81
+ async def download_map(setid: int) -> Optional[Path]:
82
+ urls = [i + str(setid) for i in api_ls]
83
+ logger.info(f"开始下载地图: <{setid}>")
84
+ req = await get_first_response(urls)
85
+ filename = extract_filename_from_headers(req.headers)
86
+ filepath = map_path.parent / filename
87
+ with open(filepath.absolute(), "wb") as f:
88
+ f.write(req.content)
89
+ logger.info(f"地图: <{setid}> 下载完毕")
90
+ return filepath.absolute()
91
+
92
+
93
+ @auto_retry
94
+ async def download_osu(set_id, map_id):
95
+ url = [
96
+ f"https://osu.ppy.sh/osu/{map_id}",
97
+ f"https://osu.direct/api/osu/{map_id}",
98
+ f"https://catboy.best/osu/{map_id}",
99
+ ]
100
+ logger.info(f"开始下载谱面: <{map_id}>")
101
+ async with semaphore:
102
+ if req := await get_first_response(url):
103
+ filename = f"{map_id}.osu"
104
+ filepath = map_path / str(set_id) / filename
105
+ filepath.parent.mkdir(parents=True, exist_ok=True)
106
+ with open(filepath, "wb") as f:
107
+ f.write(req.content)
108
+ return filepath
109
+ else:
110
+ raise Exception("下载出错,请稍后再试")
111
+
112
+
113
+ async def get_projectimg(url: str) -> BytesIO:
114
+ if "avatar-guest.png" in url:
115
+ url = "https://osu.ppy.sh/images/layout/avatar-guest.png"
116
+ req = await safe_async_get(url)
117
+ if not req or req.status_code >= 400:
118
+ # todo 加个自创的错误图片
119
+ req = await safe_async_get(random.choice(bg_url))
120
+ if not req or req.status_code >= 400:
121
+ raise Exception("图片下载失败")
122
+ data = req.read()
123
+ im = BytesIO(data)
124
+ return im
125
+
126
+
127
+ async def get_pfm_img(url: str, cache_path: Path) -> BytesIO:
128
+ cache_dir = cache_path.parent
129
+ if not cache_dir.exists():
130
+ cache_dir.mkdir(parents=True, exist_ok=True)
131
+ if cache_path.exists():
132
+ with cache_path.open("rb") as f:
133
+ return BytesIO(f.read())
134
+ async with asyncio.Semaphore(5):
135
+ req = await safe_async_get(url)
136
+ if not req or req.status_code >= 400:
137
+ return BytesIO()
138
+ image_data = req.content
139
+ with cache_path.open("wb") as f:
140
+ f.write(image_data)
141
+ return BytesIO(image_data)
142
+
143
+
144
+ def re_map(file: Union[bytes, Path]) -> str:
145
+ if isinstance(file, bytes):
146
+ text = TextIOWrapper(BytesIO(file), "utf-8").read()
147
+ else:
148
+ with open(file, encoding="utf-8") as f:
149
+ text = f.read()
150
+ res = re.search(r"\d,\d,\"(.+)\"", text)
151
+ bg = "mapbg.png" if not res else res.group(1).strip()
152
+ if "/" in bg:
153
+ bg = bg.split("/")[-1]
154
+ return bg
155
+
156
+
157
+ async def make_badge_cache_file(badge: Badge):
158
+ path = badge_cache_path / f"{hash(badge.description)}.png"
159
+ badge_icon = await get_projectimg(badge.image_url)
160
+ with open(path, "wb") as f:
161
+ f.write(badge_icon.getvalue())
162
+
163
+
164
+ # 保存个人信息界面背景
165
+ async def save_info_pic(user: str, byt: bytes):
166
+ path = user_cache_path / user
167
+ if not path.exists():
168
+ path.mkdir()
169
+ with open(path / "info.png", "wb") as f:
170
+ f.write(BytesIO(byt).getvalue())
171
+
172
+
173
+ def calculate_file_chunks(file_path: str, chunk_size: int = 1024 * 64) -> tuple[list[bytes], str, int]:
174
+ """
175
+ 计算文件分片和 SHA256
176
+
177
+ Args:
178
+ file_path: 文件路径
179
+ chunk_size: 分片大小(默认64KB)
180
+
181
+ Returns:
182
+ (chunks, sha256_hash, total_size)
183
+ """
184
+ chunks = []
185
+ hasher = hashlib.sha256()
186
+ total_size = 0
187
+
188
+ with open(file_path, "rb") as f:
189
+ while True:
190
+ chunk = f.read(chunk_size)
191
+ if not chunk:
192
+ break
193
+ chunks.append(chunk)
194
+ hasher.update(chunk)
195
+ total_size += len(chunk)
196
+
197
+ sha256_hash = hasher.hexdigest()
198
+
199
+ return chunks, sha256_hash, total_size
200
+
201
+
202
+ MAX_CONCURRENT_UPLOADS = 20
203
+
204
+
205
+ async def _upload_chunk(
206
+ bot: "Bot",
207
+ stream_id: str,
208
+ chunk_data: bytes,
209
+ chunk_index: int,
210
+ total_chunks: int,
211
+ total_size: int,
212
+ sha256_hash: str,
213
+ filename: str,
214
+ semaphore: asyncio.Semaphore,
215
+ ) -> None:
216
+ """内部函数,用于异步上传单个文件分片"""
217
+ async with semaphore:
218
+ # 将分片数据编码为 base64
219
+ chunk_base64 = base64.b64encode(chunk_data).decode("utf-8")
220
+
221
+ # 构建参数
222
+ params = {
223
+ "stream_id": stream_id,
224
+ "chunk_data": chunk_base64,
225
+ "chunk_index": chunk_index,
226
+ "total_chunks": total_chunks,
227
+ "file_size": total_size,
228
+ "expected_sha256": sha256_hash,
229
+ "filename": filename,
230
+ "file_retention": 30 * 1000,
231
+ }
232
+
233
+ # 发送分片
234
+ response = await bot.call_api("upload_file_stream", **params)
235
+
236
+ logger.info(
237
+ f"分片 {chunk_index + 1}/{total_chunks} 上传成功 "
238
+ f"(接收: {response.get('received_chunks', 0)}/{response.get('total_chunks', 0)})"
239
+ )
240
+
241
+
242
+ async def upload_file_stream_batch(bot: Bot, file_path: Path, chunk_size: int = 1024 * 64) -> str:
243
+ """
244
+ 一次性批量上传文件流
245
+
246
+ Args:
247
+ bot: Bot 实例
248
+ file_path: 要上传的文件路径
249
+ chunk_size: 分片大小
250
+
251
+ Returns:
252
+ 上传完成后的文件路径
253
+ """
254
+ if not file_path.exists():
255
+ raise FileNotFoundError(f"文件不存在: {file_path}")
256
+
257
+ # 分析文件
258
+ chunks, sha256_hash, total_size = calculate_file_chunks(str(file_path), chunk_size)
259
+ stream_id = str(uuid.uuid4())
260
+
261
+ logger.info(f"\n开始上传文件: {file_path.name}")
262
+ logger.info(f"流ID: {stream_id}")
263
+
264
+ # 一次性发送所有分片
265
+ total_chunks = len(chunks)
266
+ # 创建信号量,限制最大并发数
267
+ semaphore = asyncio.Semaphore(MAX_CONCURRENT_UPLOADS)
268
+
269
+ # 创建所有分片上传任务
270
+ upload_tasks = []
271
+ for chunk_index, chunk_data in enumerate(chunks):
272
+ task = _upload_chunk(
273
+ bot, stream_id, chunk_data, chunk_index, total_chunks, total_size, sha256_hash, file_path.name, semaphore
274
+ )
275
+ upload_tasks.append(task)
276
+
277
+ try:
278
+ await asyncio.gather(*upload_tasks)
279
+ except Exception as e:
280
+ logger.error(f"\n文件分片上传过程中发生错误: {e}")
281
+ # 这里可以选择执行清理逻辑,如通知服务器取消上传
282
+ raise e
283
+
284
+ # 发送完成信号
285
+ logger.info("\n所有分片发送完成,请求文件合并...")
286
+ complete_params = {"stream_id": stream_id, "is_complete": True}
287
+
288
+ response = await bot.call_api("upload_file_stream", **complete_params)
289
+
290
+ if response.get("status") == "file_complete":
291
+ logger.info("✅ 文件上传成功!")
292
+ logger.info(f" - 文件路径: {response.get('file_path')}")
293
+ logger.info(f" - 文件大小: {response.get('file_size')} 字节")
294
+ logger.info(f" - SHA256: {response.get('sha256')}")
295
+ return response.get("file_path")
296
+ else:
297
+ raise Exception(f"文件状态异常: {response}")
@@ -5,6 +5,7 @@ from .getbg import getbg
5
5
  from .match import match
6
6
  from .medal import medal
7
7
  from .score import score
8
+ from .osudl import osudl
8
9
  from .pr import pr, recent
9
10
  from .rating import rating
10
11
  from .history import history
@@ -57,4 +58,5 @@ __all__ = [
57
58
  "match",
58
59
  "rating",
59
60
  "group_pp_rank",
61
+ "osudl",
60
62
  ]
@@ -1,5 +1,6 @@
1
1
  from pathlib import Path
2
2
 
3
+ from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent
3
4
  from nonebot.rule import ArgumentParser
4
5
  from nonebot.internal.adapter import Message
5
6
  from nonebot_plugin_alconna import UniMessage
@@ -10,6 +11,7 @@ from nonebot.params import CommandArg, ShellCommandArgv
10
11
  from ..api import get_beatmapsets_info, osu_api
11
12
  from ..mania import Options, convert_mania_map
12
13
  from ..schema import Beatmap
14
+ from ..file import upload_file_stream_batch
13
15
 
14
16
  parser = ArgumentParser("convert", description="变换mania谱面")
15
17
  parser.add_argument("--set", type=int, help="要转换的谱面的setid")
@@ -38,7 +40,7 @@ async def _(argv: list[str] = ShellCommandArgv()):
38
40
  return
39
41
  options = Options(**vars(args))
40
42
  if options.map:
41
- map_data = await osu_api("map", options.map)
43
+ map_data = await osu_api("map", map_id=options.map)
42
44
  mapinfo = Beatmap(**map_data)
43
45
  beatmapsets_info = await get_beatmapsets_info(mapinfo.beatmapset_id)
44
46
  options.set = mapinfo.beatmapset_id
@@ -67,7 +69,7 @@ change = on_command("倍速", priority=11, block=True)
67
69
 
68
70
 
69
71
  @change.handle()
70
- async def _(msg: Message = CommandArg()):
72
+ async def _(bot: Bot, event: GroupMessageEvent, msg: Message = CommandArg()):
71
73
  args = msg.extract_plain_text().strip().split()
72
74
  argv = ["--map"]
73
75
  if not args:
@@ -88,7 +90,7 @@ async def _(msg: Message = CommandArg()):
88
90
  args = parser.parse_args(argv)
89
91
  options = Options(**vars(args))
90
92
  if options.map:
91
- map_data = await osu_api("map", options.map)
93
+ map_data = await osu_api("map", map_id=options.map)
92
94
  mapinfo = Beatmap(**map_data)
93
95
  beatmapsets_info = await get_beatmapsets_info(mapinfo.beatmapset_id)
94
96
  options.set = mapinfo.beatmapset_id
@@ -97,9 +99,10 @@ async def _(msg: Message = CommandArg()):
97
99
  if not osz_path:
98
100
  await UniMessage.text("未找到该地图,请检查是否搞混了mapID与setID").finish(reply_to=True)
99
101
  file_path = osz_path.absolute()
102
+ server_osz_path = await upload_file_stream_batch(bot, file_path)
103
+
100
104
  try:
101
- with open(file_path, "rb") as f:
102
- await UniMessage.file(raw=f.read()).send()
105
+ await bot.call_api("upload_group_file", group_id=event.group_id, file=server_osz_path, name=osz_path.name)
103
106
  except ActionFailed:
104
107
  await UniMessage.text("上传文件失败,可能是群空间满或没有权限导致的").send(reply_to=True)
105
108
  finally:
@@ -113,7 +116,7 @@ generate_full_ln = on_command("反键", priority=11, block=True)
113
116
 
114
117
 
115
118
  @generate_full_ln.handle()
116
- async def _(msg: Message = CommandArg()):
119
+ async def _(bot: Bot, event: GroupMessageEvent, msg: Message = CommandArg()):
117
120
  args = msg.extract_plain_text().strip().split()
118
121
  if not args:
119
122
  await UniMessage.text("请输入需要转ln的地图setID").finish(reply_to=True)
@@ -133,9 +136,9 @@ async def _(msg: Message = CommandArg()):
133
136
  if not osz_path:
134
137
  await UniMessage.text("未找到该地图,请检查是否搞混了mapID与setID").finish(reply_to=True)
135
138
  file_path = osz_path.absolute()
139
+ server_osz_path = await upload_file_stream_batch(bot, file_path)
136
140
  try:
137
- with open(file_path, "rb") as f:
138
- await UniMessage.file(raw=f.read()).send()
141
+ await bot.call_api("upload_group_file", group_id=event.group_id, file=server_osz_path, name=osz_path.name)
139
142
  except ActionFailed:
140
143
  await UniMessage.text("上传文件失败,可能是群空间满或没有权限导致的").send(reply_to=True)
141
144
  finally:
@@ -1,22 +1,23 @@
1
1
  from nonebot import on_command
2
+ from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent
2
3
  from nonebot.params import CommandArg
3
4
  from nonebot.internal.adapter import Message
4
5
  from nonebot_plugin_alconna import UniMessage
5
6
 
6
- from ..file import download_map
7
+ from ..file import download_map, upload_file_stream_batch
7
8
 
8
9
  osudl = on_command("osudl", priority=11, block=True)
9
10
 
10
11
 
11
12
  @osudl.handle()
12
- async def _osudl(setid: Message = CommandArg()):
13
+ async def _osudl(bot: Bot, event: GroupMessageEvent, setid: Message = CommandArg()):
13
14
  setid = setid.extract_plain_text().strip()
14
15
  if not setid or not setid.isdigit():
15
16
  await UniMessage.text("请输入正确的地图ID").send(reply_to=True)
16
17
  osz_path = await download_map(int(setid))
17
- file_path = osz_path.absolute()
18
+ server_osz_path = await upload_file_stream_batch(bot, osz_path)
18
19
  try:
19
- await UniMessage.file(path=file_path).send()
20
+ await bot.call_api("upload_group_file", group_id=event.group_id, file=server_osz_path, name=osz_path.name)
20
21
  except Exception:
21
22
  await UniMessage.text("上传文件失败,可能是群空间满或没有权限导致的").send(reply_to=True)
22
23
  finally:
@@ -43,7 +43,7 @@ async def handle_recommend(state: T_State, matcher: type[Matcher]):
43
43
  await matcher.finish("今天已经没有可以推荐的图啦,明天再来吧")
44
44
  return None
45
45
  bid = int(re.findall("https://osu.ppy.sh/beatmaps/(.*)", recommend_map.mapLink)[0])
46
- map_data = await osu_api("map", bid)
46
+ map_data = await osu_api("map", map_id=bid)
47
47
  map_info = Beatmap(**map_data)
48
48
  sid = map_info.beatmapset_id
49
49
  s = (
@@ -25,6 +25,6 @@ async def get_first_response(urls: list[str]):
25
25
  for task in done:
26
26
  response = task.result()
27
27
  if response is not None and response.status_code == 200:
28
- return response.content
28
+ return response
29
29
  tasks = [task for task in tasks if not task.done()]
30
30
  return None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nonebot-plugin-osubot"
3
- version = "6.24.2"
3
+ version = "6.25.0"
4
4
  description = "OSUbot in NoneBot2"
5
5
  authors = [
6
6
  { name = "yaowan233", email = "572473053@qq.com" },
@@ -22,6 +22,7 @@ dependencies = [
22
22
  "matplotlib>=3.7.1",
23
23
  "nonebot-plugin-htmlrender>=0.3.1",
24
24
  "nonebot-plugin-waiter>=0.6.1",
25
+ "nonebot-adapter-onebot>=2.4.6",
25
26
  ]
26
27
  requires-python = ">=3.9.8,<3.13"
27
28
  readme = "README.md"
@@ -1,127 +0,0 @@
1
- import re
2
- import random
3
- import asyncio
4
- from pathlib import Path
5
- from typing import Union, Optional
6
- from io import BytesIO, TextIOWrapper
7
-
8
- from nonebot.log import logger
9
-
10
- from .schema import Badge
11
- from .network import auto_retry
12
- from .api import bg_url, safe_async_get
13
- from .network.first_response import get_first_response
14
-
15
- osufile = Path(__file__).parent / "osufile"
16
- map_path = Path() / "data" / "osu" / "map"
17
- user_cache_path = Path() / "data" / "osu" / "user"
18
- badge_cache_path = Path() / "data" / "osu" / "badge"
19
- team_cache_path = Path() / "data" / "osu" / "team"
20
- api_ls = [
21
- "https://api.chimu.moe/v1/download/",
22
- "https://osu.direct/api/d/",
23
- "https://txy1.sayobot.cn/beatmaps/download/novideo/",
24
- "https://catboy.best/d/",
25
- ]
26
- semaphore = asyncio.Semaphore(5)
27
-
28
- if not map_path.exists():
29
- map_path.mkdir(parents=True, exist_ok=True)
30
- if not user_cache_path.exists():
31
- user_cache_path.mkdir(parents=True, exist_ok=True)
32
- if not badge_cache_path.exists():
33
- badge_cache_path.mkdir(parents=True, exist_ok=True)
34
- if not team_cache_path.exists():
35
- team_cache_path.mkdir(parents=True, exist_ok=True)
36
-
37
-
38
- async def download_map(setid: int) -> Optional[Path]:
39
- urls = [i + str(setid) for i in api_ls]
40
- logger.info(f"开始下载地图: <{setid}>")
41
- req = await get_first_response(urls)
42
- filename = f"{setid}.osz"
43
- filepath = map_path.parent / filename
44
- with open(filepath, "wb") as f:
45
- f.write(req.read())
46
- logger.info(f"地图: <{setid}> 下载完毕")
47
- return filepath
48
-
49
-
50
- @auto_retry
51
- async def download_osu(set_id, map_id):
52
- url = [
53
- f"https://osu.ppy.sh/osu/{map_id}",
54
- f"https://osu.direct/api/osu/{map_id}",
55
- f"https://catboy.best/osu/{map_id}",
56
- ]
57
- logger.info(f"开始下载谱面: <{map_id}>")
58
- async with semaphore:
59
- if req := await get_first_response(url):
60
- filename = f"{map_id}.osu"
61
- filepath = map_path / str(set_id) / filename
62
- filepath.parent.mkdir(parents=True, exist_ok=True)
63
- with open(filepath, "wb") as f:
64
- f.write(req)
65
- return filepath
66
- else:
67
- raise Exception("下载出错,请稍后再试")
68
-
69
-
70
- async def get_projectimg(url: str) -> BytesIO:
71
- if "avatar-guest.png" in url:
72
- url = "https://osu.ppy.sh/images/layout/avatar-guest.png"
73
- req = await safe_async_get(url)
74
- if not req or req.status_code >= 400:
75
- # todo 加个自创的错误图片
76
- req = await safe_async_get(random.choice(bg_url))
77
- if not req or req.status_code >= 400:
78
- raise Exception("图片下载失败")
79
- data = req.read()
80
- im = BytesIO(data)
81
- return im
82
-
83
-
84
- async def get_pfm_img(url: str, cache_path: Path) -> BytesIO:
85
- cache_dir = cache_path.parent
86
- if not cache_dir.exists():
87
- cache_dir.mkdir(parents=True, exist_ok=True)
88
- if cache_path.exists():
89
- with cache_path.open("rb") as f:
90
- return BytesIO(f.read())
91
- async with asyncio.Semaphore(5):
92
- req = await safe_async_get(url)
93
- if not req or req.status_code >= 400:
94
- return BytesIO()
95
- image_data = req.content
96
- with cache_path.open("wb") as f:
97
- f.write(image_data)
98
- return BytesIO(image_data)
99
-
100
-
101
- def re_map(file: Union[bytes, Path]) -> str:
102
- if isinstance(file, bytes):
103
- text = TextIOWrapper(BytesIO(file), "utf-8").read()
104
- else:
105
- with open(file, encoding="utf-8") as f:
106
- text = f.read()
107
- res = re.search(r"\d,\d,\"(.+)\"", text)
108
- bg = "mapbg.png" if not res else res.group(1).strip()
109
- if "/" in bg:
110
- bg = bg.split("/")[-1]
111
- return bg
112
-
113
-
114
- async def make_badge_cache_file(badge: Badge):
115
- path = badge_cache_path / f"{hash(badge.description)}.png"
116
- badge_icon = await get_projectimg(badge.image_url)
117
- with open(path, "wb") as f:
118
- f.write(badge_icon.getvalue())
119
-
120
-
121
- # 保存个人信息界面背景
122
- async def save_info_pic(user: str, byt: bytes):
123
- path = user_cache_path / user
124
- if not path.exists():
125
- path.mkdir()
126
- with open(path / "info.png", "wb") as f:
127
- f.write(BytesIO(byt).getvalue())