nonebot-plugin-osubot 6.17.1__py3-none-any.whl → 6.18.1__py3-none-any.whl

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.

@@ -370,8 +370,8 @@ async def get_sayo_map_info(sid, t=0) -> SayoBeatmap:
370
370
  async def get_map_bg(mapid, sid, bg_name) -> BytesIO:
371
371
  res = await get_first_response(
372
372
  [
373
- f"https://osu.direct/api/media/background/{mapid}",
374
- f"https://subapi.nerinyan.moe/bg/{mapid}",
373
+ f"https://catboy.best/preview/background/{mapid}",
374
+ f"https://api.nerinyan.moe/bg/{mapid}",
375
375
  f"https://dl.sayobot.cn/beatmaps/files/{sid}/{bg_name}",
376
376
  ]
377
377
  )
@@ -7,10 +7,10 @@ from PIL import ImageDraw, UnidentifiedImageError
7
7
 
8
8
  from ..pp import cal_pp
9
9
  from ..mods import get_mods_list
10
- from ..api import get_user_scores, get_user_info_data
11
10
  from ..exceptions import NetworkError
12
11
  from ..schema.score import Mod, UnifiedScore
13
12
  from .score import cal_legacy_acc, cal_legacy_rank
13
+ from ..api import get_user_scores, get_user_info_data
14
14
  from ..file import map_path, get_pfm_img, download_osu
15
15
  from .utils import draw_fillet, draw_fillet2, open_user_icon, filter_scores_with_regex
16
16
  from .static import BgImg, Image, BgImg1, ModsDict, RankDict, Torus_Regular_20, Torus_Regular_25, Torus_SemiBold_25
@@ -34,7 +34,7 @@ async def draw_bp(
34
34
  if mods:
35
35
  mods_ls = get_mods_list(scores, mods)
36
36
  if low_bound > len(mods_ls):
37
- raise NetworkError(f'未找到开启 {"|".join(mods)} Mods的成绩')
37
+ raise NetworkError(f"未找到开启 {'|'.join(mods)} Mods的成绩")
38
38
  if high_bound > len(mods_ls):
39
39
  mods_ls = mods_ls[low_bound - 1 :]
40
40
  else:
@@ -10,14 +10,13 @@ from ..exceptions import NetworkError
10
10
  from ..database.models import InfoData
11
11
  from ..api import get_random_bg, get_user_info_data
12
12
  from .utils import info_calc, draw_fillet, update_icon, open_user_icon
13
- from ..file import user_cache_path, badge_cache_path, make_badge_cache_file
13
+ from ..file import get_projectimg, team_cache_path, user_cache_path, badge_cache_path, make_badge_cache_file
14
14
  from .static import (
15
15
  Image,
16
16
  InfoImg,
17
17
  ExpLeftBg,
18
18
  ExpRightBg,
19
19
  ExpCenterBg,
20
- SupporterBg,
21
20
  Torus_Regular_20,
22
21
  Torus_Regular_25,
23
22
  Torus_Regular_30,
@@ -142,14 +141,27 @@ async def draw_info(uid: Union[int, str], mode: str, day: int, source: str) -> B
142
141
  badges_img = Image.open(badges_path).convert("RGBA").resize((86, 40))
143
142
  except UnidentifiedImageError:
144
143
  badges_path.unlink()
145
- raise NetworkError("badges图片下载错误,请重试!")
144
+ raise NetworkError("badges 图片下载错误,请重试!")
146
145
  im.alpha_composite(badges_img, (length, height))
147
146
  # 地区
148
147
  country_bg = Image.open(country).convert("RGBA").resize((80, 54))
149
148
  im.alpha_composite(country_bg, (400, 394))
149
+ if info.team and info.team.flag_url:
150
+ team_path = team_cache_path / f"{info.team.id}.png"
151
+ if not team_path.exists():
152
+ team_img = await get_projectimg(info.team.flag_url)
153
+ team_img = Image.open(team_img).convert("RGBA")
154
+ team_img.save(team_path)
155
+ try:
156
+ team_img = Image.open(team_path).convert("RGBA").resize((108, 54))
157
+ im.alpha_composite(team_img, (400, 280))
158
+ except UnidentifiedImageError:
159
+ team_path.unlink()
160
+ raise NetworkError("team 图片下载错误,请重试!")
161
+ draw.text((515, 300), info.team.name, font=Torus_Regular_30, anchor="lt")
150
162
  # supporter
151
- if info.is_supporter:
152
- im.alpha_composite(SupporterBg.resize((54, 54)), (400, 280))
163
+ # if info.is_supporter:
164
+ # im.alpha_composite(SupporterBg.resize((54, 54)), (400, 280))
153
165
  # 经验
154
166
  if statistics.level.progress != 0:
155
167
  im.alpha_composite(ExpLeftBg, (50, 646))
@@ -152,8 +152,7 @@ async def draw_rating(match_id: str, algorithm: str = "osuplus") -> bytes:
152
152
 
153
153
  draw.text(
154
154
  (350 + x_offset, 341 + base_y),
155
- f"Total Score: {score_to_3digit(player_stats.total_score)}"
156
- f" ({score_to_3digit(player_stats.average_score)})",
155
+ f"Total Score: {score_to_3digit(player_stats.total_score)} ({score_to_3digit(player_stats.average_score)})",
157
156
  font=Torus_SemiBold_20,
158
157
  fill="#bbbbbb",
159
158
  anchor="lm",
@@ -3,7 +3,7 @@ from io import BytesIO
3
3
  from typing import Optional
4
4
  from datetime import datetime, timedelta
5
5
 
6
- from PIL import ImageDraw, ImageFilter, ImageEnhance, ImageSequence
6
+ from PIL import ImageDraw, ImageFilter, ImageEnhance, ImageSequence, UnidentifiedImageError
7
7
 
8
8
  from ..info import get_bg
9
9
  from ..mods import get_mods_list
@@ -12,9 +12,9 @@ from ..schema.user import UnifiedUser
12
12
  from ..schema import Beatmap, NewScore
13
13
  from ..beatmap_stats_moder import with_mods
14
14
  from ..pp import cal_pp, get_ss_pp, get_if_pp_ss_pp
15
- from ..file import map_path, download_osu, user_cache_path
16
15
  from ..schema.score import Mod, UnifiedScore, NewStatistics
17
16
  from ..api import osu_api, get_user_scores, get_user_info_data, get_ppysb_map_scores
17
+ from ..file import map_path, download_osu, get_projectimg, team_cache_path, user_cache_path
18
18
  from .utils import (
19
19
  crop_bg,
20
20
  draw_acc,
@@ -32,7 +32,6 @@ from .static import (
32
32
  Image,
33
33
  IconLs,
34
34
  Venera_75,
35
- SupporterBg,
36
35
  Torus_Regular_20,
37
36
  Torus_Regular_30,
38
37
  Torus_Regular_75,
@@ -164,7 +163,7 @@ async def get_score_data(
164
163
  score = i
165
164
  break
166
165
  else:
167
- raise NetworkError(f'未找到开启 {"|".join(mods)} Mods的成绩')
166
+ raise NetworkError(f"未找到开启 {'|'.join(mods)} Mods的成绩")
168
167
  else:
169
168
  score_ls.sort(key=lambda x: x.total_score, reverse=True)
170
169
  score = score_ls[0]
@@ -265,9 +264,22 @@ async def draw_score_pic(score_info: UnifiedScore, info: UnifiedUser, map_json,
265
264
  country = osufile / "flags" / f"{info.country_code}.png"
266
265
  country_bg = Image.open(country).convert("RGBA").resize((66, 45))
267
266
  im.alpha_composite(country_bg, (250, 577))
267
+ if info.team and info.team.flag_url:
268
+ team_path = team_cache_path / f"{info.team.id}.png"
269
+ if not team_path.exists():
270
+ team_img = await get_projectimg(info.team.flag_url)
271
+ team_img = Image.open(team_img).convert("RGBA")
272
+ team_img.save(team_path)
273
+ try:
274
+ team_img = Image.open(team_path).convert("RGBA").resize((80, 40))
275
+ im.alpha_composite(team_img, (250, 640))
276
+ except UnidentifiedImageError:
277
+ team_path.unlink()
278
+ raise NetworkError("team 图片下载错误,请重试!")
279
+ draw.text((340, 660), info.team.name, font=Torus_Regular_20, anchor="lt")
268
280
  # supporter
269
- if info.is_supporter:
270
- im.alpha_composite(SupporterBg.resize((40, 40)), (250, 640))
281
+ # if info.is_supporter:
282
+ # im.alpha_composite(SupporterBg.resize((40, 40)), (250, 640))
271
283
  # 处理mania转谱cs
272
284
  if score_info.ruleset_id == 3 and mapinfo.mode == 0:
273
285
  temp_accuracy = mapinfo.accuracy
@@ -527,7 +539,7 @@ async def draw_score_pic(score_info: UnifiedScore, info: UnifiedUser, map_json,
527
539
  draw.text(
528
540
  (1002, 580),
529
541
  (
530
- f"{score_info.statistics.perfect / score_info.statistics.great :.1f}:1"
542
+ f"{score_info.statistics.perfect / score_info.statistics.great:.1f}:1"
531
543
  if (score_info.statistics.great or 0) != 0
532
544
  else "∞:1"
533
545
  ),
@@ -13,7 +13,7 @@ from ..schema.user import UnifiedUser
13
13
  from ..schema import SeasonalBackgrounds
14
14
  from ..api import safe_async_get, get_seasonal_bg
15
15
  from .static import Path, Image, Stars, ColorArr, np, osufile
16
- from ..file import map_path, download_osu, get_projectimg, user_cache_path
16
+ from ..file import map_path, download_osu, get_projectimg, user_cache_path, team_cache_path
17
17
 
18
18
 
19
19
  def draw_fillet(img, radii):
@@ -268,6 +268,18 @@ async def update_icon(info: UnifiedUser):
268
268
  with open(path / f"icon.{info.avatar_url.split('.')[-1]}", "wb") as f:
269
269
  f.write(user_icon.getvalue())
270
270
 
271
+ team_path = team_cache_path / f"{info.team.id}.png"
272
+ if team_path.exists():
273
+ modified_time = team_path.stat().st_mtime
274
+ modified_datetime = datetime.datetime.fromtimestamp(modified_time)
275
+ time_diff = datetime.datetime.now() - modified_datetime
276
+ # 判断文件是否创建超过一天
277
+ if time_diff > datetime.timedelta(days=1):
278
+ team_path.unlink()
279
+ team_icon = await get_projectimg(info.team.flag_url)
280
+ with open(team_path, "wb") as f:
281
+ f.write(team_icon.getvalue())
282
+
271
283
 
272
284
  async def update_map(set_id, map_id):
273
285
  path = map_path / str(set_id)
@@ -16,6 +16,7 @@ osufile = Path(__file__).parent / "osufile"
16
16
  map_path = Path() / "data" / "osu" / "map"
17
17
  user_cache_path = Path() / "data" / "osu" / "user"
18
18
  badge_cache_path = Path() / "data" / "osu" / "badge"
19
+ team_cache_path = Path() / "data" / "osu" / "team"
19
20
  api_ls = [
20
21
  "https://api.chimu.moe/v1/download/",
21
22
  "https://osu.direct/api/d/",
@@ -30,6 +31,8 @@ if not user_cache_path.exists():
30
31
  user_cache_path.mkdir(parents=True, exist_ok=True)
31
32
  if not badge_cache_path.exists():
32
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)
33
36
 
34
37
 
35
38
  async def download_map(setid: int) -> Optional[Path]:
@@ -42,7 +42,7 @@ async def _bp(state: T_State):
42
42
  lazer_mode = "lazer模式下" if state["is_lazer"] else "stable模式下"
43
43
  mods = f" mod:{state['mods']}" if state["mods"] else ""
44
44
  await UniMessage.text(
45
- f"在查找用户:{state['username']} {NGM[state['mode']]}模式" f" bp{best} {lazer_mode}{mods}时 {str(e)}"
45
+ f"在查找用户:{state['username']} {NGM[state['mode']]}模式 bp{best} {lazer_mode}{mods}时 {str(e)}"
46
46
  ).finish(reply_to=True)
47
47
  await UniMessage.image(raw=data).finish(reply_to=True)
48
48
 
@@ -74,8 +74,7 @@ async def _pfm(state: T_State):
74
74
  lazer_mode = "lazer模式下" if state["is_lazer"] else "stable模式下"
75
75
  mods = f" mod:{state['mods']}" if state["mods"] else ""
76
76
  await UniMessage.text(
77
- f"在查找用户:{state['username']} {NGM[state['mode']]}模式"
78
- f" bp{state['range']} {lazer_mode}{mods}时 {str(e)}"
77
+ f"在查找用户:{state['username']} {NGM[state['mode']]}模式 bp{state['range']} {lazer_mode}{mods}时 {str(e)}"
79
78
  ).finish(reply_to=True)
80
79
  await UniMessage.image(raw=data).finish(reply_to=True)
81
80
 
@@ -43,7 +43,7 @@ async def _(event: Event, state: T_State):
43
43
  )
44
44
  except NetworkError as e:
45
45
  await UniMessage.text(
46
- f"在查找用户:{state['username']} {NGM[state['mode']]}模式" f" {lazer_mode}时 {str(e)}"
46
+ f"在查找用户:{state['username']} {NGM[state['mode']]}模式 {lazer_mode}时 {str(e)}"
47
47
  ).finish(reply_to=True)
48
48
  score_ls = [NewScore(**i) for i in bp_info]
49
49
  for score in score_ls:
@@ -106,6 +106,6 @@ async def _(event: Event, state: T_State):
106
106
  mapper_pp_data.append({"name": user_dic.get(mapper, ""), "value": round(pp, 2)})
107
107
  if len(mapper_pp_data) > 20:
108
108
  mapper_pp_data = mapper_pp_data[:20]
109
- name = f'{score_ls[0].user.username} {NGM[state["mode"]]} 模式 '
109
+ name = f"{score_ls[0].user.username} {NGM[state['mode']]} 模式 "
110
110
  byt = await draw_bpa_plot(name, pp_ls, length_ls, pp_data, mapper_pp_data)
111
111
  await UniMessage.image(raw=byt).finish(reply_to=True)
@@ -33,5 +33,5 @@ async def _info(state: T_State):
33
33
  pp_ls = [pp_ls[i] for i in filtered_indices]
34
34
  date_ls = [date_ls[i] for i in filtered_indices]
35
35
  rank_ls = [rank_ls[i] for i in filtered_indices]
36
- byt = await draw_history_plot(pp_ls, date_ls, rank_ls, f'{user.osu_name} {NGM[state["mode"]]} pp/rank history')
36
+ byt = await draw_history_plot(pp_ls, date_ls, rank_ls, f"{user.osu_name} {NGM[state['mode']]} pp/rank history")
37
37
  await UniMessage.image(raw=byt).finish(reply_to=True)
@@ -60,7 +60,7 @@ async def _(msg: Message = CommandArg()):
60
60
  words = re.sub(style_regex, "", words)
61
61
  words = re.sub(r"<[^>]+>", "", words)
62
62
  if medal_data["PackID"]:
63
- words += f'\nhttps://osu.ppy.sh/beatmaps/packs/{medal_data["PackID"].rstrip(",,,")}'
63
+ words += f"\nhttps://osu.ppy.sh/beatmaps/packs/{medal_data['PackID'].rstrip(',,,')}"
64
64
  await (UniMessage.image(url=medal_data["Link"]) + words).send(reply_to=True)
65
65
  if medal_data["beatmaps"]:
66
66
  msg = UniMessage()
@@ -68,7 +68,7 @@ async def _(msg: Message = CommandArg()):
68
68
  medal_data["beatmaps"] = medal_data["beatmaps"][:5]
69
69
  for beatmap in medal_data["beatmaps"]:
70
70
  msg += (
71
- f'{beatmap["SongTitle"]} [{beatmap["DifficultyName"]}]\n{beatmap["Difficulty"]}⭐\n'
72
- + f'https://osu.ppy.sh/b/{beatmap["BeatmapID"]}'
71
+ f"{beatmap['SongTitle']} [{beatmap['DifficultyName']}]\n{beatmap['Difficulty']}⭐\n"
72
+ + f"https://osu.ppy.sh/b/{beatmap['BeatmapID']}"
73
73
  )
74
74
  await msg.send()
@@ -52,7 +52,7 @@ async def handle_recommend(state: T_State, matcher: type[Matcher]):
52
52
  bg = ""
53
53
  logger.error(f"出现问题: 有问题的是{bid}, {sid}")
54
54
  s = (
55
- f'推荐的铺面是{recommend_map.mapName} ⭐{round(recommend_map.difficulty, 2)}\n{"".join(recommend_map.mod)}\n'
55
+ f"推荐的铺面是{recommend_map.mapName} ⭐{round(recommend_map.difficulty, 2)}\n{''.join(recommend_map.mod)}\n"
56
56
  f"预计pp为{round(recommend_map.predictPP, 2)}\n提升概率为{round(recommend_map.passPercent * 100, 2)}%\n"
57
57
  f"{recommend_map.mapLink}\nhttps://kitsu.moe/api/d/{sid}\n"
58
58
  f"https://txy1.sayobot.cn/beatmaps/download/novideo/{sid}"
@@ -29,6 +29,6 @@ async def _score(state: T_State):
29
29
  lazer_mode = "lazer模式下" if state["is_lazer"] else "stable模式下"
30
30
  mods = f" mod:{state['mods']}" if state["mods"] else ""
31
31
  await UniMessage.text(
32
- f"在查找用户:{state['username']} {NGM[state['mode']]}模式" f" {lazer_mode}{mods} 成绩时 {str(e)}"
32
+ f"在查找用户:{state['username']} {NGM[state['mode']]}模式 {lazer_mode}{mods} 成绩时 {str(e)}"
33
33
  ).finish(reply_to=True)
34
34
  await UniMessage.image(raw=data).finish(reply_to=True)
@@ -85,6 +85,13 @@ class User(UserCompact):
85
85
  statistics_rulesets: Optional[StatisticsRulesets] = None
86
86
 
87
87
 
88
+ class Team(Base):
89
+ flag_url: Optional[str] = None
90
+ id: int
91
+ name: str
92
+ short_name: str
93
+
94
+
88
95
  class UnifiedUser(Base):
89
96
  avatar_url: str
90
97
  country_code: str
@@ -93,3 +100,4 @@ class UnifiedUser(Base):
93
100
  is_supporter: bool
94
101
  badges: Optional[list[Badge]] = None
95
102
  statistics: Optional[UserStatistics] = None
103
+ team: Optional[Team] = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-osubot
3
- Version: 6.17.1
3
+ Version: 6.18.1
4
4
  Summary: OSUbot in NoneBot2
5
5
  License: AGPL-3.0
6
6
  Author-email: yaowan233 <572473053@qq.com>
@@ -1,12 +1,12 @@
1
1
  nonebot_plugin_osubot/__init__.py,sha256=Q-mTTnOIdKiKG6JrVm-kqpPrAhOP9lWyiKHNRqA7gpc,1478
2
- nonebot_plugin_osubot/api.py,sha256=ENMS9hfUQsXVw_9g31YfQG0YupWq9hUW-J4Wb6b_qec,14937
2
+ nonebot_plugin_osubot/api.py,sha256=lzp86uRbnt_Vd9qg2kIHy26EB7ODFGKkbNA6H2iJNh0,14933
3
3
  nonebot_plugin_osubot/beatmap_stats_moder.py,sha256=mNNTufc-gvO4NdYa3TnealSZI4-LBoiTlb599SeLBck,2915
4
4
  nonebot_plugin_osubot/config.py,sha256=Ub2s5Ny09-d1ZwT6x8cirB6zWy0brtO-oZV3W0qEM5Q,311
5
5
  nonebot_plugin_osubot/database/__init__.py,sha256=7CDo9xU_DGLQ6uTj_mU_Px92phg_DMU5mP6WvgOxFLY,101
6
6
  nonebot_plugin_osubot/database/models.py,sha256=VF_MxR70eRbiIHtqWjpE_Vea4xR38X0RJiQIO96mjsY,1595
7
7
  nonebot_plugin_osubot/draw/__init__.py,sha256=dRELA2Vi4gTe8v48q0iHXLDOEj7Unk-_ChDXJp3qkhg,265
8
8
  nonebot_plugin_osubot/draw/bmap.py,sha256=GzEiUEkcwdX6ixZ-qmM8TQQf0imD8taur3eX4lJ5wVg,5128
9
- nonebot_plugin_osubot/draw/bp.py,sha256=MhSEVHfetSLpNxUQ51KP7szezadQ9FGwaQmRz-1K0S4,9172
9
+ nonebot_plugin_osubot/draw/bp.py,sha256=_l7UdicosUwD6HdaI5U0AWgJBwWNAfJqvzC9DzXz_Pg,9172
10
10
  nonebot_plugin_osubot/draw/catch_preview.py,sha256=uSYoTqfdxRy4anpH9Uhj8NntPo008pzw1t6xRMTBBkI,1397
11
11
  nonebot_plugin_osubot/draw/catch_preview_templates/css/style.css,sha256=2I1VwycLhKJMxwjHj19zAV6MBkFMLu_qLunpoiRlGlM,3919
12
12
  nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/beatmap.js,sha256=xh6RUz3D40-HJHu0KGqac_eAIHGoAR12bF58V9ft7iQ,5784
@@ -38,36 +38,36 @@ nonebot_plugin_osubot/draw/catch_preview_templates/js/viewbox.js,sha256=RPsUyoKN
38
38
  nonebot_plugin_osubot/draw/catch_preview_templates/js/zip.min.js,sha256=pQmrVxuGCMeLS-XS3QsVhzjwap28fr9Ya083uPlg1sM,86405
39
39
  nonebot_plugin_osubot/draw/catch_preview_templates/pic.html,sha256=kmwzKgqWzWRPAlg0eqVibSZpC9NVo-U9gGrxRl3D6m0,3086
40
40
  nonebot_plugin_osubot/draw/echarts.py,sha256=OzL_397yWrDAIXsEWf72hAiqdIUBz1D182cli6ORD6s,1037
41
- nonebot_plugin_osubot/draw/info.py,sha256=L-h1Nb49p7rCzIrdHWdcF93WYTpQiUzKS_yMUiHBWiA,10478
41
+ nonebot_plugin_osubot/draw/info.py,sha256=i2YcJmSdTpwhZl_nDe7GJv4jQTB8_9oBfpq2Zw2hwo0,11162
42
42
  nonebot_plugin_osubot/draw/map.py,sha256=4M8xRd0dIbC5g1s8I4eTZ3vRglM6r_TSznFOZ62K2wk,8654
43
43
  nonebot_plugin_osubot/draw/match_history.py,sha256=GBJl6lAA27U7NSMC2isEzD_YsoIPAeG6ijDu7Oflcl0,997
44
- nonebot_plugin_osubot/draw/rating.py,sha256=UXBQnNeIFADLnvMruS0NS_XOl0LfUeErye29FfYddis,20413
45
- nonebot_plugin_osubot/draw/score.py,sha256=YI2I482nEnzzg4tUxMp11MHBl41NGWlV-xq8tz-xLZE,26514
44
+ nonebot_plugin_osubot/draw/rating.py,sha256=pA7mGLI4IujmYB6kQf_tSkR7mZGpUAVLRLyaAsZhqTM,20397
45
+ nonebot_plugin_osubot/draw/score.py,sha256=bEQq01UCdOeIE_m35nKuNYGk84bzfVjAsQZfleQ1yTU,27223
46
46
  nonebot_plugin_osubot/draw/static.py,sha256=2rznsXZTcKggQ5JSpsJg4y6uWP4e-Y40U7v_QAwLT4Q,3969
47
47
  nonebot_plugin_osubot/draw/taiko_preview.py,sha256=tqhuHSdxUJEuXqKHMJDeSLdusuJhSnMMiaG5FbUnaJw,11441
48
48
  nonebot_plugin_osubot/draw/templates/bpa_chart.html,sha256=cnpM0qRvvyCMTRP-mIOABQlaaqxQwG5kLUxlo4h7F7w,7012
49
49
  nonebot_plugin_osubot/draw/templates/echarts.min.js,sha256=IF32ooP8NPIzQg_fs7lVHpwG92JcCPE1TZAEyFSgGZU,1022939
50
50
  nonebot_plugin_osubot/draw/templates/mod_chart.html,sha256=Iz71KM5v9z_Rt2vqJ5WIZumRIHgDfcGIUmWGvVGZ-nQ,1508
51
51
  nonebot_plugin_osubot/draw/templates/pp_rank_line_chart.html,sha256=Gyf-GR8ZBlWQTks0TlB3M8EWUBMVwiUaesFAmDISxLo,1417
52
- nonebot_plugin_osubot/draw/utils.py,sha256=zBiT-MJ4OR0atzTeto2yWE65DCDoIFObHfIPV_Qz-XM,13630
52
+ nonebot_plugin_osubot/draw/utils.py,sha256=mwP_wTnuRnp9FrlCqUFvCX2p0_Lm5jQ73PgjjhtF6EA,14205
53
53
  nonebot_plugin_osubot/exceptions.py,sha256=N_FsEk-9Eu2QnuznhdfWn6OoyA1HH73Q7bUaY89gVi0,40
54
- nonebot_plugin_osubot/file.py,sha256=rx2P59JbAszgT6oeFACzO-HwtQ4HWpWE_Yn04wkYz_k,4240
54
+ nonebot_plugin_osubot/file.py,sha256=GhG54EdVsxFf8_8GZOPh4YGvw9iw5bAX9JFz4Mg4kMg,4379
55
55
  nonebot_plugin_osubot/info/__init__.py,sha256=I7YlMQiuHExEeJWqyzZb2I-Vl2uql3Py2LdhSH2Z9N0,136
56
56
  nonebot_plugin_osubot/info/bg.py,sha256=Icua4bS38k0c-WbLUjhfS4IXOF83bgyu_oa2HwX4ZEQ,1541
57
57
  nonebot_plugin_osubot/info/bind.py,sha256=b2ua625hbYym7rpb-kLBB-VDP5YWFdmT5RweM58ggWw,4934
58
58
  nonebot_plugin_osubot/mania/__init__.py,sha256=XRPn563jDJiPohFekcoFFCqCJYznb-6uORneioZv4xI,5534
59
59
  nonebot_plugin_osubot/matcher/__init__.py,sha256=yID7QcdQF6_Mouwbej3JwYUBbKSU3VQdrjq6B1Fz9P8,1331
60
60
  nonebot_plugin_osubot/matcher/bind.py,sha256=QQJc2S7XFo5tu4CPloIET6fKaeiQixgb8M7QvULV6E0,2834
61
- nonebot_plugin_osubot/matcher/bp.py,sha256=ZZ-jLJ4Wf4HTKuzrWeO6cfr9l210o1nF2E2NVH6YRAk,4003
62
- nonebot_plugin_osubot/matcher/bp_analyze.py,sha256=IhLBJLYYCIBD_9D29BuEpz8A_gJJ_cNb8pk-zQ6mGLs,3953
61
+ nonebot_plugin_osubot/matcher/bp.py,sha256=ULNVgrlRCe9w6N7yC7Yw3Y-OSJQKR8AZfBkB5jToOPQ,3983
62
+ nonebot_plugin_osubot/matcher/bp_analyze.py,sha256=S1dhYiGqtPQapJt4PB5mNKfpPbOpVNAqDIToNEJVpSY,3949
63
63
  nonebot_plugin_osubot/matcher/getbg.py,sha256=Ar2yIST556MYRxzuXCLSDAMAmESRENN1fCty-kdH7PI,699
64
64
  nonebot_plugin_osubot/matcher/guess.py,sha256=iE5oRZ3mDTC_wcjLJTyyAWlmnDzkAgzGN5rvoTIn0uM,24093
65
- nonebot_plugin_osubot/matcher/history.py,sha256=T6yW-6fmVeH10_3ftgAMn4LHhlFUalxj_cyNaVcUoAo,1577
65
+ nonebot_plugin_osubot/matcher/history.py,sha256=ZYkVJHdXuVJmhovRhwxFdqNp0o2uJJOACAZhhutyS3w,1577
66
66
  nonebot_plugin_osubot/matcher/info.py,sha256=8CJHTOMTx_nzJ4ZwXo6ZfBwCuO3DtLprRX7jnMtPilk,858
67
67
  nonebot_plugin_osubot/matcher/map.py,sha256=sFpOoFv63y-NOkCJhE6aW0DRYDl_8SoQOPsdq50QxT0,1404
68
68
  nonebot_plugin_osubot/matcher/map_convert.py,sha256=YfR-_u5F_GCdn2mv9ZvMEpfxTc63f9nmihIUdu54eN8,5716
69
69
  nonebot_plugin_osubot/matcher/match.py,sha256=uyrm8I_WgHK2ya1q46AUxNk_cQiKKh7GKlUzrrG1o7w,472
70
- nonebot_plugin_osubot/matcher/medal.py,sha256=H1KbgZkVytR6kEsWN7r3v1zv_2i6j2D2QwgOG4WiWVI,2965
70
+ nonebot_plugin_osubot/matcher/medal.py,sha256=OlJTwBvh0kGx_KWhjksozI910c8QdaVFBgtnwqLVyLU,2965
71
71
  nonebot_plugin_osubot/matcher/mu.py,sha256=l3Ebz47o46EvN2nvo9-zzQI4CTaLMcd5XW0qljqSGIM,445
72
72
  nonebot_plugin_osubot/matcher/osu_help.py,sha256=64rOkYEOETvU8AF__0xLZjVRs3cTac0D1XEultPK_kM,728
73
73
  nonebot_plugin_osubot/matcher/osudl.py,sha256=yLEblYnLprTf2T00FiRWJ8CuCd0IHyUY9Ka68yAKOXo,872
@@ -75,8 +75,8 @@ nonebot_plugin_osubot/matcher/pr.py,sha256=WAVXsercYxsB7L576QjaBmUz4zoMcpC73Bnlr
75
75
  nonebot_plugin_osubot/matcher/preview.py,sha256=n9wgdNG9SF_JQ78nShTsTElJkBDJQr67DRc8Q9sVcCo,1896
76
76
  nonebot_plugin_osubot/matcher/rank.py,sha256=sFEim3cR_vswzLmbagjqy-ypolcprAxQpawiSEcFqEI,3619
77
77
  nonebot_plugin_osubot/matcher/rating.py,sha256=JY1Q1ELU3Y1FhQ7kVWVkgVsYEVxkAcxjsoMcwC_u234,450
78
- nonebot_plugin_osubot/matcher/recommend.py,sha256=UksUS3hYlW4zPQ3TZ3K9mgDqJGpTSOWKv3KwK96KJJ8,2678
79
- nonebot_plugin_osubot/matcher/score.py,sha256=iJhH3vjq9EVwa6af7HINUbasF8WnQ5DqMhCGDiGoAMw,1216
78
+ nonebot_plugin_osubot/matcher/recommend.py,sha256=1LcjACkiPdZV0VqXbZx-oTytKr8lYxg1q0zZuXowWTc,2678
79
+ nonebot_plugin_osubot/matcher/score.py,sha256=Nk6dpDlszKJKdboTSQRBf-wMGioHIPqKSVWrnT0Xbns,1212
80
80
  nonebot_plugin_osubot/matcher/update.py,sha256=MHpxoJmU0hKW82XuM9YpyCxUUjjiNKwejnRgYwueR4Q,3168
81
81
  nonebot_plugin_osubot/matcher/update_mode.py,sha256=0Wy6Y1-rN7XcqBZyo37mYFdixq-4HxCwZftUaiYhZqE,1602
82
82
  nonebot_plugin_osubot/matcher/url_match.py,sha256=opx4DYSQ83tk0qlMOBirl4TC49WXHgMZ04lMr9NCHNs,746
@@ -401,8 +401,8 @@ nonebot_plugin_osubot/schema/match.py,sha256=lR3pGNVR9K_5GZAdOLG6Ki-W3fwJvgMlNhY
401
401
  nonebot_plugin_osubot/schema/ppysb/__init__.py,sha256=JK2Z4n44gUJPVKdETMJYJ5uIw-4a8T50y6j5n-YrlYM,1375
402
402
  nonebot_plugin_osubot/schema/sayo_beatmap.py,sha256=lS1PQZ-HvHl0VhkzlI0-pNLeJrLYWVqmKAo6xZr5I2U,959
403
403
  nonebot_plugin_osubot/schema/score.py,sha256=zHU-w2e7RzMDL8vdPkX5vggcqalBo83JTvu96abcflo,3124
404
- nonebot_plugin_osubot/schema/user.py,sha256=cQb3SmCBPhd8ozSuiEBw3z_ylSEcjWv7kFBjVbExGPk,2117
404
+ nonebot_plugin_osubot/schema/user.py,sha256=sxNmqymG_kIVuGuzfchSv9UML6NPG70cqo2_h5xDIpM,2250
405
405
  nonebot_plugin_osubot/utils/__init__.py,sha256=pyv8XxBcCOeQVDj1E4dgvktzcefgQXfKBlarsYGx1sg,815
406
- nonebot_plugin_osubot-6.17.1.dist-info/WHEEL,sha256=B19PGBCYhWaz2p_UjAoRVh767nYQfk14Sn4TpIZ-nfU,87
407
- nonebot_plugin_osubot-6.17.1.dist-info/METADATA,sha256=LjdBW5sGAIK3494IjhCzeiWpswoQX1XI4bVmVrEBkuA,4476
408
- nonebot_plugin_osubot-6.17.1.dist-info/RECORD,,
406
+ nonebot_plugin_osubot-6.18.1.dist-info/WHEEL,sha256=B19PGBCYhWaz2p_UjAoRVh767nYQfk14Sn4TpIZ-nfU,87
407
+ nonebot_plugin_osubot-6.18.1.dist-info/METADATA,sha256=8mVJgIDqkt_Ps9LK9i018HXK-OfPLmJri2RmJp15wZk,4476
408
+ nonebot_plugin_osubot-6.18.1.dist-info/RECORD,,