├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report---bug---.md │ └── feature-request--------.md ├── check-version.js ├── sqlite-build.patch └── workflows │ ├── codeql-analysis.yml │ └── main.yml ├── .gitignore ├── .idea ├── .gitignore ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── discord.xml ├── electron-qq.iml ├── inspectionProfiles │ └── Project_Default.xml ├── jsLibraryMappings.xml ├── modules.xml ├── runConfigurations │ ├── compile_bridge.xml │ ├── dev_eqq.xml │ └── start_bridge.xml └── vcs.xml ├── .vscode ├── launch.json └── settings.json ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── art-src ├── 768.psd ├── Notification Help.procreate ├── rainbow.xcf ├── trans.xcf ├── widetile.psd ├── xmas.png └── xmas.xcf ├── icalingua-bridge-oicq ├── .gitignore ├── .idea │ ├── .gitignore │ ├── eqq-bridge.iml │ ├── modules.xml │ └── vcs.xml ├── .prettierignore ├── .prettierrc.js ├── README.md ├── adapters │ └── oicqAdapter.ts ├── config.yaml ├── custom.example │ └── index.ts ├── handlers │ ├── registerFileMgrHandler.ts │ └── registerSocketHandlers.ts ├── index.ts ├── package.json ├── providers │ ├── argv.ts │ ├── configManager.ts │ ├── expressProvider.ts │ └── socketIoProvider.ts ├── static │ └── file-manager │ │ ├── assets │ │ ├── index.39fc9661.css │ │ ├── index.41ca5aaf.js │ │ └── vendor.8788b689.js │ │ └── index.html ├── storageProviders ├── tsconfig.json ├── types ├── utils │ ├── clients.ts │ ├── createRoom.ts │ ├── formatDate.ts │ ├── getAvatarUrl.ts │ ├── getImageUrlByMd5.ts │ ├── getSysInfo.ts │ ├── gfsTokenManager.ts │ ├── mime.ts │ ├── processMessage.ts │ ├── sendImgTokenManager.ts │ ├── silkDecode.ts │ ├── sleep.ts │ └── streamToBuffer.ts └── yarn.lock ├── icalingua ├── .babelrc ├── .electron-vue │ ├── build.ts │ ├── dev-client.ts │ ├── dev-runner.ts │ ├── webpack.main.config.ts │ └── webpack.renderer.config.ts ├── .gitignore ├── .prettierignore ├── .prettierrc.js ├── .yarn │ ├── plugins │ │ └── @yarnpkg │ │ │ └── plugin-interactive-tools.cjs │ └── releases │ │ └── yarn-3.1.1.cjs ├── .yarnrc.yml ├── package.json ├── src │ ├── index.ejs │ ├── main │ │ ├── adapters │ │ │ ├── oicqAdapter.ts │ │ │ └── socketIoAdapter.ts │ │ ├── handlers │ │ │ └── registerFileMgrHandler.ts │ │ ├── index.ts │ │ ├── ipc │ │ │ ├── botAndStorage.ts │ │ │ ├── downloadManager.ts │ │ │ ├── menuManager.ts │ │ │ ├── openImage.ts │ │ │ └── system.ts │ │ ├── providers │ │ │ └── socketIoProvider.ts │ │ ├── ready.ts │ │ └── utils │ │ │ ├── argv.ts │ │ │ ├── atCache.ts │ │ │ ├── avatarCache.ts │ │ │ ├── configManager.ts │ │ │ ├── errorHandler.ts │ │ │ ├── exit.ts │ │ │ ├── exportContacts.ts │ │ │ ├── exportGroupMembers.ts │ │ │ ├── getBuildInfo.ts │ │ │ ├── getFriends.ts │ │ │ ├── gfsTokenManager.ts │ │ │ ├── isAdmin.ts │ │ │ ├── isInlineReplySupported.ts │ │ │ ├── migrateData.ts │ │ │ ├── openMedia.ts │ │ │ ├── processMessage.ts │ │ │ ├── setPriority.ts │ │ │ ├── silkDecode.ts │ │ │ ├── socketIoSlave.ts │ │ │ ├── themes.ts │ │ │ ├── trayManager.ts │ │ │ ├── ui.ts │ │ │ ├── updateChecker.ts │ │ │ ├── version.ts │ │ │ ├── windowManager.ts │ │ │ ├── winstonLogger.ts │ │ │ └── writeCsvData.ts │ ├── renderer │ │ ├── App.vue │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ ├── Twemoji.ttf │ │ │ ├── fonts │ │ │ │ ├── CircularSpotifyTxT-Black.eot │ │ │ │ ├── CircularSpotifyTxT-Black.ttf │ │ │ │ ├── CircularSpotifyTxT-Black.woff │ │ │ │ ├── CircularSpotifyTxT-Black.woff2 │ │ │ │ ├── CircularSpotifyTxT-BlackItalic.eot │ │ │ │ ├── CircularSpotifyTxT-BlackItalic.svg │ │ │ │ ├── CircularSpotifyTxT-BlackItalic.ttf │ │ │ │ ├── CircularSpotifyTxT-BlackItalic.woff │ │ │ │ ├── CircularSpotifyTxT-BlackItalic.woff2 │ │ │ │ ├── CircularSpotifyTxT-Bold.eot │ │ │ │ ├── CircularSpotifyTxT-Bold.svg │ │ │ │ ├── CircularSpotifyTxT-Bold.ttf │ │ │ │ ├── CircularSpotifyTxT-Bold.woff │ │ │ │ ├── CircularSpotifyTxT-Bold.woff2 │ │ │ │ ├── CircularSpotifyTxT-BoldItalic.eot │ │ │ │ ├── CircularSpotifyTxT-BoldItalic.svg │ │ │ │ ├── CircularSpotifyTxT-BoldItalic.ttf │ │ │ │ ├── CircularSpotifyTxT-BoldItalic.woff │ │ │ │ ├── CircularSpotifyTxT-BoldItalic.woff2 │ │ │ │ ├── CircularSpotifyTxT-Book.eot │ │ │ │ ├── CircularSpotifyTxT-Book.svg │ │ │ │ ├── CircularSpotifyTxT-Book.ttf │ │ │ │ ├── CircularSpotifyTxT-Book.woff │ │ │ │ ├── CircularSpotifyTxT-Book.woff2 │ │ │ │ ├── CircularSpotifyTxT-BookItalic.eot │ │ │ │ ├── CircularSpotifyTxT-BookItalic.svg │ │ │ │ ├── CircularSpotifyTxT-BookItalic.ttf │ │ │ │ ├── CircularSpotifyTxT-BookItalic.woff │ │ │ │ ├── CircularSpotifyTxT-BookItalic.woff2 │ │ │ │ ├── CircularSpotifyTxT-Light.eot │ │ │ │ ├── CircularSpotifyTxT-Light.svg │ │ │ │ ├── CircularSpotifyTxT-Light.ttf │ │ │ │ ├── CircularSpotifyTxT-Light.woff │ │ │ │ ├── CircularSpotifyTxT-Light.woff2 │ │ │ │ ├── CircularSpotifyTxT-LightItalic.eot │ │ │ │ ├── CircularSpotifyTxT-LightItalic.svg │ │ │ │ ├── CircularSpotifyTxT-LightItalic.ttf │ │ │ │ ├── CircularSpotifyTxT-LightItalic.woff │ │ │ │ ├── CircularSpotifyTxT-LightItalic.woff2 │ │ │ │ ├── CircularSpotifyTxT-Medium.eot │ │ │ │ ├── CircularSpotifyTxT-Medium.svg │ │ │ │ ├── CircularSpotifyTxT-Medium.ttf │ │ │ │ ├── CircularSpotifyTxT-Medium.woff │ │ │ │ ├── CircularSpotifyTxT-Medium.woff2 │ │ │ │ ├── CircularSpotifyTxT-MediumItalic.eot │ │ │ │ ├── CircularSpotifyTxT-MediumItalic.svg │ │ │ │ ├── CircularSpotifyTxT-MediumItalic.ttf │ │ │ │ ├── CircularSpotifyTxT-MediumItalic.woff │ │ │ │ ├── CircularSpotifyTxT-MediumItalic.woff2 │ │ │ │ └── CircularSpotifyTxt-Black.svg │ │ │ ├── loginbg.jpg │ │ │ ├── logo.png │ │ │ ├── msyh.ttf │ │ │ ├── scrollbar.css │ │ │ ├── stylesheet.css │ │ │ └── user.svg │ │ ├── components │ │ │ ├── ContactEntry.vue │ │ │ ├── DialogAskCheckUpdate.vue │ │ │ ├── GroupEntry.vue │ │ │ ├── LottieAnimation.vue │ │ │ ├── QrcodeDrawer.vue │ │ │ ├── RoomEntry.vue │ │ │ ├── SideBarIcon.vue │ │ │ ├── Stickers.vue │ │ │ ├── TheContactsPanel.vue │ │ │ ├── TheRoomsPanel.vue │ │ │ ├── multipane │ │ │ │ ├── index.ts │ │ │ │ ├── multipane-resizer.vue │ │ │ │ ├── multipane.ts │ │ │ │ └── multipane.vue │ │ │ └── vac-mod │ │ │ │ ├── ChatWindow │ │ │ │ ├── Message │ │ │ │ │ ├── Message.vue │ │ │ │ │ ├── MessageImage.vue │ │ │ │ │ └── MessageReply.vue │ │ │ │ └── Room │ │ │ │ │ ├── Room.vue │ │ │ │ │ ├── RoomHeader.vue │ │ │ │ │ └── RoomMessageReply.vue │ │ │ │ ├── components │ │ │ │ ├── FormatMessage.vue │ │ │ │ ├── Loader.vue │ │ │ │ └── SvgIcon.vue │ │ │ │ ├── locales │ │ │ │ └── index.js │ │ │ │ ├── styles │ │ │ │ ├── animation.scss │ │ │ │ ├── helper.scss │ │ │ │ ├── index.scss │ │ │ │ └── menu.scss │ │ │ │ ├── themes │ │ │ │ └── index.js │ │ │ │ └── utils │ │ │ │ ├── filterItems.ts │ │ │ │ ├── formatString.ts │ │ │ │ ├── mediaFile.ts │ │ │ │ ├── mobileDetection.ts │ │ │ │ ├── recorder.js │ │ │ │ ├── roomValidation.ts │ │ │ │ ├── typingText.ts │ │ │ │ └── wav-encoder.js │ │ ├── main.ts │ │ ├── router │ │ │ └── index.ts │ │ ├── shims-vue.d.ts │ │ ├── utils │ │ │ ├── getLottieFace.ts │ │ │ ├── ipc.ts │ │ │ └── themes.ts │ │ └── views │ │ │ ├── Aria2Settings.vue │ │ │ ├── ChatView.vue │ │ │ ├── FriendRequest.vue │ │ │ ├── GroupNickEdit.vue │ │ │ ├── HistoryView.vue │ │ │ ├── IgnoreManageView.vue │ │ │ ├── KickAndExit.vue │ │ │ ├── LoginView.vue │ │ │ └── OpenForward.vue │ ├── storageProviders │ │ ├── MongoStorageProvider.ts │ │ ├── RedisStorageProvider.ts │ │ ├── SQLStorageProvider.ts │ │ └── SQLUpgradeScript │ │ │ ├── 0to1.ts │ │ │ ├── 1to2.ts │ │ │ ├── 2to3.ts │ │ │ ├── 3to4.ts │ │ │ ├── 4to5.ts │ │ │ ├── 5to6.ts │ │ │ ├── 6to7.ts │ │ │ └── 7to8.ts │ ├── types │ │ ├── Adapter.d.ts │ │ ├── Aria2Config.d.ts │ │ ├── AtCacheElem.d.ts │ │ ├── BilibiliMiniApp.d.ts │ │ ├── BridgeVersionInfo.d.ts │ │ ├── GetFriendsRet.d.ts │ │ ├── GroupOfFriend.d.ts │ │ ├── IgnoreChatInfo.d.ts │ │ ├── LastMessage.d.ts │ │ ├── LoginForm.d.ts │ │ ├── Message.d.ts │ │ ├── MessageMirai.d.ts │ │ ├── OnlineData.d.ts │ │ ├── OnlineStatusType.ts │ │ ├── RoamingStamp.d.ts │ │ ├── Room.d.ts │ │ ├── SQLTableTypes.d.ts │ │ ├── SearchableFriend.d.ts │ │ ├── SearchableGroup.d.ts │ │ ├── SendMessageParams.d.ts │ │ ├── StorageProvider.d.ts │ │ ├── StructMessageCard.d.ts │ │ ├── Version.d.ts │ │ ├── WinSize.d.ts │ │ └── cookies.d.ts │ └── utils │ │ ├── createRoom.ts │ │ ├── formatDate.ts │ │ ├── getAvatarUrl.ts │ │ ├── getCharCount.ts │ │ ├── getGTk.ts │ │ ├── getImageUrlByMd5.ts │ │ ├── getStaticPath.ts │ │ ├── getWinUrl.ts │ │ ├── mime.ts │ │ ├── sleep.ts │ │ └── streamToBuffer.ts ├── static │ ├── .gitkeep │ ├── 256x256.png │ ├── dark.png │ ├── darknewmsg.png │ ├── essenceInj.js │ ├── face │ │ ├── 100 │ │ ├── 101 │ │ ├── 102 │ │ ├── 103 │ │ ├── 104 │ │ ├── 105 │ │ ├── 106 │ │ ├── 107 │ │ ├── 108 │ │ ├── 109 │ │ ├── 110 │ │ ├── 111 │ │ ├── 112 │ │ ├── 113 │ │ ├── 114 │ │ ├── 115 │ │ ├── 116 │ │ ├── 117 │ │ ├── 118 │ │ ├── 119 │ │ ├── 120 │ │ ├── 121 │ │ ├── 122 │ │ ├── 123 │ │ ├── 124 │ │ ├── 125 │ │ ├── 126 │ │ ├── 127 │ │ ├── 128 │ │ ├── 129 │ │ ├── 130 │ │ ├── 131 │ │ ├── 132 │ │ ├── 133 │ │ ├── 134 │ │ ├── 135 │ │ ├── 136 │ │ ├── 137 │ │ ├── 138 │ │ ├── 139 │ │ ├── 140 │ │ ├── 141 │ │ ├── 142 │ │ ├── 143 │ │ ├── 144 │ │ ├── 145 │ │ ├── 146 │ │ ├── 147 │ │ ├── 148 │ │ ├── 149 │ │ ├── 150 │ │ ├── 151 │ │ ├── 152 │ │ ├── 153 │ │ ├── 154 │ │ ├── 155 │ │ ├── 156 │ │ ├── 157 │ │ ├── 158 │ │ ├── 159 │ │ ├── 160 │ │ ├── 161 │ │ ├── 162 │ │ ├── 163 │ │ ├── 164 │ │ ├── 165 │ │ ├── 166 │ │ ├── 167 │ │ ├── 168 │ │ ├── 169 │ │ ├── 170 │ │ ├── 171 │ │ ├── 172 │ │ ├── 173 │ │ ├── 174 │ │ ├── 175 │ │ ├── 176 │ │ ├── 177 │ │ ├── 178 │ │ ├── 179 │ │ ├── 180 │ │ ├── 181 │ │ ├── 182 │ │ ├── 183 │ │ ├── 184 │ │ ├── 185 │ │ ├── 186 │ │ ├── 187 │ │ ├── 188 │ │ ├── 189 │ │ ├── 190 │ │ ├── 191 │ │ ├── 192 │ │ ├── 193 │ │ ├── 194 │ │ ├── 195 │ │ ├── 196 │ │ ├── 197 │ │ ├── 198 │ │ ├── 199 │ │ ├── 200 │ │ ├── 201 │ │ ├── 202 │ │ ├── 203 │ │ ├── 204 │ │ ├── 205 │ │ ├── 206 │ │ ├── 207 │ │ ├── 208 │ │ ├── 209 │ │ ├── 210 │ │ ├── 211 │ │ ├── 212 │ │ ├── 213 │ │ ├── 214 │ │ ├── 215 │ │ ├── 216 │ │ ├── 217 │ │ ├── 218 │ │ ├── 219 │ │ ├── 220 │ │ ├── 221 │ │ ├── 222 │ │ ├── 223 │ │ ├── 224 │ │ ├── 225 │ │ ├── 226 │ │ ├── 227 │ │ ├── 228 │ │ ├── 229 │ │ ├── 230 │ │ ├── 231 │ │ ├── 232 │ │ ├── 233 │ │ ├── 234 │ │ ├── 235 │ │ ├── 236 │ │ ├── 237 │ │ ├── 238 │ │ ├── 239 │ │ ├── 240 │ │ ├── 241 │ │ ├── 242 │ │ ├── 243 │ │ ├── 244 │ │ ├── 245 │ │ ├── 246 │ │ ├── 247 │ │ ├── 260 │ │ ├── 261 │ │ ├── 262 │ │ ├── 263 │ │ ├── 264 │ │ ├── 265 │ │ ├── 266 │ │ ├── 267 │ │ ├── 268 │ │ ├── 269 │ │ ├── 270 │ │ ├── 271 │ │ ├── 272 │ │ ├── 273 │ │ ├── 274 │ │ ├── 276 │ │ ├── 277 │ │ ├── 278 │ │ ├── 279 │ │ ├── 280 │ │ ├── 281 │ │ ├── 282 │ │ ├── 283 │ │ ├── 284 │ │ ├── 285 │ │ ├── 286 │ │ ├── 287 │ │ ├── 288 │ │ ├── 289 │ │ ├── 290 │ │ ├── 291 │ │ ├── 292 │ │ ├── 293 │ │ ├── 294 │ │ ├── 295 │ │ ├── 296 │ │ ├── 297 │ │ ├── 298 │ │ ├── 299 │ │ ├── 300 │ │ ├── 301 │ │ ├── 302 │ │ ├── 303 │ │ ├── 304 │ │ ├── 305 │ │ ├── 306 │ │ ├── 307 │ │ ├── 308 │ │ ├── 309 │ │ ├── 310 │ │ ├── 311 │ │ ├── 312 │ │ ├── 313 │ │ ├── 314 │ │ ├── 315 │ │ ├── 316 │ │ ├── 317 │ │ ├── 318 │ │ ├── 319 │ │ ├── 320 │ │ ├── 321 │ │ ├── 322 │ │ ├── 323 │ │ ├── 324 │ │ ├── 325 │ │ ├── 326 │ │ ├── 327 │ │ ├── 328 │ │ ├── 329 │ │ ├── 330 │ │ ├── 331 │ │ ├── 000 │ │ ├── 001 │ │ ├── 002 │ │ ├── 003 │ │ ├── 004 │ │ ├── 005 │ │ ├── 006 │ │ ├── 007 │ │ ├── 008 │ │ ├── 009 │ │ ├── 010 │ │ ├── 011 │ │ ├── 012 │ │ ├── 013 │ │ ├── 014 │ │ ├── 015 │ │ ├── 016 │ │ ├── 018 │ │ ├── 019 │ │ ├── 020 │ │ ├── 021 │ │ ├── 022 │ │ ├── 023 │ │ ├── 024 │ │ ├── 025 │ │ ├── 026 │ │ ├── 027 │ │ ├── 028 │ │ ├── 029 │ │ ├── 030 │ │ ├── 031 │ │ ├── 032 │ │ ├── 033 │ │ ├── 034 │ │ ├── 035 │ │ ├── 036 │ │ ├── 037 │ │ ├── 038 │ │ ├── 039 │ │ ├── 041 │ │ ├── 042 │ │ ├── 043 │ │ ├── 046 │ │ ├── 049 │ │ ├── 050 │ │ ├── 053 │ │ ├── 054 │ │ ├── 055 │ │ ├── 056 │ │ ├── 057 │ │ ├── 059 │ │ ├── 060 │ │ ├── 061 │ │ ├── 063 │ │ ├── 064 │ │ ├── 066 │ │ ├── 067 │ │ ├── 069 │ │ ├── 074 │ │ ├── 075 │ │ ├── 076 │ │ ├── 077 │ │ ├── 078 │ │ ├── 079 │ │ ├── 081 │ │ ├── 085 │ │ ├── 086 │ │ ├── 089 │ │ ├── 096 │ │ ├── 097 │ │ ├── 098 │ │ └── 099 │ ├── file-manager │ │ ├── assets │ │ │ ├── index.39fc9661.css │ │ │ ├── index.41ca5aaf.js │ │ │ └── vendor.8788b689.js │ │ └── index.html │ ├── icons │ │ └── 512x512.png │ ├── imgView.html │ ├── lightning.svg │ ├── newmsg.png │ ├── notification.webp │ ├── photoWallInj.js │ ├── photoWallPreload.js │ ├── qlottie │ │ ├── 1 │ │ │ └── 1.json │ │ ├── 2 │ │ │ └── 2.json │ │ ├── 3 │ │ │ └── 3.json │ │ ├── 4 │ │ │ └── 4.json │ │ ├── 5 │ │ │ └── 5.json │ │ ├── 6 │ │ │ └── 6.json │ │ ├── 7 │ │ │ └── 7.json │ │ ├── 8 │ │ │ └── 8.json │ │ ├── 9 │ │ │ └── 9.json │ │ ├── 10 │ │ │ └── 10.json │ │ ├── 11 │ │ │ └── 11.json │ │ ├── 12 │ │ │ └── 12.json │ │ └── .DS_Store │ ├── sliderinj.js │ ├── tg.svg │ └── version.json ├── tsconfig.json └── yarn.lock └── pkgres ├── 512x512.png ├── icalingua ├── icalingua-beta.PKGBUILD.template ├── icalingua.PKGBUILD.template └── icalingua.desktop /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | charset = utf-8 7 | indent_style = space 8 | trim_trailing_whitespace = true 9 | tab_width = 4 10 | 11 | [*.{ts, js, ejs, vue}] 12 | indent_size = 4 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report---bug---.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report / Bug 反馈 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug / 描述** 11 | A clear and concise description of what the bug is. / 请简要描述出现的 bug 12 | 13 | **To Reproduce / 复现过程** 14 | 15 | **Expected behavior / 预期的结果** 16 | 17 | **Screenshots / 截图** 18 | If applicable, add screenshots to help explain your problem. / 如果可能的话,请附上相关截图 19 | 20 | **System information / 系统信息** 21 | - OS: [e.g. Arch Linux] 22 | - Version [e.g. 2.1.4] 23 | 24 | **Additional context / 附加信息** 25 | Add any other context about the problem here. / 如果有什么额外信息,可以写在这里 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request--------.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request / 新功能请求 3 | about: Suggest an idea for this project 4 | title: "[Feature Request]" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/check-version.js: -------------------------------------------------------------------------------- 1 | const packageJson = require('../icalingua/package.json') 2 | const fs = require('fs') 3 | 4 | Date.prototype.format = function (fmt) { 5 | var o = { 6 | 'M+': this.getMonth() + 1, //月份 7 | 'd+': this.getDate(), //日 8 | 'h+': this.getHours(), //小时 9 | 'm+': this.getMinutes(), //分 10 | 's+': this.getSeconds(), //秒 11 | 'q+': Math.floor((this.getMonth() + 3) / 3), //季度 12 | S: this.getMilliseconds(), //毫秒 13 | } 14 | if (/(y+)/.test(fmt)) { 15 | fmt = fmt.replace( 16 | RegExp.$1, 17 | (this.getFullYear() + '').substr(4 - RegExp.$1.length), 18 | ) 19 | } 20 | for (var k in o) { 21 | if (new RegExp('(' + k + ')').test(fmt)) { 22 | fmt = fmt.replace( 23 | RegExp.$1, 24 | RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length), 25 | ) 26 | } 27 | } 28 | return fmt 29 | } 30 | 31 | const now = new Date() 32 | const commitId = process.env.SHA.substr(0, 7) 33 | const ref = process.env.REF 34 | const isProduction = ref.startsWith('refs/tags/v') 35 | const buildTime = now.toLocaleString(undefined, {timeZone: 'Asia/Shanghai'}) 36 | const version = process.env.GIT_VER 37 | 38 | packageJson.version = version 39 | 40 | console.log(`commitId: ${commitId} 41 | ref: ${ref} 42 | isProduction: ${isProduction} 43 | buildTime: ${buildTime} 44 | version: ${version}`) 45 | 46 | console.log(`::set-output name=arch-version::${version.replace(/-/g, '_')}`) 47 | console.log(`::set-output name=pkg-name::icalingua${isProduction ? '' : '-beta'}`) 48 | 49 | fs.writeFileSync('icalingua/static/version.json', 50 | JSON.stringify({commitId, ref, isProduction, buildTime, version}), 'utf-8') 51 | 52 | fs.writeFileSync('icalingua/package.json', 53 | JSON.stringify(packageJson), 'utf-8') 54 | -------------------------------------------------------------------------------- /.github/sqlite-build.patch: -------------------------------------------------------------------------------- 1 | diff --git a/icalingua/node_modules/@vscode/sqlite3/package.json b/icalingua/node_modules/@vscode/sqlite3/package.json 2 | --- a/icalingua/node_modules/@vscode/sqlite3/package.json 3 | +++ b/icalingua/node_modules/@vscode/sqlite3/package.json 4 | @@ -51,7 +51,8 @@ 5 | "scripts": { 6 | "pretest": "node test/support/createdb.js", 7 | "test": "mocha -R spec --timeout 480000", 8 | - "pack": "node-pre-gyp package" 9 | + "pack": "node-pre-gyp package", 10 | + "install": "node-gyp rebuild" 11 | }, 12 | "license": "BSD-3-Clause", 13 | "keywords": [ 14 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /.idea/discord.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /.idea/electron-qq.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 27 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations/compile_bridge.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/storageProviders: -------------------------------------------------------------------------------- 1 | ../icalingua/src/storageProviders -------------------------------------------------------------------------------- /icalingua-bridge-oicq/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "CommonJS", 4 | "target": "ES2017", 5 | "esModuleInterop": true, 6 | "sourceMap": false, 7 | "moduleResolution": "Node", 8 | "resolveJsonModule": true, 9 | "outDir": "build" 10 | }, 11 | "exclude": ["node_modules"] 12 | } 13 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/types: -------------------------------------------------------------------------------- 1 | ../icalingua/src/types/ -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/clients.ts: -------------------------------------------------------------------------------- 1 | import Room from '../types/Room' 2 | import { broadcast } from '../providers/socketIoProvider' 3 | import Message from '../types/Message' 4 | import OnlineData from '../types/OnlineData' 5 | 6 | export default { 7 | updateRoom(room: Room) { 8 | broadcast('updateRoom', room) 9 | }, 10 | addMessage(roomId: number, message: Message) { 11 | broadcast('addMessage', { roomId, message }) 12 | }, 13 | deleteMessage(messageId: string) { 14 | broadcast('deleteMessage', messageId) 15 | }, 16 | setOnline() { 17 | broadcast('setOnline') 18 | }, 19 | setOffline(message: string) { 20 | broadcast('setOffline', message) 21 | }, 22 | sendOnlineData(data: OnlineData) { 23 | broadcast('onlineData', data) 24 | }, 25 | setShutUp(isShutUp: boolean) { 26 | broadcast('setShutUp', isShutUp) 27 | }, 28 | message(msg: string) { 29 | broadcast('message', msg) 30 | }, 31 | messageError(msg: string) { 32 | broadcast('messageError', msg) 33 | }, 34 | messageSuccess(msg: string) { 35 | broadcast('messageSuccess', msg) 36 | }, 37 | setAllRooms(rooms: Room[]) { 38 | broadcast('setAllRooms', rooms) 39 | }, 40 | closeLoading() { 41 | broadcast('closeLoading') 42 | }, 43 | notifyError(msg: { title: string; message: string }) { 44 | broadcast('notifyError', msg) 45 | }, 46 | revealMessage(messageId: string | number) { 47 | broadcast('revealMessage', messageId) 48 | }, 49 | setMessages(roomId: number, messages: Message[]) { 50 | broadcast('setMessages', { roomId, messages }) 51 | }, 52 | sendAddRequest(data) { 53 | broadcast('sendAddRequest', data) 54 | }, 55 | syncRead(roomId: number) { 56 | broadcast('syncRead', roomId) 57 | }, 58 | } 59 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/createRoom.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/createRoom.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/formatDate.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/formatDate.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/getAvatarUrl.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/getAvatarUrl.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/getImageUrlByMd5.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/getImageUrlByMd5.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/getSysInfo.ts: -------------------------------------------------------------------------------- 1 | import { version, name } from '../package.json' 2 | import os from 'os' 3 | import { getClientsCount } from '../providers/socketIoProvider' 4 | 5 | export default () => { 6 | const used = process.memoryUsage() 7 | const load = os.loadavg() 8 | return `${name} ${version} 9 | Running on ${os.type()} ${os.hostname()} ${os.release()} 10 | Resident Set Size ${Math.round((used.rss / 1024 / 1024) * 100) / 100}MB 11 | Heap used ${Math.round((used.heapUsed / 1024 / 1024) * 100) / 100}MB 12 | Load ${load.join(' ')} 13 | Server Node ${process.versions.node} 14 | ${getClientsCount()} clients connected` 15 | } 16 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/gfsTokenManager.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/main/utils/gfsTokenManager.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/mime.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/mime.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/sendImgTokenManager.ts: -------------------------------------------------------------------------------- 1 | import { randomUUID } from 'crypto' 2 | 3 | let activeToken: string 4 | 5 | export default { 6 | create() { 7 | activeToken = randomUUID() 8 | return activeToken 9 | }, 10 | verify(token: string) { 11 | if (!token) return false 12 | if (token === activeToken) { 13 | activeToken = null 14 | return true 15 | } 16 | return false 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/silkDecode.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import ffmpeg from 'fluent-ffmpeg' 3 | import { PassThrough } from 'stream' 4 | import silk from 'silk-sdk' 5 | import { streamToBuffer } from './streamToBuffer' 6 | 7 | export default async (url: string) => { 8 | const res = await axios.get(url, { 9 | responseType: 'arraybuffer', 10 | }) 11 | const bufPcm = silk.decode(res.data) 12 | const bufMp3 = await conventPcmToMp3(bufPcm) 13 | return 'data:audio/mp3;base64,' + bufMp3.toString('base64') 14 | } 15 | 16 | const conventPcmToMp3 = (pcm: Buffer): Promise => { 17 | return new Promise((resolve, reject) => { 18 | const inStream = new PassThrough() 19 | const outStream = new PassThrough() 20 | inStream.end(pcm) 21 | ffmpeg(inStream) 22 | .inputOption(['-f', 's16le', '-ar', '24000', '-ac', '1']) 23 | .outputFormat('mp3') 24 | .on('error', (err) => { 25 | reject(err) 26 | }) 27 | .on('end', async () => { 28 | const buf = await streamToBuffer(outStream) 29 | resolve(buf) 30 | }) 31 | .pipe(outStream, { end: true }) 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/sleep.ts -------------------------------------------------------------------------------- /icalingua-bridge-oicq/utils/streamToBuffer.ts: -------------------------------------------------------------------------------- 1 | ../../icalingua/src/utils/streamToBuffer.ts -------------------------------------------------------------------------------- /icalingua/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "comments": false, 3 | "env": { 4 | "main": { 5 | "presets": [ 6 | [ 7 | "env", 8 | { 9 | "targets": { "node": 7 } 10 | } 11 | ], 12 | "stage-0" 13 | ] 14 | }, 15 | "renderer": { 16 | "presets": [ 17 | [ 18 | "env", 19 | { 20 | "modules": false 21 | } 22 | ], 23 | "stage-0" 24 | ] 25 | }, 26 | "web": { 27 | "presets": [ 28 | [ 29 | "env", 30 | { 31 | "modules": false 32 | } 33 | ], 34 | "stage-0" 35 | ] 36 | } 37 | }, 38 | "plugins": ["transform-runtime"] 39 | } 40 | -------------------------------------------------------------------------------- /icalingua/.electron-vue/dev-client.ts: -------------------------------------------------------------------------------- 1 | const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 2 | 3 | hotClient.subscribe(event => { 4 | /** 5 | * Reload browser when HTMLWebpackPlugin emits a new index.html 6 | * 7 | * Currently disabled until jantimon/html-webpack-plugin#680 is resolved. 8 | * https://github.com/SimulatedGREG/electron-vue/issues/437 9 | * https://github.com/jantimon/html-webpack-plugin/issues/680 10 | */ 11 | // if (event.action === 'reload') { 12 | // window.location.reload() 13 | // } 14 | 15 | /** 16 | * Notify `mainWindow` when `main` process is compiling, 17 | * giving notice for an expected reload of the `electron` process 18 | */ 19 | if (event.action === 'compiling') { 20 | document.body.innerHTML += ` 21 | 34 | 35 |
36 | Compiling Main Process... 37 |
38 | ` 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /icalingua/.electron-vue/webpack.main.config.ts: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | process.env.BABEL_ENV = 'main' 4 | 5 | import path from 'path' 6 | import {dependencies} from '../package.json' 7 | import webpack from 'webpack' 8 | 9 | let mainConfig = { 10 | entry: { 11 | main: path.join(__dirname, '../src/main/index.ts') 12 | }, 13 | externals: [ 14 | ...Object.keys(dependencies || {}) 15 | ], 16 | module: { 17 | rules: [ 18 | { 19 | test: /\.js$/, 20 | use: [ 21 | 'thread-loader', 22 | 'babel-loader' 23 | ], 24 | exclude: /node_modules/ 25 | }, 26 | { 27 | test: /\.ts$/, 28 | use: [ 29 | 'ts-loader' 30 | ], 31 | exclude: /node_modules/ 32 | }, 33 | { 34 | test: /\.node$/, 35 | use: 'node-loader' 36 | } 37 | ] 38 | }, 39 | node: { 40 | __dirname: process.env.NODE_ENV !== 'production', 41 | __filename: process.env.NODE_ENV !== 'production' 42 | }, 43 | output: { 44 | filename: '[name].js', 45 | libraryTarget: 'commonjs2', 46 | path: path.join(__dirname, '../dist/electron') 47 | }, 48 | plugins: [ 49 | new webpack.NoEmitOnErrorsPlugin() 50 | ], 51 | resolve: { 52 | extensions: ['.js', '.ts', '.json', '.node'] 53 | }, 54 | target: 'electron-main' 55 | } 56 | 57 | /** 58 | * Adjust mainConfig for production settings 59 | */ 60 | if (process.env.NODE_ENV === 'production') { 61 | mainConfig.plugins.push( 62 | new webpack.DefinePlugin({ 63 | 'process.env.NODE_ENV': '"production"' 64 | }) 65 | ) 66 | } 67 | 68 | module.exports = mainConfig 69 | -------------------------------------------------------------------------------- /icalingua/.prettierignore: -------------------------------------------------------------------------------- 1 | .electron-vue 2 | .yarn 3 | node_modules 4 | static 5 | package.json 6 | dist 7 | .idea 8 | .vscode 9 | build -------------------------------------------------------------------------------- /icalingua/.prettierrc.js: -------------------------------------------------------------------------------- 1 | // .prettierrc.js 2 | module.exports = { 3 | // 一行最多 120 字符 4 | printWidth: 120, 5 | // 使用 2 个空格缩进 6 | tabWidth: 4, 7 | // 不使用缩进符,而使用空格 8 | useTabs: false, 9 | // 行尾需要有分号 10 | semi: false, 11 | // 使用单引号 12 | singleQuote: true, 13 | // 对象的 key 仅在必要时用引号 14 | quoteProps: 'as-needed', 15 | // jsx 标签内不使用单引号,而使用双引号 16 | jsxSingleQuote: false, 17 | // 末尾需要有逗号 18 | trailingComma: 'all', 19 | // 大括号内的首尾需要空格 20 | bracketSpacing: true, 21 | // 箭头函数,只有一个参数的时候,也需要括号 22 | arrowParens: 'always', 23 | // 每个文件格式化的范围是文件的全部内容 24 | rangeStart: 0, 25 | rangeEnd: Infinity, 26 | // 不需要写文件开头的 @prettier 27 | requirePragma: false, 28 | // 不需要自动在文件开头插入 @prettier 29 | insertPragma: false, 30 | // 使用默认的折行标准 31 | proseWrap: 'preserve', 32 | // 根据显示样式决定 html 要不要折行 33 | htmlWhitespaceSensitivity: 'css', 34 | // vue 文件中的 script 和 style 内不用缩进 35 | vueIndentScriptAndStyle: false, 36 | // 换行符使用 lf 37 | endOfLine: 'lf', 38 | // 格式化嵌入的内容 39 | embeddedLanguageFormatting: 'auto', 40 | } 41 | -------------------------------------------------------------------------------- /icalingua/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | plugins: 4 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs 5 | spec: "@yarnpkg/plugin-interactive-tools" 6 | 7 | yarnPath: .yarn/releases/yarn-3.1.1.cjs 8 | -------------------------------------------------------------------------------- /icalingua/src/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Icalingua 8 | 9 | 10 | 11 |
12 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /icalingua/src/main/handlers/registerFileMgrHandler.ts: -------------------------------------------------------------------------------- 1 | import { Server, Socket } from 'socket.io' 2 | import adapter from '../adapters/oicqAdapter' 3 | 4 | export default (io: Server, socket: Socket, gin: number) => { 5 | const gfs = adapter.acquireGfs(gin) 6 | 7 | socket.on('ls', async (fid: string, start: number, cb) => { 8 | //列出目录中的文件 9 | const res = await gfs.ls(fid, start) 10 | cb(res) 11 | }) 12 | 13 | //参数:gin, fid 14 | socket.on('download', async (fid, cb) => { 15 | const res = await gfs.download(fid) 16 | cb(res) 17 | }) 18 | 19 | socket.on('stat', async (fid: string, cb) => { 20 | //获取文件详细信息 21 | const res = await gfs.stat(fid) 22 | cb(res) 23 | }) 24 | 25 | socket.on('mkdir', async (name: string, cb) => { 26 | //创建文件夹 27 | const res = await gfs.mkdir(name) 28 | cb(res) 29 | }) 30 | 31 | socket.on('mv', async (fid: string, dirId: string, cb) => { 32 | //移动 33 | const res = await gfs.mv(fid, dirId) 34 | cb(res) 35 | }) 36 | 37 | socket.on('rm', async (fid: string, cb) => { 38 | //删除 39 | const res = await gfs.rm(fid) 40 | cb(res) 41 | }) 42 | 43 | socket.on('rename', async (fid: string, name: string, cb) => { 44 | //改名移动 45 | const res = await gfs.rename(fid, name) 46 | cb(res) 47 | }) 48 | } 49 | -------------------------------------------------------------------------------- /icalingua/src/main/index.ts: -------------------------------------------------------------------------------- 1 | import {app} from 'electron' 2 | import argv from './utils/argv' 3 | 4 | 5 | (() => [ 6 | '我所遗失的心啊', 7 | 8 | '我曾做过的梦啊', 9 | 10 | '随风飘散 被什么人 丢到哪里', 11 | 12 | '我所追求的生活', 13 | 14 | '我曾努力过的那些事', 15 | 16 | '都是笑话 不值一提 该放弃', 17 | ])() 18 | 19 | //防止连接自签名的 aria2 出错 20 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' 21 | // 可选的禁用硬件加速 #416 22 | if(argv.dha){ 23 | app.disableHardwareAcceleration() 24 | } 25 | //启用一些 flag 26 | app.commandLine.appendSwitch('enable-features', 'CSSContainerQueries') 27 | app.commandLine.appendSwitch('proxy-server', '') 28 | 29 | app.on('ready', async () => { 30 | (() => ['#5bcffa', 31 | '#f5abb9', 32 | '#ffffff', 33 | '#f5abb9', 34 | '#5bcffa'])() 35 | 36 | if (argv.version) { 37 | console.log(require('./utils/version').version) 38 | app.quit() 39 | } 40 | if (!argv.config && !app.requestSingleInstanceLock()) app.quit() 41 | else require('./ready') 42 | }) 43 | -------------------------------------------------------------------------------- /icalingua/src/main/ipc/system.ts: -------------------------------------------------------------------------------- 1 | import { ipcMain } from 'electron' 2 | import { app } from 'electron' 3 | import { getConfig, saveConfigFile } from '../utils/configManager' 4 | import version from '../utils/version' 5 | 6 | ipcMain.handle('getVersion', () => version.version) 7 | ipcMain.handle('getAria2Settings', () => getConfig().aria2) 8 | ipcMain.handle('getKeyToSendMessage', () => getConfig().keyToSendMessage) 9 | ipcMain.handle('getStorePath', () => app.getPath('userData')) 10 | 11 | ipcMain.on('setCheckUpdate', (_, enabled: boolean) => { 12 | getConfig().updateCheck = enabled 13 | saveConfigFile() 14 | }) 15 | 16 | //Solution for 4764a6, 4cf06e, 509310 17 | ipcMain.handle('getLastUsedStickerType', () => getConfig().lastUsedStickerType) 18 | ipcMain.on('setLastUsedStickerType', (_, type: 'face' | 'remote' | 'stickers' | 'emojis') => { 19 | getConfig().lastUsedStickerType = type 20 | saveConfigFile() 21 | }) 22 | -------------------------------------------------------------------------------- /icalingua/src/main/providers/socketIoProvider.ts: -------------------------------------------------------------------------------- 1 | import { createServer } from 'http' 2 | import { Server } from 'socket.io' 3 | import express from 'express' 4 | import registerFileMgrHandler from '../handlers/registerFileMgrHandler' 5 | import gfsTokenManager from '../utils/gfsTokenManager' 6 | import oicqAdapter from '../adapters/oicqAdapter' 7 | import * as net from 'net' 8 | import path from 'path' 9 | import getStaticPath from '../../utils/getStaticPath' 10 | 11 | type ClientRoles = 'main' | 'fileMgr' 12 | 13 | const app = express() 14 | app.use('/file-manager', express.static(path.join(getStaticPath(), 'file-manager'))) 15 | 16 | const httpServer = createServer(app) 17 | const io = new Server(httpServer, { 18 | cors: { 19 | allowedHeaders: ['GET', 'POST'], 20 | origin: '*', 21 | }, 22 | }) 23 | io.on('connection', (socket) => { 24 | console.log('new client connected') 25 | socket.emit('requireAuth', '', { 26 | version: '', 27 | protocolVersion: '', 28 | }) 29 | socket.once('auth', async (sign: string, role: ClientRoles = 'main') => { 30 | switch (role) { 31 | case 'main': 32 | case 'fileMgr': 33 | const gin = gfsTokenManager.verify(sign) 34 | if (gin) { 35 | registerFileMgrHandler(io, socket, gin) 36 | console.log('客户端验证成功') 37 | socket.emit('authSucceed', gin, oicqAdapter.getGroupInfo(gin)) 38 | } else { 39 | console.log('客户端验证失败') 40 | socket.emit('authFailed') 41 | socket.disconnect() 42 | } 43 | break 44 | } 45 | }) 46 | }) 47 | 48 | let port = 0 49 | const host = '127.0.0.1' 50 | 51 | export default { 52 | init() { 53 | httpServer.listen(port, host, () => (port = (httpServer.address() as net.AddressInfo).port)) 54 | }, 55 | getPort() { 56 | return port 57 | }, 58 | } 59 | -------------------------------------------------------------------------------- /icalingua/src/main/ready.ts: -------------------------------------------------------------------------------- 1 | import { app, protocol } from 'electron' 2 | import { destroyWindow, showLoginWindow, showWindow } from './utils/windowManager' 3 | import { createBot, logOut } from './ipc/botAndStorage' 4 | import { getConfig } from './utils/configManager' 5 | import repl from 'repl' 6 | 7 | require('./utils/configManager') 8 | require('./ipc/system') 9 | require('./ipc/botAndStorage') 10 | require('./ipc/openImage') 11 | protocol.registerBufferProtocol('jsbridge', () => {}) 12 | if (process.env.NODE_ENV === 'development') 13 | protocol.registerFileProtocol('file', (request, cb) => { 14 | const pathname = request.url.replace('file:///', '') 15 | cb(pathname) 16 | }) 17 | if (getConfig().account.autologin || getConfig().adapter === 'socketIo') { 18 | createBot(getConfig().account) 19 | } else { 20 | showLoginWindow() 21 | } 22 | app.on('window-all-closed', () => { 23 | logOut() 24 | setTimeout(() => { 25 | app.quit() 26 | }, 1000) 27 | }) 28 | 29 | app.on('second-instance', showWindow) 30 | 31 | app.on('before-quit', () => { 32 | logOut() 33 | destroyWindow() 34 | }) 35 | 36 | app.on('will-quit', () => { 37 | logOut() 38 | destroyWindow() 39 | }) 40 | 41 | repl.start('icalingua> ') 42 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/argv.ts: -------------------------------------------------------------------------------- 1 | import minimist from 'minimist' 2 | 3 | type Args = { 4 | config?: string 5 | version?: boolean 6 | hide?: boolean 7 | dha?: boolean 8 | } 9 | 10 | export default minimist(process.argv, { 11 | string: ['config'], 12 | boolean: ['version', 'hide', 'dha'], 13 | alias: { 14 | c: 'config', 15 | V: 'version', 16 | h: 'hide', 17 | }, 18 | }) as Args 19 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/atCache.ts: -------------------------------------------------------------------------------- 1 | import AtCacheItem from '../../types/AtCacheElem' 2 | 3 | let cache: AtCacheItem[] = [ 4 | { 5 | id: 'all', 6 | text: '@全体成员', 7 | }, 8 | ] 9 | 10 | export default { 11 | clear: () => 12 | (cache = [ 13 | { 14 | id: 'all', 15 | text: '@全体成员', 16 | }, 17 | ]), 18 | push: (e: AtCacheItem) => cache.push(e), 19 | get: () => cache, 20 | } 21 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/avatarCache.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron' 2 | import axios from 'axios' 3 | import path from 'path' 4 | import fs from 'fs' 5 | import md5 from 'md5' 6 | 7 | const cache = new Map() 8 | const dir = fs.mkdtempSync(path.join(app.getPath('temp'), 'ica')) 9 | 10 | export default async (url: string): Promise => { 11 | let file = cache.get(url) 12 | if (!file) { 13 | const res = await axios.get(url, { 14 | responseType: 'arraybuffer', 15 | proxy: false, 16 | }) 17 | file = path.join(dir, md5(url)) 18 | fs.writeFileSync(file, res.data) 19 | cache.set(url, file) 20 | } 21 | return file 22 | } 23 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/errorHandler.ts: -------------------------------------------------------------------------------- 1 | import logger from './winstonLogger' 2 | import { RetError } from 'oicq' 3 | 4 | const errorHandler = (e: Error | RetError, noThrow = false) => { 5 | if ('name' in e) { 6 | logger.error({ errname: e.name, errMsg: e.message, e: e.toString() }) 7 | } else { 8 | logger.error({ errname: e.code, errMsg: e.message, e: e.toString() }) 9 | } 10 | if (!noThrow) throw e 11 | } 12 | 13 | export default errorHandler 14 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/exit.ts: -------------------------------------------------------------------------------- 1 | import { getMainWindow } from './windowManager' 2 | import { getConfig, saveConfigFile } from './configManager' 3 | 4 | const exit = () => { 5 | const win = getMainWindow() 6 | const size = win.getSize() 7 | getConfig().winSize = { 8 | width: size[0], 9 | height: size[1], 10 | max: win.isMaximized(), 11 | } 12 | saveConfigFile() 13 | win.destroy() 14 | } 15 | export default exit 16 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/getBuildInfo.ts: -------------------------------------------------------------------------------- 1 | import version from './version' 2 | 3 | export default () => { 4 | if (process.env.NODE_ENV === 'development') return '调试模式' 5 | else if (!version.isProduction) 6 | return `测试版本 7 | ${version.ref} 8 | ${version.buildTime}` 9 | 10 | return '' 11 | } 12 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/getFriends.ts: -------------------------------------------------------------------------------- 1 | import { getCookies, getUin } from '../ipc/botAndStorage' 2 | import getGTk from '../../utils/getGTk' 3 | import GetFriendsRet from '../../types/GetFriendsRet' 4 | import axios from 'axios' 5 | import GroupOfFriend from '../../types/GroupOfFriend' 6 | 7 | export default async (): Promise => { 8 | const cookies = await getCookies('qzone.qq.com') 9 | const gTk = getGTk(cookies.p_skey) 10 | const uin = getUin() 11 | 12 | const data: GetFriendsRet = ( 13 | await axios.get( 14 | `https://mobile.qzone.qq.com/friend/mfriend_list?qzonetoken=&g_tk=${gTk}&res_uin=${uin}&res_type=normal&format=json&count_per_page=10&page_index=0&page_type=0&mayknowuin=&qqmailstat=`, 15 | { 16 | headers: { 17 | Cookie: `uin=${cookies.uin}; skey=${cookies.skey}; p_uin=${cookies.p_uin}; p_skey=${cookies.p_skey}`, 18 | }, 19 | proxy: false, 20 | }, 21 | ) 22 | ).data 23 | 24 | if (!(data && data.code === 0)) return [] 25 | 26 | const map: { [p: number]: GroupOfFriend } = {} 27 | for (const i of data.data.gpnames) { 28 | map[i.gpid] = { 29 | name: i.gpname, 30 | friends: [], 31 | } 32 | } 33 | for (const i of data.data.list) { 34 | map[i.groupid].friends.push({ 35 | uin: i.uin, 36 | nick: i.nick, 37 | remark: i.remark, 38 | sc: i.searchField.toUpperCase(), 39 | age: 0, 40 | nickname: i.nick, 41 | sex: undefined, 42 | user_id: i.uin, 43 | }) 44 | } 45 | return Object.values(map) 46 | } 47 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/gfsTokenManager.ts: -------------------------------------------------------------------------------- 1 | import { v4 as uuid } from 'uuid' 2 | 3 | //token,{群号,到期时间} 4 | const map = new Map() 5 | 6 | export default { 7 | create(gin: number) { 8 | const token = uuid() 9 | map.set(token, { 10 | gin, 11 | expire: new Date().getTime() + 1000 * 60 * 60, 12 | }) 13 | return token 14 | }, 15 | verify(token: string) { 16 | const res = map.get(token) 17 | if (!res) return false 18 | // map.delete(token) 19 | if (new Date().getTime() > res.expire) return false 20 | return res.gin 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/isAdmin.ts: -------------------------------------------------------------------------------- 1 | import { GroupRole } from 'oicq' 2 | import ui from './ui' 3 | import { getGroupMemberInfo, getUin } from '../ipc/botAndStorage' 4 | 5 | let cachedRoomId: number 6 | let cachedStatus: GroupRole 7 | 8 | export default async () => { 9 | if (ui.getSelectedRoomId() > -1) return false 10 | if (ui.getSelectedRoomId() === cachedRoomId) 11 | return cachedStatus === 'member' || !cachedStatus ? false : cachedStatus 12 | const memberInfo = await getGroupMemberInfo(-ui.getSelectedRoomId(), getUin(), false) 13 | cachedStatus = memberInfo?.role 14 | cachedRoomId = ui.getSelectedRoomId() 15 | return cachedStatus === 'member' || !cachedStatus ? false : cachedStatus 16 | } 17 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/isInlineReplySupported.ts: -------------------------------------------------------------------------------- 1 | import { getCapabilities } from 'freedesktop-notifications' 2 | 3 | let cache: boolean = undefined 4 | 5 | export default async () => { 6 | if (cache === undefined) { 7 | try { 8 | const capabilities = await getCapabilities() 9 | cache = capabilities.includes('inline-reply') 10 | } catch (ignore) { 11 | return (cache = false) 12 | } 13 | } 14 | return cache 15 | } 16 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/migrateData.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron' 2 | import path from 'path' 3 | import fs from 'fs' 4 | import childProcess from 'child_process' 5 | 6 | const storageNew = app.getPath('userData') 7 | const storageOld = path.join(storageNew, '../electron-qq') 8 | 9 | export default () => { 10 | fs.copyFileSync(path.join(storageOld, 'config.yaml'), path.join(storageNew, 'config.yaml')) 11 | childProcess.spawn('mv', [path.join(storageOld, 'data'), path.join(storageNew, 'data')]) 12 | childProcess.spawn('mv', [path.join(storageOld, 'stickers'), path.join(storageNew, 'stickers')]) 13 | childProcess.spawn('mv', [path.join(storageOld, 'databases'), path.join(storageNew, 'databases')]) 14 | childProcess.spawn('mv', [path.join(storageOld, 'font.ttf'), path.join(storageNew, 'font.ttf')]) 15 | } 16 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/openMedia.ts: -------------------------------------------------------------------------------- 1 | import { execFileSync, execFile } from 'child_process' 2 | import which from 'which' 3 | import ui from '../utils/ui' 4 | 5 | let viewer = '' 6 | const VIEWERS = ['vlc', 'mpv'] 7 | 8 | try { 9 | const xdgDefault = execFileSync('xdg-mime', ['query', 'default', 'video/mp4']).toString() 10 | for (const i of VIEWERS) { 11 | if (xdgDefault.includes(i)) { 12 | viewer = i 13 | break 14 | } 15 | } 16 | } catch (e) {} 17 | 18 | if (!viewer) { 19 | for (const i of VIEWERS) { 20 | const resolved = which.sync(i, { nothrow: true }) 21 | if (resolved) { 22 | viewer = i 23 | break 24 | } 25 | } 26 | } 27 | 28 | if (!viewer) { 29 | console.log('Cannot find an external media player') 30 | } 31 | export default (url: string) => { 32 | if (viewer) { 33 | execFile(viewer, [url]) 34 | } else { 35 | ui.messageError('找不到可用的本地查看器') 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/setPriority.ts: -------------------------------------------------------------------------------- 1 | import { getConfig, saveConfigFile } from './configManager' 2 | import { updateAppMenu } from '../ipc/menuManager' 3 | import { updateTrayIcon, updateTrayMenu } from './trayManager' 4 | import ui from './ui' 5 | 6 | export default (lev: 1 | 2 | 3 | 4 | 5) => { 7 | getConfig().priority = lev 8 | updateAppMenu() 9 | updateTrayMenu() 10 | updateTrayIcon() 11 | ui.updatePriority(lev) 12 | saveConfigFile() 13 | } 14 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/silkDecode.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import ffmpeg from 'fluent-ffmpeg/lib/fluent-ffmpeg' 3 | import { PassThrough } from 'stream' 4 | import silk from 'silk-sdk' 5 | import { streamToBuffer } from '../../utils/streamToBuffer' 6 | 7 | export default async (url: string) => { 8 | const res = await axios.get(url, { 9 | responseType: 'arraybuffer', 10 | proxy: false, 11 | }) 12 | const bufPcm = silk.decode(res.data) 13 | const bufMp3 = await conventPcmToMp3(bufPcm) 14 | return 'data:audio/mp3;base64,' + bufMp3.toString('base64') 15 | } 16 | 17 | const conventPcmToMp3 = (pcm: Buffer): Promise => { 18 | return new Promise((resolve, reject) => { 19 | const inStream = new PassThrough() 20 | const outStream = new PassThrough() 21 | inStream.end(pcm) 22 | ffmpeg(inStream) 23 | .inputOption(['-f', 's16le', '-ar', '24000', '-ac', '1']) 24 | .outputFormat('mp3') 25 | .on('error', (err) => { 26 | reject(err) 27 | }) 28 | .on('end', async () => { 29 | const buf = await streamToBuffer(outStream) 30 | resolve(buf) 31 | }) 32 | .pipe(outStream, { end: true }) 33 | }) 34 | } 35 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/socketIoSlave.ts: -------------------------------------------------------------------------------- 1 | import { getConfig } from './configManager' 2 | import { io, Socket } from 'socket.io-client' 3 | 4 | let socketIo: Socket 5 | 6 | if (getConfig().socketIo) { 7 | socketIo = io(getConfig().socketIo, { transports: ['websocket'] }) 8 | console.log('socketIo 从端连接成功') 9 | } 10 | 11 | export const pushUnreadCount = (count: number) => { 12 | if (socketIo) socketIo.send('qqCount', count) 13 | } 14 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/themes.ts: -------------------------------------------------------------------------------- 1 | import * as windowMgr from './windowManager' 2 | import * as menuMgr from '../ipc/menuManager' 3 | import { ipcMain, nativeTheme } from 'electron' 4 | import * as configMgr from './configManager' 5 | 6 | var themeList = ['light', 'dark'] 7 | var themeData: any = {} 8 | 9 | export function getThemeData() { 10 | return themeData 11 | } 12 | 13 | export function getThemeList() { 14 | return themeList 15 | } 16 | 17 | export function refreshTheme() { 18 | windowMgr.sendToMainWindow('theme:refresh') 19 | } 20 | 21 | export function useTheme(theme: string) { 22 | windowMgr.sendToMainWindow('theme:use', theme) 23 | } 24 | 25 | ipcMain.on('theme:list-complete', (_, list) => { 26 | themeList = list 27 | menuMgr.updateAppMenu() 28 | let theme = configMgr.getConfig().theme 29 | if (theme != undefined) theme === 'auto' ? autoSetTheme() : useTheme(theme) 30 | }) 31 | 32 | ipcMain.on('theme:theme-data', (_, data) => { 33 | themeData = data 34 | }) 35 | 36 | export const autoSetTheme = () => { 37 | useTheme(nativeTheme.shouldUseDarkColors ? 'dark' : 'light') 38 | } 39 | 40 | nativeTheme.on('updated', (e) => { 41 | if (configMgr.getConfig().theme === 'auto') autoSetTheme() 42 | }) 43 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/updateChecker.ts: -------------------------------------------------------------------------------- 1 | import version from './version' 2 | import axios from 'axios' 3 | import errorHandler from './errorHandler' 4 | import {getConfig} from './configManager' 5 | 6 | type CheckUpdateResult = { 7 | latestVersion: string 8 | hasUpdate: boolean 9 | } 10 | 11 | // 在 sendOnlineData 的时候如果没有缓存的更新数据,那应该先发送更新以外的数据, 12 | // 然后后台检查更新完在运行一次 sendOnlineData 13 | let cache: CheckUpdateResult 14 | 15 | export const checkUpdate = async () => { 16 | if (process.env.NODE_ENV === 'development' || getConfig().updateCheck !== true) 17 | cache = { 18 | hasUpdate: false, 19 | latestVersion: '', 20 | } 21 | else if (version.isProduction) { 22 | try { 23 | const res = await axios.get('https://api.github.com/repos/Icalingua/Icalingua/releases/latest', { 24 | proxy: false, 25 | }) 26 | const latestVersion = res.data.tag_name 27 | cache = { 28 | hasUpdate: latestVersion !== 'v' + version.version, 29 | latestVersion, 30 | } 31 | } catch (ex) { 32 | console.log('检查更新失败') 33 | errorHandler(ex) 34 | } 35 | } 36 | else { 37 | try { 38 | const res = await axios.get('https://api.github.com/repos/Icalingua/Icalingua/git/ref/heads/dev', { 39 | proxy: false, 40 | }) 41 | const latestVersion = res.data.object.sha.substr(0, 7) 42 | cache = { 43 | hasUpdate: latestVersion !== version.commitId, 44 | latestVersion, 45 | } 46 | } catch (ex) { 47 | console.log('检查更新失败') 48 | errorHandler(ex) 49 | } 50 | } 51 | } 52 | 53 | export const getCachedUpdate = () => cache 54 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/version.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import getStaticPath from '../../utils/getStaticPath' 3 | import path from 'path' 4 | import { app } from 'electron' 5 | 6 | const version: Version = JSON.parse(fs.readFileSync(path.join(getStaticPath(), 'version.json'), 'utf-8')) 7 | 8 | if (!version.version) version.version = app.getVersion() 9 | 10 | export default version 11 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/winstonLogger.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron' 2 | import winston from 'winston' 3 | import path from 'path' 4 | import DailyRotateFile from 'winston-daily-rotate-file' 5 | 6 | const errPath = app.getPath('crashDumps') 7 | const logger = winston.createLogger({ 8 | level: 'info', 9 | format: winston.format.json(), 10 | defaultMeta: { service: 'eqq-service' }, 11 | transports: [ 12 | // 错误消息记录到文件 13 | new DailyRotateFile({ 14 | filename: path.join(errPath, 'error-report-%DATE%.log'), 15 | datePattern: 'YYYY-MM-DD-HH', 16 | zippedArchive: true, 17 | maxSize: '20m', 18 | maxFiles: '14d', 19 | level: 'error', 20 | }), 21 | // 所有消息输出到控制台 22 | new winston.transports.Console(), 23 | ], 24 | }) 25 | 26 | export default logger 27 | -------------------------------------------------------------------------------- /icalingua/src/main/utils/writeCsvData.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | 3 | import { createObjectCsvWriter as createCsvWriter } from 'csv-writer' 4 | import { ObjectMap } from 'csv-writer/src/lib/lang/object' 5 | 6 | export default async function ( 7 | header: Array<{ id: string; title: string }>, 8 | data: ObjectMap[], 9 | savePath: string, 10 | ): Promise { 11 | if (!savePath) return false 12 | 13 | const csvWriter = createCsvWriter({ 14 | path: savePath, 15 | header, 16 | append: false, 17 | }) 18 | await csvWriter.writeRecords(data) 19 | 20 | return true 21 | } 22 | -------------------------------------------------------------------------------- /icalingua/src/renderer/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 32 | 33 | 67 | -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/.gitkeep -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/Twemoji.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/Twemoji.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Black.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BlackItalic.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Bold.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BoldItalic.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Book.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-BookItalic.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Light.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-LightItalic.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-Medium.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.eot -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.woff -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/fonts/CircularSpotifyTxT-MediumItalic.woff2 -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/loginbg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/loginbg.jpg -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/logo.png -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/msyh.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/src/renderer/assets/msyh.ttf -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/scrollbar.css: -------------------------------------------------------------------------------- 1 | ::-webkit-scrollbar { 2 | width: 6px; 3 | height: 6px; 4 | } 5 | ::-webkit-scrollbar-thumb { 6 | border-radius: 3px; 7 | -webkit-box-shadow: none !important; 8 | } 9 | ::-webkit-scrollbar-thumb { 10 | background-color: #999999 !important; 11 | background-image: none !important; 12 | } 13 | ::-webkit-scrollbar-thumb:hover { 14 | background-color: #dd5e89 !important; 15 | } 16 | 17 | ::selection { 18 | background: #d3d3d3; 19 | color: #555; 20 | } 21 | 22 | ::-moz-selection { 23 | background: #d3d3d3; 24 | color: #555; 25 | } 26 | 27 | ::-webkit-selection { 28 | background: #d3d3d3; 29 | color: #555; 30 | } 31 | -------------------------------------------------------------------------------- /icalingua/src/renderer/assets/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/DialogAskCheckUpdate.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 35 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/GroupEntry.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 25 | 26 | 60 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/QrcodeDrawer.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 40 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/SideBarIcon.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 21 | 22 | 37 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/multipane/index.ts: -------------------------------------------------------------------------------- 1 | import Multipane from './multipane.vue' 2 | import MultipaneResizer from './multipane-resizer.vue' 3 | 4 | export { Multipane, MultipaneResizer } 5 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/multipane/multipane-resizer.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/multipane/multipane.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 49 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/locales/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | ROOMS_EMPTY: 'No rooms', 3 | ROOM_EMPTY: 'No room selected', 4 | NEW_MESSAGES: 'New Messages', 5 | MESSAGE_DELETED: 'This message was deleted', 6 | MESSAGES_EMPTY: 'No messages', 7 | CONVERSATION_STARTED: 'Conversation started on:', 8 | TYPE_MESSAGE: 'Type message', 9 | SEARCH: 'Search', 10 | IS_ONLINE: 'is online', 11 | LAST_SEEN: 'last seen ', 12 | IS_TYPING: 'is writing...', 13 | } 14 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/styles/index.scss: -------------------------------------------------------------------------------- 1 | @import 'animation'; 2 | @import 'menu'; 3 | @import 'helper'; 4 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/styles/menu.scss: -------------------------------------------------------------------------------- 1 | .vac-menu-list { 2 | border-radius: 4px; 3 | display: block; 4 | cursor: pointer; 5 | background: var(--chat-dropdown-bg-color); 6 | padding: 6px 0; 7 | 8 | :hover { 9 | background: var(--chat-dropdown-bg-color-hover); 10 | transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); 11 | } 12 | 13 | :not(:hover) { 14 | transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); 15 | } 16 | } 17 | 18 | .vac-menu-item { 19 | -webkit-box-align: center; 20 | -ms-flex-align: center; 21 | align-items: center; 22 | display: -webkit-box; 23 | display: -ms-flexbox; 24 | display: flex; 25 | -webkit-box-flex: 1; 26 | -ms-flex: 1 1 100%; 27 | flex: 1 1 100%; 28 | min-height: 30px; 29 | padding: 5px 16px; 30 | position: relative; 31 | white-space: nowrap; 32 | line-height: 30px; 33 | } 34 | 35 | .vac-menu-options { 36 | position: absolute; 37 | right: 10px; 38 | top: 20px; 39 | z-index: 9999; 40 | min-width: 150px; 41 | display: inline-block; 42 | border-radius: 4px; 43 | font-size: 14px; 44 | color: var(--chat-color); 45 | overflow-y: auto; 46 | overflow-x: hidden; 47 | contain: content; 48 | box-shadow: 0 2px 2px -4px rgba(0, 0, 0, 0.1), 0 2px 2px 1px rgba(0, 0, 0, 0.12), 0 1px 8px 1px rgba(0, 0, 0, 0.12); 49 | } 50 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/utils/filterItems.ts: -------------------------------------------------------------------------------- 1 | export default (items, prop, val, startsWith = false) => { 2 | if (!val || val === '') return items 3 | 4 | return items.filter((v) => { 5 | if (startsWith) return formatString(v[prop]).startsWith(formatString(val)) 6 | return formatString(v[prop]).includes(formatString(val)) 7 | }) 8 | } 9 | 10 | function formatString(string: string): string { 11 | return string 12 | .toLowerCase() 13 | .normalize('NFD') 14 | .replace(/[\u0300-\u036f]/g, '') 15 | } 16 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/utils/mediaFile.ts: -------------------------------------------------------------------------------- 1 | export function isImageFile(file: { type: string }) { 2 | if (!file) return 3 | const { type } = file 4 | return type.toLowerCase().startsWith('image/') 5 | } 6 | 7 | export function isVideoFile(file: { type: string }) { 8 | if (!file) return 9 | const { type } = file 10 | return type.toLowerCase().startsWith('video/') 11 | } 12 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/utils/roomValidation.ts: -------------------------------------------------------------------------------- 1 | export function roomsValid(obj) { 2 | const roomsValidate = [ 3 | { key: 'roomId', type: ['string', 'number'] }, 4 | { key: 'roomName', type: ['string'] }, 5 | { key: 'users', type: ['array'] }, 6 | ] 7 | 8 | const validate = (obj, props) => { 9 | return props.every((prop) => { 10 | let validType = false 11 | 12 | if (prop.type[0] === 'array' && Array.isArray(obj[prop.key])) { 13 | validType = true 14 | } else if (prop.type.find((t) => t === typeof obj[prop.key])) { 15 | validType = true 16 | } 17 | 18 | return validType && checkObjectValid(obj, prop.key) 19 | }) 20 | } 21 | 22 | return validate(obj, roomsValidate) 23 | } 24 | 25 | export function partcipantsValid(obj) { 26 | const participantsValidate = [ 27 | { key: '_id', type: ['string', 'number'] }, 28 | { key: 'username', type: ['string'] }, 29 | ] 30 | 31 | const validate = (obj, props) => { 32 | return props.every((prop) => { 33 | const validType = prop.type.find((t) => t === typeof obj[prop.key]) 34 | return validType && checkObjectValid(obj, prop.key) 35 | }) 36 | } 37 | 38 | return validate(obj, participantsValidate) 39 | } 40 | 41 | export function messagesValid(obj) { 42 | const participantsValidate = [ 43 | { key: '_id', type: ['string', 'number'] }, 44 | { key: 'content', type: ['string', 'number'] }, 45 | { key: 'senderId', type: ['string', 'number'] }, 46 | ] 47 | 48 | const validate = (obj, props) => { 49 | return props.every((prop) => { 50 | const validType = prop.type.find((t) => t === typeof obj[prop.key]) 51 | return validType && checkObjectValid(obj, prop.key) 52 | }) 53 | } 54 | 55 | return validate(obj, participantsValidate) 56 | } 57 | 58 | function checkObjectValid(obj, key) { 59 | return Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== null && obj[key] !== undefined 60 | } 61 | -------------------------------------------------------------------------------- /icalingua/src/renderer/components/vac-mod/utils/typingText.ts: -------------------------------------------------------------------------------- 1 | export default (room, currentUserId, textMessages) => { 2 | if (room.typingUsers && room.typingUsers.length) { 3 | const typingUsers = room.users.filter((user) => { 4 | if (user._id === currentUserId) return 5 | if (room.typingUsers.indexOf(user._id) === -1) return 6 | if (user.status && user.status.state === 'offline') return 7 | return true 8 | }) 9 | 10 | if (!typingUsers.length) return 11 | 12 | if (room.users.length === 2) { 13 | return textMessages.IS_TYPING 14 | } else { 15 | return typingUsers.map((user) => user.username).join(', ') + ' ' + textMessages.IS_TYPING 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /icalingua/src/renderer/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import axios from 'axios' 3 | import ElementUI from 'element-ui' 4 | import 'element-ui/lib/theme-chalk/index.css' 5 | import App from './App.vue' 6 | import router from './router' 7 | 8 | Vue.use(require('vue-electron')) 9 | Vue.config.productionTip = false 10 | 11 | Vue.use(ElementUI) 12 | 13 | /* eslint-disable no-new */ 14 | new Vue({ 15 | components: { App }, 16 | router, 17 | template: '', 18 | }).$mount('#app') 19 | -------------------------------------------------------------------------------- /icalingua/src/renderer/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import ChatView from '../views/ChatView.vue' 4 | import HistoryView from '../views/HistoryView.vue' 5 | import LoginView from '../views/LoginView.vue' 6 | import Aria2Settings from '../views/Aria2Settings.vue' 7 | import IgnoreManage from '../views/IgnoreManageView.vue' 8 | import GroupNickEdit from '../views/GroupNickEdit.vue' 9 | import FriendRequest from '../views/FriendRequest.vue' 10 | import KickAndExit from '../views/KickAndExit.vue' 11 | import OpenForward from '../views/OpenForward.vue' 12 | 13 | Vue.use(Router) 14 | 15 | export default new Router({ 16 | routes: [ 17 | { 18 | path: '/main', 19 | name: 'chat-page', 20 | component: ChatView, 21 | }, 22 | { 23 | path: '/groupNickEdit/:gin/:gn/:nick', 24 | name: 'group-nick-edit-page', 25 | component: GroupNickEdit, 26 | }, 27 | { 28 | path: '/kickAndExit/:action/:gin/:uin/:groupName/:userName', 29 | name: 'lick-and-exit-confirm-page', 30 | component: KickAndExit, 31 | }, 32 | { 33 | path: '/history', 34 | name: 'history-page', 35 | component: HistoryView, 36 | }, 37 | { 38 | path: '/login', 39 | name: 'login-page', 40 | component: LoginView, 41 | }, 42 | { 43 | path: '/aria2', 44 | name: 'aria2-page', 45 | component: Aria2Settings, 46 | }, 47 | { 48 | path: '/ignoreManage', 49 | name: 'ignore-manage-page', 50 | component: IgnoreManage, 51 | }, 52 | { 53 | path: '/friendRequest', 54 | name: 'friend-request-page', 55 | component: FriendRequest, 56 | }, 57 | { 58 | path: '/openForward', 59 | name: 'open-forward-page', 60 | component: OpenForward, 61 | }, 62 | ], 63 | }) 64 | -------------------------------------------------------------------------------- /icalingua/src/renderer/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | -------------------------------------------------------------------------------- /icalingua/src/renderer/utils/getLottieFace.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | 3 | const map = new Map([ 4 | ['[打call]请使用最新版手机QQ体验新功能', 1], 5 | ['[变形]请使用最新版手机QQ体验新功能', 2], 6 | ['[仔细分析]请使用最新版手机QQ体验新功能', 4], 7 | ['[加油]请使用最新版手机QQ体验新功能', 5], 8 | ['[菜汪]请使用最新版手机QQ体验新功能', 7], 9 | ['[崇拜]请使用最新版手机QQ体验新功能', 8], 10 | ['[比心]请使用最新版手机QQ体验新功能', 9], 11 | ['[庆祝]请使用最新版手机QQ体验新功能', 10], 12 | ['[吃糖]请使用最新版手机QQ体验新功能', 12], 13 | ]) 14 | 15 | export default (msgText: string): string => { 16 | const id = map.get(msgText) 17 | if (id) { 18 | const i = String(id) 19 | // @ts-ignore 20 | return path.join(__static, 'qlottie', i, i + '.json') 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /icalingua/src/renderer/views/Aria2Settings.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 54 | 55 | 64 | -------------------------------------------------------------------------------- /icalingua/src/renderer/views/GroupNickEdit.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 39 | 40 | 50 | -------------------------------------------------------------------------------- /icalingua/src/renderer/views/IgnoreManageView.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /icalingua/src/renderer/views/KickAndExit.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 52 | 53 | 68 | -------------------------------------------------------------------------------- /icalingua/src/renderer/views/OpenForward.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 32 | 33 | 43 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/0to1.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion, MsgTableName } from '../../types/SQLTableTypes' 3 | 4 | const upg0to1 = async (db: Knex) => { 5 | await db.schema.alterTable('rooms', (table) => { 6 | table.dropColumn('at') 7 | }) 8 | await db.schema.alterTable('rooms', (table) => { 9 | table.string('at') 10 | }) 11 | const msgTableNames = await db('msgTableName').select('tableName') 12 | const msgTableNamesAry = msgTableNames.map((obj) => obj.tableName) 13 | if (msgTableNamesAry.length !== 0) { 14 | const PAry = msgTableNamesAry.map(async (msgTableName) => { 15 | await db.schema.alterTable(msgTableName, (table) => { 16 | table.dropColumn('at') 17 | }) 18 | await db.schema.alterTable(msgTableName, (table) => { 19 | table.string('at') 20 | }) 21 | }) 22 | await Promise.all(PAry) 23 | } 24 | await db('dbVersion').update({ dbVersion: 1 }) 25 | } 26 | 27 | export default upg0to1 28 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/1to2.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion, MsgTableName } from '../../types/SQLTableTypes' 3 | 4 | const upg1to2 = async (db: Knex) => { 5 | const msgTableNames = await db('msgTableName').select('tableName') 6 | const msgTableNamesAry = msgTableNames.map((obj) => obj.tableName) 7 | if (msgTableNamesAry.length !== 0) { 8 | const PAry = msgTableNamesAry.map(async (msgTableName) => { 9 | await db.schema.alterTable(msgTableName, (table) => { 10 | table.boolean('deleted').nullable() 11 | table.boolean('system').nullable() 12 | table.text('mirai').nullable() 13 | table.boolean('reveal').nullable() 14 | }) 15 | }) 16 | await Promise.all(PAry) 17 | } 18 | await db('dbVersion').update({ dbVersion: 2 }) 19 | } 20 | 21 | export default upg1to2 22 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/2to3.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion, MsgTableName } from '../../types/SQLTableTypes' 3 | 4 | const upg2to3 = async (db: Knex) => { 5 | const msgTableNames = await db('msgTableName').select('tableName') 6 | const msgTableNamesAry = msgTableNames.map((obj) => obj.tableName) 7 | if (msgTableNamesAry.length !== 0) { 8 | const PAry = msgTableNamesAry.map(async (msgTableName) => { 9 | await db.schema.alterTable(msgTableName, (table) => { 10 | table.boolean('flash').nullable() 11 | }) 12 | }) 13 | await Promise.all(PAry) 14 | } 15 | await db('dbVersion').update({ dbVersion: 3 }) 16 | } 17 | 18 | export default upg2to3 19 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/3to4.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import IgnoreChatInfo from '../../types/IgnoreChatInfo' 3 | import { DBVersion } from '../../types/SQLTableTypes' 4 | 5 | const upg3to4 = async (db: Knex) => { 6 | const ignoredChats = await db('ignoredChats').select('*') 7 | await db.schema.dropTable('ignoredChats') 8 | await db.schema.createTable('ignoredChats', (table) => { 9 | table.bigInteger('id').unique().primary().index() 10 | table.string('name') 11 | }) 12 | if (ignoredChats.length !== 0) { 13 | await db('ignoredChats').insert(ignoredChats) 14 | } 15 | await db('dbVersion').update({ dbVersion: 4 }) 16 | } 17 | 18 | export default upg3to4 19 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/4to5.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion, MsgTableName } from '../../types/SQLTableTypes' 3 | 4 | const upg4to5 = async (db: Knex) => { 5 | const msgTableNames = await db('msgTableName').select('tableName') 6 | const msgTableNamesAry = msgTableNames.map((obj) => obj.tableName) 7 | if (msgTableNamesAry.length !== 0) { 8 | const PAry = msgTableNamesAry.map(async (msgTableName) => { 9 | await db.schema.alterTable(msgTableName, (table) => { 10 | table.string('title', 24).nullable() 11 | }) 12 | }) 13 | await Promise.all(PAry) 14 | } 15 | await db('dbVersion').update({ dbVersion: 5 }) 16 | } 17 | 18 | export default upg4to5 19 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/5to6.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion, MsgTableName } from '../../types/SQLTableTypes' 3 | 4 | const upg5to6 = async (db: Knex) => { 5 | const msgTableNames = await db('msgTableName').select('tableName') 6 | const msgTableNamesAry = msgTableNames.map((obj) => obj.tableName) 7 | if (msgTableNamesAry.length !== 0) { 8 | const PAry = msgTableNamesAry.map(async (msgTableName) => { 9 | await db.schema.alterTable(msgTableName, (table) => { 10 | table.text('files').nullable() 11 | }) 12 | }) 13 | await Promise.all(PAry) 14 | } 15 | await db('dbVersion').update({ dbVersion: 6 }) 16 | } 17 | 18 | export default upg5to6 19 | -------------------------------------------------------------------------------- /icalingua/src/storageProviders/SQLUpgradeScript/7to8.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex' 2 | import { DBVersion } from '../../types/SQLTableTypes' 3 | 4 | const upg7to8 = async (db: Knex) => { 5 | await db.schema.alterTable('rooms', (table) => { 6 | table.dropColumn('avatar') 7 | }) 8 | await db('dbVersion').update({ dbVersion: 8 }) 9 | } 10 | 11 | export default upg7to8 12 | -------------------------------------------------------------------------------- /icalingua/src/types/Aria2Config.d.ts: -------------------------------------------------------------------------------- 1 | type Aria2Config = { 2 | enabled: boolean 3 | host: string 4 | port: number 5 | secure: boolean 6 | secret: string 7 | path: string 8 | } 9 | 10 | export default Aria2Config 11 | -------------------------------------------------------------------------------- /icalingua/src/types/AtCacheElem.d.ts: -------------------------------------------------------------------------------- 1 | type AtCacheItem = { 2 | text: string 3 | id: number | 'all' 4 | } 5 | 6 | export default AtCacheItem 7 | -------------------------------------------------------------------------------- /icalingua/src/types/BridgeVersionInfo.d.ts: -------------------------------------------------------------------------------- 1 | export default interface BridgeVersionInfo { 2 | version: string 3 | protocolVersion: string 4 | } 5 | -------------------------------------------------------------------------------- /icalingua/src/types/GetFriendsRet.d.ts: -------------------------------------------------------------------------------- 1 | export default interface RootName { 2 | code: number 3 | subcode: number 4 | message: string 5 | default: number 6 | data: Data 7 | } 8 | 9 | interface Data { 10 | gpnames: Gpnames[] 11 | list: List[] 12 | mayknow: Mayknow 13 | speciallist: number[] 14 | } 15 | 16 | interface Mayknow { 17 | allnum: number 18 | list: object 19 | page: number 20 | } 21 | 22 | interface List { 23 | groupid: number 24 | isvip: number 25 | nick: string 26 | remark: string 27 | searchField: string 28 | uin: number 29 | viplevel: number 30 | } 31 | 32 | interface Gpnames { 33 | gpid: number 34 | gpname: string 35 | } 36 | -------------------------------------------------------------------------------- /icalingua/src/types/GroupOfFriend.d.ts: -------------------------------------------------------------------------------- 1 | import SearchableFriend from './SearchableFriend' 2 | 3 | export default interface GroupOfFriend { 4 | name: string 5 | friends: SearchableFriend[] 6 | } 7 | -------------------------------------------------------------------------------- /icalingua/src/types/IgnoreChatInfo.d.ts: -------------------------------------------------------------------------------- 1 | type IgnoreChatInfo = { 2 | id: number 3 | name: string 4 | } 5 | 6 | export default IgnoreChatInfo 7 | -------------------------------------------------------------------------------- /icalingua/src/types/LastMessage.d.ts: -------------------------------------------------------------------------------- 1 | export default interface LastMessage { 2 | content?: string 3 | timestamp?: string 4 | username?: string 5 | } 6 | -------------------------------------------------------------------------------- /icalingua/src/types/LoginForm.d.ts: -------------------------------------------------------------------------------- 1 | import OnlineStatusType from './OnlineStatusType' 2 | 3 | type LoginForm = { 4 | username: string | number 5 | password: string 6 | protocol: 1 | 2 | 3 | 4 | 5 7 | autologin?: boolean 8 | onlineStatus?: OnlineStatusType 9 | storageType: 'mdb' | 'redis' | 'sqlite' | 'mysql' | 'pg' 10 | mdbConnStr: string 11 | rdsHost?: string 12 | sqlHost?: string 13 | sqlUsername?: string 14 | sqlPassword?: string 15 | sqlDatabase?: string 16 | } 17 | 18 | export default LoginForm 19 | -------------------------------------------------------------------------------- /icalingua/src/types/Message.d.ts: -------------------------------------------------------------------------------- 1 | import MessageMirai from './MessageMirai' 2 | 3 | interface MessageFile { 4 | type: string 5 | url: string 6 | size?: number 7 | name?: string 8 | fid?: string 9 | } 10 | 11 | export default interface Message { 12 | _id: string | number 13 | senderId?: number 14 | username: string 15 | content: string 16 | code?: string 17 | timestamp?: string 18 | date?: string 19 | role?: string 20 | file?: MessageFile 21 | files: MessageFile[] 22 | time?: number 23 | replyMessage?: Message 24 | at?: boolean | 'all' 25 | deleted?: boolean 26 | system?: boolean 27 | mirai?: MessageMirai 28 | reveal?: boolean 29 | flash?: boolean 30 | title?: string 31 | } 32 | -------------------------------------------------------------------------------- /icalingua/src/types/MessageMirai.d.ts: -------------------------------------------------------------------------------- 1 | type MiraiTg = { 2 | type: 'tg' 3 | tgUid: number 4 | avatarMd5?: string 5 | avatarUrl?: string 6 | } 7 | 8 | type MessageMirai = { eqq?: MiraiTg } 9 | 10 | export default MessageMirai 11 | -------------------------------------------------------------------------------- /icalingua/src/types/OnlineData.d.ts: -------------------------------------------------------------------------------- 1 | type OnlineData = { 2 | online: boolean 3 | nick: string 4 | uin: number 5 | priority?: 1 | 2 | 3 | 4 | 5 6 | sysInfo?: string 7 | updateCheck?: 'ask' | boolean 8 | } 9 | export default OnlineData 10 | -------------------------------------------------------------------------------- /icalingua/src/types/OnlineStatusType.ts: -------------------------------------------------------------------------------- 1 | enum OnlineStatusType { 2 | Online = 11, 3 | Afk = 31, 4 | Hide = 41, 5 | } 6 | 7 | export default OnlineStatusType 8 | -------------------------------------------------------------------------------- /icalingua/src/types/RoamingStamp.d.ts: -------------------------------------------------------------------------------- 1 | type RoamingStamp = { 2 | id: number 3 | url: string 4 | } 5 | 6 | export default RoamingStamp 7 | -------------------------------------------------------------------------------- /icalingua/src/types/Room.d.ts: -------------------------------------------------------------------------------- 1 | import LastMessage from './LastMessage' 2 | 3 | export default interface Room { 4 | roomId: number 5 | roomName: string 6 | index: number 7 | unreadCount: number 8 | priority: 1 | 2 | 3 | 4 | 5 9 | utime: number 10 | users: 11 | | [{ _id: 1; username: '1' }, { _id: 2; username: '2' }] 12 | | [{ _id: 1; username: '1' }, { _id: 2; username: '2' }, { _id: 3; username: '3' }] 13 | at?: boolean | 'all' 14 | lastMessage: LastMessage 15 | autoDownload?: boolean 16 | downloadPath?: string 17 | } 18 | -------------------------------------------------------------------------------- /icalingua/src/types/SQLTableTypes.d.ts: -------------------------------------------------------------------------------- 1 | import Message from './Message' 2 | 3 | export interface MsgTableName { 4 | id: number 5 | tableName: string 6 | } 7 | 8 | export interface DBVersion { 9 | dbVersion: number 10 | } 11 | 12 | export interface MessageInSQLDB extends Message { 13 | roomId: number | string 14 | } 15 | -------------------------------------------------------------------------------- /icalingua/src/types/SearchableFriend.d.ts: -------------------------------------------------------------------------------- 1 | import { FriendInfo } from 'oicq' 2 | 3 | export default interface SearchableFriend extends FriendInfo { 4 | sc: string 5 | uin: number 6 | nick: string 7 | remark: string 8 | } 9 | -------------------------------------------------------------------------------- /icalingua/src/types/SearchableGroup.d.ts: -------------------------------------------------------------------------------- 1 | import { GroupInfo } from 'oicq' 2 | 3 | export default interface SearchableGroup extends GroupInfo { 4 | sc: string 5 | } 6 | -------------------------------------------------------------------------------- /icalingua/src/types/SendMessageParams.d.ts: -------------------------------------------------------------------------------- 1 | import Room from './Room' 2 | import AtCacheItem from './AtCacheElem' 3 | 4 | type SendMessageParams = { 5 | content: string 6 | roomId?: number 7 | file?: { 8 | type: string 9 | path: string 10 | size: number 11 | } 12 | replyMessage?: any 13 | room?: Room 14 | b64img?: string 15 | imgpath?: string 16 | at: AtCacheItem[] 17 | sticker?: boolean 18 | } 19 | export default SendMessageParams 20 | -------------------------------------------------------------------------------- /icalingua/src/types/StorageProvider.d.ts: -------------------------------------------------------------------------------- 1 | import Room from './Room' 2 | import Message from './Message' 3 | import IgnoreChatInfo from './IgnoreChatInfo' 4 | 5 | export default interface StorageProvider { 6 | connect(): Promise 7 | 8 | updateRoom(roomId: number, room: Partial): Promise 9 | 10 | addMessage(roomId: number, message: Message): Promise 11 | 12 | addRoom(room: Room): Promise 13 | 14 | removeRoom(roomId: number): Promise 15 | 16 | updateMessage(roomId: number, messageId: string | number, message: Partial): Promise 17 | 18 | fetchMessages(roomId: number, skip: number, limit: number): Promise 19 | 20 | getMessage(roomId: number, messageId: string): Promise 21 | 22 | addMessages(roomId: number, messages: Message[]): Promise 23 | 24 | getAllRooms(): Promise 25 | 26 | getRoom(roomId: number): Promise 27 | 28 | getUnreadCount(priority: number): Promise 29 | 30 | getFirstUnreadRoom(priority: number): Promise 31 | 32 | getIgnoredChats(): Promise 33 | 34 | isChatIgnored(id: number): Promise 35 | 36 | addIgnoredChat(info: IgnoreChatInfo): Promise 37 | 38 | removeIgnoredChat(roomId: number): Promise 39 | } 40 | -------------------------------------------------------------------------------- /icalingua/src/types/StructMessageCard.d.ts: -------------------------------------------------------------------------------- 1 | export default interface StructMessageCard { 2 | app: 'com.tencent.structmsg' 3 | config: any 4 | desc: '新闻' 5 | extra: any 6 | meta: { 7 | news: { 8 | action: string 9 | android_pkg_name: string 10 | app_type: number 11 | appid: number 12 | desc: string 13 | jumpUrl: string 14 | preview: string 15 | source_icon: string 16 | source_url: string 17 | tag: string 18 | title: string 19 | } 20 | } 21 | prompt: string 22 | ver: string 23 | view: 'news' 24 | } 25 | 26 | /* 27 | { 28 | "app": "com.tencent.structmsg", 29 | "config": { 30 | "autosize": true, 31 | "ctime": 1626859321, 32 | "forward": true, 33 | "token": "f8cbdb9882d3b0118f305fa8839f9dd0", 34 | "type": "normal" 35 | }, 36 | "desc": "新闻", 37 | "extra": { 38 | "app_type": 1, 39 | "appid": 100951776, 40 | "msg_seq": 6987307571346607220, 41 | "uin": xxx 42 | }, 43 | "meta": { 44 | "news": { 45 | "action": "", 46 | "android_pkg_name": "", 47 | "app_type": 1, 48 | "appid": 100951776, 49 | "desc": "还在买爆款劣质U盘? 教你用绝版SLC颗粒做一个 寿命用到下辈子 有手就行", 50 | "jumpUrl": "https://b23.tv/WWRIW2?share_medium=android&share_source=qq&bbid=XX23888200D3F348B37BDF8716B806C3414C8&ts=1626859315667", 51 | "preview": "https://external-30160.picsz.qpic.cn/442c3acb5e3a8365c63eb5a0a735ee77/jpg1", 52 | "source_icon": "", 53 | "source_url": "", 54 | "tag": "哔哩哔哩", 55 | "title": "哔哩哔哩" 56 | } 57 | }, 58 | "prompt": "[分享]哔哩哔哩", 59 | "ver": "0.0.0.1", 60 | "view": "news" 61 | } 62 | */ 63 | -------------------------------------------------------------------------------- /icalingua/src/types/Version.d.ts: -------------------------------------------------------------------------------- 1 | type Version = { 2 | commitId: string 3 | ref: string 4 | isProduction: boolean 5 | buildTime: string 6 | version: string 7 | } 8 | -------------------------------------------------------------------------------- /icalingua/src/types/WinSize.d.ts: -------------------------------------------------------------------------------- 1 | type WinSize = { 2 | width: number 3 | height: number 4 | max: boolean 5 | } 6 | export default WinSize 7 | -------------------------------------------------------------------------------- /icalingua/src/types/cookies.d.ts: -------------------------------------------------------------------------------- 1 | export default interface Cookies { 2 | uin: string 3 | skey: string 4 | p_uin?: string 5 | p_skey?: string 6 | } 7 | -------------------------------------------------------------------------------- /icalingua/src/utils/createRoom.ts: -------------------------------------------------------------------------------- 1 | import Room from '../types/Room' 2 | 3 | export default (roomId: number, roomName: string): Room => { 4 | const room = { 5 | roomId, 6 | roomName, 7 | index: 0, 8 | unreadCount: 0, 9 | priority: roomId > 0 ? 4 : 2, 10 | utime: new Date().getTime(), 11 | users: [ 12 | { _id: 1, username: '1' }, 13 | { _id: 2, username: '2' }, 14 | ], 15 | lastMessage: { content: '', timestamp: '' }, 16 | } 17 | if (roomId < 0) room.users.push({ _id: 3, username: '3' }) 18 | return room 19 | } 20 | -------------------------------------------------------------------------------- /icalingua/src/utils/formatDate.ts: -------------------------------------------------------------------------------- 1 | function formatDate(fmt: string): string { 2 | var o = { 3 | 'M+': this.getMonth() + 1, //月份 4 | 'd+': this.getDate(), //日 5 | 'h+': this.getHours(), //小时 6 | 'm+': this.getMinutes(), //分 7 | 's+': this.getSeconds(), //秒 8 | 'q+': Math.floor((this.getMonth() + 3) / 3), //季度 9 | S: this.getMilliseconds(), //毫秒 10 | } 11 | if (/(y+)/.test(fmt)) { 12 | fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)) 13 | } 14 | for (var k in o) { 15 | if (new RegExp('(' + k + ')').test(fmt)) { 16 | fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)) 17 | } 18 | } 19 | return fmt 20 | } 21 | 22 | export default (fmt: string, date: Date = new Date()): string => { 23 | return formatDate.call(date, fmt) 24 | } 25 | -------------------------------------------------------------------------------- /icalingua/src/utils/getAvatarUrl.ts: -------------------------------------------------------------------------------- 1 | let timestamp = new Date().getTime() 2 | 3 | export default (roomId: number, cache = false): string => { 4 | if (!roomId) return '' 5 | return roomId < 0 6 | ? `https://p.qlogo.cn/gh/${-roomId}/${-roomId}/0` + (cache ? '' : `?timestamp=${timestamp}`) 7 | : `https://q1.qlogo.cn/g?b=qq&nk=${roomId}&s=140` + (cache ? '' : `×tamp=${timestamp}`) 8 | } 9 | -------------------------------------------------------------------------------- /icalingua/src/utils/getCharCount.ts: -------------------------------------------------------------------------------- 1 | export default (str: string, char: string | RegExp) => { 2 | let regex = new RegExp(char, 'g') 3 | let result = str.match(regex) 4 | return !result ? 0 : result.length 5 | } 6 | -------------------------------------------------------------------------------- /icalingua/src/utils/getGTk.ts: -------------------------------------------------------------------------------- 1 | export default (pSkey: string) => { 2 | let t = 5381 3 | for (let r = 0, o = pSkey.length; r < o; ++r) { 4 | t += (t << 5) + pSkey.charCodeAt(r) 5 | } 6 | return t & 2147483647 7 | } 8 | -------------------------------------------------------------------------------- /icalingua/src/utils/getImageUrlByMd5.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * https://gchat.qpic.cn/gchatpic_new/0/0-0-大写的Md5/0 3 | * @param md5 4 | */ 5 | export default (md5: string) => 'https://gchat.qpic.cn/gchatpic_new/0/0-0-' + md5.toUpperCase() + '/0' 6 | -------------------------------------------------------------------------------- /icalingua/src/utils/getStaticPath.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | 3 | export default () => 4 | process.env.NODE_ENV !== 'development' 5 | ? path.join(__dirname, '/static').replace(/\\/g, '\\\\') 6 | : path.join(process.cwd(), 'static') 7 | -------------------------------------------------------------------------------- /icalingua/src/utils/getWinUrl.ts: -------------------------------------------------------------------------------- 1 | export default () => 2 | process.env.NODE_ENV === 'development' ? `http://localhost:9080` : `file://${__dirname}/index.html` 3 | -------------------------------------------------------------------------------- /icalingua/src/utils/mime.ts: -------------------------------------------------------------------------------- 1 | const mimes = { 2 | //https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img 3 | apng: 'image/apng', 4 | avif: 'image/avif', 5 | bmp: 'image/bmp', 6 | gif: 'image/gif', 7 | ico: 'image/x-icon', 8 | cur: 'image/x-icon', 9 | jpg: 'image/jpeg', 10 | jpeg: 'image/jpeg', 11 | jfif: 'image/jpeg', 12 | pjpeg: 'image/jpeg', 13 | pjp: 'image/jpeg', 14 | png: 'image/png', 15 | svg: 'image/svg+xml', 16 | tif: 'image/tiff', 17 | tiff: 'image/tiff', 18 | webp: 'image/webp', 19 | 20 | //https://blog.csdn.net/xue251248603/article/details/52982263 21 | flv: 'video/x-flv', 22 | mp4: 'video/mp4', 23 | ts: 'video/MP2T', 24 | '3gp': 'video/3gpp', 25 | mov: 'video/quicktime', 26 | avi: 'video/x-msvideo', 27 | wmv: 'video/x-ms-wmv', 28 | m4v: 'video/x-m4v', 29 | webm: 'video/webm', 30 | ogv: 'video/ogg', 31 | mpeg: 'video/mpeg', 32 | 33 | //https://www.dute.org/mime-type 34 | mp3: 'audio/mpeg', 35 | mid: 'audio/midi', 36 | midi: 'audio/midi', 37 | m4a: 'audio/x-m4a', 38 | ogg: 'audio/ogg', 39 | } 40 | 41 | export default (ext: string) => { 42 | ext = ext.toLowerCase() 43 | if (ext.startsWith('.')) ext = ext.substr(1) 44 | if (mimes[ext]) return mimes[ext] 45 | return 'application/octet-stream' 46 | } 47 | -------------------------------------------------------------------------------- /icalingua/src/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | export default (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) 2 | -------------------------------------------------------------------------------- /icalingua/src/utils/streamToBuffer.ts: -------------------------------------------------------------------------------- 1 | export function streamToBuffer(stream: NodeJS.ReadableStream): Promise { 2 | return new Promise((resolve, reject) => { 3 | let buffers = [] 4 | stream.on('error', reject) 5 | stream.on('data', (data) => buffers.push(data)) 6 | stream.on('end', () => resolve(Buffer.concat(buffers))) 7 | }) 8 | } 9 | -------------------------------------------------------------------------------- /icalingua/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/.gitkeep -------------------------------------------------------------------------------- /icalingua/static/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/256x256.png -------------------------------------------------------------------------------- /icalingua/static/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/dark.png -------------------------------------------------------------------------------- /icalingua/static/darknewmsg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/darknewmsg.png -------------------------------------------------------------------------------- /icalingua/static/essenceInj.js: -------------------------------------------------------------------------------- 1 | const tmp = console.log 2 | console.log = (...args) => { 3 | if (args[0] === 'handleImgClick') { 4 | require('electron').ipcRenderer.send('openImage', args[1]) 5 | } 6 | else { 7 | tmp(args) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /icalingua/static/face/000: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/000 -------------------------------------------------------------------------------- /icalingua/static/face/001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/001 -------------------------------------------------------------------------------- /icalingua/static/face/002: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/002 -------------------------------------------------------------------------------- /icalingua/static/face/003: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/003 -------------------------------------------------------------------------------- /icalingua/static/face/004: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/004 -------------------------------------------------------------------------------- /icalingua/static/face/005: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/005 -------------------------------------------------------------------------------- /icalingua/static/face/006: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/006 -------------------------------------------------------------------------------- /icalingua/static/face/007: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/007 -------------------------------------------------------------------------------- /icalingua/static/face/008: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/008 -------------------------------------------------------------------------------- /icalingua/static/face/009: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/009 -------------------------------------------------------------------------------- /icalingua/static/face/010: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/010 -------------------------------------------------------------------------------- /icalingua/static/face/011: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/011 -------------------------------------------------------------------------------- /icalingua/static/face/012: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/012 -------------------------------------------------------------------------------- /icalingua/static/face/013: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/013 -------------------------------------------------------------------------------- /icalingua/static/face/014: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/014 -------------------------------------------------------------------------------- /icalingua/static/face/015: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/015 -------------------------------------------------------------------------------- /icalingua/static/face/016: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/016 -------------------------------------------------------------------------------- /icalingua/static/face/018: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/018 -------------------------------------------------------------------------------- /icalingua/static/face/019: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/019 -------------------------------------------------------------------------------- /icalingua/static/face/020: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/020 -------------------------------------------------------------------------------- /icalingua/static/face/021: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/021 -------------------------------------------------------------------------------- /icalingua/static/face/022: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/022 -------------------------------------------------------------------------------- /icalingua/static/face/023: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/023 -------------------------------------------------------------------------------- /icalingua/static/face/024: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/024 -------------------------------------------------------------------------------- /icalingua/static/face/025: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/025 -------------------------------------------------------------------------------- /icalingua/static/face/026: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/026 -------------------------------------------------------------------------------- /icalingua/static/face/027: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/027 -------------------------------------------------------------------------------- /icalingua/static/face/028: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/028 -------------------------------------------------------------------------------- /icalingua/static/face/029: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/029 -------------------------------------------------------------------------------- /icalingua/static/face/030: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/030 -------------------------------------------------------------------------------- /icalingua/static/face/031: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/031 -------------------------------------------------------------------------------- /icalingua/static/face/032: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/032 -------------------------------------------------------------------------------- /icalingua/static/face/033: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/033 -------------------------------------------------------------------------------- /icalingua/static/face/034: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/034 -------------------------------------------------------------------------------- /icalingua/static/face/035: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/035 -------------------------------------------------------------------------------- /icalingua/static/face/036: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/036 -------------------------------------------------------------------------------- /icalingua/static/face/037: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/037 -------------------------------------------------------------------------------- /icalingua/static/face/038: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/038 -------------------------------------------------------------------------------- /icalingua/static/face/039: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/039 -------------------------------------------------------------------------------- /icalingua/static/face/041: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/041 -------------------------------------------------------------------------------- /icalingua/static/face/042: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/042 -------------------------------------------------------------------------------- /icalingua/static/face/043: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/043 -------------------------------------------------------------------------------- /icalingua/static/face/046: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/046 -------------------------------------------------------------------------------- /icalingua/static/face/049: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/049 -------------------------------------------------------------------------------- /icalingua/static/face/050: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/050 -------------------------------------------------------------------------------- /icalingua/static/face/053: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/053 -------------------------------------------------------------------------------- /icalingua/static/face/054: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/054 -------------------------------------------------------------------------------- /icalingua/static/face/055: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/055 -------------------------------------------------------------------------------- /icalingua/static/face/056: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/056 -------------------------------------------------------------------------------- /icalingua/static/face/057: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/057 -------------------------------------------------------------------------------- /icalingua/static/face/059: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/059 -------------------------------------------------------------------------------- /icalingua/static/face/060: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/060 -------------------------------------------------------------------------------- /icalingua/static/face/061: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/061 -------------------------------------------------------------------------------- /icalingua/static/face/063: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/063 -------------------------------------------------------------------------------- /icalingua/static/face/064: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/064 -------------------------------------------------------------------------------- /icalingua/static/face/066: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/066 -------------------------------------------------------------------------------- /icalingua/static/face/067: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/067 -------------------------------------------------------------------------------- /icalingua/static/face/069: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/069 -------------------------------------------------------------------------------- /icalingua/static/face/074: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/074 -------------------------------------------------------------------------------- /icalingua/static/face/075: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/075 -------------------------------------------------------------------------------- /icalingua/static/face/076: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/076 -------------------------------------------------------------------------------- /icalingua/static/face/077: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/077 -------------------------------------------------------------------------------- /icalingua/static/face/078: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/078 -------------------------------------------------------------------------------- /icalingua/static/face/079: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/079 -------------------------------------------------------------------------------- /icalingua/static/face/081: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/081 -------------------------------------------------------------------------------- /icalingua/static/face/085: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/085 -------------------------------------------------------------------------------- /icalingua/static/face/086: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/086 -------------------------------------------------------------------------------- /icalingua/static/face/089: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/089 -------------------------------------------------------------------------------- /icalingua/static/face/096: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/096 -------------------------------------------------------------------------------- /icalingua/static/face/097: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/097 -------------------------------------------------------------------------------- /icalingua/static/face/098: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/098 -------------------------------------------------------------------------------- /icalingua/static/face/099: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/099 -------------------------------------------------------------------------------- /icalingua/static/face/100: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/100 -------------------------------------------------------------------------------- /icalingua/static/face/101: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/101 -------------------------------------------------------------------------------- /icalingua/static/face/102: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/102 -------------------------------------------------------------------------------- /icalingua/static/face/103: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/103 -------------------------------------------------------------------------------- /icalingua/static/face/104: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/104 -------------------------------------------------------------------------------- /icalingua/static/face/105: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/105 -------------------------------------------------------------------------------- /icalingua/static/face/106: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/106 -------------------------------------------------------------------------------- /icalingua/static/face/107: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/107 -------------------------------------------------------------------------------- /icalingua/static/face/108: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/108 -------------------------------------------------------------------------------- /icalingua/static/face/109: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/109 -------------------------------------------------------------------------------- /icalingua/static/face/110: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/110 -------------------------------------------------------------------------------- /icalingua/static/face/111: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/111 -------------------------------------------------------------------------------- /icalingua/static/face/112: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/112 -------------------------------------------------------------------------------- /icalingua/static/face/113: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/113 -------------------------------------------------------------------------------- /icalingua/static/face/114: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/114 -------------------------------------------------------------------------------- /icalingua/static/face/115: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/115 -------------------------------------------------------------------------------- /icalingua/static/face/116: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/116 -------------------------------------------------------------------------------- /icalingua/static/face/117: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/117 -------------------------------------------------------------------------------- /icalingua/static/face/118: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/118 -------------------------------------------------------------------------------- /icalingua/static/face/119: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/119 -------------------------------------------------------------------------------- /icalingua/static/face/120: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/120 -------------------------------------------------------------------------------- /icalingua/static/face/121: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/121 -------------------------------------------------------------------------------- /icalingua/static/face/122: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/122 -------------------------------------------------------------------------------- /icalingua/static/face/123: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/123 -------------------------------------------------------------------------------- /icalingua/static/face/124: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/124 -------------------------------------------------------------------------------- /icalingua/static/face/125: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/125 -------------------------------------------------------------------------------- /icalingua/static/face/126: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/126 -------------------------------------------------------------------------------- /icalingua/static/face/127: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/127 -------------------------------------------------------------------------------- /icalingua/static/face/128: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/128 -------------------------------------------------------------------------------- /icalingua/static/face/129: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/129 -------------------------------------------------------------------------------- /icalingua/static/face/130: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/130 -------------------------------------------------------------------------------- /icalingua/static/face/131: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/131 -------------------------------------------------------------------------------- /icalingua/static/face/132: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/132 -------------------------------------------------------------------------------- /icalingua/static/face/133: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/133 -------------------------------------------------------------------------------- /icalingua/static/face/134: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/134 -------------------------------------------------------------------------------- /icalingua/static/face/135: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/135 -------------------------------------------------------------------------------- /icalingua/static/face/136: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/136 -------------------------------------------------------------------------------- /icalingua/static/face/137: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/137 -------------------------------------------------------------------------------- /icalingua/static/face/138: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/138 -------------------------------------------------------------------------------- /icalingua/static/face/139: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/139 -------------------------------------------------------------------------------- /icalingua/static/face/140: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/140 -------------------------------------------------------------------------------- /icalingua/static/face/141: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/141 -------------------------------------------------------------------------------- /icalingua/static/face/142: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/142 -------------------------------------------------------------------------------- /icalingua/static/face/143: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/143 -------------------------------------------------------------------------------- /icalingua/static/face/144: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/144 -------------------------------------------------------------------------------- /icalingua/static/face/145: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/145 -------------------------------------------------------------------------------- /icalingua/static/face/146: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/146 -------------------------------------------------------------------------------- /icalingua/static/face/147: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/147 -------------------------------------------------------------------------------- /icalingua/static/face/148: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/148 -------------------------------------------------------------------------------- /icalingua/static/face/149: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/149 -------------------------------------------------------------------------------- /icalingua/static/face/150: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/150 -------------------------------------------------------------------------------- /icalingua/static/face/151: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/151 -------------------------------------------------------------------------------- /icalingua/static/face/152: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/152 -------------------------------------------------------------------------------- /icalingua/static/face/153: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/153 -------------------------------------------------------------------------------- /icalingua/static/face/154: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/154 -------------------------------------------------------------------------------- /icalingua/static/face/155: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/155 -------------------------------------------------------------------------------- /icalingua/static/face/156: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/156 -------------------------------------------------------------------------------- /icalingua/static/face/157: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/157 -------------------------------------------------------------------------------- /icalingua/static/face/158: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/158 -------------------------------------------------------------------------------- /icalingua/static/face/159: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/159 -------------------------------------------------------------------------------- /icalingua/static/face/160: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/160 -------------------------------------------------------------------------------- /icalingua/static/face/161: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/161 -------------------------------------------------------------------------------- /icalingua/static/face/162: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/162 -------------------------------------------------------------------------------- /icalingua/static/face/163: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/163 -------------------------------------------------------------------------------- /icalingua/static/face/164: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/164 -------------------------------------------------------------------------------- /icalingua/static/face/165: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/165 -------------------------------------------------------------------------------- /icalingua/static/face/166: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/166 -------------------------------------------------------------------------------- /icalingua/static/face/167: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/167 -------------------------------------------------------------------------------- /icalingua/static/face/168: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/168 -------------------------------------------------------------------------------- /icalingua/static/face/169: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/169 -------------------------------------------------------------------------------- /icalingua/static/face/170: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/170 -------------------------------------------------------------------------------- /icalingua/static/face/171: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/171 -------------------------------------------------------------------------------- /icalingua/static/face/172: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/172 -------------------------------------------------------------------------------- /icalingua/static/face/173: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/173 -------------------------------------------------------------------------------- /icalingua/static/face/174: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/174 -------------------------------------------------------------------------------- /icalingua/static/face/175: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/175 -------------------------------------------------------------------------------- /icalingua/static/face/176: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/176 -------------------------------------------------------------------------------- /icalingua/static/face/177: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/177 -------------------------------------------------------------------------------- /icalingua/static/face/178: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/178 -------------------------------------------------------------------------------- /icalingua/static/face/179: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/179 -------------------------------------------------------------------------------- /icalingua/static/face/180: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/180 -------------------------------------------------------------------------------- /icalingua/static/face/181: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/181 -------------------------------------------------------------------------------- /icalingua/static/face/182: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/182 -------------------------------------------------------------------------------- /icalingua/static/face/183: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/183 -------------------------------------------------------------------------------- /icalingua/static/face/184: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/184 -------------------------------------------------------------------------------- /icalingua/static/face/185: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/185 -------------------------------------------------------------------------------- /icalingua/static/face/186: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/186 -------------------------------------------------------------------------------- /icalingua/static/face/187: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/187 -------------------------------------------------------------------------------- /icalingua/static/face/188: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/188 -------------------------------------------------------------------------------- /icalingua/static/face/189: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/189 -------------------------------------------------------------------------------- /icalingua/static/face/190: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/190 -------------------------------------------------------------------------------- /icalingua/static/face/191: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/191 -------------------------------------------------------------------------------- /icalingua/static/face/192: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/192 -------------------------------------------------------------------------------- /icalingua/static/face/193: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/193 -------------------------------------------------------------------------------- /icalingua/static/face/194: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/194 -------------------------------------------------------------------------------- /icalingua/static/face/195: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/195 -------------------------------------------------------------------------------- /icalingua/static/face/196: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/196 -------------------------------------------------------------------------------- /icalingua/static/face/197: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/197 -------------------------------------------------------------------------------- /icalingua/static/face/198: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/198 -------------------------------------------------------------------------------- /icalingua/static/face/199: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/199 -------------------------------------------------------------------------------- /icalingua/static/face/200: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/200 -------------------------------------------------------------------------------- /icalingua/static/face/201: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/201 -------------------------------------------------------------------------------- /icalingua/static/face/202: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/202 -------------------------------------------------------------------------------- /icalingua/static/face/203: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/203 -------------------------------------------------------------------------------- /icalingua/static/face/204: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/204 -------------------------------------------------------------------------------- /icalingua/static/face/205: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/205 -------------------------------------------------------------------------------- /icalingua/static/face/206: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/206 -------------------------------------------------------------------------------- /icalingua/static/face/207: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/207 -------------------------------------------------------------------------------- /icalingua/static/face/208: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/208 -------------------------------------------------------------------------------- /icalingua/static/face/209: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/209 -------------------------------------------------------------------------------- /icalingua/static/face/210: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/210 -------------------------------------------------------------------------------- /icalingua/static/face/211: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/211 -------------------------------------------------------------------------------- /icalingua/static/face/212: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/212 -------------------------------------------------------------------------------- /icalingua/static/face/213: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/213 -------------------------------------------------------------------------------- /icalingua/static/face/214: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/214 -------------------------------------------------------------------------------- /icalingua/static/face/215: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/215 -------------------------------------------------------------------------------- /icalingua/static/face/216: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/216 -------------------------------------------------------------------------------- /icalingua/static/face/217: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/217 -------------------------------------------------------------------------------- /icalingua/static/face/218: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/218 -------------------------------------------------------------------------------- /icalingua/static/face/219: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/219 -------------------------------------------------------------------------------- /icalingua/static/face/220: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/220 -------------------------------------------------------------------------------- /icalingua/static/face/221: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/221 -------------------------------------------------------------------------------- /icalingua/static/face/222: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/222 -------------------------------------------------------------------------------- /icalingua/static/face/223: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/223 -------------------------------------------------------------------------------- /icalingua/static/face/224: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/224 -------------------------------------------------------------------------------- /icalingua/static/face/225: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/225 -------------------------------------------------------------------------------- /icalingua/static/face/226: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/226 -------------------------------------------------------------------------------- /icalingua/static/face/227: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/227 -------------------------------------------------------------------------------- /icalingua/static/face/228: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/228 -------------------------------------------------------------------------------- /icalingua/static/face/229: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/229 -------------------------------------------------------------------------------- /icalingua/static/face/230: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/230 -------------------------------------------------------------------------------- /icalingua/static/face/231: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/231 -------------------------------------------------------------------------------- /icalingua/static/face/232: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/232 -------------------------------------------------------------------------------- /icalingua/static/face/233: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/233 -------------------------------------------------------------------------------- /icalingua/static/face/234: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/234 -------------------------------------------------------------------------------- /icalingua/static/face/235: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/235 -------------------------------------------------------------------------------- /icalingua/static/face/236: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/236 -------------------------------------------------------------------------------- /icalingua/static/face/237: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/237 -------------------------------------------------------------------------------- /icalingua/static/face/238: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/238 -------------------------------------------------------------------------------- /icalingua/static/face/239: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/239 -------------------------------------------------------------------------------- /icalingua/static/face/240: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/240 -------------------------------------------------------------------------------- /icalingua/static/face/241: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/241 -------------------------------------------------------------------------------- /icalingua/static/face/242: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/242 -------------------------------------------------------------------------------- /icalingua/static/face/243: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/243 -------------------------------------------------------------------------------- /icalingua/static/face/244: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/244 -------------------------------------------------------------------------------- /icalingua/static/face/245: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/245 -------------------------------------------------------------------------------- /icalingua/static/face/246: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/246 -------------------------------------------------------------------------------- /icalingua/static/face/247: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/247 -------------------------------------------------------------------------------- /icalingua/static/face/260: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/260 -------------------------------------------------------------------------------- /icalingua/static/face/261: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/261 -------------------------------------------------------------------------------- /icalingua/static/face/262: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/262 -------------------------------------------------------------------------------- /icalingua/static/face/263: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/263 -------------------------------------------------------------------------------- /icalingua/static/face/264: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/264 -------------------------------------------------------------------------------- /icalingua/static/face/265: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/265 -------------------------------------------------------------------------------- /icalingua/static/face/266: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/266 -------------------------------------------------------------------------------- /icalingua/static/face/267: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/267 -------------------------------------------------------------------------------- /icalingua/static/face/268: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/268 -------------------------------------------------------------------------------- /icalingua/static/face/269: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/269 -------------------------------------------------------------------------------- /icalingua/static/face/270: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/270 -------------------------------------------------------------------------------- /icalingua/static/face/271: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/271 -------------------------------------------------------------------------------- /icalingua/static/face/272: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/272 -------------------------------------------------------------------------------- /icalingua/static/face/273: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/273 -------------------------------------------------------------------------------- /icalingua/static/face/274: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/274 -------------------------------------------------------------------------------- /icalingua/static/face/276: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/276 -------------------------------------------------------------------------------- /icalingua/static/face/277: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/277 -------------------------------------------------------------------------------- /icalingua/static/face/278: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/278 -------------------------------------------------------------------------------- /icalingua/static/face/279: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/279 -------------------------------------------------------------------------------- /icalingua/static/face/280: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/280 -------------------------------------------------------------------------------- /icalingua/static/face/281: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/281 -------------------------------------------------------------------------------- /icalingua/static/face/282: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/282 -------------------------------------------------------------------------------- /icalingua/static/face/283: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/283 -------------------------------------------------------------------------------- /icalingua/static/face/284: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/284 -------------------------------------------------------------------------------- /icalingua/static/face/285: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/285 -------------------------------------------------------------------------------- /icalingua/static/face/286: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/286 -------------------------------------------------------------------------------- /icalingua/static/face/287: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/287 -------------------------------------------------------------------------------- /icalingua/static/face/288: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/288 -------------------------------------------------------------------------------- /icalingua/static/face/289: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/289 -------------------------------------------------------------------------------- /icalingua/static/face/290: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/290 -------------------------------------------------------------------------------- /icalingua/static/face/291: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/291 -------------------------------------------------------------------------------- /icalingua/static/face/292: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/292 -------------------------------------------------------------------------------- /icalingua/static/face/293: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/293 -------------------------------------------------------------------------------- /icalingua/static/face/294: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/294 -------------------------------------------------------------------------------- /icalingua/static/face/295: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/295 -------------------------------------------------------------------------------- /icalingua/static/face/296: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/296 -------------------------------------------------------------------------------- /icalingua/static/face/297: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/297 -------------------------------------------------------------------------------- /icalingua/static/face/298: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/298 -------------------------------------------------------------------------------- /icalingua/static/face/299: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/299 -------------------------------------------------------------------------------- /icalingua/static/face/300: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/300 -------------------------------------------------------------------------------- /icalingua/static/face/301: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/301 -------------------------------------------------------------------------------- /icalingua/static/face/302: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/302 -------------------------------------------------------------------------------- /icalingua/static/face/303: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/303 -------------------------------------------------------------------------------- /icalingua/static/face/304: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/304 -------------------------------------------------------------------------------- /icalingua/static/face/305: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/305 -------------------------------------------------------------------------------- /icalingua/static/face/306: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/306 -------------------------------------------------------------------------------- /icalingua/static/face/307: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/307 -------------------------------------------------------------------------------- /icalingua/static/face/308: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/308 -------------------------------------------------------------------------------- /icalingua/static/face/309: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/309 -------------------------------------------------------------------------------- /icalingua/static/face/310: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/310 -------------------------------------------------------------------------------- /icalingua/static/face/311: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/311 -------------------------------------------------------------------------------- /icalingua/static/face/312: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/312 -------------------------------------------------------------------------------- /icalingua/static/face/313: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/313 -------------------------------------------------------------------------------- /icalingua/static/face/314: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/314 -------------------------------------------------------------------------------- /icalingua/static/face/315: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/315 -------------------------------------------------------------------------------- /icalingua/static/face/316: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/316 -------------------------------------------------------------------------------- /icalingua/static/face/317: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/317 -------------------------------------------------------------------------------- /icalingua/static/face/318: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/318 -------------------------------------------------------------------------------- /icalingua/static/face/319: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/319 -------------------------------------------------------------------------------- /icalingua/static/face/320: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/320 -------------------------------------------------------------------------------- /icalingua/static/face/321: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/321 -------------------------------------------------------------------------------- /icalingua/static/face/322: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/322 -------------------------------------------------------------------------------- /icalingua/static/face/323: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/323 -------------------------------------------------------------------------------- /icalingua/static/face/324: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/324 -------------------------------------------------------------------------------- /icalingua/static/face/325: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/325 -------------------------------------------------------------------------------- /icalingua/static/face/326: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/326 -------------------------------------------------------------------------------- /icalingua/static/face/327: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/327 -------------------------------------------------------------------------------- /icalingua/static/face/328: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/328 -------------------------------------------------------------------------------- /icalingua/static/face/329: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/329 -------------------------------------------------------------------------------- /icalingua/static/face/330: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/330 -------------------------------------------------------------------------------- /icalingua/static/face/331: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/face/331 -------------------------------------------------------------------------------- /icalingua/static/file-manager/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vite App 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /icalingua/static/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/icons/512x512.png -------------------------------------------------------------------------------- /icalingua/static/lightning.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icalingua/static/newmsg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/newmsg.png -------------------------------------------------------------------------------- /icalingua/static/notification.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/notification.webp -------------------------------------------------------------------------------- /icalingua/static/photoWallInj.js: -------------------------------------------------------------------------------- 1 | window.mqq.media.showPicture=({imageIDs, index})=>window.eqqShowImage(imageIDs[index]) 2 | -------------------------------------------------------------------------------- /icalingua/static/photoWallPreload.js: -------------------------------------------------------------------------------- 1 | window.eqqShowImage=(url)=>require('electron').ipcRenderer.send('openImage', url) 2 | -------------------------------------------------------------------------------- /icalingua/static/qlottie/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/icalingua/static/qlottie/.DS_Store -------------------------------------------------------------------------------- /icalingua/static/tg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /icalingua/static/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "commitId": "Manual Build", 3 | "ref": "Manual Build", 4 | "isProduction": false, 5 | "buildTime": "Manual Build" 6 | } 7 | -------------------------------------------------------------------------------- /icalingua/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "esModuleInterop": true, 6 | "sourceMap": false, 7 | "resolveJsonModule": true 8 | }, 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /pkgres/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brx86/Icalingua/9ba8027019daf74b28ab3c9edd2b9f164da6c940/pkgres/512x512.png -------------------------------------------------------------------------------- /pkgres/icalingua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | electron13 /usr/lib/icalingua/icalingua.asar "$@" 3 | -------------------------------------------------------------------------------- /pkgres/icalingua-beta.PKGBUILD.template: -------------------------------------------------------------------------------- 1 | pkgname=icalingua-beta 2 | pkgver=VERSION 3 | pkgrel=1 4 | pkgdesc='A Linux client for QQ and more, development edition' 5 | license=('GPL') 6 | depends=('electron13' 'ffmpeg' 'libappindicator-gtk3') 7 | optdepends=('mongodb-bin: Provides storage' 8 | 'redis: Provides storage') 9 | arch=('ARCH') 10 | url="https://github.com/Icalingua/Icalingua" 11 | provides=('electron-qq' 'icalingua') 12 | conflicts=('icalingua') 13 | replaces=('electron-qq') 14 | source=(app.asar 15 | 512x512.png 16 | icalingua.desktop 17 | icalingua) 18 | package() { 19 | install -Dm644 -t "${pkgdir}/usr/share/applications" "icalingua.desktop" 20 | install -Dm644 "512x512.png" "$pkgdir/usr/share/icons/hicolor/512x512/apps/icalingua.png" 21 | install -Dm644 "app.asar" "${pkgdir}/usr/lib/icalingua/icalingua.asar" 22 | install -Dm755 "icalingua" "${pkgdir}/usr/bin/$pkgname" 23 | ln -s "/usr/bin/$pkgname" "${pkgdir}/usr/bin/electron-qq" 24 | ln -s "/usr/bin/$pkgname" "${pkgdir}/usr/bin/icalingua" 25 | } 26 | -------------------------------------------------------------------------------- /pkgres/icalingua.PKGBUILD.template: -------------------------------------------------------------------------------- 1 | pkgname=icalingua 2 | pkgver=VERSION 3 | pkgrel=1 4 | pkgdesc='A Linux client for QQ and more' 5 | license=('GPL') 6 | depends=('electron13' 'ffmpeg' 'libappindicator-gtk3') 7 | optdepends=('mongodb-bin: Provides storage' 8 | 'redis: Provides storage') 9 | arch=('ARCH') 10 | url="https://github.com/Icalingua/Icalingua" 11 | provides=('electron-qq' 'icalingua') 12 | conflicts=('icalingua') 13 | replaces=('electron-qq') 14 | source=(app.asar 15 | 512x512.png 16 | ${pkgname}.desktop 17 | ${pkgname}) 18 | package() { 19 | install -Dm644 -t "${pkgdir}/usr/share/applications" "${pkgname}.desktop" 20 | install -Dm644 "512x512.png" "$pkgdir/usr/share/icons/hicolor/512x512/apps/$pkgname.png" 21 | install -Dm644 "app.asar" "${pkgdir}/usr/lib/${pkgname}/${pkgname}.asar" 22 | install -Dm755 "${pkgname}" "${pkgdir}/usr/bin/${pkgname}" 23 | ln -s "/usr/bin/${pkgname}" "${pkgdir}/usr/bin/electron-qq" 24 | } 25 | -------------------------------------------------------------------------------- /pkgres/icalingua.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Categories=chat;Network; 3 | Exec=icalingua %u 4 | Icon=icalingua.png 5 | Name=Icalingua 6 | Comment=A Linux client for QQ and more 7 | StartupNotify=true 8 | Terminal=false 9 | Type=Application 10 | --------------------------------------------------------------------------------