@@ -14,21 +14,7 @@ const downloadUserImg = (url, path) => {
14
14
} ) ;
15
15
} ;
16
16
17
- const formatTopPercentage = ( lbRank ) => {
18
- if ( lbRank ?. rank === undefined ) return "-" ;
19
- if ( lbRank ?. count === undefined ) return "-" ;
20
- if ( lbRank . rank === 1 ) return "GOAT" ;
21
- let percentage = ( lbRank . rank / lbRank . count ) * 100 ;
22
- let formattedPercentage =
23
- percentage % 1 === 0 ? percentage . toString ( ) : percentage . toFixed ( 2 ) ;
24
- return "Top " + formattedPercentage + "%" ;
25
- } ;
26
-
27
- async function getOGSvg ( userData , theme , badge ) {
28
- const width = 500 ;
29
- const height = 200 ;
30
- const cssData = await getOutputCSS ( ) ;
31
-
17
+ const getUserImg = async ( userData , theme ) => {
32
18
let userImg ;
33
19
let defaultUserImg = `
34
20
<div class="h-20 w-20 rounded-full">
@@ -66,29 +52,53 @@ async function getOGSvg(userData, theme, badge) {
66
52
` ;
67
53
}
68
54
}
55
+ return userImg ;
56
+ } ;
69
57
58
+ const getUserBadge = ( badge , theme ) => {
70
59
let userBadge = "" ;
71
60
if ( badge !== null ) {
72
61
let color ;
73
62
if ( badge . color === "white" ) color = "white" ;
74
63
else color = theme [ badge . color ] ;
75
64
76
- let bgColor ;
77
- let bgTailwindColor = "" ;
78
- if ( badge . background === "animation: rgb-bg 10s linear infinite;" )
79
- bgTailwindColor = "animate-rgb-bg" ;
80
- bgColor = theme [ badge . background ] ;
81
-
82
65
badge . iconSvg = badge . iconSvg . replace ( 'fill=""' , `fill="${ color } "` ) ;
83
66
userBadge = `
84
- <div class="flex w-fit items-center justify-center rounded-md p-1 ${ bgTailwindColor } " style="background: ${ bgColor } ;">
67
+ <div class="flex w-fit items-center justify-center rounded-md p-1${
68
+ badge . customStyle ? " animate-rgb-bg" : ""
69
+ } "
70
+ ${
71
+ badge . background
72
+ ? 'style="background: ' + theme [ badge . background ] + ';"'
73
+ : ""
74
+ } >
85
75
<div class="px-1">${ badge . iconSvg } </div>
86
76
<div class="px-1 align-middle font-mono text-xs" style="color: ${ color } ;">
87
77
${ badge . name }
88
78
</div>
89
79
</div>
90
80
` ;
91
81
}
82
+ return userBadge ;
83
+ } ;
84
+
85
+ const formatTopPercentage = ( lbRank ) => {
86
+ if ( lbRank ?. rank === undefined ) return "-" ;
87
+ if ( lbRank ?. count === undefined ) return "-" ;
88
+ if ( lbRank . rank === 1 ) return "GOAT" ;
89
+ let percentage = ( lbRank . rank / lbRank . count ) * 100 ;
90
+ let formattedPercentage =
91
+ percentage % 1 === 0 ? percentage . toString ( ) : percentage . toFixed ( 2 ) ;
92
+ return "Top " + formattedPercentage + "%" ;
93
+ } ;
94
+
95
+ async function getOGSvg ( userData , theme , badge ) {
96
+ const width = 500 ;
97
+ const height = 200 ;
98
+ const cssData = await getOutputCSS ( ) ;
99
+
100
+ let userImg = await getUserImg ( userData , theme ) ;
101
+ let userBadge = getUserBadge ( badge , theme ) ;
92
102
93
103
const svg = `
94
104
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${ width } ${ height } " width="${ width } " height="${ height } "
@@ -146,66 +156,8 @@ async function getSvg(userData, theme, badge, leaderBoards, personalbests) {
146
156
personalbests ? ( height += 440 ) : ( height += 0 ) ;
147
157
const cssData = await getOutputCSS ( ) ;
148
158
149
- let userImg ;
150
- let defaultUserImg = `
151
- <div class="h-20 w-20 rounded-full">
152
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="${ theme . subColor } ">
153
- <path
154
- d="M399 384.2C376.9 345.8 335.4 320 288 320H224c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z" />
155
- </svg>
156
- </div>
157
- ` ;
158
- if (
159
- userData === null ||
160
- userData . discordId === undefined ||
161
- userData . discordAvatar === undefined
162
- ) {
163
- userImg = defaultUserImg ;
164
- } else {
165
- // Download the image and save it to a file
166
- const imagePath = `public/image/userImg/${ userData . discordId } -${ userData . discordAvatar } .png` ;
167
- await downloadUserImg (
168
- `https://cdn.discordapp.com/avatars/${ userData . discordId } /${ userData . discordAvatar } .png?size=256` ,
169
- imagePath ,
170
- ) ;
171
-
172
- // Convert the image file to base64
173
- const imageData = fs . readFileSync ( imagePath ) ;
174
- const base64Image = imageData . toString ( "base64" ) ;
175
-
176
- if ( base64Image == "" ) {
177
- userImg = defaultUserImg ;
178
- } else {
179
- userImg = `
180
- <div class="h-20 w-20 overflow-hidden rounded-full">
181
- <img src="data:image/png;base64,${ base64Image } " width="80" height="80" />
182
- </div>
183
- ` ;
184
- }
185
- }
186
-
187
- let userBadge = "" ;
188
- if ( badge !== null ) {
189
- let color ;
190
- if ( badge . color === "white" ) color = "white" ;
191
- else color = theme [ badge . color ] ;
192
-
193
- let bgColor ;
194
- let bgTailwindColor = "" ;
195
- if ( badge . background === "animation: rgb-bg 10s linear infinite;" )
196
- bgTailwindColor = "animate-rgb-bg" ;
197
- bgColor = theme [ badge . background ] ;
198
-
199
- badge . iconSvg = badge . iconSvg . replace ( 'fill=""' , `fill="${ color } "` ) ;
200
- userBadge = `
201
- <div class="flex w-fit items-center justify-center rounded-md p-1 ${ bgTailwindColor } " style="background: ${ bgColor } ;">
202
- <div class="px-1">${ badge . iconSvg } </div>
203
- <div class="px-1 align-middle font-mono text-xs" style="color: ${ color } ;">
204
- ${ badge . name }
205
- </div>
206
- </div>
207
- ` ;
208
- }
159
+ let userImg = await getUserImg ( userData , theme ) ;
160
+ let userBadge = getUserBadge ( badge , theme ) ;
209
161
210
162
let leaderBoardHTML = "" ;
211
163
if ( leaderBoards == true ) {
@@ -231,28 +183,21 @@ async function getSvg(userData, theme, badge, leaderBoards, personalbests) {
231
183
let ordinalNumber60 = "" ;
232
184
233
185
try {
234
- if (
235
- allTimeLbs . time [ "15" ] [ "english" ] [ "rank" ] === undefined ||
236
- allTimeLbs . time [ "15" ] [ "english" ] [ "rank" ] === null
237
- ) {
238
- rank15 = "-" ;
239
- } else {
240
- rank15 = allTimeLbs . time [ "15" ] [ "english" ] [ "rank" ] ;
241
- }
242
- if (
243
- allTimeLbs . time [ "60" ] [ "english" ] [ "rank" ] === undefined ||
244
- allTimeLbs . time [ "60" ] [ "english" ] [ "rank" ] === null
245
- ) {
246
- rank60 = "-" ;
247
- } else {
248
- rank60 = allTimeLbs . time [ "60" ] [ "english" ] [ "rank" ] ;
249
- }
250
- ordinalNumber15 = ordinalNumber (
251
- allTimeLbs . time [ "15" ] [ "english" ] [ "rank" ] ,
252
- ) ;
253
- ordinalNumber60 = ordinalNumber (
254
- allTimeLbs . time [ "60" ] [ "english" ] [ "rank" ] ,
255
- ) ;
186
+ const time15 = allTimeLbs . time [ "15" ] || { } ;
187
+ const time60 = allTimeLbs . time [ "60" ] || { } ;
188
+
189
+ rank15 = ! time15 . english ?. rank ? "-" : time15 . english . rank ;
190
+ rank60 = ! time60 . english ?. rank ? "-" : time60 . english . rank ;
191
+
192
+ ordinalNumber15 =
193
+ typeof time15 . english ?. rank === "number"
194
+ ? ordinalNumber ( time15 . english . rank )
195
+ : "-" ;
196
+
197
+ ordinalNumber60 =
198
+ typeof time60 . english ?. rank === "number"
199
+ ? ordinalNumber ( time60 . english . rank )
200
+ : "-" ;
256
201
} catch ( e ) {
257
202
console . log ( e ) ;
258
203
console . log ( userData ) ;
0 commit comments