beatsaber-bot-core 0.2.0-rc.11 → 0.2.0-rc.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/cjs/cmd/deprecated/tmp.js +2 -2
  2. package/dist/cjs/cmd/deprecated/tmp.js.map +1 -1
  3. package/dist/cjs/cmd/score.js.map +1 -1
  4. package/dist/cjs/config.js.map +1 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/infra/i18n/default.js +10 -0
  7. package/dist/cjs/infra/i18n/default.js.map +1 -0
  8. package/dist/cjs/infra/i18n/index.js +29 -104
  9. package/dist/cjs/infra/i18n/index.js.map +1 -1
  10. package/dist/cjs/infra/i18n/util.js +76 -0
  11. package/dist/cjs/infra/i18n/util.js.map +1 -0
  12. package/dist/cjs/infra/i18n/zh-cn.json +1 -1
  13. package/dist/cjs/infra/index.js +8 -3
  14. package/dist/cjs/infra/index.js.map +1 -1
  15. package/dist/cjs/infra/support/render/index.js +9 -3
  16. package/dist/cjs/infra/support/render/index.js.map +1 -1
  17. package/dist/cjs/interface/bot.js.map +1 -1
  18. package/dist/cjs/interface/cmd/type.js.map +1 -1
  19. package/dist/cjs/interface/db/index.js +0 -6
  20. package/dist/cjs/interface/db/index.js.map +1 -1
  21. package/dist/cjs/interface/index.js.map +1 -1
  22. package/dist/cjs/schedules/index.js +2 -2
  23. package/dist/cjs/schedules/index.js.map +1 -1
  24. package/dist/cjs/schedules/interface.js.map +1 -1
  25. package/dist/cjs/schedules/temp.js.map +1 -1
  26. package/dist/cjs/service/api/index.js +1 -1
  27. package/dist/cjs/service/api/index.js.map +1 -1
  28. package/dist/cjs/service/index.js +15 -0
  29. package/dist/cjs/service/index.js.map +1 -1
  30. package/dist/cjs/service/preference.js.map +1 -1
  31. package/dist/cjs/service/render/index.js +12 -2
  32. package/dist/cjs/service/render/index.js.map +1 -1
  33. package/dist/cjs/ws/beatleader.js.map +1 -1
  34. package/dist/cjs/ws/beatsaver.js.map +1 -1
  35. package/dist/cjs/ws/index.js +0 -2
  36. package/dist/cjs/ws/index.js.map +1 -1
  37. package/dist/esm/cmd/deprecated/tmp.js +2 -2
  38. package/dist/esm/cmd/deprecated/tmp.js.map +1 -1
  39. package/dist/esm/cmd/score.js.map +1 -1
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/infra/i18n/default.js +10 -0
  42. package/dist/esm/infra/i18n/default.js.map +1 -0
  43. package/dist/esm/infra/i18n/index.js +29 -92
  44. package/dist/esm/infra/i18n/index.js.map +1 -1
  45. package/dist/esm/infra/i18n/util.js +51 -0
  46. package/dist/esm/infra/i18n/util.js.map +1 -0
  47. package/dist/esm/infra/index.js +5 -2
  48. package/dist/esm/infra/index.js.map +1 -1
  49. package/dist/esm/infra/support/render/index.js +9 -3
  50. package/dist/esm/infra/support/render/index.js.map +1 -1
  51. package/dist/esm/interface/db/index.js +0 -1
  52. package/dist/esm/interface/db/index.js.map +1 -1
  53. package/dist/esm/interface/index.js.map +1 -1
  54. package/dist/esm/schedules/index.js +2 -2
  55. package/dist/esm/schedules/index.js.map +1 -1
  56. package/dist/esm/schedules/temp.js.map +1 -1
  57. package/dist/esm/service/api/index.js +1 -1
  58. package/dist/esm/service/api/index.js.map +1 -1
  59. package/dist/esm/service/index.js +6 -0
  60. package/dist/esm/service/index.js.map +1 -1
  61. package/dist/esm/service/preference.js.map +1 -1
  62. package/dist/esm/service/render/index.js +12 -2
  63. package/dist/esm/service/render/index.js.map +1 -1
  64. package/dist/esm/ws/beatleader.js.map +1 -1
  65. package/dist/esm/ws/beatsaver.js.map +1 -1
  66. package/dist/esm/ws/index.js +0 -1
  67. package/dist/esm/ws/index.js.map +1 -1
  68. package/dist/types/index.d.ts +1030 -44
  69. package/package.json +7 -7
  70. package/dist/cjs/ws/scoresaber.js +0 -75
  71. package/dist/cjs/ws/scoresaber.js.map +0 -1
  72. package/dist/esm/ws/scoresaber.js +0 -53
  73. package/dist/esm/ws/scoresaber.js.map +0 -1
  74. package/dist/types/cmd/bind/bind-beatleader.d.ts +0 -34
  75. package/dist/types/cmd/bind/bind-beatsaver.d.ts +0 -34
  76. package/dist/types/cmd/bind/bind-id-beatleader.d.ts +0 -34
  77. package/dist/types/cmd/bind/bind-id-beatsaver.d.ts +0 -34
  78. package/dist/types/cmd/bind/bind-scoresaber.d.ts +0 -34
  79. package/dist/types/cmd/bind/index.d.ts +0 -41
  80. package/dist/types/cmd/bsmap/id-search.d.ts +0 -41
  81. package/dist/types/cmd/bsmap/key-search.d.ts +0 -41
  82. package/dist/types/cmd/bsmap/latest.d.ts +0 -41
  83. package/dist/types/cmd/config/index.d.ts +0 -2
  84. package/dist/types/cmd/deprecated/tmp.d.ts +0 -41
  85. package/dist/types/cmd/index.d.ts +0 -34
  86. package/dist/types/cmd/rank.d.ts +0 -41
  87. package/dist/types/cmd/score.d.ts +0 -41
  88. package/dist/types/cmd/subscribe/beatleader.d.ts +0 -34
  89. package/dist/types/cmd/subscribe/beatsaver.d.ts +0 -34
  90. package/dist/types/cmd/subscribe/id-beatleader-score.d.ts +0 -34
  91. package/dist/types/cmd/subscribe/id-beatsaver-mapper.d.ts +0 -34
  92. package/dist/types/cmd/subscribe/index.d.ts +0 -41
  93. package/dist/types/cmd/subscribe/subjoin.d.ts +0 -41
  94. package/dist/types/cmd/subscribe/subleave.d.ts +0 -41
  95. package/dist/types/cmd/subscribe/unsubscribe.d.ts +0 -41
  96. package/dist/types/components/components/RankDifficulty.d.ts +0 -10
  97. package/dist/types/components/components/base/avatar.d.ts +0 -10
  98. package/dist/types/components/components/bl-rank-score-item.d.ts +0 -21
  99. package/dist/types/components/components/bl-score-item.d.ts +0 -10
  100. package/dist/types/components/components/characteristic.d.ts +0 -9
  101. package/dist/types/components/components/flag.d.ts +0 -9
  102. package/dist/types/components/components/icons/BeatLeader.d.ts +0 -6
  103. package/dist/types/components/components/icons/RankIcon.d.ts +0 -8
  104. package/dist/types/components/components/icons/ScoreSaberIcon.d.ts +0 -6
  105. package/dist/types/components/components/progressbar.d.ts +0 -8
  106. package/dist/types/components/components/scoreItem.d.ts +0 -8
  107. package/dist/types/components/components/scoregraph.d.ts +0 -15
  108. package/dist/types/components/components/skill-graph.d.ts +0 -9
  109. package/dist/types/components/components/socre-badge.d.ts +0 -9
  110. package/dist/types/components/components/ss-rank-score-item.d.ts +0 -21
  111. package/dist/types/components/components/ss-score-item.d.ts +0 -8
  112. package/dist/types/components/index.d.ts +0 -5
  113. package/dist/types/components/pages/bl-player.d.ts +0 -11
  114. package/dist/types/components/pages/bl-score-with-rank.d.ts +0 -18
  115. package/dist/types/components/pages/bl-score.d.ts +0 -15
  116. package/dist/types/components/pages/bs-map.d.ts +0 -11
  117. package/dist/types/components/pages/index.d.ts +0 -14
  118. package/dist/types/components/pages/ss-player.d.ts +0 -13
  119. package/dist/types/components/utils/bl/beatleader.d.ts +0 -15
  120. package/dist/types/components/utils/bl/blheadset.d.ts +0 -275
  121. package/dist/types/components/utils/bl/bsorDecoder.d.ts +0 -189
  122. package/dist/types/components/utils/bl/bsorReplayAcc.d.ts +0 -38
  123. package/dist/types/components/utils/bl/getPart.d.ts +0 -9
  124. package/dist/types/components/utils/bl/stastic.d.ts +0 -3
  125. package/dist/types/components/utils/canvas.d.ts +0 -2
  126. package/dist/types/components/utils/format.d.ts +0 -8
  127. package/dist/types/components/utils/getMods.d.ts +0 -5
  128. package/dist/types/components/utils/index.d.ts +0 -6
  129. package/dist/types/components/utils/qrcode.d.ts +0 -3
  130. package/dist/types/components/utils/sleep.d.ts +0 -3
  131. package/dist/types/components/utils/tag-format.d.ts +0 -3
  132. package/dist/types/components/utils/tw-join.d.ts +0 -5
  133. package/dist/types/config.d.ts +0 -30
  134. package/dist/types/index-Dagy_c8G.d.ts +0 -74
  135. package/dist/types/infra/errors/index.d.ts +0 -69
  136. package/dist/types/infra/i18n/index.d.ts +0 -4
  137. package/dist/types/infra/i18n/parser.d.ts +0 -16
  138. package/dist/types/infra/index.d.ts +0 -6
  139. package/dist/types/infra/s3/index.d.ts +0 -20
  140. package/dist/types/infra/support/cache.d.ts +0 -6
  141. package/dist/types/infra/support/fetch/error.d.ts +0 -11
  142. package/dist/types/infra/support/fetch/index.d.ts +0 -7
  143. package/dist/types/infra/support/fetch/ofetch.d.ts +0 -24
  144. package/dist/types/infra/support/render/index.d.ts +0 -38
  145. package/dist/types/infra/support/render/puppeteer.d.ts +0 -43
  146. package/dist/types/interface/bot.d.ts +0 -22
  147. package/dist/types/interface/cmd/builder.d.ts +0 -53
  148. package/dist/types/interface/cmd/type.d.ts +0 -30
  149. package/dist/types/interface/db/index.d.ts +0 -45
  150. package/dist/types/interface/db/models.d.ts +0 -41
  151. package/dist/types/interface/index.d.ts +0 -30
  152. package/dist/types/interface/logger.d.ts +0 -8
  153. package/dist/types/schedules/index.d.ts +0 -40
  154. package/dist/types/schedules/interface.d.ts +0 -45
  155. package/dist/types/schedules/temp.d.ts +0 -35
  156. package/dist/types/service/api/base/aioclient.d.ts +0 -13
  157. package/dist/types/service/api/base/blclient.d.ts +0 -28
  158. package/dist/types/service/api/base/bsclient.d.ts +0 -29
  159. package/dist/types/service/api/base/index.d.ts +0 -19
  160. package/dist/types/service/api/base/ssclient.d.ts +0 -17
  161. package/dist/types/service/api/index.d.ts +0 -59
  162. package/dist/types/service/api/interfaces/aiosaber/index.d.ts +0 -9
  163. package/dist/types/service/api/interfaces/beatleader/bsor.d.ts +0 -113
  164. package/dist/types/service/api/interfaces/beatleader/index.d.ts +0 -5
  165. package/dist/types/service/api/interfaces/beatleader/req.d.ts +0 -22
  166. package/dist/types/service/api/interfaces/beatleader/score.d.ts +0 -164
  167. package/dist/types/service/api/interfaces/beatleader/user.d.ts +0 -173
  168. package/dist/types/service/api/interfaces/beatleader/ws.d.ts +0 -90
  169. package/dist/types/service/api/interfaces/beatsaver/alert.d.ts +0 -20
  170. package/dist/types/service/api/interfaces/beatsaver/bsmap.d.ts +0 -70
  171. package/dist/types/service/api/interfaces/beatsaver/index.d.ts +0 -13
  172. package/dist/types/service/api/interfaces/beatsaver/resp.d.ts +0 -11
  173. package/dist/types/service/api/interfaces/beatsaver/user.d.ts +0 -10
  174. package/dist/types/service/api/interfaces/beatsaver/ws.d.ts +0 -13
  175. package/dist/types/service/api/interfaces/index.d.ts +0 -14
  176. package/dist/types/service/api/interfaces/scoresaber/index.d.ts +0 -3
  177. package/dist/types/service/api/interfaces/scoresaber/item.d.ts +0 -67
  178. package/dist/types/service/api/interfaces/scoresaber/leaderboard.d.ts +0 -13
  179. package/dist/types/service/api/interfaces/scoresaber/resp.d.ts +0 -12
  180. package/dist/types/service/api/interfaces/scoresaber/user.d.ts +0 -35
  181. package/dist/types/service/api/interfaces/scoresaber/ws.d.ts +0 -80
  182. package/dist/types/service/api/sortScore.d.ts +0 -5
  183. package/dist/types/service/index.d.ts +0 -30
  184. package/dist/types/service/preference.d.ts +0 -38
  185. package/dist/types/service/render/index.d.ts +0 -43
  186. package/dist/types/service/render/interfaces.d.ts +0 -30
  187. package/dist/types/utils/index.d.ts +0 -5
  188. package/dist/types/ws/beatleader.d.ts +0 -47
  189. package/dist/types/ws/beatsaver.d.ts +0 -52
  190. package/dist/types/ws/bl-filter.d.ts +0 -2
  191. package/dist/types/ws/handler.d.ts +0 -8
  192. package/dist/types/ws/index.d.ts +0 -36
  193. package/dist/types/ws/scoresaber.d.ts +0 -47
@@ -1,45 +1,1031 @@
1
- import { ScheduleTaskCtx } from './schedules/interface.js';
2
- import { C as Command } from './index-Dagy_c8G.js';
3
- export { d as CmdAlias, a as CmdContext, b as CmdExecutor, c as CmdOption, E as Extend, O as OptionType, P as Platform, S as Services, p as parsePlatform } from './index-Dagy_c8G.js';
4
- import { Config } from './config.js';
5
- export { getScheduleTasks } from './schedules/index.js';
6
- export { botCommands } from './cmd/index.js';
7
- export { BeatleaderWSHandler } from './ws/beatleader.js';
8
- export { ScoresaberWSHandler } from './ws/scoresaber.js';
9
- export { BeatSaverWSHandler } from './ws/beatsaver.js';
10
- export { WSHandler } from './ws/handler.js';
11
- export { convertDiff, handleWSEventWithCache, sleep } from './utils/index.js';
12
- export { CFBrowserRendering, ImageRender, PuppeteerRendering, RemoteBrowserGetter, RenderConfig, getImageRender } from './infra/support/render/index.js';
13
- export { tran } from './infra/i18n/index.js';
14
- export { RelateAccount, RelateChannelInfo, Subscribe, SubscribeMember, UserPreference } from './interface/db/models.js';
15
- export { DB, SubDetailWithGroupRes, SubInfoRes, SubWithGroupRes } from './interface/db/index.js';
16
- export { Logger } from './interface/logger.js';
17
- export { BotService, Session } from './interface/bot.js';
18
- export { RenderOptions as PuppeteerOptions } from './infra/support/render/puppeteer.js';
19
- import './service/api/index.js';
20
- import './service/api/interfaces/scoresaber/item.js';
21
- import './service/api/interfaces/scoresaber/user.js';
22
- import './service/api/interfaces/beatleader/score.js';
23
- import './service/api/interfaces/beatleader/user.js';
24
- import './service/api/base/ssclient.js';
25
- import './infra/support/fetch/ofetch.js';
26
- import 'ofetch';
27
- import './service/api/interfaces/scoresaber/resp.js';
28
- import './service/api/interfaces/scoresaber/leaderboard.js';
29
- import './service/api/base/blclient.js';
30
- import './service/api/interfaces/index.js';
31
- import './service/api/interfaces/beatleader/req.js';
32
- import './service/api/base/aioclient.js';
33
- import './service/api/interfaces/aiosaber/index.js';
34
- import './service/api/base/bsclient.js';
35
- import './service/api/interfaces/beatsaver/bsmap.js';
36
- import './service/api/interfaces/beatsaver/resp.js';
37
- import './service/api/interfaces/beatsaver/user.js';
38
- import './service/preference.js';
39
- import './infra/s3/index.js';
40
- import './service/render/index.js';
41
- import './service/api/interfaces/beatsaver/ws.js';
42
- import 'puppeteer-core';
1
+ import { ScreenshotOptions, Viewport, Browser } from 'puppeteer-core';
2
+ import * as ofetch from 'ofetch';
3
+ import { $Fetch, FetchOptions, ResponseType } from 'ofetch';
4
+
5
+ /**
6
+ * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting
7
+ * and a selector for element-specific screenshots.
8
+ */
9
+ interface RenderOptions$1 extends ScreenshotOptions {
10
+ /**
11
+ * Sets the viewport of the page.
12
+ */
13
+ viewport?: Viewport;
14
+ /**
15
+ * A CSS selector for an element to screenshot. If provided, the output
16
+ * will be a screenshot of just this element.
17
+ */
18
+ selector?: string;
19
+ /**
20
+ * The maximum time in milliseconds to wait for the selector to appear.
21
+ * If the element is not found within this time, an error will be thrown.
22
+ * Defaults to Puppeteer's default (usually 30000ms).
23
+ */
24
+ timeout?: number;
25
+ }
26
+
27
+ type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {
28
+ form?: Record<string, any>;
29
+ } & FetchOptions<R, T>;
30
+ declare class Fetch {
31
+ private options?;
32
+ private ofetchInstance;
33
+ constructor(fetchInstance?: $Fetch, options?: FetchOptions);
34
+ fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>): Promise<ofetch.MappedResponseType<R, T>>;
35
+ get<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
36
+ post<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
37
+ put<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
38
+ patch<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
39
+ delete<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
40
+ head(request: string, options?: FetchOptions): Promise<any>;
41
+ extend(options: FetchOptions): Fetch;
42
+ baseUrl(url: string): Fetch;
43
+ }
44
+
45
+ interface ScoreSaberItem {
46
+ score: SSScore;
47
+ leaderboard: LeaderBoard;
48
+ mapId?: string;
49
+ }
50
+ interface SSScore {
51
+ id: number;
52
+ leaderboardPlayerInfo: LeaderboardPlayerInfo;
53
+ rank: number;
54
+ baseScore: number;
55
+ modifiedScore: number;
56
+ pp: number;
57
+ weight: number;
58
+ modifiers: string;
59
+ multiplier: number;
60
+ badCuts: number;
61
+ missedNotes: number;
62
+ maxCombo: number;
63
+ fullCombo: boolean;
64
+ hmd: number;
65
+ timeSet: string;
66
+ hasReplay: boolean;
67
+ deviceHmd: string;
68
+ deviceControllerLeft: string;
69
+ deviceControllerRight: string;
70
+ }
71
+ interface LeaderboardPlayerInfo {
72
+ id: string;
73
+ name: string;
74
+ profilePicture: string;
75
+ country: string;
76
+ permissions: number;
77
+ badges?: string;
78
+ role?: string;
79
+ }
80
+ interface LeaderBoard {
81
+ id: number;
82
+ songHash: string;
83
+ songName: string;
84
+ songSubName: string;
85
+ songAuthorName: string;
86
+ levelAuthorName: string;
87
+ difficulty: {
88
+ leaderboardId: number;
89
+ difficulty: number;
90
+ gameMode: string;
91
+ difficultyRaw: string;
92
+ };
93
+ maxScore: number;
94
+ createdDate: string;
95
+ rankedDate: string;
96
+ qualifiedDate: string;
97
+ lovedDate: any;
98
+ ranked: boolean;
99
+ qualified: boolean;
100
+ loved: boolean;
101
+ maxPP: number;
102
+ stars: number;
103
+ plays: number;
104
+ dailyPlays: number;
105
+ positiveModifiers: boolean;
106
+ playerScore: any;
107
+ coverImage: string;
108
+ difficulties: any;
109
+ }
110
+
111
+ interface ScoreSaberUserResponse {
112
+ playerScores: ScoreSaberItem[];
113
+ metadata: {
114
+ total: number;
115
+ page: number;
116
+ itemsPerPage: number;
117
+ };
118
+ }
119
+
120
+ interface ScoreSaberUser {
121
+ badges: Badge[];
122
+ banned: boolean;
123
+ bio: string;
124
+ country: string;
125
+ countryRank: number;
126
+ firstSeen: string;
127
+ histories: string;
128
+ id: string;
129
+ inactive: boolean;
130
+ name: string;
131
+ permissions: number;
132
+ pp: number;
133
+ profilePicture: string;
134
+ rank: number;
135
+ role: null;
136
+ scoreStats: ScoreStats;
137
+ [property: string]: any;
138
+ }
139
+ interface Badge {
140
+ description?: string;
141
+ image?: string;
142
+ [property: string]: any;
143
+ }
144
+ interface ScoreStats {
145
+ averageRankedAccuracy: number;
146
+ rankedPlayCount: number;
147
+ replaysWatched: number;
148
+ totalPlayCount: number;
149
+ totalRankedScore: number;
150
+ totalScore: number;
151
+ [property: string]: any;
152
+ }
153
+
154
+ interface Score {
155
+ accLeft: number;
156
+ accPP: number;
157
+ accRight: number;
158
+ accuracy: number;
159
+ badCuts: number;
160
+ baseScore: number;
161
+ bombCuts: number;
162
+ bonusPp: number;
163
+ contextExtensions: null;
164
+ controller: number;
165
+ country: null | string;
166
+ fcAccuracy: number;
167
+ fcPp: number;
168
+ fullCombo: boolean;
169
+ hmd: number;
170
+ id: number;
171
+ leaderboard: Leaderboard;
172
+ leaderboardId: string;
173
+ maxCombo: number;
174
+ maxStreak: number | null;
175
+ metadata: null;
176
+ missedNotes: number;
177
+ modifiedScore: number;
178
+ modifiers: string;
179
+ myScore: null;
180
+ offsets: Offsets;
181
+ passPP: number;
182
+ pauses: number;
183
+ platform: string;
184
+ playCount: number;
185
+ player: any;
186
+ playerId: string;
187
+ pp: number;
188
+ priority: number;
189
+ rank: number;
190
+ rankVoting: null;
191
+ replay: string;
192
+ replaysWatched: number;
193
+ scoreImprovement: ScoreImprovement;
194
+ techPP: number;
195
+ timepost: number;
196
+ timeset: string;
197
+ validContexts: number;
198
+ wallsHit: number;
199
+ weight: number;
200
+ [property: string]: any;
201
+ }
202
+ interface Leaderboard {
203
+ difficulty: Difficulty;
204
+ id: string;
205
+ song: Song;
206
+ [property: string]: any;
207
+ }
208
+ interface Difficulty {
209
+ accRating: number | null;
210
+ bombs: number;
211
+ difficultyName: string;
212
+ duration: number;
213
+ id: number;
214
+ maxScore: number;
215
+ mode: number;
216
+ modeName: string;
217
+ modifiersRating: null | ModifiersRating;
218
+ modifierValues: ModifierValues;
219
+ njs: number;
220
+ nominatedTime: number;
221
+ notes: number;
222
+ nps: number;
223
+ passRating: number | null;
224
+ predictedAcc: number;
225
+ qualifiedTime: number;
226
+ rankedTime: number;
227
+ requirements: number;
228
+ stars: number | null;
229
+ status: number;
230
+ techRating: number | null;
231
+ type: number;
232
+ value: number;
233
+ walls: number;
234
+ [property: string]: any;
235
+ }
236
+ interface ModifierValues {
237
+ da: number;
238
+ fs: number;
239
+ gn: number;
240
+ modifierId: number;
241
+ na: number;
242
+ nb: number;
243
+ nf: number;
244
+ no: number;
245
+ op: number;
246
+ pm: number;
247
+ sa: number;
248
+ sc: number;
249
+ sf: number;
250
+ ss: number;
251
+ [property: string]: any;
252
+ }
253
+ interface ModifiersRating {
254
+ fsAccRating: number;
255
+ fsPassRating: number;
256
+ fsPredictedAcc: number;
257
+ fsStars: number;
258
+ fsTechRating: number;
259
+ id: number;
260
+ sfAccRating: number;
261
+ sfPassRating: number;
262
+ sfPredictedAcc: number;
263
+ sfStars: number;
264
+ sfTechRating: number;
265
+ ssAccRating: number;
266
+ ssPassRating: number;
267
+ ssPredictedAcc: number;
268
+ ssStars: number;
269
+ ssTechRating: number;
270
+ [property: string]: any;
271
+ }
272
+ interface Song {
273
+ author: string;
274
+ bpm: number;
275
+ collaboratorIds: null;
276
+ coverImage: string;
277
+ duration: number;
278
+ fullCoverImage: string;
279
+ hash: string;
280
+ id: string;
281
+ mapper: string;
282
+ mapperId: number;
283
+ name: string;
284
+ subName: string;
285
+ [property: string]: any;
286
+ }
287
+ interface Offsets {
288
+ frames: number;
289
+ heights: number;
290
+ id: number;
291
+ notes: number;
292
+ pauses: number;
293
+ walls: number;
294
+ [property: string]: any;
295
+ }
296
+ interface ScoreImprovement {
297
+ accLeft: number;
298
+ accRight: number;
299
+ accuracy: number;
300
+ averageRankedAccuracy: number;
301
+ badCuts: number;
302
+ bombCuts: number;
303
+ bonusPp: number;
304
+ id: number;
305
+ missedNotes: number;
306
+ pauses: number;
307
+ pp: number;
308
+ rank: number;
309
+ score: number;
310
+ timeset: string;
311
+ totalPp: number;
312
+ totalRank: number;
313
+ wallsHit: number;
314
+ [property: string]: any;
315
+ }
316
+
317
+ interface BeatLeaderPlayerScoreRequest {
318
+ diff: string;
319
+ mode: string;
320
+ hash: string;
321
+ playerID: string;
322
+ leaderboardContext: string;
323
+ }
324
+ interface Metadata$1 {
325
+ itemsPerPage: number;
326
+ page: number;
327
+ total: number;
328
+ [property: string]: any;
329
+ }
330
+ interface BeadLeaderScoresResponse {
331
+ data: Score[];
332
+ metadata: Metadata$1;
333
+ [property: string]: any;
334
+ }
335
+
336
+ interface BeatLeaderUser {
337
+ accPp: number;
338
+ avatar: string;
339
+ badges: BLBadge[];
340
+ banDescription: null;
341
+ banned: boolean;
342
+ bot: boolean;
343
+ changes: BLChange[];
344
+ clanOrder: string;
345
+ clans: BLClan[];
346
+ contextExtensions: null;
347
+ country: string;
348
+ countryRank: number;
349
+ eventsParticipating: null;
350
+ externalProfileUrl: string;
351
+ history: null;
352
+ id: string;
353
+ inactive: boolean;
354
+ lastWeekCountryRank: number;
355
+ lastWeekPp: number;
356
+ lastWeekRank: number;
357
+ mapperId: number;
358
+ name: string;
359
+ passPp: number;
360
+ patreonFeatures: null;
361
+ pinnedScores: null;
362
+ platform: string;
363
+ pp: number;
364
+ profileSettings: BLProfileSettings;
365
+ rank: number;
366
+ role: string;
367
+ scoreStats: BLScoreStats;
368
+ socials: BLSocial[];
369
+ techPp: number;
370
+ topHMD: number;
371
+ sspPlays: number;
372
+ ssPlays: number;
373
+ spPlays: number;
374
+ sPlays: number;
375
+ aPlays: number;
376
+ [property: string]: any;
377
+ }
378
+ interface BLBadge {
379
+ description: string;
380
+ hidden: boolean;
381
+ id: number;
382
+ image: string;
383
+ link: string;
384
+ timeset: number;
385
+ [property: string]: any;
386
+ }
387
+ interface BLChange {
388
+ changer: null | string;
389
+ id: number;
390
+ newCountry: null | string;
391
+ newName: null | string;
392
+ oldCountry: string;
393
+ oldName: null | string;
394
+ playerId: string;
395
+ timestamp: number;
396
+ [property: string]: any;
397
+ }
398
+ interface BLClan {
399
+ color: string;
400
+ id: number;
401
+ name: null;
402
+ tag: string;
403
+ [property: string]: any;
404
+ }
405
+ interface BLProfileSettings {
406
+ bio: null;
407
+ effectName: string;
408
+ hue: number;
409
+ id: number;
410
+ leftSaberColor: string;
411
+ message: null;
412
+ profileAppearance: string;
413
+ profileCover: string;
414
+ rightSaberColor: string;
415
+ saturation: number;
416
+ showAllRatings: boolean;
417
+ showBots: boolean;
418
+ starredFriends: string;
419
+ [property: string]: any;
420
+ }
421
+ interface BLScoreStats {
422
+ anonimusReplayWatched: number;
423
+ aPlays: number;
424
+ authorizedReplayWatched: number;
425
+ averageAccuracy: number;
426
+ averageLeftTiming: number;
427
+ averageRank: number;
428
+ averageRankedAccuracy: number;
429
+ averageRankedRank: number;
430
+ averageRightTiming: number;
431
+ averageUnrankedAccuracy: number;
432
+ averageUnrankedRank: number;
433
+ averageWeightedRankedAccuracy: number;
434
+ averageWeightedRankedRank: number;
435
+ countryTopPercentile: number;
436
+ dailyImprovements: number;
437
+ id: number;
438
+ lastRankedScoreTime: number;
439
+ lastScoreTime: number;
440
+ lastUnrankedScoreTime: number;
441
+ maxStreak: number;
442
+ medianAccuracy: number;
443
+ medianRankedAccuracy: number;
444
+ peakRank: number;
445
+ rankedImprovementsCount: number;
446
+ rankedMaxStreak: number;
447
+ rankedPlayCount: number;
448
+ rankedTop1Count: number;
449
+ rankedTop1Score: number;
450
+ sPlays: number;
451
+ spPlays: number;
452
+ ssPlays: number;
453
+ sspPlays: number;
454
+ top1Count: number;
455
+ top1Score: number;
456
+ topAccPP: number;
457
+ topAccuracy: number;
458
+ topBonusPP: number;
459
+ topHMD: number;
460
+ topPassPP: number;
461
+ topPercentile: number;
462
+ topPlatform: string;
463
+ topPp: number;
464
+ topRankedAccuracy: number;
465
+ topTechPP: number;
466
+ topUnrankedAccuracy: number;
467
+ totalImprovementsCount: number;
468
+ totalPlayCount: number;
469
+ totalRankedScore: number;
470
+ totalScore: number;
471
+ totalUnrankedScore: number;
472
+ unrankedImprovementsCount: number;
473
+ unrankedMaxStreak: number;
474
+ unrankedPlayCount: number;
475
+ unrankedTop1Count: number;
476
+ unrankedTop1Score: number;
477
+ watchedReplays: number;
478
+ [property: string]: any;
479
+ }
480
+ interface BLSocial {
481
+ id: number;
482
+ link: string;
483
+ playerId: string;
484
+ service: string;
485
+ user: string;
486
+ userId: string;
487
+ [property: string]: any;
488
+ }
489
+
490
+ interface ScoresaberLeaderboardResp {
491
+ scores: SSScore[];
492
+ metadata: Metadata;
493
+ }
494
+ interface Metadata {
495
+ total: number;
496
+ page: number;
497
+ itemsPerPage: number;
498
+ }
499
+
500
+ declare class ScoreSaberClient {
501
+ f: Fetch;
502
+ constructor(logger: Logger);
503
+ getScoreUserById(userId: string): Promise<ScoreSaberUser>;
504
+ getScoreItemsById(userId: string, page: number, pageSize?: number): Promise<ScoreSaberUserResponse>;
505
+ getScoreItemsByMapId(mapId: string, diff: string, mode: string, page: number, pageSize?: number): Promise<ScoresaberLeaderboardResp>;
506
+ }
507
+
508
+ interface OAuthTokenResponse {
509
+ access_token: string;
510
+ token_type: string;
511
+ expires_in: number;
512
+ refresh_token: string;
513
+ scope?: string;
514
+ }
515
+ interface OAuthTokenInfoResponse {
516
+ scope?: string[];
517
+ id: string;
518
+ name: string;
519
+ }
520
+
521
+ type ClientOptions$1 = {
522
+ client_id?: string;
523
+ client_secret?: string;
524
+ logger?: Logger;
525
+ };
526
+ declare class BeatLeaderClient {
527
+ f: Fetch;
528
+ opt?: ClientOptions$1;
529
+ constructor(opt?: ClientOptions$1);
530
+ getPlayerScore(req: BeatLeaderPlayerScoreRequest): Promise<Leaderboard>;
531
+ getTokenInfo(accessToken: string): Promise<OAuthTokenInfoResponse>;
532
+ refreshOAuthToken(refreshToken: string): Promise<OAuthTokenResponse>;
533
+ getPlayerInfo(accountId: string): Promise<BeatLeaderUser>;
534
+ getPlayerScores(accountId: string): Promise<BeadLeaderScoresResponse>;
535
+ getPlayerPinnedScores(accountId: string): Promise<Score[]>;
536
+ getBeatScore(scoreId: string): Promise<Score>;
537
+ getLeaderboard(leaderboardId: string, params?: Record<string, any>): Promise<any>;
538
+ }
539
+
540
+ interface AioOauthTokenResponse {
541
+ access_token: string;
542
+ token_type: string;
543
+ expires_in: number;
544
+ refresh_token: string;
545
+ scope?: string;
546
+ }
547
+
548
+ declare class AIOSaberClient {
549
+ f: Fetch;
550
+ constructor(logger: Logger);
551
+ getBSOAuthToken(key: string): Promise<AioOauthTokenResponse>;
552
+ getBLOAuthToken(key: string): Promise<AioOauthTokenResponse>;
553
+ }
554
+
555
+ interface BSMap {
556
+ id: string;
557
+ name: string;
558
+ description: string;
559
+ declaredAi: string;
560
+ uploader: {
561
+ id: number;
562
+ name: string;
563
+ avatar: string;
564
+ type: string;
565
+ [key: string]: any;
566
+ };
567
+ metadata: {
568
+ bpm: number;
569
+ duration: number;
570
+ songName: string;
571
+ songSubName: string;
572
+ songAuthorName: string;
573
+ levelAuthorName: string;
574
+ };
575
+ stats: {
576
+ plays: number;
577
+ downloads: number;
578
+ upvotes: number;
579
+ downvotes: number;
580
+ score: number;
581
+ reviews?: number;
582
+ [key: string]: any;
583
+ };
584
+ automapper: boolean;
585
+ versions: {
586
+ hash: string;
587
+ state: string;
588
+ createdAt: string;
589
+ downloadURL: string;
590
+ coverURL: string;
591
+ previewURL: string;
592
+ sageScore?: number;
593
+ diffs: {
594
+ notes: number;
595
+ bombs: number;
596
+ offset: number;
597
+ obstacles: number;
598
+ nps: number;
599
+ length: number;
600
+ characteristic: string;
601
+ difficulty: string;
602
+ events: number;
603
+ chroma: boolean;
604
+ me: boolean;
605
+ ne: boolean;
606
+ cinema: boolean;
607
+ seconds: number;
608
+ maxScore: number;
609
+ paritySummary: any;
610
+ star?: number;
611
+ blStar?: number;
612
+ [key: string]: any;
613
+ }[];
614
+ }[];
615
+ lastPublishedAt: string;
616
+ updatedAt: string;
617
+ createdAt: string;
618
+ tags: string[];
619
+ ranked?: boolean;
620
+ blRanked?: boolean;
621
+ [key: string]: any;
622
+ }
623
+
624
+ interface DeleteEvent {
625
+ type: 'MAP_DELETE';
626
+ msg: string;
627
+ }
628
+ interface UpdateEvent {
629
+ type: 'MAP_UPDATE';
630
+ msg: BSMap;
631
+ }
632
+ type BeatSaverWSEvent = DeleteEvent | UpdateEvent;
633
+
634
+ interface HashResponse {
635
+ [hash: string]: BSMap;
636
+ }
637
+ type HashReqResponse = BSMap | HashResponse;
638
+
639
+ interface BSUserResponse {
640
+ id: number;
641
+ name: string;
642
+ admin: boolean;
643
+ avatar: boolean;
644
+ curator: boolean;
645
+ description: string;
646
+ }
647
+
648
+ type ClientOptions = {
649
+ logger?: Logger;
650
+ host?: string;
651
+ client_id?: string;
652
+ client_secret?: string;
653
+ f?: Fetch;
654
+ };
655
+ declare class BeatSaverClient {
656
+ f: Fetch;
657
+ opt?: ClientOptions;
658
+ constructor(opt?: ClientOptions);
659
+ getBSMapperById(userId: string): Promise<BSUserResponse>;
660
+ getLatestMaps(pageSize?: number): Promise<BSMap[]>;
661
+ searchMapByKeyword(key: string, params?: Record<string, boolean | number | string>): Promise<BSMap[]>;
662
+ searchMapById(id: string): Promise<BSMap>;
663
+ getTokenInfo(ak: string): Promise<OAuthTokenInfoResponse>;
664
+ getMapsByHashes(hashes: string[]): Promise<HashReqResponse>;
665
+ refreshOAuthToken(rk: string): Promise<OAuthTokenResponse>;
666
+ }
667
+
668
+ type MapDiffOption = {
669
+ difficulty?: string;
670
+ mode?: string;
671
+ };
672
+ declare class APIService {
673
+ BeatLeader: BeatLeaderClient;
674
+ ScoreSaber: ScoreSaberClient;
675
+ BeatSaver: BeatSaverClient;
676
+ AIOSaber: AIOSaberClient;
677
+ constructor(cfg: Config, logger: Logger);
678
+ getBLPlayerScoresWithUserInfo(accountId: string): Promise<{
679
+ scores: Score[];
680
+ userInfo: BeatLeaderUser;
681
+ }>;
682
+ getSSPlayerScoresWithUserInfo(accountId: string): Promise<void>;
683
+ getScoreByPlayerIdAndMapId(playerId: string, mapId: string, option?: MapDiffOption): Promise<Leaderboard>;
684
+ getAroundScoreAndRegionScoreByRankAndPage(leaderboardId: string, rank: number, regionCode: string): Promise<{
685
+ difficulties: any;
686
+ aroundScores: any;
687
+ regionTopScores: any;
688
+ }>;
689
+ getScoreAndBSMapByScoreId(scoreId: string): Promise<{
690
+ score: Score;
691
+ bsMap: BSMap;
692
+ statistic: any;
693
+ bsor: unknown;
694
+ }>;
695
+ getSSPlayerRecentScoreWithUserInfo(uid: string): Promise<{
696
+ scores: ScoreSaberItem[];
697
+ userInfo: ScoreSaberUser;
698
+ }>;
699
+ }
700
+
701
+ declare class UserPreferenceStore {
702
+ private db;
703
+ private uid;
704
+ v: any;
705
+ constructor(db: DB<any>, uid: number);
706
+ getUserPreference(uid: number): Promise<UserPreferenceStore>;
707
+ set<T extends string | number | boolean>(key: string, value: T): Promise<boolean>;
708
+ get<T extends string | number | boolean>(key: string): Promise<T | undefined>;
709
+ configEntries(): Promise<Record<string, any>>;
710
+ }
711
+
712
+ type RenderOption = RenderOptions & RenderOptions$1;
713
+ type RenderOptions = {
714
+ userPreference?: UserPreferenceStore;
715
+ onRenderStart?: () => void;
716
+ onRenderError?: (e: any) => void;
717
+ };
718
+ interface IRenderService {
719
+ renderRank(accountId: string, platform: Platform, renderOpts?: RenderOption): Promise<Buffer>;
720
+ renderScore(scoreId: string, renderOpts?: RenderOption): Promise<Buffer>;
721
+ renderMapById(mapId: string, renderOpts?: RenderOption): Promise<Buffer>;
722
+ renderMap(bsMap: BSMap, renderOpts?: RenderOption): Promise<Buffer>;
723
+ renderUrl(url: string, renderOpts?: RenderOption): Promise<Buffer>;
724
+ }
725
+
726
+ declare class RenderService implements IRenderService {
727
+ private api;
728
+ private imageRender;
729
+ constructor(api: APIService, imageRender: ImageRender);
730
+ static create(imgRenderConfig: CreateImageRenderOption, api: APIService): RenderService;
731
+ renderRank(accountId: string, platform: Platform, renderOpts?: RenderOption): Promise<Buffer>;
732
+ renderScore(scoreId: string, renderOpts?: RenderOption): Promise<Buffer>;
733
+ renderMapById(mapId: string, renderOption: RenderOption): Promise<Buffer>;
734
+ renderMap(bsMap: BSMap, renderOption?: RenderOption): Promise<Buffer>;
735
+ renderUrl(url: string, renderOption?: RenderOption): Promise<Buffer>;
736
+ }
737
+
738
+ interface RelateAccount {
739
+ id: number;
740
+ uid: number;
741
+ type: string;
742
+ platform: string;
743
+ platformUname: string;
744
+ platformUid: string;
745
+ platformScope: string;
746
+ accessToken: string;
747
+ refreshToken: string;
748
+ otherPlatformInfo: any;
749
+ lastModifiedAt: Date;
750
+ lastRefreshAt: Date;
751
+ status: string;
752
+ }
753
+ interface SubscribeMember {
754
+ subscribeId: number;
755
+ memberUid: number;
756
+ subscribeData: any;
757
+ joinedAt: Date;
758
+ }
759
+ interface Subscribe {
760
+ id: number;
761
+ gid: number;
762
+ type: string;
763
+ time: Date;
764
+ enable: boolean;
765
+ data: any;
766
+ }
767
+ type RelateChannelInfo<CHANNEL> = {
768
+ id: number;
769
+ name: string;
770
+ type: 'user' | 'group' | string;
771
+ } & CHANNEL;
772
+ type UserPreference<T = any> = {
773
+ uid: number;
774
+ gid: number;
775
+ data: T;
776
+ };
777
+
778
+ interface SubInfoRes {
779
+ subscribe: Subscribe;
780
+ memberCount: number;
781
+ me: any;
782
+ }
783
+ interface SubInfoRes {
784
+ subscribe: Subscribe;
785
+ memberCount: number;
786
+ me: any;
787
+ }
788
+ interface SubDetailWithGroupRes<T> {
789
+ account: RelateAccount;
790
+ accountChannel: RelateChannelInfo<T>;
791
+ subscribeMember: SubscribeMember;
792
+ subscribe: Subscribe;
793
+ groupChannel: RelateChannelInfo<T>;
794
+ }
795
+ interface SubWithGroupRes<T> {
796
+ subscribe: Subscribe;
797
+ groupChannel: RelateChannelInfo<T>;
798
+ }
799
+ interface DB<T> {
800
+ storeUserPreference<V = any>(uid: number, value: V): Promise<boolean>;
801
+ getUserPreference<V = any>(uid: number): Promise<V>;
802
+ getUserAccountsByUid(id: number): Promise<Record<string, RelateAccount>>;
803
+ batchGetOrCreateUBySessionInfo(s: T[]): Promise<RelateChannelInfo<T>[]>;
804
+ getUAndGBySessionInfo(s: T): Promise<[RelateChannelInfo<T>, RelateChannelInfo<T>]>;
805
+ addUserBindingInfo(account: Partial<RelateAccount>): Promise<void>;
806
+ upsertSubscription(data: Partial<Subscribe>): Promise<void>;
807
+ getSubscriptionInfoByUGID(gid: number, uid: number): Promise<SubInfoRes[]>;
808
+ getSubscriptionsByGID(gid: number): Promise<Record<string, Subscribe>>;
809
+ getIDSubscriptionByGID(gid: number): Promise<Subscribe[]>;
810
+ getIDSubscriptionByType(type: string): Promise<SubWithGroupRes<T>[]>;
811
+ removeIDSubscriptionByID(id: number): Promise<void>;
812
+ getIDSubscriptionByGIDAndType(gid: number, type: string): Promise<Subscribe[]>;
813
+ getAllSubscriptionByUIDAndPlatform(id: string | number, type: string): Promise<SubDetailWithGroupRes<T>[]>;
814
+ getSubscriptionsByType(type: string): Promise<SubDetailWithGroupRes<T>[]>;
815
+ addSubscribeMember(data: Partial<SubscribeMember>): Promise<void>;
816
+ removeFromSubGroupBySubAndUid(subId: number, id: number): Promise<void>;
817
+ }
818
+
819
+ interface Logger {
820
+ info(msg: string, ...args: any[]): void;
821
+ warn(msg: string, ...args: any[]): void;
822
+ error(msg: string, ...args: any[]): void;
823
+ debug(msg: string, ...args: any[]): void;
824
+ }
825
+
826
+ type ChannelInfo = any;
827
+ interface BotService<T extends ChannelInfo, S extends Session<T>> {
828
+ getSessionByChannelInfo(channelInfo: T): S;
829
+ }
830
+ interface Session<T extends any = any> {
831
+ u: RelateChannelInfo<T>;
832
+ g: RelateChannelInfo<T>;
833
+ mentions: (RelateChannelInfo<T> | undefined)[];
834
+ getSessionInfo(): T;
835
+ sendImgBuffer(content: any, mimeType?: string): Promise<void>;
836
+ sendImgByUrl(url: string): Promise<void>;
837
+ sendAudioByUrl(url: string): Promise<void>;
838
+ send(msg: string): Promise<void>;
839
+ sendQueued(msg: string): Promise<void>;
840
+ sendQuote(msg: string): Promise<void>;
841
+ text(path: string, args?: any): string;
842
+ prompt(timeout?: number): Promise<string | undefined>;
843
+ }
844
+
845
+ interface CmdContext<CHANNEL, OPT> {
846
+ logger: Logger;
847
+ config: Config;
848
+ session: Session;
849
+ options: OPT;
850
+ services: Services<CHANNEL>;
851
+ input: string;
852
+ }
853
+ type CmdExecutor<CHANNEL, OPT extends object = object> = (c: CmdContext<CHANNEL, OPT>) => Promise<void>;
854
+ interface CmdOption {
855
+ type: 'boolean' | 'number' | 'string';
856
+ name: string;
857
+ short?: string;
858
+ description?: string;
859
+ required?: boolean;
860
+ }
861
+ type CmdAlias = {
862
+ alias: string;
863
+ option?: object;
864
+ };
865
+ interface Command<CHANNEL> {
866
+ name: string;
867
+ description: string;
868
+ aliases: CmdAlias[];
869
+ options: CmdOption[];
870
+ callback: CmdExecutor<CHANNEL>;
871
+ children: Command<CHANNEL>[];
872
+ }
873
+ type Extend<BASE extends {}, N extends string, D> = {
874
+ [P in N | keyof BASE]?: (P extends keyof BASE ? BASE[P] : unknown) & (P extends N ? D : unknown);
875
+ };
876
+ type ExtractType<T extends string> = T extends 'string' ? string : T extends 'boolean' ? boolean : T extends 'number' ? number : any;
877
+ type Nullable<T> = T | null;
878
+ type ExtractNullSafeType<T extends string> = T extends `${infer Type}?` ? Nullable<ExtractType<Type>> : ExtractType<T>;
879
+ type OptionType<T extends string> = T extends `${infer L}:${infer R}` ? ExtractNullSafeType<R> : unknown;
880
+
881
+ declare enum Platform {
882
+ SS = "scoresaber",
883
+ BS = "beatsaver",
884
+ BL = "beatleader"
885
+ }
886
+ declare const parsePlatform: (p: string) => Platform.SS | Platform.BL;
887
+ type Services<T> = {
888
+ render: RenderService;
889
+ api: APIService;
890
+ db: DB<T>;
891
+ };
892
+
893
+ interface ImageRender {
894
+ html2img: (html: string, opt: RenderOptions$1) => Promise<Buffer>;
895
+ url2img: (url: string, opt: RenderOptions$1) => Promise<Buffer>;
896
+ }
897
+ type RenderConfig = {
898
+ mode: 'cf' | 'puppeteer' | 'custom';
899
+ puppeteerURL?: string;
900
+ defaultWaitTimeout?: number;
901
+ waitTimeout?: number;
902
+ cfAccountId?: string;
903
+ cfAPIKey?: string;
904
+ };
905
+ declare class CFBrowserRendering implements ImageRender {
906
+ f: Fetch;
907
+ constructor(accountId: string, cfAPIKey: string);
908
+ private post;
909
+ html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
910
+ url2img(url: string, opt: RenderOptions$1): Promise<Buffer>;
911
+ }
912
+ declare class PuppeteerRendering implements ImageRender {
913
+ private browserGetter;
914
+ constructor(browserGetter: () => Promise<Browser>);
915
+ html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
916
+ url2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
917
+ }
918
+ declare const RemoteBrowserGetter: (addr: string) => () => Promise<Browser>;
919
+ declare const getImageRender: (cfg: RenderConfig & {
920
+ render?: ImageRender;
921
+ browserGetter?: () => Promise<Browser>;
922
+ }) => ImageRender;
923
+ type CreateImageRenderOption = Parameters<typeof getImageRender>[0];
924
+
925
+ declare class I18nService {
926
+ obj: any;
927
+ constructor(config?: any);
928
+ mergeConfig(lang: string, obj: any): void;
929
+ loadLang(lang: string): void;
930
+ tran(path: string, params?: {}, lang?: string): string;
931
+ }
932
+
933
+ interface S3Config {
934
+ s3AccessKey: string;
935
+ s3SecretKey: string;
936
+ endpoint: string;
937
+ region: string | undefined;
938
+ bucketName: string;
939
+ keyPrefix: string;
940
+ baseURL: string;
941
+ }
942
+ declare class S3Service {
943
+ private s3Client;
944
+ private readonly bucket;
945
+ private readonly keyPrefix;
946
+ private readonly baseURL;
947
+ constructor(config: S3Config);
948
+ uploadImgWithUrl(url: string, mimeType?: string): Promise<string>;
949
+ uploadImg(buffer: Buffer, mimeType?: string): Promise<string>;
950
+ }
951
+
952
+ interface Config {
953
+ s3: {
954
+ enabled: boolean;
955
+ } & S3Config;
956
+ render: RenderConfig;
957
+ minRawMatchMapIdLength: number;
958
+ beatSaverHost: string;
959
+ beatSaverWSURL: string;
960
+ bsOauthClientId: string;
961
+ bsOauthClientSecret: string;
962
+ blOauthClientId: string;
963
+ blOauthClientSecret: string;
964
+ bsNotifyMonitorCron: ScheduleTaskConfig;
965
+ tokenRefreshCron: ScheduleTaskConfig;
966
+ tempCron: ScheduleTaskConfig;
967
+ }
968
+ interface ScheduleTaskConfig {
969
+ cron: string;
970
+ enabled: boolean;
971
+ }
972
+
973
+ type ScheduleTaskCtx<T> = {
974
+ config: Config;
975
+ logger: Logger;
976
+ services: Services<T>;
977
+ botService: BotService<T, Session<T>>;
978
+ };
979
+
980
+ declare const getScheduleTasks: (config: Config) => {
981
+ name: string;
982
+ handler: <T>(c: ScheduleTaskCtx<T>) => Promise<void>;
983
+ cron: string;
984
+ enabled: boolean;
985
+ }[];
986
+
987
+ declare const botCommands: <CHANNEL>() => Command<CHANNEL>[];
988
+
989
+ interface WSHandler {
990
+ wsUrl: string;
991
+ onOpen?: () => void;
992
+ onClose?: () => void;
993
+ onEvent?: (event: any) => void;
994
+ }
995
+
996
+ declare class BeatleaderWSHandler<T> implements WSHandler {
997
+ private readonly logger;
998
+ private render;
999
+ private botService;
1000
+ wsUrl: string;
1001
+ private db;
1002
+ config: Config;
1003
+ constructor(db: DB<T>, render: RenderService, logger: Logger, config: Config, botService: BotService<T, Session<T>>);
1004
+ onOpen(): void;
1005
+ onClose(): void;
1006
+ onEvent(event: any): Promise<void>;
1007
+ }
1008
+
1009
+ declare class BeatSaverWSHandler<T> implements WSHandler {
1010
+ private readonly logger;
1011
+ private render;
1012
+ private botService;
1013
+ wsUrl: string;
1014
+ private db;
1015
+ config: Config;
1016
+ constructor(db: DB<T>, render: RenderService, logger: Logger, config: Config, botService: BotService<T, Session<T>>);
1017
+ onOpen(): void;
1018
+ onClose(): void;
1019
+ eventParser(event: any): BeatSaverWSEvent;
1020
+ eventFilter: (data: BeatSaverWSEvent) => boolean;
1021
+ eventIdSelector: (data: BeatSaverWSEvent) => string;
1022
+ BSWSHandler(data: BeatSaverWSEvent): Promise<void>;
1023
+ onEvent: (event: any) => Promise<void>;
1024
+ }
1025
+
1026
+ declare const handleWSEventWithCache: (fnThat: any, fn: any, ttl: any, eventParser: any, eventFilter: any, eventIdSelector: any) => (event: any) => Promise<void>;
1027
+ declare const sleep: (millsec?: number) => Promise<void>;
1028
+ declare const convertDiff: (diff: string | null) => any;
43
1029
 
44
1030
  declare const getBot: <T>(config: Config) => {
45
1031
  commands: Command<T>[];
@@ -47,8 +1033,8 @@ declare const getBot: <T>(config: Config) => {
47
1033
  name: string;
48
1034
  handler: <T_1>(c: ScheduleTaskCtx<T_1>) => Promise<void>;
49
1035
  cron: string;
50
- enable: boolean;
1036
+ enabled: boolean;
51
1037
  }[];
52
1038
  };
53
1039
 
54
- export { Command, Config, getBot };
1040
+ export { APIService, BeatSaverWSHandler, BeatleaderWSHandler, type BotService, CFBrowserRendering, type CmdAlias, type CmdContext, type CmdExecutor, type CmdOption, type Command, type Config, type CreateImageRenderOption, type DB, type Extend, I18nService, type ImageRender, type Logger, type OptionType, Platform, type RenderOptions$1 as PuppeteerOptions, PuppeteerRendering, type RelateAccount, type RelateChannelInfo, RemoteBrowserGetter, type RenderConfig, RenderService, type S3Config, S3Service, type Services, type Session, type SubDetailWithGroupRes, type SubInfoRes, type SubWithGroupRes, type Subscribe, type SubscribeMember, type UserPreference, type WSHandler, botCommands, convertDiff, getBot, getImageRender, getScheduleTasks, handleWSEventWithCache, parsePlatform, sleep };