diff --git a/external/components b/external/components index ab0fc1af..e79862b5 160000 --- a/external/components +++ b/external/components @@ -1 +1 @@ -Subproject commit ab0fc1af739f877c8f416dcd7e47d25aacbb7eea +Subproject commit e79862b5972b57c016b4c08676ac1b90bd52ee83 diff --git a/external/lang b/external/lang index 843cece2..f95ec6dc 160000 --- a/external/lang +++ b/external/lang @@ -1 +1 @@ -Subproject commit 843cece2854185651e17765bcb78109d22eba769 +Subproject commit f95ec6dc8200adba7925425d4cf2ae0c16f049c3 diff --git a/package.json b/package.json index 34a82028..7a20b079 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "@fontsource/space-mono": "^4.4.5", "@fontsource/ubuntu": "^4.4.5", "@fontsource/ubuntu-mono": "^4.4.5", - "@hcaptcha/react-hcaptcha": "^0.3.6", + "@hcaptcha/react-hcaptcha": "^1.4.4", "@insertish/vite-plugin-babel-macros": "^1.0.5", "@preact/preset-vite": "^2.0.0", "@revoltchat/ui": "^1.0.77", @@ -81,7 +81,7 @@ "@styled-icons/boxicons-logos": "^10.38.0", "@styled-icons/boxicons-regular": "^10.38.0", "@styled-icons/boxicons-solid": "^10.38.0", - "@styled-icons/simple-icons": "^10.33.0", + "@styled-icons/simple-icons": "^10.45.0", "@tippyjs/react": "4.2.6", "@traptitech/markdown-it-katex": "^3.4.3", "@traptitech/markdown-it-spoiler": "^1.1.6", @@ -89,9 +89,9 @@ "@types/lodash": "^4", "@types/lodash.defaultsdeep": "^4.6.6", "@types/lodash.isequal": "^4.5.5", - "@types/node": "^15.12.4", + "@types/node": "^15.14.9", "@types/preact-i18n": "^2.3.0", - "@types/prismjs": "^1.16.5", + "@types/prismjs": "^1.26.0", "@types/react-beautiful-dnd": "^13", "@types/react-helmet": "^6.1.1", "@types/react-router-dom": "^5.1.7", diff --git a/packages/components b/packages/components new file mode 160000 index 00000000..d314b2d1 --- /dev/null +++ b/packages/components @@ -0,0 +1 @@ +Subproject commit d314b2d191124f1b487ebd72409e748c1bfccb87 diff --git a/packages/hast-util-table-cell-style b/packages/hast-util-table-cell-style new file mode 160000 index 00000000..7803fa54 --- /dev/null +++ b/packages/hast-util-table-cell-style @@ -0,0 +1 @@ +Subproject commit 7803fa54410a7ef9fc3149c482253e74ca1d7d71 diff --git a/packages/revolt.js b/packages/revolt.js new file mode 160000 index 00000000..39d1f596 --- /dev/null +++ b/packages/revolt.js @@ -0,0 +1 @@ +Subproject commit 39d1f596e280a28278d913e1e60e4d5298d71578 diff --git a/src/components/common/messaging/SystemMessage.tsx b/src/components/common/messaging/SystemMessage.tsx index 43e04d57..68d9f0f6 100644 --- a/src/components/common/messaging/SystemMessage.tsx +++ b/src/components/common/messaging/SystemMessage.tsx @@ -14,12 +14,21 @@ import { import { observer } from "mobx-react-lite"; import { Message, API } from "revolt.js"; import styled from "styled-components/macro"; +import { decodeTime } from "ulid"; import { useTriggerEvents } from "preact-context-menu"; +import { Text } from "preact-i18n"; + +import { Row } from "@revoltchat/ui"; import { TextReact } from "../../../lib/i18n"; +import { useApplicationState } from "../../../mobx/State"; + +import { dayjs } from "../../../context/Locale"; + import Markdown from "../../markdown/Markdown"; +import Tooltip from "../Tooltip"; import UserShort from "../user/UserShort"; import MessageBase, { MessageDetail, MessageInfo } from "./MessageBase"; @@ -78,6 +87,8 @@ export const SystemMessage = observer( const data = message.asSystemMessage; if (!data) return null; + const settings = useApplicationState().settings; + const SystemMessageIcon = iconDictionary[data.type as API.SystemMessage["type"]] ?? InfoCircle; @@ -103,16 +114,39 @@ export const SystemMessage = observer( case "user_joined": case "user_left": case "user_kicked": - case "user_banned": + case "user_banned": { + const createdAt = data.user ? decodeTime(data.user._id) : null; children = ( - , - }} - /> + + , + }} + /> + {data.type == "user_joined" && + createdAt && + (settings.get("appearance:show_account_age") || + Date.now() - createdAt < + 1000 * 60 * 60 * 24 * 7) && ( + + }> + + + )} + ); break; + } case "channel_renamed": children = ( { + const client = channel.client; + const users = channel.typing.filter( (x) => typeof x !== "undefined" && @@ -67,24 +69,47 @@ export default observer(({ channel }: Props) => { x.relationship !== "Blocked", ); - if (users.length > 0) { - users.sort((a, b) => - a!._id.toUpperCase().localeCompare(b!._id.toUpperCase()), + const members = users.map((user) => { + return client.members.getKey({ + server: channel.server_id!, + user: user!._id, + }); + }); + + const getName = (member: Member) => { + return member.nickname === null + ? member.user?.username + : member.nickname; + }; + + const getAvatar = (member: Member) => { + const memberAvatarURL = member.generateAvatarURL({ + max_side: 256, + }); + + return memberAvatarURL === undefined + ? member.user?.generateAvatarURL({ max_side: 256 }) + : memberAvatarURL; + }; + + if (members.length > 0) { + members.sort((a, b) => + a!._id.user.toUpperCase().localeCompare(b!._id.user.toUpperCase()), ); let text; - if (users.length >= 5) { + if (members.length >= 5) { text = ; - } else if (users.length > 1) { - const userlist = [...users].map((x) => x!.username); - const user = userlist.pop(); + } else if (members.length > 1) { + const memberlist = [...members].map((x) => getName(x!)); + const member = memberlist.pop(); text = ( ); @@ -92,7 +117,7 @@ export default observer(({ channel }: Props) => { text = ( ); } @@ -101,11 +126,11 @@ export default observer(({ channel }: Props) => {
- {users.map((user) => ( + {members.map((member) => ( ))}
diff --git a/src/components/common/messaging/embed/EmbedMedia.tsx b/src/components/common/messaging/embed/EmbedMedia.tsx index 87ea8709..53723d27 100644 --- a/src/components/common/messaging/embed/EmbedMedia.tsx +++ b/src/components/common/messaging/embed/EmbedMedia.tsx @@ -49,7 +49,7 @@ export default function EmbedMedia({ embed, width, height }: Props) { case "Lightspeed": return (