KI-AGENT: Matrix-Chat live aktualisieren
This commit is contained in:
@@ -22,6 +22,13 @@ type MatrixRoomEvent = {
|
||||
}
|
||||
}
|
||||
|
||||
type MatrixJoinedMembersResponse = {
|
||||
joined: Record<string, {
|
||||
display_name?: string
|
||||
avatar_url?: string
|
||||
}>
|
||||
}
|
||||
|
||||
const trimTrailingSlash = (value: string) => value.replace(/\/+$/, "")
|
||||
const readLocalDevRegistrationSharedSecret = () => {
|
||||
if (process.env.NODE_ENV === "production") return ""
|
||||
@@ -687,6 +694,10 @@ export function matrixService(server: FastifyInstance) {
|
||||
`/_matrix/client/v3/rooms/${encodeURIComponent(room.roomId)}/messages?dir=b&limit=50`,
|
||||
session.accessToken
|
||||
)
|
||||
const members = await requestMatrixJson<MatrixJoinedMembersResponse>(
|
||||
`/_matrix/client/v3/rooms/${encodeURIComponent(room.roomId)}/joined_members`,
|
||||
session.accessToken
|
||||
)
|
||||
|
||||
return {
|
||||
roomId: room.roomId,
|
||||
@@ -697,6 +708,7 @@ export function matrixService(server: FastifyInstance) {
|
||||
.map((event) => ({
|
||||
id: event.event_id,
|
||||
sender: event.sender,
|
||||
senderDisplayName: members.joined[event.sender]?.display_name || event.sender,
|
||||
body: event.content?.body || "",
|
||||
timestamp: event.origin_server_ts,
|
||||
own: event.sender === session.matrixUserId,
|
||||
@@ -705,6 +717,33 @@ export function matrixService(server: FastifyInstance) {
|
||||
}
|
||||
}
|
||||
|
||||
const getGeneralRoomMembers = async (userId: string, tenantId: number | null) => {
|
||||
const room = await provisionTenantRoom(userId, tenantId, {
|
||||
key: "allgemein",
|
||||
name: "Allgemeiner Chat",
|
||||
})
|
||||
|
||||
const session = await ensureCurrentUserJoinedRoom(userId, tenantId, {
|
||||
roomId: room.roomId,
|
||||
alias: room.alias,
|
||||
})
|
||||
const members = await requestMatrixJson<MatrixJoinedMembersResponse>(
|
||||
`/_matrix/client/v3/rooms/${encodeURIComponent(room.roomId)}/joined_members`,
|
||||
session.accessToken
|
||||
)
|
||||
|
||||
return {
|
||||
roomId: room.roomId,
|
||||
alias: room.alias,
|
||||
members: Object.entries(members.joined).map(([matrixUserId, member]) => ({
|
||||
matrixUserId,
|
||||
displayName: member.display_name || matrixUserId,
|
||||
avatarUrl: member.avatar_url || null,
|
||||
own: matrixUserId === session.matrixUserId,
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
||||
const sendGeneralRoomMessage = async (
|
||||
userId: string,
|
||||
tenantId: number | null,
|
||||
@@ -746,6 +785,7 @@ export function matrixService(server: FastifyInstance) {
|
||||
return {
|
||||
id: response.event_id,
|
||||
sender: session.matrixUserId,
|
||||
senderDisplayName: await getCurrentUserDisplayName(userId, tenantId),
|
||||
body: message,
|
||||
timestamp: Date.now(),
|
||||
own: true,
|
||||
@@ -765,6 +805,7 @@ export function matrixService(server: FastifyInstance) {
|
||||
provisionTenantRoom,
|
||||
createAccessTokenForUser,
|
||||
getGeneralRoomMessages,
|
||||
getGeneralRoomMembers,
|
||||
sendGeneralRoomMessage,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +86,17 @@ export default async function communicationRoutes(server: FastifyInstance) {
|
||||
}
|
||||
})
|
||||
|
||||
server.get("/communication/matrix/rooms/general/members", async (req, reply) => {
|
||||
try {
|
||||
return await matrix.getGeneralRoomMembers(req.user.user_id, req.user.tenant_id)
|
||||
} catch (err: any) {
|
||||
req.log.error(err)
|
||||
return reply
|
||||
.code(err.statusCode || 500)
|
||||
.send({ error: err.message || "Matrix members failed" })
|
||||
}
|
||||
})
|
||||
|
||||
server.post("/communication/matrix/rooms/general/messages", async (req, reply) => {
|
||||
try {
|
||||
const body = req.body as { text?: string }
|
||||
|
||||
Reference in New Issue
Block a user