nonebot-plugin-osubot 6.20.0__py3-none-any.whl → 6.20.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.

@@ -170,6 +170,7 @@ async def get_user_scores(
170
170
  return all_scores[:limit]
171
171
 
172
172
  elif source == "ppysb":
173
+ limit = min(limit, 100)
173
174
  url = f"https://api.ppy.sb/v1/get_player_scores?scope={scope}&id={uid}&mode={FGM[mode]}&limit={limit}&include_failed={int(include_failed)}"
174
175
  data = await make_request(url, {}, "未找到该玩家BP")
175
176
  data = ScoresResponse(**data)
@@ -6,8 +6,24 @@ function PalpableCatchHitObject(data, beatmap) {
6
6
  this.color = data.color;
7
7
  this.radius = data.radius;
8
8
  this.hyperDash = false;
9
+ this.edge = false;
9
10
  this.XDistToNext = [1, 1, 1];
11
+ this.hitSound = data.hitSound || "0";
10
12
  }
13
+
14
+ PalpableCatchHitObject.prototype.getHitsoundLabel = function (){
15
+ let hsLabels = [];
16
+ if (this.hitSound == null || this.hitSound == undefined || !this.hitSound) // hs = null | undifined | "" | "0"
17
+ return null;
18
+ else {
19
+ if (this.hitSound & 2) hsLabels.push("W");
20
+ if (this.hitSound & 8) hsLabels.push("C");
21
+ if (this.hitSound & 4) hsLabels.push("F");
22
+ if (hsLabels.length === 0) return null;
23
+ return hsLabels.join("|");
24
+ }
25
+ };
26
+
11
27
  PalpableCatchHitObject.prototype.draw = function (time, ctx) {
12
28
  var dt = this.time - time;
13
29
  if (dt >= -this.beatmap.FALLOUT_TIME) {
@@ -24,7 +40,10 @@ PalpableCatchHitObject.prototype.draw2 = function (obj, SCALE, ctx, BORDER_WIDTH
24
40
  if (this.hyperDash) this.drawDashCircle2({ x: obj.x + BORDER_WIDTH, y: obj.y + BORDER_HEIGHT }, SCALE, ctx);
25
41
  this.drawCircle2({ x: obj.x + BORDER_WIDTH, y: obj.y + BORDER_HEIGHT }, SCALE, ctx);
26
42
  }
27
- if (combo) this.drawCombo2({ x: obj.x + BORDER_WIDTH, y: obj.y + BORDER_HEIGHT }, SCALE, combo, ctx);
43
+ if (combo) {
44
+ if (typeof(combo) === "number") this.drawCombo2({ x: obj.x + BORDER_WIDTH, y: obj.y + BORDER_HEIGHT }, SCALE, "x" + combo, ctx);
45
+ else this.drawCombo2({ x: obj.x + BORDER_WIDTH, y: obj.y + BORDER_HEIGHT }, SCALE, combo, ctx);
46
+ }
28
47
  }
29
48
  PalpableCatchHitObject.prototype.predraw2 = function (SCREENSHEIGHT, COLMARGIN, SCALE, offset) {
30
49
  // 去除offset
@@ -83,7 +102,7 @@ PalpableCatchHitObject.prototype.drawCombo2 = function (position, SCALE, combo,
83
102
  ctx.font = "normal 16px 'Segoe UI'";
84
103
  ctx.textBaseline = "middle";
85
104
  ctx.textAlign = "start";
86
- ctx.fillText("x" + combo, position.x + this.radius * SCALE * 2, position.y);
105
+ ctx.fillText(combo, position.x + this.radius * SCALE * 2, position.y);
87
106
  ctx.restore();
88
107
  };
89
108
  PalpableCatchHitObject.prototype.drawBanana = function (position, ctx) {
@@ -29,5 +29,6 @@ BananaShower.prototype.buildNested = function() {
29
29
  time += spacing;
30
30
  i++;
31
31
  }
32
+ this.nested[this.nested.length - 1].hitSound = this.hitSound;
32
33
  return this;
33
34
  };
@@ -150,6 +150,7 @@ function Catch(osu, mods) {
150
150
  x: hitObject.position.x,
151
151
  color: hitObject.color,
152
152
  radius: this.circleRadius,
153
+ hitSound: hitObject.hitSound,
153
154
  }, this);
154
155
 
155
156
  this.palpableObjects.push(pch);
@@ -289,6 +290,8 @@ function Catch(osu, mods) {
289
290
  else {
290
291
  lastExcess = Math.clamp(distanceToHyper, 0, this.halfCatcherWidth);
291
292
  //this.whiteDashes.push({ score: distanceToHyper, time: currentObject.time });
293
+ // 标注再加20像素就变红果的白果跳
294
+ if (distanceToNext > 2 * this.halfCatcherWidth && distanceToHyper < 20) currentObject.edge = true;
292
295
  }
293
296
 
294
297
  lastDirection = thisDirection;
@@ -357,7 +360,7 @@ Catch.prototype.draw = function (time, ctx) {
357
360
  /**
358
361
  * @param {number} SCALE 缩放大小(0.2=缩放为1/5)
359
362
  * @param {number} SPEED 播放速度 DT=1.5 HT=0.75 在ctb不影响谱面,只影响时间和BPM标注
360
- * @param {{showDistance: boolean, distanceStart: number, distanceEnd: number, distanceType: number}} params 其他参数
363
+ * @param {{showLabelType: number, distanceStart: number, distanceEnd: number, distanceType: number}} params 其他参数
361
364
  */
362
365
  Catch.prototype.draw2 = function (SCALE, SPEED = 1, params = {}) {
363
366
  // 初定每一列20个屏幕大小,不够换列
@@ -405,7 +408,7 @@ Catch.prototype.draw2 = function (SCALE, SPEED = 1, params = {}) {
405
408
  if (this.TimingPoints[i].kiai) lastKiaiStart = this.TimingPoints[i].time - offset;
406
409
  }
407
410
  // 绿线在ctb无关紧要,正常模式不用加,标注距离时只加变化的
408
- if (params.showDistance) {
411
+ if (params.showLabelType === 1) {
409
412
  if (this.TimingPoints[i].parent) {
410
413
  if (Math.abs(this.TimingPoints[i].sliderVelocity - lastSV) < 0.001) {
411
414
  lastSV = this.TimingPoints[i].sliderVelocity;
@@ -679,16 +682,59 @@ Catch.prototype.draw2 = function (SCALE, SPEED = 1, params = {}) {
679
682
  combo += 1;
680
683
  }
681
684
  // 借用combo位显示距离,省事!
682
- if (params.showDistance) {
685
+ if (params.showLabelType === 1) {
683
686
  if (objs[i].type === "Fruit" || objs[i].type === "Droplet") {
684
687
  let distanceType = params.distanceType;
685
688
  if (this.fullCatchObjects[i].XDistToNext[distanceType] >= params.distanceStart && this.fullCatchObjects[i].XDistToNext[distanceType] <= params.distanceEnd)
686
689
  showCombo = this.fullCatchObjects[i].XDistToNext[distanceType];
687
690
  }
688
691
  }
692
+ // 借用combo位显示音效,省事!
693
+ else if (params.showLabelType === 2) {
694
+ if (objs[i].type === "Fruit" || objs[i].type === "Banana") {
695
+ showCombo = this.fullCatchObjects[i].getHitsoundLabel();
696
+ }
697
+ }
689
698
 
690
- else if (combo > lastCombo && combo > 0 && combo % comboSplit === 0) showCombo = combo;
699
+ else if (combo > lastCombo && combo > 0 && (combo % comboSplit === 0 || this.fullCatchObjects[i].edge)) showCombo = combo;
691
700
  this.fullCatchObjects[i].draw2(objs[i], SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT, showCombo);
701
+
702
+ // 标注edge
703
+ if (this.fullCatchObjects[i].edge && i < this.fullCatchObjects.length - 1) {
704
+ ctx2.save();
705
+ ctx2.beginPath();
706
+ let _x1 = objs[i].x + BORDER_WIDTH;
707
+ let _y1 = objs[i].y + BORDER_HEIGHT;
708
+ let _x2 = objs[i+1].x + BORDER_WIDTH;
709
+ let _y2 = objs[i+1].y + BORDER_HEIGHT;
710
+ if (_y1 > _y2) {
711
+ ctx2.moveTo(_x1, _y1);
712
+ ctx2.lineTo(_x2, _y2);
713
+ }
714
+ // 不在同一轨道上
715
+ else if (_y1 < _y2) {
716
+ let line_end_x2 = _x2 - Beatmap.WIDTH * SCALE - 2 * COLMARGIN;
717
+ let line_end_y2 = _y2 + 2 * BORDER_HEIGHT - height;
718
+ let line_middle_y2 = BORDER_HEIGHT;
719
+ let line_middle_x2 = (line_end_x2 - _x1) * (line_end_y2 - line_middle_y2) / (_y1 - line_end_y2) + line_end_x2;
720
+ if (line_middle_x2) {
721
+ ctx2.moveTo(_x1, _y1);
722
+ ctx2.lineTo(line_middle_x2, line_middle_y2);
723
+ }
724
+ let line_start_x1 = _x1 + Beatmap.WIDTH * SCALE + 2 * COLMARGIN;
725
+ let line_start_y1 = _y1 + height - 2 * BORDER_HEIGHT;
726
+ let line_middle_y1 = height - BORDER_HEIGHT;
727
+ let line_middle_x1 = (_x2 - line_start_x1) * (_y2 - line_middle_y1) / (line_start_y1 - _y2) + _x2;
728
+ if (line_middle_x1) {
729
+ ctx2.moveTo(line_middle_x1, line_middle_y1);
730
+ ctx2.lineTo(_x2, _y2);
731
+ }
732
+ }
733
+ ctx2.strokeStyle = '#fff';
734
+ ctx2.lineWidth = 3;
735
+ ctx2.stroke();
736
+ }
737
+
692
738
  lastCombo = combo;
693
739
  }
694
740
 
@@ -698,18 +744,23 @@ Catch.prototype.draw2 = function (SCALE, SPEED = 1, params = {}) {
698
744
  extraBarTimes.map((_barTime) => {
699
745
  let _objs = objs.filter((obj) => Math.abs(obj.time - _barTime * 1000) < EDGE_OFFSET);
700
746
  _objs.map((_obj) => {
701
- let distanceType = params.distanceType;
702
- let _dist = this.fullCatchObjects[_obj.index].XDistToNext[distanceType];
703
- if (_dist < params.distanceStart || _dist > params.distanceEnd) _dist = null;
747
+ let label = null;
748
+ if (params.showLabelType === 1) {
749
+ let distanceType = params.distanceType;
750
+ label = this.fullCatchObjects[_obj.index].XDistToNext[distanceType];
751
+ if (label < params.distanceStart || label > params.distanceEnd) label = null;
752
+ }
753
+ else if (params.showLabelType === 2) {
754
+ label = this.fullCatchObjects[_obj.index].getHitsoundLabel();
755
+ }
756
+
704
757
  if (_obj.y > SCREENSHEIGHT * SCALE - 5) {
705
758
  // note靠近下边缘,在上一列的上边缘再画一个
706
- if (params.showDistance) this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x - (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: 0, col: _obj.col - 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT, _dist);
707
- else this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x - (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: 0, col: _obj.col - 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT);
759
+ this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x - (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: 0, col: _obj.col - 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT, label);
708
760
  }
709
761
  else if (_obj.y < 5) {
710
762
  // note靠近上边缘,在下一列的下边缘再画一个
711
- if (params.showDistance) this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x + (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: SCREENSHEIGHT * SCALE, col: _obj.col + 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT, _dist);
712
- else this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x + (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: SCREENSHEIGHT * SCALE, col: _obj.col + 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT);
763
+ this.fullCatchObjects[_obj.index].draw2({ time: _obj.time, type: _obj.type, x: _obj.x + (Beatmap.WIDTH * SCALE + 2 * COLMARGIN), y: SCREENSHEIGHT * SCALE, col: _obj.col + 1 }, SCALE, ctx2, BORDER_WIDTH, BORDER_HEIGHT, label);
713
764
  }
714
765
  });
715
766
  });
@@ -6,12 +6,14 @@ function JuiceStream(data, beatmap)
6
6
  this.sliderType = this.points[0];
7
7
  this.points[0] = this.position;
8
8
  for (var i = 1; i < this.points.length; i++)
9
- {
9
+ {
10
10
  this.points[i] = new Point(this.points[i].split(':'));
11
11
  }
12
12
  this.repeat = data[6] | 0;
13
13
  this.pixelLength = +data[7];
14
14
 
15
+ this.hitSounds = this.hitSoundString.split('|');
16
+
15
17
  this.timingPoint = this.beatmap.timingPointAt(this.time);
16
18
  this.beatLength = this.timingPoint.beatLength;
17
19
  this.timingPointStart = this.timingPoint.time;
@@ -99,6 +101,7 @@ JuiceStream.prototype.generateTicks = function(spanIndex, spanStartTime, spanDur
99
101
  JuiceStream.prototype.buildNested = function() {
100
102
  this.nested = [];
101
103
 
104
+ let nestedIndex = 0;
102
105
  let lastEvent = null;
103
106
  for(let i = 0; i < this.events.length; i++) {
104
107
  // generate tiny droplets since the last point
@@ -151,7 +154,9 @@ JuiceStream.prototype.buildNested = function() {
151
154
  x: this.curve.pointAt(this.events[i].pathProgress).x,
152
155
  color: this.color,
153
156
  radius: this.beatmap.circleRadius,
157
+ hitSound: this.hitSounds[nestedIndex] || "0",
154
158
  }, this.beatmap));
159
+ nestedIndex++;
155
160
  break;
156
161
  }
157
162
  }
@@ -21,5 +21,25 @@ Curve.parse = function(sliderType, points, pixelLength)
21
21
  }
22
22
  }
23
23
  catch(e) {}
24
- return new LinearBezier(points, pixelLength, sliderType == 'L');
24
+ try
25
+ {
26
+ return new LinearBezier(points, pixelLength, sliderType == 'L');
27
+ }
28
+ catch(e)
29
+ {
30
+ return new SingleNoteCurve(points[0]);
31
+ }
25
32
  }
33
+
34
+
35
+
36
+ function SingleNoteCurve(point)
37
+ {
38
+ this.path = [point];
39
+ };
40
+ SingleNoteCurve.prototype = Object.create(Curve.prototype);
41
+ SingleNoteCurve.prototype.constructor = SingleNoteCurve;
42
+ SingleNoteCurve.prototype.pointAt = function(t)
43
+ {
44
+ return this.path[0];
45
+ };
@@ -12,6 +12,8 @@ function Slider(data, beatmap)
12
12
  this.repeat = data[6] | 0;
13
13
  this.pixelLength = +data[7];
14
14
 
15
+ this.hitSoundString = data[8] || "";
16
+
15
17
  var sliderTime = this.beatmap.timingPointAt(this.time).beatLength * (
16
18
  this.pixelLength / this.beatmap.SliderMultiplier
17
19
  ) / 100;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nonebot-plugin-osubot
3
- Version: 6.20.0
3
+ Version: 6.20.1
4
4
  Summary: OSUbot in NoneBot2
5
5
  License: AGPL-3.0
6
6
  Author-email: yaowan233 <572473053@qq.com>
@@ -1,5 +1,5 @@
1
1
  nonebot_plugin_osubot/__init__.py,sha256=Q-mTTnOIdKiKG6JrVm-kqpPrAhOP9lWyiKHNRqA7gpc,1478
2
- nonebot_plugin_osubot/api.py,sha256=hBG_Ugmkwwdw99XNO--1Q8bzfibxbcH3aZHBbfOkEvc,16304
2
+ nonebot_plugin_osubot/api.py,sha256=8GXbumU7_1D0gyYuGtjHgNT82rSXKZUV-WG5mpUubYE,16336
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
@@ -15,23 +15,23 @@ nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/point.js,sha256=AX
15
15
  nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/scroll.js,sha256=wR9dkpKabP1TyMssfs8i2WLUxyR_ZX7RRc7KLXUjoXo,1833
16
16
  nonebot_plugin_osubot/draw/catch_preview_templates/js/beatmap/timingpoint.js,sha256=boHMAQOT-860VOi-jQIrq4cwKgCo1kZvNDy0bzUxZLE,803
17
17
  nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/LegacyRandom.js,sha256=HDiks3FCVQBtVK5VzN7YV9Ekkk_WHYi0fPk3-XCQaj8,2155
18
- nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/PalpableCatchHitObject.js,sha256=VVwNgWBtN4FulJwyhqiSrO5HO6x3ENV9sJ7hWmj6lNo,5003
19
- nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/bananashower.js,sha256=BREF62ns4usHR78z9ME1QJHKSX98WLKDv3DI0fJmUsI,922
20
- nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/catch.js,sha256=Nu524ydHXVrKTtQ5VjSPU-EfZJ4xWhsB0SX0HzPeru8,32508
18
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/PalpableCatchHitObject.js,sha256=CnUBiIkAqFUaCrc5TXRtL_fuK20NeK1yMti1Sp4dJAE,5702
19
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/bananashower.js,sha256=sPISMifUWVXK9nXuOD7JUPeXBNPBKquiDNKpYzbSJyg,988
20
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/catch.js,sha256=MnYorETgLMjXJ8X0uPNyapD3m0KHHzHdoPnkUcBU374,34430
21
21
  nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/fruit.js,sha256=ABvFMbmXP0t5wACUhSVbu8sVJ845mWJ9sWiQJtMV5co,437
22
- nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/juicestream.js,sha256=_42Cl2DirQOOwlSRrJYwk5pKVrqs4dX6Z9M3i2jYvp8,7170
22
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/catch/juicestream.js,sha256=kWjmPtT_UgnUlg5G-_8q-1AyNTv6GLRp0bOOfiMcojc,7347
23
23
  nonebot_plugin_osubot/draw/catch_preview_templates/js/fakeaudio.js,sha256=gJrdVwNrAVjWx80z_XkzybL9ldfV97nKl7k1v7NulBg,1211
24
24
  nonebot_plugin_osubot/draw/catch_preview_templates/js/preview.js,sha256=5zKNenhzhMdP_SPuA74wbtgsqiqUNL8PIJ4OYFW2r-U,2875
25
25
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/bezier2.js,sha256=J3wvdScuhYCngTvZ3vg9ld6yoDE09ht5g4Etsp4bJkE,955
26
26
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/catmullcurve.js,sha256=aGmfIAONuOoy87W5Pyl1X8ifr3w6W9mkM_AENmZRUF0,932
27
27
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/centripetalcatmullrom.js,sha256=bndps8pDX4JMEbqLxIVb-aO7IoHHXnT8-jkWJnLlfq0,1203
28
28
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/circumstancedcircle.js,sha256=qf7wZMH3-thilEoB1Grrhr9W-U-JIClRNkhZh2RzGTY,1558
29
- nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/curve.js,sha256=mWs8BuYnMoSFYnbqz7UZtC4UfHNu86x8BEF0oVQomMo,646
29
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/curve.js,sha256=KeR8szJ0N2FWBTYMnXBcnQFWYHxqRRh0f-oaALSXvYs,1002
30
30
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/curvetype.js,sha256=y3uiQSz1BjGIhIMn4fNlplPRGqxozHOuIa8jN-G06Vs,496
31
31
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/equaldistancemulticurve.js,sha256=U8sjoBG1ETEa9vlToqc32hyQYj41KrcRVvEdxnD-uGo,2280
32
32
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/curve/linearbezier.js,sha256=sGe0u0Aqwh8R4y2BP91Dsz1MfhvtvTrrOVMV_gYsQhY,1075
33
33
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/hitcircle.js,sha256=erJCRQYojmlCnTvnkrWMJHkJxBabeWopE8PACr1aSUw,2391
34
- nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/slider.js,sha256=aw8U-JgFrl29r2_5l4gW7FlSJ4QdcIBNTWSuiAZTnp4,3831
34
+ nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/slider.js,sha256=alosJJRDgXreSrheROxwVi4Dt9S3lxq9aZfG_EQCbWU,3873
35
35
  nonebot_plugin_osubot/draw/catch_preview_templates/js/standard/spinner.js,sha256=9El2G7UfJv1xikHmfO5-VJJ7e6f-1tOPLyrMf2huh7g,1668
36
36
  nonebot_plugin_osubot/draw/catch_preview_templates/js/util.js,sha256=XveUlX-d0vrUnXaGbR8y428s6Nw2zhDR235pFko_MxM,1504
37
37
  nonebot_plugin_osubot/draw/catch_preview_templates/js/viewbox.js,sha256=RPsUyoKNAQub2n7oUGwWyFppZu0iVuy6DD5gggQZS3E,1641
@@ -403,6 +403,6 @@ nonebot_plugin_osubot/schema/sayo_beatmap.py,sha256=lS1PQZ-HvHl0VhkzlI0-pNLeJrLY
403
403
  nonebot_plugin_osubot/schema/score.py,sha256=zHU-w2e7RzMDL8vdPkX5vggcqalBo83JTvu96abcflo,3124
404
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.20.0.dist-info/WHEEL,sha256=B19PGBCYhWaz2p_UjAoRVh767nYQfk14Sn4TpIZ-nfU,87
407
- nonebot_plugin_osubot-6.20.0.dist-info/METADATA,sha256=h46-68Jkbr_-bhXPbyK_BS-f7kVOO585n8TGDpPYijc,4476
408
- nonebot_plugin_osubot-6.20.0.dist-info/RECORD,,
406
+ nonebot_plugin_osubot-6.20.1.dist-info/WHEEL,sha256=B19PGBCYhWaz2p_UjAoRVh767nYQfk14Sn4TpIZ-nfU,87
407
+ nonebot_plugin_osubot-6.20.1.dist-info/METADATA,sha256=cosRoPpyiqrB686g_vBWg7JhlUs9jQ7CGFVvGZonDzU,4476
408
+ nonebot_plugin_osubot-6.20.1.dist-info/RECORD,,