Class: Discordrb::Overwrite

Inherits:
Object
  • Object
show all
Defined in:
lib/discordrb/data.rb

Overview

A permissions overwrite, when applied to channels describes additional permissions a member needs to perform certain actions in context.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object = nil, type: nil, allow: 0, deny: 0) ⇒ Overwrite

Creates a new Overwrite object

Examples:

Create an overwrite for a role that can mention everyone, send TTS messages, but can't create instant invites

allow = Discordrb::Permissions.new
allow.can_mention_everyone = true
allow.can_send_tts_messages = true

deny = Discordrb::Permissions.new
deny.can_create_instant_invite = true

# Find some role by name
role = server.roles.find { |r| r.name == 'some role' }

Overwrite.new(role, allow: allow, deny: deny)

Create an overwrite by ID and permissions bits

Overwrite.new(120571255635181568, type: 'member', allow: 1024, deny: 0)

Parameters:

  • object (Integer, #id) (defaults to: nil)

    the ID or object this overwrite is for

  • type (String) (defaults to: nil)

    the type of object this overwrite is for (only required if object is an Integer)

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

    allowed permissions for this overwrite, by bits or a Permissions object

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

    denied permissions for this overwrite, by bits or a Permissions object

Raises:

  • (ArgumentError)

    if type is not :member or :role



1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
# File 'lib/discordrb/data.rb', line 1237

def initialize(object = nil, type: nil, allow: 0, deny: 0)
  if type
    type = type.to_sym
    raise ArgumentError, 'Overwrite type must be :member or :role' unless (type != :member) || (type != :role)
  end

  @id = object.respond_to?(:id) ? object.id : object

  @type = if object.is_a?(User) || object.is_a?(Member) || object.is_a?(Recipient) || object.is_a?(Profile)
            :member
          elsif object.is_a? Role
            :role
          else
            type
          end

  @allow = allow.is_a?(Permissions) ? allow : Permissions.new(allow)
  @deny = deny.is_a?(Permissions) ? deny : Permissions.new(deny)
end

Instance Attribute Details

#allowPermissions

Returns allowed permissions for this overwrite type.

Returns:

  • (Permissions)

    allowed permissions for this overwrite type



1212
1213
1214
# File 'lib/discordrb/data.rb', line 1212

def allow
  @allow
end

#denyPermissions

Returns denied permissions for this overwrite type.

Returns:

  • (Permissions)

    denied permissions for this overwrite type



1215
1216
1217
# File 'lib/discordrb/data.rb', line 1215

def deny
  @deny
end

#idInteger

Returns id of the thing associated with this overwrite type.

Returns:

  • (Integer)

    id of the thing associated with this overwrite type



1206
1207
1208
# File 'lib/discordrb/data.rb', line 1206

def id
  @id
end

#typeSymbol

Returns either :role or :member.

Returns:

  • (Symbol)

    either :role or :member



1209
1210
1211
# File 'lib/discordrb/data.rb', line 1209

def type
  @type
end

Instance Method Details

#==(other) ⇒ Object

Comparison by attributes [:id, :type, :allow, :deny]



1258
1259
1260
1261
1262
1263
1264
# File 'lib/discordrb/data.rb', line 1258

def ==(other)
  false unless other.is_a? Discordrb::Overwrite
  id == other.id &&
    type == other.type &&
    allow == other.allow &&
    deny == other.deny
end