From aa1899925bcf3bc109bef7df2664b99ae68208b2 Mon Sep 17 00:00:00 2001 From: TopiSenpai Date: Mon, 16 May 2022 23:51:04 +0200 Subject: [PATCH] cleanup member chunking filter --- bot/member_chunking_filter.go | 43 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/bot/member_chunking_filter.go b/bot/member_chunking_filter.go index 1ae496d8..5c5b4eef 100644 --- a/bot/member_chunking_filter.go +++ b/bot/member_chunking_filter.go @@ -1,6 +1,9 @@ package bot -import "github.com/disgoorg/snowflake/v2" +import ( + "github.com/disgoorg/snowflake/v2" + "golang.org/x/exp/slices" +) // MemberChunkingFilter is a filter that can be used to filter from which guilds to request members from. type MemberChunkingFilter func(guildID snowflake.ID) bool @@ -10,30 +13,28 @@ var ( MemberChunkingFilterNone MemberChunkingFilter = func(_ snowflake.ID) bool { return false } ) -// Include includes the given guilds from being chunked. -func (f MemberChunkingFilter) Include(guildIDs ...snowflake.ID) MemberChunkingFilter { +func MemberChunkingFilterIncludeGuildIDs(guildIDs ...snowflake.ID) MemberChunkingFilter { + return func(guildID snowflake.ID) bool { + return slices.Contains(guildIDs, guildID) + } +} + +func MemberChunkingFilterExcludeGuildIDs(guildIDs ...snowflake.ID) MemberChunkingFilter { + return func(guildID snowflake.ID) bool { + return slices.Contains(guildIDs, guildID) + } +} + +// Or allows you to combine the MemberChunkingFilter with another, meaning either of them needs to be true for the guild to be chunked. +func (f MemberChunkingFilter) Or(filter MemberChunkingFilter) MemberChunkingFilter { return func(guildID snowflake.ID) bool { - return f(guildID) || func(guildID snowflake.ID) bool { - for _, gID := range guildIDs { - if gID == guildID { - return true - } - } - return false - }(guildID) + return f(guildID) || filter(guildID) } } -// Exclude excludes the given guilds from being chunked. -func (f MemberChunkingFilter) Exclude(guildIDs ...snowflake.ID) MemberChunkingFilter { +// And allows you to require both MemberChunkingFilter(s) to be true for the guild to be chunked +func (f MemberChunkingFilter) And(filter MemberChunkingFilter) MemberChunkingFilter { return func(guildID snowflake.ID) bool { - return f(guildID) || func(guildID snowflake.ID) bool { - for _, gID := range guildIDs { - if gID == guildID { - return false - } - } - return true - }(guildID) + return f(guildID) && filter(guildID) } }