From ca23e1595caa740c8a101328cb814782247fb32b Mon Sep 17 00:00:00 2001 From: OpenWaygate <27287694+OpenWaygate@users.noreply.github.com> Date: Mon, 13 May 2024 23:45:59 +0800 Subject: [PATCH] :sparkles: Support more flags when list members --- cmd/member/list.go | 15 +++++++++++++++ cmd/member/member.go | 9 ++++++--- pkg/yutuber/member.go | 31 ++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/cmd/member/list.go b/cmd/member/list.go index a0e6f5e..0256613 100644 --- a/cmd/member/list.go +++ b/cmd/member/list.go @@ -12,6 +12,9 @@ var listCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { m := yutuber.NewMember( yutuber.WithMemberChannelId(memberChannelId), + yutuber.WithMemberHasAccessToLevel(hasAccessToLevel), + yutuber.WithMemberMaxResults(maxResults), + yutuber.WithMemberMode(mode), ) m.List(parts, output) }, @@ -24,6 +27,18 @@ func init() { &memberChannelId, "memberChannelId", "c", "", "Comma separated list of channel IDs. Only data about members that are part of this list will be included", ) + listCmd.Flags().StringVarP( + &hasAccessToLevel, "hasAccessToLevel", "a", "", + "Filter members in the results set to the ones that have access to a level", + ) + listCmd.Flags().Int64VarP( + &maxResults, "maxResults", "m", 5, + "Specifies the maximum number of items that should be returned", + ) + listCmd.Flags().StringVarP( + &mode, "mode", "o", "", + "listMembersModeUnknown, updates or all_current(default)", + ) listCmd.Flags().StringSliceVarP( &parts, "parts", "p", []string{"snippet"}, "Comma separated parts", ) diff --git a/cmd/member/member.go b/cmd/member/member.go index aad4783..36d9f81 100644 --- a/cmd/member/member.go +++ b/cmd/member/member.go @@ -6,9 +6,12 @@ import ( ) var ( - memberChannelId string - parts []string - output string + memberChannelId string + hasAccessToLevel string + maxResults int64 + mode string + parts []string + output string ) var memberCmd = &cobra.Command{ diff --git a/pkg/yutuber/member.go b/pkg/yutuber/member.go index 61b7b11..2eebab2 100644 --- a/pkg/yutuber/member.go +++ b/pkg/yutuber/member.go @@ -14,7 +14,10 @@ var ( ) type member struct { - memberChannelId string + memberChannelId string + hasAccessToLevel string + maxResults int64 + mode string } type Member interface { @@ -40,6 +43,14 @@ func (m *member) get(parts []string) []*youtube.Member { if m.memberChannelId != "" { call = call.FilterByMemberChannelId(m.memberChannelId) } + if m.hasAccessToLevel != "" { + call = call.HasAccessToLevel(m.hasAccessToLevel) + } + call = call.MaxResults(m.maxResults) + if m.mode != "" { + call = call.Mode(m.mode) + } + response, err := call.Do() if err != nil { log.Fatalln(errors.Join(errGetMember, err)) @@ -72,3 +83,21 @@ func WithMemberChannelId(channelId string) MemberOption { m.memberChannelId = channelId } } + +func WithMemberHasAccessToLevel(level string) MemberOption { + return func(m *member) { + m.hasAccessToLevel = level + } +} + +func WithMemberMaxResults(results int64) MemberOption { + return func(m *member) { + m.maxResults = results + } +} + +func WithMemberMode(mode string) MemberOption { + return func(m *member) { + m.mode = mode + } +}