unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import { Emoji, UserEmojiRelation } from "../../models/index.js";
2import { v4 as uuidv4, v6 as uuidv6 } from "uuid";
3
4async function processUserEmojis(user: any, fediEmojis: any[]) {
5 await UserEmojiRelation.destroy({
6 where: {
7 userId: user.id,
8 },
9 });
10 await user.removeEmojis();
11 await user.save();
12 const emojis: any[] = [];
13 if (fediEmojis) {
14 for await (const emoji of fediEmojis) {
15 const emojiId = emoji.id ? emoji.id : emoji.icon?.url;
16 const emojiName = emoji.name.startsWith(":")
17 ? emoji.name
18 : `:${emoji.name}:`;
19 let emojiToAdd = await Emoji.findByPk(emojiId);
20 if (
21 emojiToAdd &&
22 new Date(emojiToAdd.updatedAt).getTime() <
23 new Date(emoji.updated).getTime()
24 ) {
25 emojiToAdd.name = emojiName;
26 emojiToAdd.updatedAt = new Date();
27 emojiToAdd.url = emoji.icon.url;
28 await emojiToAdd.save();
29 }
30 if (!emojiToAdd) {
31 emojiToAdd = await Emoji.create({
32 id: emojiId,
33 name: emojiName,
34 url: emoji.icon.url,
35 external: true,
36 uuid: uuidv4(),
37 });
38 }
39 emojis.push(emojiToAdd);
40 }
41 }
42 return await user.setEmojis([
43 ...new Set(emojis.map((emoji: any) => emoji.id)),
44 ]);
45}
46
47export { processUserEmojis };