-
Notifications
You must be signed in to change notification settings - Fork 35
/
member_chunking_filter.go
75 lines (63 loc) · 2.53 KB
/
member_chunking_filter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package bot
import (
"slices"
"github.com/disgoorg/snowflake/v2"
)
// MemberChunkingFilterAll is a MemberChunkingFilter which includes all guilds.
func MemberChunkingFilterAll(_ snowflake.ID) bool { return true }
// MemberChunkingFilterNone is a MemberChunkingFilter which excludes all guilds.
func MemberChunkingFilterNone(_ snowflake.ID) bool { return false }
// MemberChunkingFilterDefault is the default MemberChunkingFilter.
func MemberChunkingFilterDefault(guildID snowflake.ID) bool {
return MemberChunkingFilterNone(guildID)
}
// MemberChunkingFilterIncludeGuildIDs returns a MemberChunkingFilter which includes the given guildIDs.
func MemberChunkingFilterIncludeGuildIDs(guildIDs ...snowflake.ID) MemberChunkingFilter {
return func(guildID snowflake.ID) bool {
return slices.Contains(guildIDs, guildID)
}
}
// MemberChunkingFilterExcludeGuildIDs returns a MemberChunkingFilter which excludes the given guildIDs.
func MemberChunkingFilterExcludeGuildIDs(guildIDs ...snowflake.ID) MemberChunkingFilter {
return func(guildID snowflake.ID) bool {
return slices.Contains(guildIDs, guildID)
}
}
// MemberChunkingFilter is a filter that can be used to filter from which guilds to request members from.
type MemberChunkingFilter func(guildID snowflake.ID) bool
// 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) || filter(guildID)
}
}
// 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) && filter(guildID)
}
}
// AnyMemberChunkingFilter is a shorthand for MemberChunkingFilter.Or(MemberChunkingFilter).Or(MemberChunkingFilter) etc.
func AnyMemberChunkingFilter(filters ...MemberChunkingFilter) MemberChunkingFilter {
var filter MemberChunkingFilter
for _, f := range filters {
if filter == nil {
filter = f
continue
}
filter = filter.Or(f)
}
return filter
}
// AllMemberChunkingFilters is a shorthand for MemberChunkingFilter.And(MemberChunkingFilter).And(MemberChunkingFilter) etc.
func AllMemberChunkingFilters(filters ...MemberChunkingFilter) MemberChunkingFilter {
var filter MemberChunkingFilter
for _, f := range filters {
if filter == nil {
filter = f
continue
}
filter = filter.And(f)
}
return filter
}