Skip to content

Commit baa3bad

Browse files
authored
fix: misidentified kicked users as left (#238)
1 parent 2c1fd56 commit baa3bad

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

pkg/connector/consts.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ const (
2626
OpUnblockContact OperationType = 7
2727
)
2828

29+
const OpNotifiedDeleteOtherFromChat OperationType = 133
30+
2931
// ContentType values for LINE messages.
3032
type ContentType int
3133

pkg/connector/sync.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,6 +1888,16 @@ func (lc *LineClient) handleOperation(ctx context.Context, op line.Operation) {
18881888
case OpDeleteOtherFromChat:
18891889
lc.handleMemberLeave(op.Param1, op.Param2)
18901890

1891+
case OpNotifiedDeleteOtherFromChat:
1892+
removal, ok := lc.makeNotifiedMemberRemovalEvent(op)
1893+
if !ok {
1894+
lc.UserLogin.Bridge.Log.Warn().
1895+
Int("op_type", op.Type).
1896+
Msg("Ignoring malformed notified member removal")
1897+
return
1898+
}
1899+
lc.UserLogin.Bridge.QueueRemoteEvent(lc.UserLogin, removal)
1900+
18911901
case OpNotifiedLeaveChat:
18921902
lower1 := strings.ToLower(op.Param1)
18931903
if strings.HasPrefix(lower1, "c") || strings.HasPrefix(lower1, "r") {
@@ -2281,6 +2291,30 @@ func (lc *LineClient) handleMemberLeft(chatMid, leaverMid string) {
22812291
lc.handleMemberLeaveWithSender(chatMid, leaverMid, lc.eventSenderForMID(leaverMid))
22822292
}
22832293

2294+
func (lc *LineClient) makeNotifiedMemberRemovalEvent(op line.Operation) (*simplevent.ChatInfoChange, bool) {
2295+
if OperationType(op.Type) != OpNotifiedDeleteOtherFromChat ||
2296+
!isChatMID(op.Param1) ||
2297+
!isUserMID(op.Param2) ||
2298+
!isUserMID(op.Param3) ||
2299+
op.Param2 == op.Param3 {
2300+
return nil, false
2301+
}
2302+
2303+
ts := time.Now()
2304+
if timestamp, err := op.CreatedTime.Int64(); err == nil && timestamp > 0 {
2305+
ts = time.UnixMilli(timestamp)
2306+
}
2307+
lc.removeGroupMemberFromCache(op.Param1, op.Param3)
2308+
return makeMemberChangeEvent(
2309+
networkid.PortalKey{ID: makePortalID(op.Param1), Receiver: lc.UserLogin.ID},
2310+
lc.eventSenderForMID(op.Param3),
2311+
lc.eventSenderForMID(op.Param2),
2312+
event.MembershipLeave,
2313+
ts,
2314+
false,
2315+
), true
2316+
}
2317+
22842318
func (lc *LineClient) handleMemberLeaveWithSender(chatMid, leaverMid string, changeSender bridgev2.EventSender) {
22852319
lower := strings.ToLower(chatMid)
22862320
if !strings.HasPrefix(lower, "c") && !strings.HasPrefix(lower, "r") {

0 commit comments

Comments
 (0)