diff --git a/src/handlers/rooms.test.ts b/src/handlers/rooms.test.ts index 1f0ef2e..2df7082 100644 --- a/src/handlers/rooms.test.ts +++ b/src/handlers/rooms.test.ts @@ -1,5 +1,6 @@ import { expect, jest, test } from '@jest/globals' import axios from 'axios' +import { Entity, entities } from '../Entities' import { IdMapping } from '../entity/IdMapping' import * as storage from '../helpers/storage' import { SessionOptions } from '../helpers/synapse' @@ -9,15 +10,14 @@ import { RcRoom, RcRoomTypes, acceptInvitation, + createDirectChatMemberships, createMapping, getCreator, getFilteredMembers, inviteMember, mapRoom, - createDirectChatMemberships, registerRoom, } from './rooms' -import { Entity, entities } from '../Entities' jest.mock('axios') const mockedAxios = axios as jest.Mocked diff --git a/src/handlers/rooms.ts b/src/handlers/rooms.ts index d5b46e5..574c327 100644 --- a/src/handlers/rooms.ts +++ b/src/handlers/rooms.ts @@ -1,3 +1,4 @@ +import { AxiosError } from 'axios' import { Entity, entities } from '../Entities' import { IdMapping } from '../entity/IdMapping' import log from '../helpers/logger' @@ -160,11 +161,26 @@ export async function inviteMember( creatorSessionOptions: SessionOptions | object ): Promise { log.http(`Invite member ${inviteeId}`) - await axios.post( - `/_matrix/client/v3/rooms/${roomId}/invite`, - { user_id: inviteeId }, - creatorSessionOptions - ) + try { + await axios.post( + `/_matrix/client/v3/rooms/${roomId}/invite`, + { user_id: inviteeId }, + creatorSessionOptions + ) + } catch (error) { + if ( + error instanceof AxiosError && + error.response && + error.response.data.errcode === 'M_FORBIDDEN' && + error.response.data.error === `${inviteeId} is already in the room.` + ) { + log.debug( + `User ${inviteeId} is already in room ${roomId}, probably because this user created the room as a fallback.` + ) + } else { + throw error + } + } } export async function acceptInvitation(