mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 12:17:06 +00:00
Support retrieving chat administrators/owner in supergroups
This commit is contained in:
parent
10fc1d26ef
commit
422ac9dea6
1 changed files with 30 additions and 4 deletions
|
|
@ -2732,11 +2732,14 @@ func (c *Client) GetChatMembers(chatID int64, limited bool, query string, member
|
|||
|
||||
return []*client.ChatMember{chatMember}, nil
|
||||
}
|
||||
} else if chatType == client.TypeChatTypeSupergroup {
|
||||
// noop, use complex filtering strategy later
|
||||
} else {
|
||||
return nil, errors.New("Creator not found")
|
||||
}
|
||||
|
||||
return nil, errors.New("Creator not found")
|
||||
}
|
||||
|
||||
var administratorsRequest bool
|
||||
var filters []client.ChatMembersFilter
|
||||
switch membersList {
|
||||
case MembersListMembers:
|
||||
|
|
@ -2747,7 +2750,8 @@ func (c *Client) GetChatMembers(chatID int64, limited bool, query string, member
|
|||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}}
|
||||
case MembersListBannedAndAdministrators:
|
||||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}, &client.ChatMembersFilterAdministrators{}}
|
||||
case MembersListAdministrators:
|
||||
case MembersListAdministrators, MembersListCreators:
|
||||
administratorsRequest = true
|
||||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterAdministrators{}}
|
||||
}
|
||||
|
||||
|
|
@ -2792,6 +2796,18 @@ func (c *Client) GetChatMembers(chatID int64, limited bool, query string, member
|
|||
}
|
||||
}
|
||||
|
||||
administrators := make(map[int64]*client.ChatAdministrator)
|
||||
if administratorsRequest {
|
||||
chatAdministrators, err := c.client.GetChatAdministrators(&client.GetChatAdministratorsRequest{
|
||||
ChatId: chatID,
|
||||
})
|
||||
if err == nil {
|
||||
for _, administrator := range chatAdministrators.Administrators {
|
||||
administrators[administrator.UserId] = administrator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var members []*client.ChatMember
|
||||
for _, filter := range filters {
|
||||
chatMembers, err := c.client.SearchChatMembers(&client.SearchChatMembersRequest{
|
||||
|
|
@ -2803,7 +2819,17 @@ func (c *Client) GetChatMembers(chatID int64, limited bool, query string, member
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
members = append(members, chatMembers.Members...)
|
||||
for _, member := range chatMembers.Members {
|
||||
switch membersList {
|
||||
case MembersListAdministrators, MembersListCreators:
|
||||
senderId := c.GetSenderId(member.MemberId)
|
||||
administrator, ok := administrators[senderId]
|
||||
if !ok || (administrator.IsOwner == (membersList == MembersListAdministrators)) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
members = append(members, member)
|
||||
}
|
||||
}
|
||||
return members, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue