@@ -10,6 +10,7 @@ import (
1010 "maunium.net/go/mautrix/bridgev2/database"
1111 "maunium.net/go/mautrix/bridgev2/networkid"
1212 "maunium.net/go/mautrix/bridgev2/simplevent"
13+ "maunium.net/go/mautrix/event"
1314
1415 "go.mau.fi/mautrix-googlechat/pkg/gchatmeow/proto"
1516)
@@ -37,12 +38,14 @@ func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
3738 switch evt .Type {
3839 case proto .Event_MESSAGE_POSTED :
3940 msg := evt .Body .GetMessagePosted ().Message
40- c .userLogin .Bridge .QueueRemoteEvent (c .userLogin , & simplevent.Message [* proto.Message ]{
41- EventMeta : c .makeEventMeta (evt , bridgev2 .RemoteEventMessage , msg .Creator .UserId .Id , msg .CreateTime ),
42- ID : networkid .MessageID (msg .Id .MessageId ),
43- Data : msg ,
44- ConvertMessageFunc : c .msgConv .ToMatrix ,
45- })
41+ if msg .MessageType != proto .Message_SYSTEM_MESSAGE {
42+ c .userLogin .Bridge .QueueRemoteEvent (c .userLogin , & simplevent.Message [* proto.Message ]{
43+ EventMeta : c .makeEventMeta (evt , bridgev2 .RemoteEventMessage , msg .Creator .UserId .Id , msg .CreateTime ),
44+ ID : networkid .MessageID (msg .Id .MessageId ),
45+ Data : msg ,
46+ ConvertMessageFunc : c .msgConv .ToMatrix ,
47+ })
48+ }
4649 case proto .Event_MESSAGE_UPDATED :
4750 msg := evt .Body .GetMessagePosted ().Message
4851 eventMeta := c .makeEventMeta (evt , bridgev2 .RemoteEventEdit , msg .Creator .UserId .Id , msg .LastEditTime )
@@ -71,9 +74,12 @@ func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
7174 c .userLogin .Bridge .QueueRemoteEvent (c .userLogin , & simplevent.Receipt {
7275 EventMeta : c .makeEventMeta (evt , bridgev2 .RemoteEventReadReceipt , receipt .User .UserId .Id , receipt .ReadTimeMicros ),
7376 ReadUpTo : time .UnixMicro (receipt .ReadTimeMicros ),
74- },
75- )
77+ })
7678 }
79+ case proto .Event_GROUP_UPDATED :
80+ c .handleGroupUpdated (ctx , evt )
81+ case proto .Event_MEMBERSHIP_CHANGED :
82+ c .handleMembershipChanged (ctx , evt )
7783 }
7884
7985 c .setPortalRevision (ctx , evt )
@@ -113,6 +119,50 @@ func (c *GChatClient) handleReaction(ctx context.Context, evt *proto.Event) {
113119 })
114120}
115121
122+ func (c * GChatClient ) handleGroupUpdated (ctx context.Context , evt * proto.Event ) {
123+ new := evt .Body .GetGroupUpdated ().New
124+ if new == nil || (new .Name == "" && new .AvatarUrl == "" ) {
125+ return
126+ }
127+ c .userLogin .Bridge .QueueRemoteEvent (c .userLogin , & simplevent.ChatInfoChange {
128+ EventMeta : c .makeEventMeta (evt , bridgev2 .RemoteEventChatInfoChange , "" , evt .GetGroupRevision ().Timestamp ),
129+ ChatInfoChange : & bridgev2.ChatInfoChange {
130+ ChatInfo : & bridgev2.ChatInfo {
131+ Name : & new .Name ,
132+ Avatar : c .makeAvatar (new .AvatarUrl ),
133+ },
134+ },
135+ })
136+ }
137+
138+ func (c * GChatClient ) handleMembershipChanged (ctx context.Context , evt * proto.Event ) {
139+ userId := evt .Body .GetMembershipChanged ().NewMembership .Id .MemberId .GetUserId ().Id
140+ member := bridgev2.ChatMember {
141+ EventSender : bridgev2.EventSender {
142+ IsFromMe : userId == string (c .userLogin .ID ),
143+ Sender : networkid .UserID (userId ),
144+ },
145+ }
146+ switch evt .Body .GetMembershipChanged ().NewMembership .MembershipState {
147+ case proto .MembershipState_MEMBER_JOINED :
148+ member .Membership = event .MembershipJoin
149+ case proto .MembershipState_MEMBER_NOT_A_MEMBER :
150+ member .Membership = event .MembershipLeave
151+ case proto .MembershipState_MEMBER_INVITED :
152+ member .Membership = event .MembershipInvite
153+ }
154+ memberMap := map [networkid.UserID ]bridgev2.ChatMember {}
155+ memberMap [networkid .UserID (userId )] = member
156+ c .userLogin .Bridge .QueueRemoteEvent (c .userLogin , & simplevent.ChatInfoChange {
157+ EventMeta : c .makeEventMeta (evt , bridgev2 .RemoteEventChatInfoChange , "" , evt .GetGroupRevision ().Timestamp ),
158+ ChatInfoChange : & bridgev2.ChatInfoChange {
159+ MemberChanges : & bridgev2.ChatMemberList {
160+ MemberMap : memberMap ,
161+ },
162+ },
163+ })
164+ }
165+
116166func (c * GChatClient ) ConvertEdit (ctx context.Context , portal * bridgev2.Portal , intent bridgev2.MatrixAPI , existing []* database.Message , msg * proto.Message ) (* bridgev2.ConvertedEdit , error ) {
117167 cm , err := c .msgConv .ToMatrix (ctx , portal , intent , msg )
118168 if err != nil {
0 commit comments