From bb3b3d0a63e5595aa226e3a8ace6a561004567a6 Mon Sep 17 00:00:00 2001 From: biast12 <53872542+biast12@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:35:46 +0200 Subject: [PATCH] Add channel flags and obfuscation support Introduces ChannelFlag values and propagates channel flags through full, cached, and partial channel representations, including helpers to detect obfuscated channels. --- objects/channel/cachedchannel.go | 6 ++++++ objects/channel/channel.go | 7 +++++++ objects/channel/channelflags.go | 15 +++++++++++++++ objects/channel/partialchannel.go | 5 +++++ 4 files changed, 33 insertions(+) create mode 100644 objects/channel/channelflags.go diff --git a/objects/channel/cachedchannel.go b/objects/channel/cachedchannel.go index d8d3022..dca51be 100644 --- a/objects/channel/cachedchannel.go +++ b/objects/channel/cachedchannel.go @@ -23,6 +23,11 @@ type CachedChannel struct { ApplicationId uint64 `json:"application_id"` ParentId objects.NullableSnowflake `json:"parent_id,omitempty"` LastPinTimestamp time.Time `json:"last_pin_timestamp"` + Flags ChannelFlag `json:"flags"` +} + +func (c *CachedChannel) IsObfuscated() bool { + return c.Flags.Has(ChannelFlagObfuscated) } func (c *CachedChannel) ToChannel(channelId, guildId uint64) Channel { @@ -45,5 +50,6 @@ func (c *CachedChannel) ToChannel(channelId, guildId uint64) Channel { ApplicationId: c.ApplicationId, ParentId: c.ParentId, LastPinTimestamp: c.LastPinTimestamp, + Flags: c.Flags, } } diff --git a/objects/channel/channel.go b/objects/channel/channel.go index 57d249c..476889b 100644 --- a/objects/channel/channel.go +++ b/objects/channel/channel.go @@ -33,12 +33,17 @@ type Channel struct { MemberCount uint64 `json:"member_count"` ThreadMetadata *ThreadMetadata `json:"thread_metadata,omitempty"` Member ThreadMember `json:"member"` + Flags ChannelFlag `json:"flags"` } func (c *Channel) Mention() string { return fmt.Sprintf("<#%d>", c.Id) } +func (c *Channel) IsObfuscated() bool { + return c.Flags.Has(ChannelFlagObfuscated) +} + func (c *Channel) ToCachedChannel() CachedChannel { return CachedChannel{ GuildId: c.GuildId, @@ -57,6 +62,7 @@ func (c *Channel) ToCachedChannel() CachedChannel { ApplicationId: c.ApplicationId, ParentId: c.ParentId, LastPinTimestamp: c.LastPinTimestamp, + Flags: c.Flags, } } @@ -72,5 +78,6 @@ func (c *Channel) ToPartialChannel() PartialChannel { LastMessageId: c.LastMessageId, ParentId: c.ParentId, LastPinTimestamp: c.LastPinTimestamp, + Flags: c.Flags, } } diff --git a/objects/channel/channelflags.go b/objects/channel/channelflags.go new file mode 100644 index 0000000..c4d463c --- /dev/null +++ b/objects/channel/channelflags.go @@ -0,0 +1,15 @@ +package channel + +type ChannelFlag uint64 + +const ( + ChannelFlagPinned ChannelFlag = 1 << 1 + ChannelFlagRequireTag ChannelFlag = 1 << 4 + ChannelFlagHideMediaDownloadOptions ChannelFlag = 1 << 15 + ChannelFlagObfuscated ChannelFlag = 1 << 17 + ChannelFlagIsSpoilerChannel ChannelFlag = 1 << 21 +) + +func (f ChannelFlag) Has(flag ChannelFlag) bool { + return f&flag != 0 +} diff --git a/objects/channel/partialchannel.go b/objects/channel/partialchannel.go index 365a674..e80e8fd 100644 --- a/objects/channel/partialchannel.go +++ b/objects/channel/partialchannel.go @@ -17,4 +17,9 @@ type PartialChannel struct { LastMessageId objects.NullableSnowflake `json:"last_message_id"` ParentId objects.NullableSnowflake `json:"parent_id,omitempty"` LastPinTimestamp time.Time `json:"last_pin_timestamp"` + Flags ChannelFlag `json:"flags"` +} + +func (c *PartialChannel) IsObfuscated() bool { + return c.Flags.Has(ChannelFlagObfuscated) }