Skip to content

Commit 2e4da77

Browse files
committed
get space members
1 parent 7725ad9 commit 2e4da77

File tree

3 files changed

+54
-14
lines changed

3 files changed

+54
-14
lines changed

pkg/connector/client.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func NewClient(userLogin *bridgev2.UserLogin, client *gchatmeow.Client) *GChatCl
2828
return &GChatClient{
2929
userLogin: userLogin,
3030
client: client,
31-
users: make(map[string]*proto.User),
31+
users: map[string]*proto.User{},
3232
}
3333
}
3434

@@ -104,24 +104,34 @@ func (c *GChatClient) onConnect(ctx context.Context) {
104104
}
105105

106106
for _, item := range res.WorldItems {
107-
// TODO room name for DM, and full members list
108107
name := item.RoomName
109-
if name == nil && item.DmMembers != nil {
108+
gcMembers := make([]*proto.UserId, 0)
109+
if item.DmMembers != nil {
110+
gcMembers = item.DmMembers.Members
110111
for _, member := range item.DmMembers.Members {
111112
if *member.Id != string(c.userLogin.ID) {
112113
name = c.users[*member.Id].Name
113114
break
114115
}
115116
}
117+
} else {
118+
group, err := c.client.GetGroup(ctx, &proto.GetGroupRequest{
119+
GroupId: item.GroupId,
120+
FetchOptions: []proto.GetGroupRequest_FetchOptions{
121+
proto.GetGroupRequest_MEMBERS,
122+
},
123+
})
124+
if err != nil {
125+
fmt.Println(err)
126+
continue
127+
}
128+
gcMembers = make([]*proto.UserId, len(group.Memberships))
129+
for i, membership := range group.Memberships {
130+
gcMembers[i] = membership.Id.MemberId.GetUserId()
131+
}
116132

117133
}
118-
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
119-
memberMap[networkid.UserID(c.userLogin.ID)] = bridgev2.ChatMember{
120-
EventSender: bridgev2.EventSender{
121-
IsFromMe: true,
122-
Sender: networkid.UserID(c.userLogin.ID),
123-
},
124-
}
134+
125135
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.ChatResync{
126136
EventMeta: simplevent.EventMeta{
127137
Type: bridgev2.RemoteEventChatResync,
@@ -132,10 +142,8 @@ func (c *GChatClient) onConnect(ctx context.Context) {
132142
CreatePortal: true,
133143
},
134144
ChatInfo: &bridgev2.ChatInfo{
135-
Name: name,
136-
Members: &bridgev2.ChatMemberList{
137-
MemberMap: memberMap,
138-
},
145+
Name: name,
146+
Members: c.gcMembersToMxMembers(gcMembers),
139147
},
140148
})
141149

pkg/connector/mapping.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package connector
2+
3+
import (
4+
"maunium.net/go/mautrix/bridgev2"
5+
"maunium.net/go/mautrix/bridgev2/networkid"
6+
7+
"go.mau.fi/mautrix-googlechat/pkg/gchatmeow/proto"
8+
)
9+
10+
func (c *GChatClient) gcMembersToMxMembers(gcMembers []*proto.UserId) *bridgev2.ChatMemberList {
11+
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
12+
for _, gcMember := range gcMembers {
13+
userId := networkid.UserID(*gcMember.Id)
14+
memberMap[userId] = bridgev2.ChatMember{
15+
EventSender: bridgev2.EventSender{
16+
IsFromMe: *gcMember.Id == string(c.userLogin.ID),
17+
Sender: userId,
18+
},
19+
}
20+
}
21+
22+
return &bridgev2.ChatMemberList{
23+
MemberMap: memberMap,
24+
}
25+
}

pkg/gchatmeow/api.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,10 @@ func (c *Client) CreateTopic(ctx context.Context, request *proto.CreateTopicRequ
138138
err := c.gcRequest(ctx, "create_topic", request, response)
139139
return response, err
140140
}
141+
142+
func (c *Client) GetGroup(ctx context.Context, request *proto.GetGroupRequest) (*proto.GetGroupResponse, error) {
143+
request.RequestHeader = c.gcRequestHeader
144+
response := &proto.GetGroupResponse{}
145+
err := c.gcRequest(ctx, "get_group", request, response)
146+
return response, err
147+
}

0 commit comments

Comments
 (0)