mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +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
|
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
|
var filters []client.ChatMembersFilter
|
||||||
switch membersList {
|
switch membersList {
|
||||||
case MembersListMembers:
|
case MembersListMembers:
|
||||||
|
|
@ -2747,7 +2750,8 @@ func (c *Client) GetChatMembers(chatID int64, limited bool, query string, member
|
||||||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}}
|
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}}
|
||||||
case MembersListBannedAndAdministrators:
|
case MembersListBannedAndAdministrators:
|
||||||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}, &client.ChatMembersFilterAdministrators{}}
|
filters = []client.ChatMembersFilter{&client.ChatMembersFilterBanned{}, &client.ChatMembersFilterAdministrators{}}
|
||||||
case MembersListAdministrators:
|
case MembersListAdministrators, MembersListCreators:
|
||||||
|
administratorsRequest = true
|
||||||
filters = []client.ChatMembersFilter{&client.ChatMembersFilterAdministrators{}}
|
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
|
var members []*client.ChatMember
|
||||||
for _, filter := range filters {
|
for _, filter := range filters {
|
||||||
chatMembers, err := c.client.SearchChatMembers(&client.SearchChatMembersRequest{
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
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
|
return members, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue