@@ -14,21 +14,7 @@ const downloadUserImg = (url, path) => {
1414 } ) ;
1515} ;
1616
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 ) => {
3218 let userImg ;
3319 let defaultUserImg = `
3420 <div class="h-20 w-20 rounded-full">
@@ -66,29 +52,53 @@ async function getOGSvg(userData, theme, badge) {
6652 ` ;
6753 }
6854 }
55+ return userImg ;
56+ } ;
6957
58+ const getUserBadge = ( badge , theme ) => {
7059 let userBadge = "" ;
7160 if ( badge !== null ) {
7261 let color ;
7362 if ( badge . color === "white" ) color = "white" ;
7463 else color = theme [ badge . color ] ;
7564
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-
8265 badge . iconSvg = badge . iconSvg . replace ( 'fill=""' , `fill="${ color } "` ) ;
8366 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+ } >
8575 <div class="px-1">${ badge . iconSvg } </div>
8676 <div class="px-1 align-middle font-mono text-xs" style="color: ${ color } ;">
8777 ${ badge . name }
8878 </div>
8979 </div>
9080 ` ;
9181 }
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 ) ;
92102
93103 const svg = `
94104 <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) {
146156 personalbests ? ( height += 440 ) : ( height += 0 ) ;
147157 const cssData = await getOutputCSS ( ) ;
148158
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 ) ;
209161
210162 let leaderBoardHTML = "" ;
211163 if ( leaderBoards == true ) {
@@ -231,28 +183,21 @@ async function getSvg(userData, theme, badge, leaderBoards, personalbests) {
231183 let ordinalNumber60 = "" ;
232184
233185 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+ : "-" ;
256201 } catch ( e ) {
257202 console . log ( e ) ;
258203 console . log ( userData ) ;
0 commit comments