Class: DiscordRDA::ChannelBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/entity/channel_builder.rb

Overview

DSL for building channel modifications. Provides a fluent interface for modifying channel properties.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = nil) ⇒ ChannelBuilder

Initialize a new channel builder

Parameters:

  • name (String) (defaults to: nil)

    Channel name



13
14
15
16
# File 'lib/discord_rda/entity/channel_builder.rb', line 13

def initialize(name = nil)
  @data = {}
  @data[:name] = name if name
end

Instance Attribute Details

#dataHash (readonly)

Returns Channel data being built.

Returns:

  • (Hash)

    Channel data being built



9
10
11
# File 'lib/discord_rda/entity/channel_builder.rb', line 9

def data
  @data
end

Instance Method Details

#add_overwrite(id:, type:, allow: 0, deny: 0) ⇒ self

Add a single permission overwrite

Parameters:

  • id (String, Snowflake)

    Role or user ID

  • type (Integer)

    0 for role, 1 for member

  • allow (Integer, String) (defaults to: 0)

    Allowed permissions bitfield

  • deny (Integer, String) (defaults to: 0)

    Denied permissions bitfield

Returns:

  • (self)


120
121
122
123
124
125
126
127
128
129
# File 'lib/discord_rda/entity/channel_builder.rb', line 120

def add_overwrite(id:, type:, allow: 0, deny: 0)
  @data[:permission_overwrites] ||= []
  @data[:permission_overwrites] << {
    id: id.to_s,
    type: type,
    allow: allow.is_a?(Integer) ? allow.to_s : allow,
    deny: deny.is_a?(Integer) ? deny.to_s : deny
  }
  self
end

#available_tags(tags) ⇒ self

Set available tags (for forum channels)

Parameters:

  • tags (Array<Hash>)

    Available tags

Returns:

  • (self)


142
143
144
145
# File 'lib/discord_rda/entity/channel_builder.rb', line 142

def available_tags(tags)
  @data[:available_tags] = tags
  self
end

#bitrate(bitrate) ⇒ self

Set channel bitrate (for voice channels)

Parameters:

  • bitrate (Integer)

    Bitrate in bits (8000-384000, or 8000-128000 for stage)

Returns:

  • (self)


45
46
47
48
# File 'lib/discord_rda/entity/channel_builder.rb', line 45

def bitrate(bitrate)
  @data[:bitrate] = bitrate
  self
end

#buildHash

Build and return the channel data

Returns:

  • (Hash)

    Channel data



187
188
189
# File 'lib/discord_rda/entity/channel_builder.rb', line 187

def build
  to_h
end

#default_auto_archive_duration(minutes) ⇒ self

Set default auto archive duration (for threads)

Parameters:

  • minutes (Integer)

    Duration in minutes (60, 1440, 4320, 10080)

Returns:

  • (self)


93
94
95
96
# File 'lib/discord_rda/entity/channel_builder.rb', line 93

def default_auto_archive_duration(minutes)
  @data[:default_auto_archive_duration] = minutes
  self
end

#default_forum_layout(layout) ⇒ self

Set default forum layout (for forum channels)

Parameters:

  • layout (Integer)

    Default forum layout view

Returns:

  • (self)


158
159
160
161
# File 'lib/discord_rda/entity/channel_builder.rb', line 158

def default_forum_layout(layout)
  @data[:default_forum_layout] = layout
  self
end

#default_reaction_emoji(emoji) ⇒ self

Set default reaction emoji (for forum channels)

Parameters:

  • emoji (Hash)

    Default emoji for forum posts

Returns:

  • (self)


166
167
168
169
# File 'lib/discord_rda/entity/channel_builder.rb', line 166

def default_reaction_emoji(emoji)
  @data[:default_reaction_emoji] = emoji
  self
end

#default_sort_order(order) ⇒ self

Set default sort order (for forum channels)

Parameters:

  • order (Integer)

    Default sort order type

Returns:

  • (self)


150
151
152
153
# File 'lib/discord_rda/entity/channel_builder.rb', line 150

def default_sort_order(order)
  @data[:default_sort_order] = order
  self
end

#default_thread_slowmode(seconds) ⇒ self

Set default thread rate limit per user

Parameters:

  • seconds (Integer)

    Seconds between messages in threads

Returns:

  • (self)


101
102
103
104
# File 'lib/discord_rda/entity/channel_builder.rb', line 101

def default_thread_slowmode(seconds)
  @data[:default_thread_rate_limit_per_user] = seconds
  self
end

#flags(flags) ⇒ self

Set channel flags

Parameters:

  • flags (Integer)

    Channel flags bitfield

Returns:

  • (self)


134
135
136
137
# File 'lib/discord_rda/entity/channel_builder.rb', line 134

def flags(flags)
  @data[:flags] = flags
  self
end

#name(name) ⇒ self

Set channel name

Parameters:

  • name (String)

    Channel name (1-100 characters)

Returns:

  • (self)


21
22
23
24
# File 'lib/discord_rda/entity/channel_builder.rb', line 21

def name(name)
  @data[:name] = name
  self
end

#nsfw(nsfw = true) ⇒ self

Set NSFW flag

Parameters:

  • nsfw (Boolean) (defaults to: true)

    Whether the channel is NSFW

Returns:

  • (self)


85
86
87
88
# File 'lib/discord_rda/entity/channel_builder.rb', line 85

def nsfw(nsfw = true)
  @data[:nsfw] = nsfw
  self
end

#parent(category_id) ⇒ self

Set parent category ID

Parameters:

  • category_id (String, Snowflake)

    Parent category ID

Returns:

  • (self)


77
78
79
80
# File 'lib/discord_rda/entity/channel_builder.rb', line 77

def parent(category_id)
  @data[:parent_id] = category_id.to_s
  self
end

#permission_overwrites(overwrites) ⇒ self

Set permission overwrites

Parameters:

  • overwrites (Array<Hash>)

    Permission overwrites array

Returns:

  • (self)


109
110
111
112
# File 'lib/discord_rda/entity/channel_builder.rb', line 109

def permission_overwrites(overwrites)
  @data[:permission_overwrites] = overwrites.map { |o| normalize_overwrite(o) }
  self
end

#position(position) ⇒ self

Set channel position

Parameters:

  • position (Integer)

    Position in the left-hand listing

Returns:

  • (self)


69
70
71
72
# File 'lib/discord_rda/entity/channel_builder.rb', line 69

def position(position)
  @data[:position] = position
  self
end

#slowmode(seconds) ⇒ self

Set rate limit per user (slowmode)

Parameters:

  • seconds (Integer)

    Seconds between messages (0-21600)

Returns:

  • (self)


61
62
63
64
# File 'lib/discord_rda/entity/channel_builder.rb', line 61

def slowmode(seconds)
  @data[:rate_limit_per_user] = seconds
  self
end

#to_hHash

Convert builder to hash

Returns:

  • (Hash)

    Channel data hash



181
182
183
# File 'lib/discord_rda/entity/channel_builder.rb', line 181

def to_h
  @data.dup
end

#topic(topic) ⇒ self

Set channel topic

Parameters:

  • topic (String)

    Channel topic (0-1024 characters for text, 0-4096 for forum)

Returns:

  • (self)


37
38
39
40
# File 'lib/discord_rda/entity/channel_builder.rb', line 37

def topic(topic)
  @data[:topic] = topic
  self
end

#type(type) ⇒ self

Set channel type

Parameters:

  • type (Integer, Symbol)

    Channel type (0=guild_text, 2=guild_voice, etc.)

Returns:

  • (self)


29
30
31
32
# File 'lib/discord_rda/entity/channel_builder.rb', line 29

def type(type)
  @data[:type] = type.is_a?(Symbol) ? Channel::TYPES[type] : type
  self
end

#user_limit(limit) ⇒ self

Set user limit (for voice channels)

Parameters:

  • limit (Integer)

    User limit (0-99, 0 = unlimited)

Returns:

  • (self)


53
54
55
56
# File 'lib/discord_rda/entity/channel_builder.rb', line 53

def user_limit(limit)
  @data[:user_limit] = limit
  self
end

#video_quality_mode(mode) ⇒ self

Set video quality mode (for voice channels)

Parameters:

  • mode (Integer)

    Video quality mode (1=auto, 2=full)

Returns:

  • (self)


174
175
176
177
# File 'lib/discord_rda/entity/channel_builder.rb', line 174

def video_quality_mode(mode)
  @data[:video_quality_mode] = mode
  self
end