From 74fb4a152b3529016d96148d88245934ebbaa5fd Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 14 Mar 2020 21:27:40 -0400 Subject: [PATCH] Add ListMembers methods --- chat.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ types.go | 24 ++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/chat.go b/chat.go index 09f5309..e52978e 100644 --- a/chat.go +++ b/chat.go @@ -11,6 +11,7 @@ import ( "time" "samhofi.us/x/keybase/types/chat1" + "samhofi.us/x/keybase/types/keybase1" "samhofi.us/x/keybase/types/stellar1" ) @@ -753,3 +754,49 @@ func (k *Keybase) ClearCommands() error { return nil } + +// ListMembers returns member information for a channel or conversation +func (k *Keybase) ListMembers(options ListMembersOptions) (keybase1.TeamDetails, error) { + type res struct { + Result keybase1.TeamDetails `json:"result"` + Error *Error `json:"error,omitempty"` + } + + var r res + + arg := newListMembersArg(options) + + jsonBytes, _ := json.Marshal(arg) + + cmdOut, err := k.Exec("chat", "api", "-m", string(jsonBytes)) + if err != nil { + return r.Result, err + } + + err = json.Unmarshal(cmdOut, &r) + if err != nil { + return r.Result, err + } + + if r.Error != nil { + return r.Result, fmt.Errorf("%v", r.Error.Message) + } + + return r.Result, nil +} + +// ListMembersOfChannel returns member information for a channel +func (k *Keybase) ListMembersOfChannel(channel chat1.ChatChannel) (keybase1.TeamDetails, error) { + opts := ListMembersOptions{ + Channel: channel, + } + return k.ListMembers(opts) +} + +// ListMembersOfConversation returns member information for a conversation +func (k *Keybase) ListMembersOfConversation(convID chat1.ConvIDStr) (keybase1.TeamDetails, error) { + opts := ListMembersOptions{ + ConversationID: convID, + } + return k.ListMembers(opts) +} diff --git a/types.go b/types.go index 6a031a3..01819f9 100644 --- a/types.go +++ b/types.go @@ -183,6 +183,30 @@ func newDownloadArg(options DownloadOptions) downloadArg { } } +// ListMembersOptions holds a set of options to be passed to ListMembers +type ListMembersOptions struct { + Channel chat1.ChatChannel + ConversationID chat1.ConvIDStr `json:"conversation_id"` +} + +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, + }, + } +} + // KVOptions holds a set of options to be passed to the KV methods type KVOptions struct { Team *string `json:"team"`