|
49 | 49 | _ bridgev2.TypingHandlingNetworkAPI = (*TwitterClient)(nil) |
50 | 50 | _ bridgev2.ChatViewingNetworkAPI = (*TwitterClient)(nil) |
51 | 51 | _ bridgev2.DeleteChatHandlingNetworkAPI = (*TwitterClient)(nil) |
| 52 | + _ bridgev2.MembershipHandlingNetworkAPI = (*TwitterClient)(nil) |
52 | 53 | _ bridgev2.RoomAvatarHandlingNetworkAPI = (*TwitterClient)(nil) |
53 | 54 | ) |
54 | 55 |
|
@@ -290,3 +291,28 @@ func (tc *TwitterClient) HandleMatrixRoomAvatar(ctx context.Context, msg *bridge |
290 | 291 | } |
291 | 292 | return false, errors.New("avatar not found") |
292 | 293 | } |
| 294 | + |
| 295 | +func (tc *TwitterClient) HandleMatrixMembership(ctx context.Context, msg *bridgev2.MatrixMembershipChange) (bool, error) { |
| 296 | + if msg.Type != bridgev2.Invite { |
| 297 | + return false, errors.New("unsupported membership change type") |
| 298 | + } |
| 299 | + if msg.Portal.RoomType == database.RoomTypeDM { |
| 300 | + return false, errors.New("cannot change members for DM") |
| 301 | + } |
| 302 | + |
| 303 | + var participantID string |
| 304 | + switch target := msg.Target.(type) { |
| 305 | + case *bridgev2.Ghost: |
| 306 | + participantID = string(target.ID) |
| 307 | + case *bridgev2.UserLogin: |
| 308 | + participantID = string(target.ID) |
| 309 | + } |
| 310 | + _, err := tc.client.AddParticipants(ctx, &payload.AddParticipantsPayload{ |
| 311 | + ConversationID: string(msg.Portal.ID), |
| 312 | + AddedParticipants: []string{participantID}, |
| 313 | + }) |
| 314 | + if err != nil { |
| 315 | + return false, err |
| 316 | + } |
| 317 | + return true, nil |
| 318 | +} |
0 commit comments