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.
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/PKG-INFO +1 -1
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/api.py +1 -1
- nonebot-plugin-osubot-6.25.0/nonebot_plugin_osubot/file.py +297 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/__init__.py +2 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/map_convert.py +11 -8
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/osudl.py +5 -4
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/recommend.py +1 -1
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/first_response.py +1 -1
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/pyproject.toml +2 -1
- nonebot-plugin-osubot-6.24.2/nonebot_plugin_osubot/file.py +0 -127
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/README.md +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/beatmap_stats_moder.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/config.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/data/osu/1849145.osz +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/data/osu/1849145.zip +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/database/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/database/models.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bmap.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bp.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/css/style.css +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/fakeaudio.js +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/preview.js +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/util.js +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/js/viewbox.js +0 -0
- {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
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/catch_preview_templates/pic.html +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/echarts.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/info.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/map.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/match_history.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/css/style.css +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/preview.js +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/js/util.js +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/osu_preview_templates/pic.html +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/rating.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/score.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/static.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/taiko_preview.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/bpa_chart.html +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/echarts.min.js +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/mod_chart.html +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/templates/pp_rank_line_chart.html +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/utils.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/exceptions.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/bg.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/info/bind.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/mania/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bind.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bp.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/bp_analyze.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/getbg.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/guess.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/history.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/info.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/map.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/match.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/medal.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/mu.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/osu_help.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/pr.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/preview.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/rank.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/rating.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/score.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/update.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/update_mode.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/url_match.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/utils.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/mods.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/auto_retry.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/network/manager.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/Best Performance.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/History Score.jpg +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/beatmapinfo.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/convert.jpg +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/detail.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AQ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AX.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/AZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BB.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BJ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BQ (1).png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BQ (2).png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/BZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CX.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/CZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DJ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/DZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/EH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ER.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ES.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ET.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FJ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/FR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GB.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GQ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/GY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/HU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ID.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IQ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/IT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/JP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/KZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LB.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/LY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ME.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ML.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MQ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MX.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/MZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/NZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/OM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/PY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/QA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/RW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SB.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SJ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ST.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/SZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TJ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TK.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TV.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/TZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/US.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UY.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/UZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VG.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VN.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/VU.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/WF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/WS.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/YE.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/YT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZA.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZM.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/flags/ZW.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Extra.otf +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Torus Regular.otf +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Torus SemiBold.otf +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/fonts/Venera.otf +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/help.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/info.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/maniabeatmapinfo.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/mplink.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/mplink_map.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/team_blue.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/match/team_red.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/medals/medals.json +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/4K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/5K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/6K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/7K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/8K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/9K.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/AP.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/CL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/DT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/EZ.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/FI.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/FL.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/HT.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/MR.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/NC.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/NF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/PF.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/RX.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/SD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/SO.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/TD.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/mods/V2.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_ctb.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_mania.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_std.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/pfm_taiko.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-A.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-B.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-C.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-D.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-F.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-S.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-SH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-X.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/ranking/ranking-XH.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/bmap.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/center.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/left.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/right.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stardiff.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stars.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/stars_expertplus.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/osufile/work/suppoter.png +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/pp.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/alphaosu.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/basemodel.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/beatmap.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/beatmapsets.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/match.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/ppysb/__init__.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/score.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/schema/user.py +0 -0
- {nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/utils/__init__.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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:
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/matcher/osudl.py
RENAMED
|
@@ -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
|
-
|
|
18
|
+
server_osz_path = await upload_file_stream_batch(bot, osz_path)
|
|
18
19
|
try:
|
|
19
|
-
await
|
|
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
|
|
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.
|
|
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())
|
|
File without changes
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/__init__.py
RENAMED
|
File without changes
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bmap.py
RENAMED
|
File without changes
|
{nonebot-plugin-osubot-6.24.2 → nonebot-plugin-osubot-6.25.0}/nonebot_plugin_osubot/draw/bp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|