Add event type handling

This commit is contained in:
Henrik Hüttemann 2023-09-12 15:06:10 +02:00
parent a7afe7b570
commit c4e7659e30
No known key found for this signature in database
GPG Key ID: 9F7BD10E0A8A111E

View File

@ -102,11 +102,6 @@ export async function handle(rcMessage: RcMessage): Promise<void> {
return
}
if (rcMessage.t) {
log.warn(`Message ${rcMessage._id} is of type ${rcMessage.t}, skipping.`)
return
}
const room_id = await getRoomId(rcMessage.rid)
if (!room_id) {
log.warn(
@ -115,6 +110,71 @@ export async function handle(rcMessage: RcMessage): Promise<void> {
return
}
if (rcMessage.t) {
switch (rcMessage.t) {
case 'ru': // User removed by
case 'ul': // User left
case 'ult': // User left team
case 'removed-user-from-team': // Removed user from team
log.info(
`Message ${rcMessage._id} is of type ${rcMessage.t}, removing member ${rcMessage.msg} from room ${room_id}`
)
const members = (
await axios.get(
`/_matrix/client/v3/rooms/${room_id}/joined_members`,
formatUserSessionOptions(applicationServiceToken)
)
).data.joined
if (!members) {
const errorMessage = `Could not determine members of room ${room_id}, aborting`
log.error(errorMessage)
throw new Error(errorMessage)
}
const matrixUser =
Object.keys(members).find((key) =>
key.includes(rcMessage.msg.toLowerCase())
) || ''
const userMapping = await getMappingByMatrixId(matrixUser)
if (!userMapping?.accessToken) {
log.warn(
`Could not get access token for ${rcMessage.msg}, maybe user is not a member, skipping.`
)
return
}
log.http(`User ${matrixUser} leaves room ${room_id}`)
await axios.post(
`/_matrix/client/v3/rooms/${room_id}/leave`,
{ reason: `Event type ${rcMessage.t}` },
formatUserSessionOptions(userMapping.accessToken)
)
return
case 'uj': // User joined channel
case 'ujt': // User joined team
case 'ut': // User joined conversation
case 'au': // User added by
case 'added-user-to-team': // Added user to team
case 'r': // Room name changed
case 'rm': // Message removed
log.info(
`Message ${rcMessage._id} is of type ${rcMessage.t}, for which Rocket.Chat does not provide the initial state information, skipping.`
)
return
case 'user-muted': // User muted by
default:
log.warn(
`Message ${rcMessage._id} is of unhandled type ${rcMessage.t}, skipping.`
)
return
}
}
const user_id = await getUserId(rcMessage.u._id)
if (!user_id) {
log.warn(