KI-AGENT: Matrix Push Worker für ungelesene Nachrichten ergänzen
This commit is contained in:
@@ -1512,6 +1512,69 @@ export function matrixService(server: FastifyInstance) {
|
||||
}
|
||||
}
|
||||
|
||||
const syncServiceRoomEvents = async (since?: string, initial = false) => {
|
||||
const service = await ensureServiceAccessToken()
|
||||
const filter = {
|
||||
room: {
|
||||
timeline: {
|
||||
limit: 50,
|
||||
},
|
||||
},
|
||||
presence: {
|
||||
types: [],
|
||||
},
|
||||
account_data: {
|
||||
types: [],
|
||||
},
|
||||
}
|
||||
const params = new URLSearchParams({
|
||||
timeout: since && !initial ? "25000" : "0",
|
||||
filter: JSON.stringify(filter),
|
||||
})
|
||||
|
||||
if (since) params.set("since", since)
|
||||
|
||||
const response = await requestMatrixJson<MatrixSyncResponse>(
|
||||
`/_matrix/client/v3/sync?${params.toString()}`,
|
||||
service.accessToken
|
||||
)
|
||||
const joinedRooms = response.rooms?.join || {}
|
||||
|
||||
return {
|
||||
nextBatch: response.next_batch || since || "",
|
||||
serviceUserId: service.matrixUserId,
|
||||
rooms: Object.entries(joinedRooms).map(([roomId, joinedRoom]) => {
|
||||
const timelineEvents = joinedRoom.timeline?.events || []
|
||||
const messages = initial
|
||||
? []
|
||||
: timelineEvents
|
||||
.filter((event) =>
|
||||
event.type === "m.room.message" &&
|
||||
["m.text", "m.file", "m.image"].includes(event.content?.msgtype || "") &&
|
||||
event.content?.["m.relates_to"]?.rel_type !== "m.replace"
|
||||
)
|
||||
.map((event) => ({
|
||||
id: event.event_id,
|
||||
roomId,
|
||||
sender: event.sender,
|
||||
senderDisplayName: event.sender,
|
||||
body: event.content?.body || "",
|
||||
attachment: attachmentFromEvent(event),
|
||||
timestamp: event.origin_server_ts,
|
||||
own: event.sender === service.matrixUserId,
|
||||
replyToEventId: event.content?.["m.relates_to"]?.["m.in_reply_to"]?.event_id || null,
|
||||
}))
|
||||
|
||||
return {
|
||||
roomId,
|
||||
messages,
|
||||
membersChanged: [...timelineEvents, ...(joinedRoom.state?.events || [])]
|
||||
.some((event) => event.type === "m.room.member"),
|
||||
}
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
const sendTenantRoomMessage = async (
|
||||
userId: string,
|
||||
tenantId: number | null,
|
||||
@@ -2189,6 +2252,7 @@ export function matrixService(server: FastifyInstance) {
|
||||
getTenantRoomMembers,
|
||||
searchTenantRoomMessages,
|
||||
syncTenantRoomEvents,
|
||||
syncServiceRoomEvents,
|
||||
sendTenantRoomMessage,
|
||||
sendTenantRoomReaction,
|
||||
editTenantRoomMessage,
|
||||
|
||||
Reference in New Issue
Block a user