@@ -18,7 +18,7 @@ class Emoji {
18
18
id ?: string ;
19
19
emoji ?: string ;
20
20
animated : boolean ;
21
- owner : Guild | Localuser ;
21
+ owner ? : Guild | Localuser ;
22
22
get guild ( ) {
23
23
if ( this . owner instanceof Guild ) {
24
24
return this . owner ;
@@ -32,10 +32,7 @@ class Emoji {
32
32
return this . owner ;
33
33
}
34
34
}
35
- get info ( ) {
36
- return this . owner . info ;
37
- }
38
- constructor ( json : emojijson , owner : Guild | Localuser ) {
35
+ constructor ( json : emojijson , owner ?: Guild | Localuser ) {
39
36
this . name = json . name ;
40
37
this . id = json . id ;
41
38
this . animated = json . animated || false ;
@@ -53,12 +50,18 @@ class Emoji {
53
50
}
54
51
getHTML ( bigemoji : boolean = false ) {
55
52
if ( this . id ) {
53
+ if ( ! this . owner ) throw new Error ( "owner is missing for custom emoji!" ) ;
56
54
const emojiElem = document . createElement ( "img" ) ;
57
55
emojiElem . classList . add ( "md-emoji" ) ;
58
56
emojiElem . classList . add ( bigemoji ? "bigemoji" : "smallemoji" ) ;
59
57
emojiElem . crossOrigin = "anonymous" ;
60
58
emojiElem . src =
61
- this . info . cdn + "/emojis/" + this . id + "." + ( this . animated ? "gif" : "png" ) + "?size=32" ;
59
+ this . owner . info . cdn +
60
+ "/emojis/" +
61
+ this . id +
62
+ "." +
63
+ ( this . animated ? "gif" : "png" ) +
64
+ "?size=32" ;
62
65
emojiElem . alt = this . name ;
63
66
emojiElem . loading = "lazy" ;
64
67
@@ -147,7 +150,7 @@ class Emoji {
147
150
this : typeof Emoji ,
148
151
x : number ,
149
152
y : number ,
150
- localuser : Localuser ,
153
+ localuser ? : Localuser ,
151
154
) : Promise < Emoji > {
152
155
let res : ( r : Emoji ) => void ;
153
156
this ;
@@ -231,76 +234,77 @@ class Emoji {
231
234
body . classList . add ( "emojiBody" ) ;
232
235
233
236
let isFirst = true ;
237
+ if ( localuser ) {
238
+ [
239
+ localuser . lookingguild ,
240
+ ...localuser . guilds . filter ( ( guild ) => guild !== localuser . lookingguild ) ,
241
+ ]
242
+ . filter ( ( _ ) => _ !== undefined )
243
+ . filter ( ( guild ) => guild . id != "@me" && guild . emojis . length > 0 )
244
+ . forEach ( ( guild ) => {
245
+ const select = document . createElement ( "div" ) ;
246
+ select . classList . add ( "emojiSelect" ) ;
234
247
235
- [
236
- localuser . lookingguild ,
237
- ...localuser . guilds . filter ( ( guild ) => guild !== localuser . lookingguild ) ,
238
- ]
239
- . filter ( ( _ ) => _ !== undefined )
240
- . filter ( ( guild ) => guild . id != "@me" && guild . emojis . length > 0 )
241
- . forEach ( ( guild ) => {
242
- const select = document . createElement ( "div" ) ;
243
- select . classList . add ( "emojiSelect" ) ;
248
+ if ( guild . properties . icon ) {
249
+ const img = document . createElement ( "img" ) ;
250
+ img . classList . add ( "pfp" , "servericon" , "emoji-server" ) ;
251
+ img . crossOrigin = "anonymous" ;
252
+ img . src =
253
+ localuser . info . cdn +
254
+ "/icons/" +
255
+ guild . properties . id +
256
+ "/" +
257
+ guild . properties . icon +
258
+ ".png?size=48" ;
259
+ img . alt = "Server: " + guild . properties . name ;
260
+ select . appendChild ( img ) ;
261
+ } else {
262
+ const div = document . createElement ( "span" ) ;
263
+ div . textContent = guild . properties . name
264
+ . replace ( / ' s / g, " " )
265
+ . replace ( / \w + / g, ( word ) => word [ 0 ] )
266
+ . replace ( / \s / g, "" ) ;
267
+ select . append ( div ) ;
268
+ }
244
269
245
- if ( guild . properties . icon ) {
246
- const img = document . createElement ( "img" ) ;
247
- img . classList . add ( "pfp" , "servericon" , "emoji-server" ) ;
248
- img . crossOrigin = "anonymous" ;
249
- img . src =
250
- localuser . info . cdn +
251
- "/icons/" +
252
- guild . properties . id +
253
- "/" +
254
- guild . properties . icon +
255
- ".png?size=48" ;
256
- img . alt = "Server: " + guild . properties . name ;
257
- select . appendChild ( img ) ;
258
- } else {
259
- const div = document . createElement ( "span" ) ;
260
- div . textContent = guild . properties . name
261
- . replace ( / ' s / g, " " )
262
- . replace ( / \w + / g, ( word ) => word [ 0 ] )
263
- . replace ( / \s / g, "" ) ;
264
- select . append ( div ) ;
265
- }
270
+ selection . append ( select ) ;
266
271
267
- selection . append ( select ) ;
272
+ const clickEvent = ( ) => {
273
+ search . value = "" ;
274
+ updateSearch . call ( this ) ;
275
+ title . textContent = guild . properties . name ;
276
+ body . innerHTML = "" ;
277
+ for ( const emojit of guild . emojis ) {
278
+ const emojiElem = document . createElement ( "div" ) ;
279
+ emojiElem . classList . add ( "emojiSelect" ) ;
268
280
269
- const clickEvent = ( ) => {
270
- search . value = "" ;
271
- updateSearch . call ( this ) ;
272
- title . textContent = guild . properties . name ;
273
- body . innerHTML = "" ;
274
- for ( const emojit of guild . emojis ) {
275
- const emojiElem = document . createElement ( "div" ) ;
276
- emojiElem . classList . add ( "emojiSelect" ) ;
281
+ const emojiClass = new Emoji (
282
+ {
283
+ id : emojit . id as string ,
284
+ name : emojit . name ,
285
+ animated : emojit . animated as boolean ,
286
+ } ,
287
+ localuser ,
288
+ ) ;
289
+ emojiElem . append ( emojiClass . getHTML ( ) ) ;
290
+ body . append ( emojiElem ) ;
277
291
278
- const emojiClass = new Emoji (
279
- {
280
- id : emojit . id as string ,
281
- name : emojit . name ,
282
- animated : emojit . animated as boolean ,
283
- } ,
284
- localuser ,
285
- ) ;
286
- emojiElem . append ( emojiClass . getHTML ( ) ) ;
287
- body . append ( emojiElem ) ;
292
+ emojiElem . addEventListener ( "click" , ( ) => {
293
+ res ( emojiClass ) ;
294
+ if ( Contextmenu . currentmenu !== "" ) {
295
+ Contextmenu . currentmenu . remove ( ) ;
296
+ }
297
+ } ) ;
298
+ }
299
+ } ;
288
300
289
- emojiElem . addEventListener ( "click" , ( ) => {
290
- res ( emojiClass ) ;
291
- if ( Contextmenu . currentmenu !== "" ) {
292
- Contextmenu . currentmenu . remove ( ) ;
293
- }
294
- } ) ;
301
+ select . addEventListener ( "click" , clickEvent ) ;
302
+ if ( isFirst ) {
303
+ clickEvent ( ) ;
304
+ isFirst = false ;
295
305
}
296
- } ;
297
-
298
- select . addEventListener ( "click" , clickEvent ) ;
299
- if ( isFirst ) {
300
- clickEvent ( ) ;
301
- isFirst = false ;
302
- }
303
- } ) ;
306
+ } ) ;
307
+ }
304
308
305
309
if ( Contextmenu . currentmenu !== "" ) {
306
310
Contextmenu . currentmenu . remove ( ) ;
@@ -344,7 +348,7 @@ class Emoji {
344
348
search . focus ( ) ;
345
349
return promise ;
346
350
}
347
- static searchEmoji ( search : string , localuser : Localuser , results = 50 ) : [ Emoji , number ] [ ] {
351
+ static searchEmoji ( search : string , localuser ? : Localuser , results = 50 ) : [ Emoji , number ] [ ] {
348
352
//NOTE this function is used for searching in the emoji picker for reactions, and the emoji auto-fill
349
353
const ranked : [ emojijson , number ] [ ] = [ ] ;
350
354
function similar ( json : emojijson ) {
@@ -364,11 +368,13 @@ class Emoji {
364
368
}
365
369
}
366
370
const weakGuild = new WeakMap < emojijson , Guild > ( ) ;
367
- for ( const guild of localuser . guilds ) {
368
- if ( guild . id !== "@me" && guild . emojis . length !== 0 ) {
369
- for ( const emoji of guild . emojis ) {
370
- if ( similar ( emoji ) ) {
371
- weakGuild . set ( emoji , guild ) ;
371
+ if ( localuser ) {
372
+ for ( const guild of localuser . guilds ) {
373
+ if ( guild . id !== "@me" && guild . emojis . length !== 0 ) {
374
+ for ( const emoji of guild . emojis ) {
375
+ if ( similar ( emoji ) ) {
376
+ weakGuild . set ( emoji , guild ) ;
377
+ }
372
378
}
373
379
}
374
380
}
0 commit comments