koishi-plugin-chat-patch 3.0.2 → 5.0.1
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.
- package/client/vue/index.vue +60 -634
- package/client/web/dist/assets/AppIcon-DIku6-h0.png +0 -0
- package/client/web/dist/assets/AppIconDark-BYymN71t.png +0 -0
- package/client/web/dist/assets/CapacitorAppIcon-CSZwNhvi.png +0 -0
- package/client/web/dist/assets/CapacitorAppIconDark-BMvMOzsg.png +0 -0
- package/client/web/dist/assets/Chat-CTdyeaX2.css +1 -0
- package/client/web/dist/assets/Chat-DkZvD7d8.js +28 -0
- package/client/web/dist/assets/MealHungryPan-Beos3lRI.js +1 -0
- package/client/web/dist/assets/MsgBody-aZ4_aija.js +1 -0
- package/client/web/dist/assets/MsgBody.vue_vue_type_script_setup_true_lang-CPZjRLp6.js +67 -0
- package/client/web/dist/assets/NapcatAppIcon-C7VOAkW9.png +0 -0
- package/client/web/dist/assets/Vue-lEhHouxB.png +0 -0
- package/client/web/dist/assets/append_darwin-CqBNU62J.css +1 -0
- package/client/web/dist/assets/append_full_vibrancy-j0D2LM9m.css +1 -0
- package/client/web/dist/assets/append_linux-uhxeBqeC.css +1 -0
- package/client/web/dist/assets/append_linux_vibrancy-COiZq8MS.css +1 -0
- package/client/web/dist/assets/append_napcat-DV8CAyAd.css +1 -0
- package/client/web/dist/assets/append_new-407Lo5_V.css +1 -0
- package/client/web/dist/assets/append_vibrancy-6FHctkOY.css +1 -0
- package/client/web/dist/assets/append_win32-srmD-78y.css +1 -0
- package/client/web/dist/assets/cakes-CxTVKdnK.svg +189 -0
- package/client/web/dist/assets/core-DhEqZVGG.js +1 -0
- package/client/web/dist/assets/event-Cadp6m6J.js +1 -0
- package/client/web/dist/assets/index-CPTXiemn.js +4045 -0
- package/client/web/dist/assets/index-Cg_esKB0.js +1 -0
- package/client/web/dist/assets/index-Cln012sP.css +1 -0
- package/client/web/dist/assets//346/226/271/346/255/243/345/226/265/345/221/234/344/275/223-CJKIKBn3.ttf +0 -0
- package/client/web/dist/assets//346/234/237/345/276/205-C90_OY60.png +0 -0
- package/client/web/dist/bcui/css/color-dark.css +35 -0
- package/client/web/dist/bcui/css/color-light.css +35 -0
- package/client/web/dist/bcui/css/style.css +468 -0
- package/client/web/dist/bcui/js/main.js +193 -0
- package/client/web/dist/css/append-dark.css +13 -0
- package/client/web/dist/css/append-light.css +13 -0
- package/client/web/dist/css/append-napcat-dark.css +14 -0
- package/client/web/dist/css/append-napcat-light.css +14 -0
- package/client/web/dist/favicon.ico +0 -0
- package/client/web/dist/img/icons/icon-for-fuck-apple.png +0 -0
- package/client/web/dist/img/icons/icon-maskable.png +0 -0
- package/client/web/dist/img/icons/icon.png +0 -0
- package/client/web/dist/img/icons/icon.svg +10 -0
- package/client/web/dist/index.html +22 -0
- package/client/web/dist/robots.txt +2 -0
- package/client/web/dist/sw.js +58 -0
- package/client/web/env.d.ts +56 -0
- package/client/web/index.html +21 -0
- package/client/web/package-lock.json +3419 -0
- package/client/web/package.json +62 -0
- package/client/web/public/bcui/css/color-dark.css +35 -0
- package/client/web/public/bcui/css/color-light.css +35 -0
- package/client/web/public/bcui/css/style.css +468 -0
- package/client/web/public/bcui/js/main.js +193 -0
- package/client/web/public/css/append-dark.css +13 -0
- package/client/web/public/css/append-light.css +13 -0
- package/client/web/public/css/append-napcat-dark.css +14 -0
- package/client/web/public/css/append-napcat-light.css +14 -0
- package/client/web/public/favicon.ico +0 -0
- package/client/web/public/img/icons/icon-for-fuck-apple.png +0 -0
- package/client/web/public/img/icons/icon-maskable.png +0 -0
- package/client/web/public/img/icons/icon.png +0 -0
- package/client/web/public/img/icons/icon.svg +10 -0
- package/client/web/public/robots.txt +2 -0
- package/client/web/public/sw.js +58 -0
- package/client/web/scripts/copy-bcui.mjs +17 -0
- package/client/web/src/App.vue +1127 -0
- package/client/web/src/assets/css/append/append_darwin.css +68 -0
- package/client/web/src/assets/css/append/append_full_vibrancy.css +290 -0
- package/client/web/src/assets/css/append/append_linux.css +125 -0
- package/client/web/src/assets/css/append/append_linux_vibrancy.css +22 -0
- package/client/web/src/assets/css/append/append_napcat.css +35 -0
- package/client/web/src/assets/css/append/append_new.css +843 -0
- package/client/web/src/assets/css/append/append_vibrancy.css +113 -0
- package/client/web/src/assets/css/append/append_win32.css +109 -0
- package/client/web/src/assets/css/append/mobile/append_mobile_horizontal.css +349 -0
- package/client/web/src/assets/css/append/mobile/append_mobile_vertical.css +96 -0
- package/client/web/src/assets/css/chat.css +2104 -0
- package/client/web/src/assets/css/msg.css +941 -0
- package/client/web/src/assets/css/options.css +811 -0
- package/client/web/src/assets/css/sys_notice.css +62 -0
- package/client/web/src/assets/css/view.css +2105 -0
- package/client/web/src/assets/font//346/226/271/346/255/243/345/226/265/345/221/234/344/275/223.ttf +0 -0
- package/client/web/src/assets/img/Vue.png +0 -0
- package/client/web/src/assets/img/cakes.svg +189 -0
- package/client/web/src/assets/img/icons/AppIcon.png +0 -0
- package/client/web/src/assets/img/icons/AppIconDark.png +0 -0
- package/client/web/src/assets/img/icons/CapacitorAppIcon.png +0 -0
- package/client/web/src/assets/img/icons/CapacitorAppIconDark.png +0 -0
- package/client/web/src/assets/img/icons/NapcatAppIcon.png +0 -0
- package/client/web/src/assets/img/icons/NapcatAppIconDark.png +0 -0
- package/client/web/src/assets/img/icons/exit.png +0 -0
- package/client/web/src/assets/img/icons/pen.png +0 -0
- package/client/web/src/assets/img/stars.svg +89 -0
- package/client/web/src/assets/img//346/234/237/345/276/205.png +0 -0
- package/client/web/src/assets/l10n/_About I10n.md +35 -0
- package/client/web/src/assets/l10n/_l10nconfig.json +7 -0
- package/client/web/src/assets/l10n/zh-CN.po +1941 -0
- package/client/web/src/assets/logo.png +0 -0
- package/client/web/src/assets/pathMap/LLOneBot.yaml +2 -0
- package/client/web/src/assets/pathMap/Lagrange.OneBot.yaml +180 -0
- package/client/web/src/assets/pathMap/NapCat.Onebot.yaml +224 -0
- package/client/web/src/assets/pathMap/SnowLuma.yaml +80 -0
- package/client/web/src/assets/qed.txt +1 -0
- package/client/web/src/components/AboutPan.vue +197 -0
- package/client/web/src/components/BulletinBody.vue +129 -0
- package/client/web/src/components/DepPan.vue +310 -0
- package/client/web/src/components/EmojiFace.vue +32 -0
- package/client/web/src/components/FacePan.vue +461 -0
- package/client/web/src/components/FileBody.vue +129 -0
- package/client/web/src/components/FileManager.vue +532 -0
- package/client/web/src/components/FriendBody.vue +54 -0
- package/client/web/src/components/GlobalSessionSearchBar.vue +301 -0
- package/client/web/src/components/History.vue +49 -0
- package/client/web/src/components/LazyLottie.vue +82 -0
- package/client/web/src/components/MergePan.vue +127 -0
- package/client/web/src/components/MsgBody.vue +1478 -0
- package/client/web/src/components/MusicPlayer.vue +549 -0
- package/client/web/src/components/NoticeBody.vue +168 -0
- package/client/web/src/components/QzonePermissionPan.vue +150 -0
- package/client/web/src/components/RawMsgRenderPreviewPan.vue +190 -0
- package/client/web/src/components/ThemeColorPickerPan.vue +420 -0
- package/client/web/src/components/TinySessionBody.vue +51 -0
- package/client/web/src/components/UmamiInfoPan.vue +1549 -0
- package/client/web/src/components/UpdatePan.vue +263 -0
- package/client/web/src/components/ViewerCom.vue +1360 -0
- package/client/web/src/components/VoiceMsg.vue +626 -0
- package/client/web/src/components/WelPan.vue +894 -0
- package/client/web/src/components/msg-body/.gitkeep +0 -0
- package/client/web/src/components/msg-component/JsonSegComp.vue +138 -0
- package/client/web/src/components/msg-component/XmlSegComp.vue +132 -0
- package/client/web/src/components/msg-component/jsonComp/AutoReply.vue +97 -0
- package/client/web/src/components/msg-component/jsonComp/Contact.lua.vue +129 -0
- package/client/web/src/components/msg-component/jsonComp/Feed.lua.vue +94 -0
- package/client/web/src/components/msg-component/jsonComp/Forum.vue +84 -0
- package/client/web/src/components/msg-component/jsonComp/Mannounce.vue +111 -0
- package/client/web/src/components/msg-component/jsonComp/Map.vue +52 -0
- package/client/web/src/components/msg-component/jsonComp/Miniapp.lua.vue +53 -0
- package/client/web/src/components/msg-component/jsonComp/Miniapp.vue +69 -0
- package/client/web/src/components/msg-component/jsonComp/Music.lua.vue +135 -0
- package/client/web/src/components/msg-component/jsonComp/Tuwen.lua.vue +56 -0
- package/client/web/src/components/notice-component/.gitkeep +0 -0
- package/client/web/src/components/notice-component/MealHungryPan.vue +119 -0
- package/client/web/src/components/tooltip/CustomFaceTooltip.vue +22 -0
- package/client/web/src/components/tooltip/Tooltip.vue +50 -0
- package/client/web/src/components/tooltip/Tooltips.vue +14 -0
- package/client/web/src/components/tooltip/UserInfoTooltip.vue +69 -0
- package/client/web/src/function/base.ts +238 -0
- package/client/web/src/function/connect.ts +2042 -0
- package/client/web/src/function/debug.ts +10 -0
- package/client/web/src/function/elements/information.ts +141 -0
- package/client/web/src/function/elements/system.ts +101 -0
- package/client/web/src/function/elements/vueComp.ts +62 -0
- package/client/web/src/function/favicon.ts +76 -0
- package/client/web/src/function/input.ts +69 -0
- package/client/web/src/function/model/emoji.ts +127 -0
- package/client/web/src/function/model/img.ts +150 -0
- package/client/web/src/function/model/msg-body.ts +51 -0
- package/client/web/src/function/msg.ts +2674 -0
- package/client/web/src/function/notify.ts +225 -0
- package/client/web/src/function/option.ts +749 -0
- package/client/web/src/function/satori-model.ts +818 -0
- package/client/web/src/function/satori.ts +325 -0
- package/client/web/src/function/sender.ts +178 -0
- package/client/web/src/function/tooltip.ts +49 -0
- package/client/web/src/function/utils/appUtil.ts +2288 -0
- package/client/web/src/function/utils/avatarUtil.ts +31 -0
- package/client/web/src/function/utils/backgroundUtil.ts +110 -0
- package/client/web/src/function/utils/linkViewUtil.ts +101 -0
- package/client/web/src/function/utils/localHistoryUtil.ts +517 -0
- package/client/web/src/function/utils/msgUtil.ts +1242 -0
- package/client/web/src/function/utils/pinyin.ts +141 -0
- package/client/web/src/function/utils/recordUtil.ts +187 -0
- package/client/web/src/function/utils/sessionUtil.ts +114 -0
- package/client/web/src/function/utils/systemUtil.ts +664 -0
- package/client/web/src/main.ts +91 -0
- package/client/web/src/pages/Chat.vue +3453 -0
- package/client/web/src/pages/Friends.vue +636 -0
- package/client/web/src/pages/Info.vue +717 -0
- package/client/web/src/pages/Messages.vue +875 -0
- package/client/web/src/pages/Options.vue +82 -0
- package/client/web/src/pages/Qzone.vue +1178 -0
- package/client/web/src/pages/chat-view/ChatDanmaku.vue +759 -0
- package/client/web/src/pages/chat-view/ChatGlagame.vue +642 -0
- package/client/web/src/pages/chat-view/ChatTerminal.vue +1044 -0
- package/client/web/src/pages/chat-view/SystemNotice.vue +171 -0
- package/client/web/src/pages/options/OptAccount.vue +107 -0
- package/client/web/src/pages/options/OptAddon.vue +185 -0
- package/client/web/src/pages/options/OptDev.vue +704 -0
- package/client/web/src/pages/options/OptFunction.vue +403 -0
- package/client/web/src/pages/options/OptInfo.vue +165 -0
- package/client/web/src/pages/options/OptView.vue +846 -0
- package/client/web/src/runtime/backend.ts +310 -0
- package/client/web/src/state/auth.ts +14 -0
- package/client/web/src/state/chat.ts +36 -0
- package/client/web/src/state/connection.ts +20 -0
- package/client/web/src/state/contact.ts +37 -0
- package/client/web/src/state/qzone.ts +18 -0
- package/client/web/src/state/sessionHistory.ts +25 -0
- package/client/web/src/state/settings.ts +18 -0
- package/client/web/src/state/sticker.ts +10 -0
- package/client/web/src/state/ui.ts +56 -0
- package/client/web/tsconfig.json +27 -0
- package/client/web/tsconfig.tsbuildinfo +1 -0
- package/client/web/vite.config.ts +33 -0
- package/dist/index.js +1 -12
- package/dist/style.css +1 -1
- package/lib/index.js +2070 -2077
- package/package.json +15 -2
- package/readme.md +0 -22
- package/src/bootstrap.ts +71 -0
- package/src/cache.ts +319 -0
- package/src/config.ts +23 -35
- package/src/database.ts +650 -0
- package/src/index.ts +27 -59
- package/src/media.ts +302 -0
- package/src/recorder.ts +175 -0
- package/src/self-message.ts +456 -0
- package/src/server.d.ts +26 -0
- package/src/types.ts +108 -48
- package/src/web.ts +712 -0
- package/client/vue/chat-logic.ts +0 -683
- package/client/vue/composables/useChatActions.ts +0 -61
- package/client/vue/composables/useChatData.ts +0 -185
- package/client/vue/composables/useImageCache.ts +0 -281
- package/client/vue/composables/useVideoCache.ts +0 -125
- package/client/vue/types.ts +0 -72
- package/lib/api-handlers.d.ts +0 -25
- package/lib/config.d.ts +0 -14
- package/lib/file-manager.d.ts +0 -124
- package/lib/index.d.ts +0 -17
- package/lib/logger.d.ts +0 -9
- package/lib/message-handler.d.ts +0 -35
- package/lib/types.d.ts +0 -57
- package/lib/utils.d.ts +0 -18
- package/src/api-handlers.ts +0 -646
- package/src/file-manager.ts +0 -1436
- package/src/message-handler.ts +0 -507
- package/src/utils.ts +0 -189
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { PinYinData } from '../utils/pinyin'
|
|
2
|
+
|
|
3
|
+
export enum BotMsgType {
|
|
4
|
+
CQCode,
|
|
5
|
+
Array
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface ChatInfoElem {
|
|
9
|
+
show: BaseChatInfoElem
|
|
10
|
+
info: {
|
|
11
|
+
group_info: { [key: string]: any }
|
|
12
|
+
user_info: { [key: string]: any }
|
|
13
|
+
me_info: { [key: string]: any }
|
|
14
|
+
group_members: GroupMemberInfoElem[]
|
|
15
|
+
group_files: { [key: string]: any }
|
|
16
|
+
group_sub_files: { [key: string]: any }
|
|
17
|
+
group_notices?: { [key: string]: any }
|
|
18
|
+
now_member_info?: { [key: string]: any }
|
|
19
|
+
image_list?: { index: number; message_id: string; img_url: string }[]
|
|
20
|
+
jin_info: {
|
|
21
|
+
list: { [key: string]: any }[]
|
|
22
|
+
is_end?: boolean
|
|
23
|
+
pages: number
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface BaseChatInfoElem {
|
|
29
|
+
type: string
|
|
30
|
+
id: number | string
|
|
31
|
+
name: string
|
|
32
|
+
avatar: string
|
|
33
|
+
appendInfo?: string
|
|
34
|
+
jump?: string
|
|
35
|
+
channel_id?: string
|
|
36
|
+
guild_id?: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface UserElem {
|
|
40
|
+
new_msg?: boolean
|
|
41
|
+
raw_msg?: string
|
|
42
|
+
time?: number
|
|
43
|
+
always_top?: boolean
|
|
44
|
+
message_id?: string
|
|
45
|
+
highlight?: string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface UserFriendElem extends UserElem {
|
|
49
|
+
group_id: number | string
|
|
50
|
+
group_name: string
|
|
51
|
+
avatar?: string
|
|
52
|
+
channel_id?: string
|
|
53
|
+
channelId?: string
|
|
54
|
+
guild_id?: string
|
|
55
|
+
guildId?: string
|
|
56
|
+
py_name?: PinYinData
|
|
57
|
+
py_start?: string
|
|
58
|
+
member_count?: number
|
|
59
|
+
admin_flag?: boolean
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface UserGroupElem extends UserElem {
|
|
63
|
+
user_id: number | string
|
|
64
|
+
nickname: string
|
|
65
|
+
remark: string
|
|
66
|
+
channel_id?: string
|
|
67
|
+
channelId?: string
|
|
68
|
+
guild_id?: string
|
|
69
|
+
guildId?: string
|
|
70
|
+
raw_msg_base?: string // 给群收纳箱用的
|
|
71
|
+
py_name?: PinYinData
|
|
72
|
+
py_start?: string
|
|
73
|
+
class_id?: number
|
|
74
|
+
class_name?: string
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface GroupFileElem {
|
|
78
|
+
file_id: string
|
|
79
|
+
file_name: string
|
|
80
|
+
size: number
|
|
81
|
+
download_times: number
|
|
82
|
+
dead_time: number
|
|
83
|
+
upload_time: number
|
|
84
|
+
uploader_name: string
|
|
85
|
+
|
|
86
|
+
download_percent?: number
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface GroupFileFolderElem {
|
|
90
|
+
folder_id: string
|
|
91
|
+
folder_name: string
|
|
92
|
+
count: number
|
|
93
|
+
create_time: number
|
|
94
|
+
creater_name: string
|
|
95
|
+
|
|
96
|
+
items?: GroupFileElem[]
|
|
97
|
+
show_items?: boolean
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface GroupMemberInfoElem {
|
|
101
|
+
user_id: number | string
|
|
102
|
+
name?: string
|
|
103
|
+
avatar?: string
|
|
104
|
+
title: string
|
|
105
|
+
card: string
|
|
106
|
+
join_time: number
|
|
107
|
+
last_sent_time: number
|
|
108
|
+
level: number
|
|
109
|
+
nickname: string
|
|
110
|
+
rank: string
|
|
111
|
+
role: string
|
|
112
|
+
sex: string
|
|
113
|
+
shutup_time: number
|
|
114
|
+
py_start?: string
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface SQCodeElem {
|
|
118
|
+
addText: boolean
|
|
119
|
+
addTop?: boolean
|
|
120
|
+
msgObj: MsgItemElem
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface MsgItemElem {
|
|
124
|
+
type: string
|
|
125
|
+
[key: string]: any
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface MergeStackData {
|
|
129
|
+
messageList: any[] // 消息列表
|
|
130
|
+
imageList: any[] // 图片列表
|
|
131
|
+
placeCache: number // 位置缓存
|
|
132
|
+
forwardMsg: any // 原合并转发消息
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface MenuEventData {
|
|
136
|
+
x: number
|
|
137
|
+
y: number
|
|
138
|
+
target: HTMLElement
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export type Session = UserGroupElem & UserFriendElem
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 连接历史记录项
|
|
3
|
+
*/
|
|
4
|
+
export interface ConnectionHistoryItem {
|
|
5
|
+
address: string
|
|
6
|
+
token: string
|
|
7
|
+
uin?: string
|
|
8
|
+
nickname?: string
|
|
9
|
+
lastConnected: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 登录状态记录(地址、密钥、状态等)
|
|
14
|
+
*/
|
|
15
|
+
export interface LoginCacheElem {
|
|
16
|
+
quickLogin: { address: string, port: number }[] | null
|
|
17
|
+
address: string
|
|
18
|
+
token: string
|
|
19
|
+
status: boolean,
|
|
20
|
+
creating: boolean
|
|
21
|
+
connectionHistory: ConnectionHistoryItem[]
|
|
22
|
+
satoriLogins?: {
|
|
23
|
+
platform: string
|
|
24
|
+
selfId: string
|
|
25
|
+
name: string
|
|
26
|
+
avatar?: string
|
|
27
|
+
status?: number
|
|
28
|
+
features?: string[]
|
|
29
|
+
}[]
|
|
30
|
+
selectedSatoriBot?: string
|
|
31
|
+
uin?: string
|
|
32
|
+
nickname?: string
|
|
33
|
+
platform?: string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface PopInfoElem {
|
|
37
|
+
id: number
|
|
38
|
+
svg: string
|
|
39
|
+
text: string
|
|
40
|
+
autoClose?: boolean
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface BotActionElem {
|
|
44
|
+
action: string
|
|
45
|
+
params?: { [key: string]: any }
|
|
46
|
+
echo?: string
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface MsgIdInfoElem {
|
|
50
|
+
gid?: number
|
|
51
|
+
uid?: number
|
|
52
|
+
seqid?: number
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ContributorElem {
|
|
56
|
+
url: string
|
|
57
|
+
link: string
|
|
58
|
+
title: string
|
|
59
|
+
contributions: number
|
|
60
|
+
isMe: boolean
|
|
61
|
+
isSuperThakns: boolean
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface NotificationElem {
|
|
65
|
+
body: string
|
|
66
|
+
tag: string
|
|
67
|
+
icon: string
|
|
68
|
+
image?: string
|
|
69
|
+
requireInteraction: boolean
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface NotifyInfo {
|
|
73
|
+
base_type: 'msg' | 'app',
|
|
74
|
+
|
|
75
|
+
title: string
|
|
76
|
+
body: string
|
|
77
|
+
tag: string
|
|
78
|
+
icon: string
|
|
79
|
+
image?: string
|
|
80
|
+
type: string
|
|
81
|
+
is_important: boolean
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface NoticeBodyV3 {
|
|
85
|
+
version: 3
|
|
86
|
+
client: string // 渠道标识,对应 env 里的 VITE_APP_CLIENT_TAG
|
|
87
|
+
id: number
|
|
88
|
+
add_time: number
|
|
89
|
+
show_date: number[][] // 显示日期,二维数组,内层数组为[开始日期, 结束日期],日期格式为时间戳(毫秒)
|
|
90
|
+
pops: {
|
|
91
|
+
title?: string
|
|
92
|
+
html: string
|
|
93
|
+
template: string // 内嵌模板和 html 二选一
|
|
94
|
+
template_data?: { [key: string]: any }
|
|
95
|
+
link_url?: string // 链接地址,如果有这个参数将显示一个打开按钮
|
|
96
|
+
button_text?: string // 关闭按钮文字,默认“确定”
|
|
97
|
+
}[]
|
|
98
|
+
is_important: boolean // 是否重要公告,有这个属性的公告将每次启动都显示
|
|
99
|
+
|
|
100
|
+
is_show?: boolean
|
|
101
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AllowedComponentProps, ExtractPropTypes, VNodeProps, ComponentPropsOptions, Component, VNode } from 'vue'
|
|
2
|
+
|
|
3
|
+
type Empty = Record<string, never>
|
|
4
|
+
|
|
5
|
+
type GetAllProps<T extends Component> = T extends new (...args: any) => { $props: infer P }
|
|
6
|
+
? P
|
|
7
|
+
: T extends () => VNode
|
|
8
|
+
? object
|
|
9
|
+
: T extends (props: infer P, ...args: any) => any
|
|
10
|
+
? P
|
|
11
|
+
: T extends { props: infer P }
|
|
12
|
+
? (P extends ComponentPropsOptions ? ExtractPropTypes<P> : P)
|
|
13
|
+
: any
|
|
14
|
+
|
|
15
|
+
type GetDefineProps<T extends Component> = GetAllProps<T> extends infer P & VNodeProps & AllowedComponentProps ? P : never
|
|
16
|
+
|
|
17
|
+
type GetModel<T extends Component> = GetDefineProps<T> extends infer P
|
|
18
|
+
? 'modelValue' extends keyof P ? P['modelValue'] : undefined
|
|
19
|
+
: never
|
|
20
|
+
|
|
21
|
+
type GetEmit<T extends Component> = GetDefineProps<T> extends infer P ? {
|
|
22
|
+
[
|
|
23
|
+
Key in keyof P & string as Key extends `on${infer N}`
|
|
24
|
+
? N extends 'Update:ModelValue' ? never : Uncapitalize<N>
|
|
25
|
+
: never
|
|
26
|
+
]: P[Key]
|
|
27
|
+
} : never
|
|
28
|
+
|
|
29
|
+
type GetProps<T extends Component> = GetDefineProps<T> extends infer P ? {
|
|
30
|
+
[
|
|
31
|
+
Key in keyof P & string as Key extends `on${Capitalize<string>}`
|
|
32
|
+
? never
|
|
33
|
+
: `onUpdate:${Key}` extends keyof P
|
|
34
|
+
? never
|
|
35
|
+
: Key
|
|
36
|
+
]: P[Key]
|
|
37
|
+
} : never
|
|
38
|
+
|
|
39
|
+
type GetEmitArgs<T extends Component> = GetEmit<T> extends infer E ? {
|
|
40
|
+
[K in keyof E]?: E[K]
|
|
41
|
+
} : never
|
|
42
|
+
|
|
43
|
+
type SetOptional<O extends Record<string, unknown>, T> = {
|
|
44
|
+
[K in keyof O as T extends O[K] ? K : never]?: O[K]
|
|
45
|
+
} & {
|
|
46
|
+
[K in keyof O as T extends O[K] ? never : K]: O[K]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
type CreateOptionalKey<K extends string, Content> = Content extends Record<string, unknown>
|
|
50
|
+
? SetOptional<Content, undefined> extends infer R
|
|
51
|
+
? Empty extends R
|
|
52
|
+
? { [P in K]?: R }
|
|
53
|
+
: { [P in K]: R }
|
|
54
|
+
: never
|
|
55
|
+
: Content extends undefined
|
|
56
|
+
? { [P in K]?: Content }
|
|
57
|
+
: { [P in K]: Content }
|
|
58
|
+
|
|
59
|
+
export type VueCompData<T extends Component> = {
|
|
60
|
+
comp: T
|
|
61
|
+
emit?: GetEmitArgs<T>
|
|
62
|
+
} & CreateOptionalKey<'model', GetModel<T>> & CreateOptionalKey<'props', GetProps<T>>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { useContactStore } from '../state/contact'
|
|
2
|
+
import { useSettingsStore } from '../state/settings'
|
|
3
|
+
|
|
4
|
+
let needRefreshFavicon = false
|
|
5
|
+
|
|
6
|
+
let cacheInfo = ''
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 刷新 favicon
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export function refreshFavicon() {
|
|
13
|
+
if (needRefreshFavicon) return
|
|
14
|
+
needRefreshFavicon = true
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
needRefreshFavicon = false
|
|
17
|
+
let num = 0
|
|
18
|
+
if (useSettingsStore().sysConfig.use_favicon_notice === false) return main(0)
|
|
19
|
+
const contactStore = useContactStore()
|
|
20
|
+
for (const session of contactStore.onMsgList) {
|
|
21
|
+
if (session.new_msg) num ++
|
|
22
|
+
}
|
|
23
|
+
main(num)
|
|
24
|
+
}, 500)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function main(num: number) {
|
|
28
|
+
const width = num.toString().length * 150
|
|
29
|
+
const color1 = getComputedStyle(document.documentElement).getPropertyValue('--color-main').trim()
|
|
30
|
+
const color2 = getComputedStyle(document.documentElement).getPropertyValue('--color-card').trim()
|
|
31
|
+
const color3 = getComputedStyle(document.documentElement).getPropertyValue('--color-card-2').trim()
|
|
32
|
+
// 对比缓存
|
|
33
|
+
if (cacheInfo === `${num}-${color1}-${color2}-${color3}`) return
|
|
34
|
+
// 存储缓存信息
|
|
35
|
+
cacheInfo = `${num}-${color1}-${color2}-${color3}`
|
|
36
|
+
const svg = `
|
|
37
|
+
<svg width="1080" height="1080" viewBox="0 0 1080 1080" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
38
|
+
<path d="M537 1080C833.577 1080 1074 839.577 1074 543C1074 246.423 833.577 6 537 6C240.423 6 0 246.423 0 543C0 839.577 240.423 1080 537 1080Z" fill="${color1}"/>
|
|
39
|
+
<path d="M540.28 803.2C493.78 803.2 451.18 787.7 423.68 764.4C409.78 768.6 391.88 775.3 380.68 783.6C371.08 790.7 372.28 798 373.98 800.9C381.58 813.8 504.68 809.1 540.28 805.1V803.2ZM540.28 803.2C586.78 803.2 629.38 787.7 656.88 764.4C670.78 768.6 688.68 775.3 699.88 783.6C709.48 790.7 708.28 798 706.58 800.9C698.98 813.8 575.88 809.1 540.28 805.1V803.2Z" fill="${color2}"/>
|
|
40
|
+
<path d="M540.58 524.8C617.28 524.3 678.78 509.4 699.58 503.7C704.58 502.3 707.18 499.9 707.18 499.9C707.18 499.2 707.48 487.4 707.48 481.3C707.48 378.9 659.18 276 540.18 276C421.28 276 372.88 378.9 372.88 481.3C372.88 487.4 373.18 499.2 373.18 499.9C373.18 499.9 375.38 502.2 379.28 503.3C398.48 508.7 461.18 524.2 539.78 524.8H540.58ZM749.08 610.1C744.28 594.8 737.88 576.9 731.28 559.8C731.28 559.8 727.48 559.3 725.58 559.9C666.58 577 595.08 588 540.58 587.3H539.98C485.78 587.9 414.78 577.2 355.98 560.2C353.78 559.6 349.28 559.8 349.28 559.8C342.68 576.9 336.18 594.8 331.48 610.1C308.78 683.1 316.18 713.3 321.78 714C333.78 715.5 368.48 659.1 368.48 659.1C368.48 716.4 420.18 804.4 538.68 805.2H541.78C660.28 804.4 711.98 716.4 711.98 659.1C711.98 659.1 746.68 715.5 758.68 714C764.38 713.3 771.68 683.1 749.08 610.1Z" fill="${color2}"/>
|
|
41
|
+
<path d="M497.98 427.3C481.88 428 468.08 409.7 467.18 386.3C466.28 362.9 478.68 343.4 494.78 342.7C510.88 342 524.68 360.3 525.58 383.7C526.48 407.1 514.08 426.6 497.98 427.3ZM613.38 386.3C612.48 409.7 598.78 428 582.58 427.3C566.48 426.6 554.08 407 554.98 383.7C555.88 360.3 569.58 342 585.78 342.7C601.88 343.4 614.28 362.9 613.38 386.3Z" fill="${color2}"/>
|
|
42
|
+
<path d="M517.78 386.7C518.48 395.9 513.48 404.1 506.48 405C499.48 405.9 493.28 399.1 492.48 389.9C491.78 380.7 496.78 372.5 503.78 371.6C510.78 370.7 517.08 377.4 517.78 386.7ZM562.08 389.7C563.48 387.1 573.18 373.7 593.28 378.6C598.58 379.9 600.98 381.8 601.48 382.5C602.28 383.6 602.48 385.2 601.68 387.3C600.18 391.5 596.98 391.4 595.28 390.5C594.18 390 580.18 380.6 567.28 394.6C566.38 395.6 564.78 395.9 563.28 394.7C561.88 393.6 561.28 391.3 562.08 389.7Z" fill="${color2}"/>
|
|
43
|
+
<path d="M540.58 583.9H539.98C502.88 584.3 457.98 579.4 414.48 570.9C410.78 592.5 408.48 619.6 410.48 651.9C415.38 733.6 463.88 785 538.78 785.7H541.78C616.68 785 665.18 733.6 670.08 651.9C671.98 619.6 669.78 592.5 666.08 570.9C622.58 579.5 577.68 584.4 540.58 583.9Z" fill="${color2}"/>
|
|
44
|
+
<path d="M435.08 577.1V657.5C435.08 657.5 471.88 664.9 508.78 659.8V585.6C485.38 584.3 460.18 581.4 435.08 577.1Z" fill="${color3}"/>
|
|
45
|
+
<path d="M707.28 499.9C707.28 499.9 635.68 522.5 540.58 523.2H539.98C445.08 522.6 373.58 500 373.28 499.9L349.28 559.8C409.28 577.9 483.68 589.6 539.88 588.9H540.48C596.68 589.6 671.08 577.9 731.18 559.8L707.28 499.9Z" fill="${color3}"/>
|
|
46
|
+
${num > 0 ? `
|
|
47
|
+
<!-- 新消息数量 -->
|
|
48
|
+
<path
|
|
49
|
+
d="M ${640-width} 400 L ${440+width} 400 L ${440+width} 1000 L ${640-width} 1000 Z"
|
|
50
|
+
style="fill: red"
|
|
51
|
+
/>
|
|
52
|
+
<circle cx="${640 - width}" cy="700" r="300" style="fill: red" />
|
|
53
|
+
<circle cx="${440 + width}" cy="700" r="300" style="fill: red" />
|
|
54
|
+
<text
|
|
55
|
+
x="540"
|
|
56
|
+
y="925"
|
|
57
|
+
font-size="600"
|
|
58
|
+
text-anchor="middle"
|
|
59
|
+
style="fill: white; font-weight: bold;"
|
|
60
|
+
>
|
|
61
|
+
${num}
|
|
62
|
+
</text>
|
|
63
|
+
` : ''}
|
|
64
|
+
</svg>
|
|
65
|
+
`
|
|
66
|
+
|
|
67
|
+
const svgDataUrl = 'data:image/svg+xml;charset=utf8,' + encodeURIComponent(svg)
|
|
68
|
+
let link: HTMLLinkElement | null = document.querySelector('link[rel~="icon"]')
|
|
69
|
+
if (!link) {
|
|
70
|
+
link = document.createElement('link')
|
|
71
|
+
link.rel = 'icon'
|
|
72
|
+
document.head.appendChild(link)
|
|
73
|
+
}
|
|
74
|
+
link.href = svgDataUrl
|
|
75
|
+
link.type = 'image/svg+xml'
|
|
76
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 触控板滚动蒙版
|
|
3
|
+
* 用来连续返回一系列滚动事件处理,自带中断处理
|
|
4
|
+
*/
|
|
5
|
+
export function wheelMask(process: (event: WheelEvent) => boolean, removeHook?: ()=>void): Promise<void> {
|
|
6
|
+
// 中断回调
|
|
7
|
+
const mask = document.createElement('div')
|
|
8
|
+
let r!: () => void
|
|
9
|
+
const promise = new Promise<void>((resolve) => {
|
|
10
|
+
r = resolve
|
|
11
|
+
})
|
|
12
|
+
const remove = () => {
|
|
13
|
+
document.body.removeChild(mask)
|
|
14
|
+
removeHook?.()
|
|
15
|
+
r()
|
|
16
|
+
}
|
|
17
|
+
let wheelTimeOut = setTimeout(remove, 100) as unknown as number
|
|
18
|
+
mask.style.position = 'fixed'
|
|
19
|
+
mask.style.top = '0'
|
|
20
|
+
mask.style.left = '0'
|
|
21
|
+
mask.style.width = '100vw'
|
|
22
|
+
mask.style.height = '100vh'
|
|
23
|
+
mask.style.zIndex = '9999'
|
|
24
|
+
mask.style.backgroundColor = 'rgba(0, 0, 0, 0)'
|
|
25
|
+
mask.addEventListener('wheel', (event) => {
|
|
26
|
+
event.preventDefault()
|
|
27
|
+
if (!process(event)) return
|
|
28
|
+
// 中断回调
|
|
29
|
+
clearTimeout(wheelTimeOut)
|
|
30
|
+
wheelTimeOut = setTimeout(remove, 100) as unknown as number
|
|
31
|
+
}, { passive: false })
|
|
32
|
+
document.body.appendChild(mask)
|
|
33
|
+
return promise
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function mousemoveMask(process: (event: MouseEvent) => void, removeHook?: (event: MouseEvent)=>void): Promise<void> {
|
|
37
|
+
// 中断回调
|
|
38
|
+
const mask = document.createElement('div')
|
|
39
|
+
let r!: () => void
|
|
40
|
+
const promise = new Promise<void>((resolve) => {
|
|
41
|
+
r = resolve
|
|
42
|
+
})
|
|
43
|
+
const remove = (event: MouseEvent) => {
|
|
44
|
+
document.body.removeChild(mask)
|
|
45
|
+
removeHook?.(event)
|
|
46
|
+
r()
|
|
47
|
+
}
|
|
48
|
+
mask.id = 'mask'
|
|
49
|
+
mask.style.position = 'fixed'
|
|
50
|
+
mask.style.top = '0'
|
|
51
|
+
mask.style.left = '0'
|
|
52
|
+
mask.style.width = '100vw'
|
|
53
|
+
mask.style.height = '100vh'
|
|
54
|
+
mask.style.zIndex = '9999'
|
|
55
|
+
mask.style.backgroundColor = 'rgba(0, 0, 0, 0)'
|
|
56
|
+
const mousemoveFun = (event: MouseEvent) => {
|
|
57
|
+
event.preventDefault()
|
|
58
|
+
process(event)
|
|
59
|
+
}
|
|
60
|
+
const mouseupFun = (event: MouseEvent) => {
|
|
61
|
+
event.preventDefault()
|
|
62
|
+
remove(event)
|
|
63
|
+
}
|
|
64
|
+
mask.addEventListener('mousemove', mousemoveFun, { passive: false })
|
|
65
|
+
mask.addEventListener('mouseleave', mouseupFun, { passive: false })
|
|
66
|
+
mask.addEventListener('mouseup', mouseupFun, { passive: false })
|
|
67
|
+
document.body.appendChild(mask)
|
|
68
|
+
return promise
|
|
69
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export default class Emoji {
|
|
2
|
+
static readonly apngMap = new Map<number, { super: boolean; suffix: number[] }>()
|
|
3
|
+
static readonly descMap = new Map<string, string>()
|
|
4
|
+
static readonly allList = new Set<number>()
|
|
5
|
+
static readonly allSuperList = new Set<number>()
|
|
6
|
+
|
|
7
|
+
static readonly superList: readonly number[] = [
|
|
8
|
+
5, 311, 312, 314, 317, 318, 319, 320, 324, 325, 337,
|
|
9
|
+
338, 339, 341, 342, 343, 344, 345, 346, 181, 74, 75,
|
|
10
|
+
351, 349, 350, 395, 114, 326, 53, 137, 333, 424, 415,
|
|
11
|
+
392, 425, 427, 426, 419, 429, 472, 474, 475, 476, 477,
|
|
12
|
+
478, 479,
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
static readonly normalList: readonly number[] = [
|
|
16
|
+
14, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 0, 15, 16,
|
|
17
|
+
96, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
|
18
|
+
31, 32, 33, 34, 35, 36, 37, 38, 39, 97, 98, 99, 100,
|
|
19
|
+
101, 102, 103, 104, 105, 106, 107, 108, 305, 109, 110,
|
|
20
|
+
111, 172, 182, 179, 173, 174, 212, 175, 178, 177, 176,
|
|
21
|
+
183, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
|
|
22
|
+
272, 277, 307, 306, 281, 282, 283, 284, 285, 293, 286,
|
|
23
|
+
287, 289, 294, 297, 298, 299, 300, 323, 332, 336, 353,
|
|
24
|
+
355, 356, 354, 352, 357, 428, 334, 347, 303, 302, 295,
|
|
25
|
+
49, 66, 63, 64, 187, 146, 116, 67, 60, 185, 76, 124,
|
|
26
|
+
118, 78, 119, 79, 120, 121, 77, 123, 201, 273, 46, 112,
|
|
27
|
+
56, 169, 171, 59, 144, 147, 148, 89, 41, 125, 42, 43, 86, 129,
|
|
28
|
+
85,
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
static readonly emojiList: readonly number[] = [
|
|
32
|
+
128522, 128524, 128538, 128531, 128560, 128541, 128513, 128540,
|
|
33
|
+
9786, 128525, 128532, 128516, 128527, 128530, 128563, 128536,
|
|
34
|
+
128557, 128561, 128514, 128170, 128074, 128077, 128079, 128078,
|
|
35
|
+
128591, 128076, 128070, 128064, 127836, 127847, 127838, 127866,
|
|
36
|
+
127867, 9749, 127822, 127827, 127817, 128684, 127801, 127881,
|
|
37
|
+
128157, 128163, 10024, 128168, 128166, 128293, 128164, 128169,
|
|
38
|
+
128137, 128235, 128014, 128103, 128102, 128053, 128055, 128046,
|
|
39
|
+
128020, 128056, 128123, 128027, 128054, 128051, 128098, 9728,
|
|
40
|
+
10068, 128299, 128147, 127978,
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
static readonly responseApngId: readonly number[] = [
|
|
44
|
+
5, 314, 318, 319, 320, 324, 337, 338, 339, 341, 342, 343, 344,
|
|
45
|
+
345, 346, 181, 74, 75, 351, 349, 350, 395, 326, 53, 333, 424,
|
|
46
|
+
425, 427, 426, 14, 4, 8, 9, 10, 12, 16, 96, 21, 23, 24, 25, 26,
|
|
47
|
+
27, 28, 29, 30, 32, 33, 34, 38, 39, 97, 98, 99, 100, 101, 102,
|
|
48
|
+
103, 104, 106, 305, 109, 111, 182, 179, 173, 174, 212, 175, 176,
|
|
49
|
+
183, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 277, 307,
|
|
50
|
+
306, 281, 282, 284, 285, 293, 287, 289, 294, 297, 298, 299, 332,
|
|
51
|
+
336, 353, 355, 356, 354, 352, 357, 428, 334, 347, 303, 302, 295,
|
|
52
|
+
49, 66, 63, 116, 60, 76, 124, 118, 78, 79, 120, 123, 201, 273,
|
|
53
|
+
171, 144, 147, 89, 41, 125, 42, 43, 129, 85,
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
static readonly responseEmojiId: readonly number[] = [
|
|
57
|
+
128522, 128524, 128538, 128531, 128560, 128541, 128513, 128540,
|
|
58
|
+
9786, 128532, 128516, 128527, 128530, 128563, 128536, 128557,
|
|
59
|
+
128514, 128170, 128074, 128077, 128079, 128076, 127836, 127847,
|
|
60
|
+
127838, 127866, 127867, 9749, 127822, 127827, 127817, 127801,
|
|
61
|
+
127881, 128157, 10024, 128168, 128166, 128293, 128164, 128235,
|
|
62
|
+
128103, 128102, 128053, 128046, 128027, 128051, 9728, 10068,
|
|
63
|
+
128147,
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
private suffixId?: number
|
|
67
|
+
|
|
68
|
+
private constructor(
|
|
69
|
+
public id: number,
|
|
70
|
+
public type: 'apng' | 'emoji',
|
|
71
|
+
public hasSuper: boolean,
|
|
72
|
+
public superSuffix: number[],
|
|
73
|
+
) {
|
|
74
|
+
if (superSuffix.length > 0) {
|
|
75
|
+
this.suffixId = superSuffix[0]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static get(id: number): Emoji | undefined {
|
|
80
|
+
if (id < 5000) {
|
|
81
|
+
const value = this.apngMap.get(id)
|
|
82
|
+
return value ? new Emoji(id, 'apng', value.super, value.suffix) : undefined
|
|
83
|
+
}
|
|
84
|
+
return new Emoji(id, 'emoji', false, [])
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static has(id: number): boolean {
|
|
88
|
+
return id >= 5000 || this.apngMap.has(id)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
static init() {
|
|
92
|
+
for (const id of [...this.superList, ...this.normalList, ...this.responseApngId]) {
|
|
93
|
+
const isSuper = this.superList.includes(id)
|
|
94
|
+
this.apngMap.set(id, { super: isSuper, suffix: [] })
|
|
95
|
+
if (isSuper) this.allSuperList.add(id)
|
|
96
|
+
this.allList.add(id)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static get responseId(): readonly number[] {
|
|
101
|
+
return [...this.responseApngId, ...this.responseEmojiId]
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get description(): string {
|
|
105
|
+
return Emoji.descMap.get(this.id.toString()) || '表情'
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
get value(): string {
|
|
109
|
+
return this.type === 'apng' ? this.getNormalUrl(this.id) : String.fromCodePoint(this.id)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
get superValue(): string | undefined {
|
|
113
|
+
if (!this.hasSuper) return undefined
|
|
114
|
+
return this.getSuperUrl(this.id, this.suffixId)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private getNormalUrl(id: number): string {
|
|
118
|
+
return `https://lib.stapxs.cn/download/stapxs-qq-lite/qq_emoji/${id}/apng/${id}.png`
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private getSuperUrl(id: number, suffix?: number): string {
|
|
122
|
+
const name = suffix ? `${id}_${suffix}` : `${id}`
|
|
123
|
+
return `https://lib.stapxs.cn/download/stapxs-qq-lite/qq_emoji/${id}/lottie/${name}.json`
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
setTimeout(Emoji.init.bind(Emoji), 0)
|