Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

expose listmembers method #47

Merged
merged 2 commits into from Jan 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
58 changes: 58 additions & 0 deletions kbchat/chat.go
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"

"github.com/keybase/go-keybase-chat-bot/kbchat/types/chat1"
"github.com/keybase/go-keybase-chat-bot/kbchat/types/keybase1"
)

type Thread struct {
Expand Down Expand Up @@ -488,3 +489,60 @@ func (a *API) listCommands(arg listCmdsArg) ([]chat1.UserBotCommandOutput, error
}
return res.Result.Commands, nil
}

type listMembersOptions struct {
Channel chat1.ChatChannel `json:"channel,omitempty"`
ConversationID string `json:"conversation_id,omitempty"`
}

type listMembersParams struct {
Options listMembersOptions
}

type listMembersArg struct {
Method string
Params listMembersParams
}

func newListMembersArg(options listMembersOptions) listMembersArg {
return listMembersArg{
Method: "listmembers",
Params: listMembersParams{
Options: options,
},
}
}

func (a *API) ListMembers(channel chat1.ChatChannel) (keybase1.TeamMembersDetails, error) {
arg := newListMembersArg(listMembersOptions{
Channel: channel,
})
return a.listMembers(arg)
}

func (a *API) ListMembersByConvID(conversationID string) (keybase1.TeamMembersDetails, error) {
arg := newListMembersArg(listMembersOptions{
ConversationID: conversationID,
})
return a.listMembers(arg)
}

func (a *API) listMembers(arg listMembersArg) (res keybase1.TeamMembersDetails, err error) {
bArg, err := json.Marshal(arg)
if err != nil {
return res, err
}
output, err := a.doFetch(string(bArg))
if err != nil {
return res, err
}
members := ListTeamMembers{}
err = json.Unmarshal(output, &members)
if err != nil {
return res, UnmarshalError{err}
}
if members.Error.Message != "" {
return res, members.Error
}
return members.Result.Members, nil
}
18 changes: 7 additions & 11 deletions kbchat/team.go
Expand Up @@ -23,46 +23,42 @@ type ListUserMemberships struct {
Error Error `json:"error"`
}

func (a *API) ListMembersOfTeam(teamName string) (keybase1.TeamMembersDetails, error) {
empty := keybase1.TeamMembersDetails{}

func (a *API) ListMembersOfTeam(teamName string) (res keybase1.TeamMembersDetails, err error) {
apiInput := fmt.Sprintf(`{"method": "list-team-memberships", "params": {"options": {"team": "%s"}}}`, teamName)
cmd := a.runOpts.Command("team", "api")
cmd.Stdin = strings.NewReader(apiInput)
bytes, err := cmd.CombinedOutput()
if err != nil {
return empty, APIError{err}
return res, APIError{err}
}

members := ListTeamMembers{}
err = json.Unmarshal(bytes, &members)
if err != nil {
return empty, UnmarshalError{err}
return res, UnmarshalError{err}
}
if members.Error.Message != "" {
return empty, members.Error
return res, members.Error
}
return members.Result.Members, nil
}

func (a *API) ListUserMemberships(username string) ([]keybase1.AnnotatedMemberInfo, error) {
empty := []keybase1.AnnotatedMemberInfo{}

apiInput := fmt.Sprintf(`{"method": "list-user-memberships", "params": {"options": {"username": "%s"}}}`, username)
cmd := a.runOpts.Command("team", "api")
cmd.Stdin = strings.NewReader(apiInput)
bytes, err := cmd.CombinedOutput()
if err != nil {
return empty, APIError{err}
return nil, APIError{err}
}

members := ListUserMemberships{}
err = json.Unmarshal(bytes, &members)
if err != nil {
return empty, UnmarshalError{err}
return nil, UnmarshalError{err}
}
if members.Error.Message != "" {
return empty, members.Error
return nil, members.Error
}
return members.Result.Teams, nil
}