gitextract_efe0p5be/ ├── .dockerignore ├── .eslintignore ├── .eslintrc ├── .github/ │ └── workflows/ │ ├── codeql-analysis.yml │ ├── lint.yml │ ├── test.yml │ └── ts.yml ├── .gitignore ├── .prettierrc ├── .vscode/ │ └── settings.json ├── Dockerfile ├── LICENSE ├── README.md ├── docker-compose.yaml ├── index.ts ├── jest.config.js ├── jest.setup.js ├── jest.transformer.js ├── lerna.json ├── package.json ├── packages/ │ ├── app/ │ │ ├── .babelrc │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .watchmanconfig │ │ ├── App.tsx │ │ ├── app.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── components/ │ │ │ │ ├── Avatar.tsx │ │ │ │ ├── BackButton.tsx │ │ │ │ ├── Expression.tsx │ │ │ │ ├── Image.tsx │ │ │ │ ├── Loading.tsx │ │ │ │ ├── Nofitication.tsx │ │ │ │ ├── PageContainer.tsx │ │ │ │ └── Toast.tsx │ │ │ ├── hooks/ │ │ │ │ └── useStore.tsx │ │ │ ├── pages/ │ │ │ │ ├── Chat/ │ │ │ │ │ ├── Chat.tsx │ │ │ │ │ ├── ChatBackButton.tsx │ │ │ │ │ ├── ChatRightButton.tsx │ │ │ │ │ ├── ImageMessage.tsx │ │ │ │ │ ├── Input.tsx │ │ │ │ │ ├── InviteMessage.tsx │ │ │ │ │ ├── Message.tsx │ │ │ │ │ ├── MessageList.tsx │ │ │ │ │ ├── SystemMessage.tsx │ │ │ │ │ └── TextMessage.tsx │ │ │ │ ├── ChatList/ │ │ │ │ │ ├── ChatList.tsx │ │ │ │ │ ├── ChatListRightButton.tsx │ │ │ │ │ ├── Linkman.tsx │ │ │ │ │ └── SelfInfo.tsx │ │ │ │ ├── GroupInfo/ │ │ │ │ │ └── GroupInfo.tsx │ │ │ │ ├── GroupProfile/ │ │ │ │ │ └── GroupProfile.tsx │ │ │ │ ├── LoginSignup/ │ │ │ │ │ ├── Base.tsx │ │ │ │ │ ├── Login.tsx │ │ │ │ │ └── Signup.tsx │ │ │ │ ├── Other/ │ │ │ │ │ ├── Other.tsx │ │ │ │ │ ├── PrivacyPolicy.tsx │ │ │ │ │ └── Sponsor.tsx │ │ │ │ ├── SearchResult/ │ │ │ │ │ └── SearchResult.tsx │ │ │ │ └── UserInfo/ │ │ │ │ └── UserInfo.tsx │ │ │ ├── service.ts │ │ │ ├── socket.ts │ │ │ ├── state/ │ │ │ │ ├── action.ts │ │ │ │ ├── reducer.ts │ │ │ │ └── store.ts │ │ │ ├── types/ │ │ │ │ ├── global.d.ts │ │ │ │ ├── redux.ts │ │ │ │ └── socket.ts │ │ │ └── utils/ │ │ │ ├── constant.ts │ │ │ ├── convertMessage.ts │ │ │ ├── expressions.ts │ │ │ ├── fetch.ts │ │ │ ├── getFriendId.ts │ │ │ ├── getRandomColor.ts │ │ │ ├── linkman.ts │ │ │ ├── platform.ts │ │ │ ├── storage.ts │ │ │ ├── time.ts │ │ │ └── uploadFile.ts │ │ ├── tests/ │ │ │ └── state/ │ │ │ └── reducer.test.ts │ │ └── tsconfig.json │ ├── assets/ │ │ └── package.json │ ├── bin/ │ │ ├── index.ts │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── deleteMessages.ts │ │ │ ├── deleteTodayRegisteredUsers.ts │ │ │ ├── deleteUser.ts │ │ │ ├── doctor.ts │ │ │ ├── fixUsersAvatar.ts │ │ │ ├── getUserId.ts │ │ │ ├── register.ts │ │ │ └── updateDefaultGroupName.ts │ │ └── tsconfig.json │ ├── config/ │ │ ├── client.ts │ │ ├── package.json │ │ └── server.ts │ ├── database/ │ │ ├── mongoose/ │ │ │ ├── index.ts │ │ │ ├── initMongoDB.ts │ │ │ └── models/ │ │ │ ├── friend.ts │ │ │ ├── group.ts │ │ │ ├── history.ts │ │ │ ├── message.ts │ │ │ ├── notification.ts │ │ │ ├── socket.ts │ │ │ └── user.ts │ │ ├── package.json │ │ ├── redis/ │ │ │ └── initRedis.ts │ │ └── tsconfig.json │ ├── docs/ │ │ ├── .gitignore │ │ ├── babel.config.js │ │ ├── docs/ │ │ │ ├── API.md │ │ │ ├── App.md │ │ │ ├── CHANGELOG.md │ │ │ ├── Config.md │ │ │ ├── FAQ.md │ │ │ ├── Getting-Start.md │ │ │ ├── INSTALL.md │ │ │ └── Script.md │ │ ├── docusaurus.config.js │ │ ├── i18n/ │ │ │ ├── en/ │ │ │ │ ├── code.json │ │ │ │ ├── docusaurus-plugin-content-docs/ │ │ │ │ │ └── current/ │ │ │ │ │ ├── API.md │ │ │ │ │ ├── App.md │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ ├── Config.md │ │ │ │ │ ├── FAQ.md │ │ │ │ │ ├── Getting-Start.md │ │ │ │ │ ├── INSTALL.md │ │ │ │ │ └── Script.md │ │ │ │ └── docusaurus-theme-classic/ │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ │ └── zh-Hans/ │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs/ │ │ │ │ └── current/ │ │ │ │ ├── API.md │ │ │ │ ├── App.md │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── Config.md │ │ │ │ ├── FAQ.md │ │ │ │ ├── Getting-Start.md │ │ │ │ ├── INSTALL.md │ │ │ │ └── Script.md │ │ │ └── docusaurus-theme-classic/ │ │ │ ├── footer.json │ │ │ └── navbar.json │ │ ├── package.json │ │ ├── sidebars.js │ │ ├── src/ │ │ │ ├── css/ │ │ │ │ └── custom.css │ │ │ └── pages/ │ │ │ ├── index.js │ │ │ └── styles.module.css │ │ └── static/ │ │ └── .nojekyll │ ├── i18n/ │ │ ├── en-US/ │ │ │ ├── bin.ts │ │ │ └── index.ts │ │ ├── node.index.ts │ │ ├── package.json │ │ └── zh-CN/ │ │ ├── bin.ts │ │ └── index.ts │ ├── server/ │ │ ├── .nodemonrc │ │ ├── package.json │ │ ├── public/ │ │ │ ├── PrivacyPolicy.html │ │ │ ├── index.html │ │ │ └── manifest.json │ │ ├── src/ │ │ │ ├── app.ts │ │ │ ├── main.ts │ │ │ ├── middlewares/ │ │ │ │ ├── frequency.ts │ │ │ │ ├── isAdmin.ts │ │ │ │ ├── isLogin.ts │ │ │ │ ├── registerRoutes.ts │ │ │ │ └── seal.ts │ │ │ ├── routes/ │ │ │ │ ├── group.ts │ │ │ │ ├── history.ts │ │ │ │ ├── message.ts │ │ │ │ ├── notification.ts │ │ │ │ ├── system.ts │ │ │ │ └── user.ts │ │ │ └── types/ │ │ │ ├── index.d.ts │ │ │ └── server.d.ts │ │ ├── test/ │ │ │ ├── helpers/ │ │ │ │ └── middleware.ts │ │ │ └── middlewares/ │ │ │ ├── frequency.spec.ts │ │ │ ├── isAdmin.spec.ts │ │ │ ├── isLogin.spec.ts │ │ │ └── seal.spec.ts │ │ └── tsconfig.json │ ├── utils/ │ │ ├── compressImage.ts │ │ ├── const.ts │ │ ├── convertMessage.ts │ │ ├── expressions.ts │ │ ├── getFriendId.ts │ │ ├── getRandomAvatar.ts │ │ ├── getRandomColor.ts │ │ ├── logger.ts │ │ ├── package.json │ │ ├── sleep.ts │ │ ├── socket.ts │ │ ├── test/ │ │ │ ├── getFriendId.spec.ts │ │ │ └── url.spec.ts │ │ ├── time.ts │ │ ├── ua.ts │ │ ├── url.ts │ │ └── xss.ts │ └── web/ │ ├── .babelrc │ ├── build/ │ │ ├── webpack.common.js │ │ ├── webpack.dev.js │ │ └── webpack.prod.js │ ├── package.json │ ├── src/ │ │ ├── App.less │ │ ├── App.tsx │ │ ├── components/ │ │ │ ├── Avatar.tsx │ │ │ ├── Button.tsx │ │ │ ├── Dialog.less │ │ │ ├── Dialog.tsx │ │ │ ├── Dropdown.less │ │ │ ├── Dropdown.tsx │ │ │ ├── IconButton.less │ │ │ ├── IconButton.tsx │ │ │ ├── Input.less │ │ │ ├── Input.tsx │ │ │ ├── Loading.tsx │ │ │ ├── Menu.tsx │ │ │ ├── Message.less │ │ │ ├── Message.tsx │ │ │ ├── Progress.tsx │ │ │ ├── Select.tsx │ │ │ ├── Tabs.tsx │ │ │ ├── Tooltip.less │ │ │ └── Tooltip.tsx │ │ ├── context.ts │ │ ├── globalStyles.ts │ │ ├── hooks/ │ │ │ ├── useAction.ts │ │ │ ├── useAero.ts │ │ │ ├── useIsLogin.ts │ │ │ └── useStore.ts │ │ ├── localStorage.ts │ │ ├── main.tsx │ │ ├── modules/ │ │ │ ├── Chat/ │ │ │ │ ├── Chat.less │ │ │ │ ├── Chat.tsx │ │ │ │ ├── ChatInput.less │ │ │ │ ├── ChatInput.tsx │ │ │ │ ├── CodeEditor.less │ │ │ │ ├── CodeEditor.tsx │ │ │ │ ├── Expression.less │ │ │ │ ├── Expression.tsx │ │ │ │ ├── GroupManagePanel.less │ │ │ │ ├── GroupManagePanel.tsx │ │ │ │ ├── HeaderBar.less │ │ │ │ ├── HeaderBar.tsx │ │ │ │ ├── Message/ │ │ │ │ │ ├── CodeDialog.tsx │ │ │ │ │ ├── CodeMessage.less │ │ │ │ │ ├── CodeMessage.tsx │ │ │ │ │ ├── FileMessage.tsx │ │ │ │ │ ├── ImageMessage.tsx │ │ │ │ │ ├── InviteMessage.less │ │ │ │ │ ├── InviteMessageV2.tsx │ │ │ │ │ ├── Message.less │ │ │ │ │ ├── Message.tsx │ │ │ │ │ ├── SystemMessage.tsx │ │ │ │ │ ├── TextMessage.tsx │ │ │ │ │ └── UrlMessage.tsx │ │ │ │ ├── MessageList.less │ │ │ │ └── MessageList.tsx │ │ │ ├── FunctionBarAndLinkmanList/ │ │ │ │ ├── CreateGroup.less │ │ │ │ ├── CreateGroup.tsx │ │ │ │ ├── FunctionBar.less │ │ │ │ ├── FunctionBar.tsx │ │ │ │ ├── FunctionBarAndLinkmanList.less │ │ │ │ ├── FunctionBarAndLinkmanList.tsx │ │ │ │ ├── Linkman.less │ │ │ │ ├── Linkman.tsx │ │ │ │ ├── LinkmanList.less │ │ │ │ └── LinkmanList.tsx │ │ │ ├── GroupInfo.tsx │ │ │ ├── InfoDialog.less │ │ │ ├── InviteInfo.tsx │ │ │ ├── LoginAndRegister/ │ │ │ │ ├── Login.tsx │ │ │ │ ├── LoginAndRegister.less │ │ │ │ ├── LoginAndRegister.tsx │ │ │ │ ├── LoginRegister.less │ │ │ │ └── Register.tsx │ │ │ ├── Sidebar/ │ │ │ │ ├── About.less │ │ │ │ ├── About.tsx │ │ │ │ ├── Admin.less │ │ │ │ ├── Admin.tsx │ │ │ │ ├── Common.less │ │ │ │ ├── Download.less │ │ │ │ ├── Download.tsx │ │ │ │ ├── OnlineStatus.less │ │ │ │ ├── OnlineStatus.tsx │ │ │ │ ├── Reward.less │ │ │ │ ├── Reward.tsx │ │ │ │ ├── SelfInfo.less │ │ │ │ ├── SelfInfo.tsx │ │ │ │ ├── Setting.less │ │ │ │ ├── Setting.tsx │ │ │ │ ├── Sidebar.less │ │ │ │ └── Sidebar.tsx │ │ │ └── UserInfo.tsx │ │ ├── service.ts │ │ ├── socket.ts │ │ ├── state/ │ │ │ ├── action.ts │ │ │ ├── reducer.ts │ │ │ └── store.ts │ │ ├── styles/ │ │ │ ├── iconfont.less │ │ │ ├── normalize.less │ │ │ └── variable.less │ │ ├── template.html │ │ ├── themes.ts │ │ ├── types/ │ │ │ └── index.d.ts │ │ └── utils/ │ │ ├── fetch.ts │ │ ├── getRandomHuaji.ts │ │ ├── inobounce.ts │ │ ├── notification.ts │ │ ├── playSound.ts │ │ ├── readDiskFile.ts │ │ ├── setCssVariable.ts │ │ ├── uploadFile.ts │ │ └── voice.ts │ ├── test/ │ │ ├── components/ │ │ │ ├── Avatar.spec.tsx │ │ │ └── Button.spec.tsx │ │ ├── localStorage.spec.ts │ │ └── state/ │ │ └── reducer.spec.ts │ └── tsconfig.json └── tsconfig.json