Class: MijDiscord::Data::Permissions

Inherits:
Object
  • Object
show all
Defined in:
lib/mij-discord/data/permissions.rb

Constant Summary collapse

FLAGS =
{
  # (1 << Bit) => Permission # Value
  (1 << 0) => :create_instant_invite,   # 1
  (1 << 1) => :kick_members,            # 2
  (1 << 2) => :ban_members,             # 4
  (1 << 3) => :administrator,           # 8
  (1 << 4) => :manage_channels,         # 16
  (1 << 5) => :manage_server,           # 32
  (1 << 6) => :add_reactions,           # 64
  (1 << 7) => :view_audit_log,          # 128
  # 1 << 8                              # 256
  # 1 << 9                              # 512
  (1 << 10) => :read_messages,          # 1024
  (1 << 11) => :send_messages,          # 2048
  (1 << 12) => :send_tts_messages,      # 4096
  (1 << 13) => :manage_messages,        # 8192
  (1 << 14) => :embed_links,            # 16384
  (1 << 15) => :attach_files,           # 32768
  (1 << 16) => :read_message_history,   # 65536
  (1 << 17) => :mention_everyone,       # 131072
  (1 << 18) => :use_external_emoji,     # 262144
  # 1 << 19                             # 524288
  (1 << 20) => :connect,                # 1048576
  (1 << 21) => :speak,                  # 2097152
  (1 << 22) => :mute_members,           # 4194304
  (1 << 23) => :deafen_members,         # 8388608
  (1 << 24) => :move_members,           # 16777216
  (1 << 25) => :use_voice_activity,     # 33554432
  (1 << 26) => :change_nickname,        # 67108864
  (1 << 27) => :manage_nicknames,       # 134217728
  (1 << 28) => :manage_roles,           # 268435456
  (1 << 29) => :manage_webhooks,        # 536870912
  (1 << 30) => :manage_emojis,          # 1073741824
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bits = 0) ⇒ Permissions

Returns a new instance of Permissions.



64
65
66
# File 'lib/mij-discord/data/permissions.rb', line 64

def initialize(bits = 0)
  set_bits(bits)
end

Instance Attribute Details

#bitsObject (readonly) Also known as: to_i

Returns the value of attribute bits.



61
62
63
# File 'lib/mij-discord/data/permissions.rb', line 61

def bits
  @bits
end

Class Method Details

.bits(list) ⇒ Object



40
41
42
# File 'lib/mij-discord/data/permissions.rb', line 40

def self.bits(list)
  FLAGS.map {|bit, name| list.include?(name) ? bit : 0 }.reduce(&:|)
end

.flags(bits) ⇒ Object



44
45
46
# File 'lib/mij-discord/data/permissions.rb', line 44

def self.flags(bits)
  Set.new(FLAGS.map {|bit, name| (bits & bit).zero? ? nil : name }.reject(&:nil?))
end

Instance Method Details

#flagsObject



79
80
81
# File 'lib/mij-discord/data/permissions.rb', line 79

def flags
  Permissions.flags(@bits)
end

#inspectObject



83
84
85
# File 'lib/mij-discord/data/permissions.rb', line 83

def inspect
  %(#<Permissions #{flags.to_a}>)
end

#set_bits(bits) ⇒ Object Also known as: bits=



68
69
70
71
72
73
74
75
# File 'lib/mij-discord/data/permissions.rb', line 68

def set_bits(bits)
  @bits = bits.is_a?(Array) ? Permissions.bits(bits) : bits

  FLAGS.each do |bit, name|
    flag = !(@bits & bit).zero?
    instance_variable_set "@#{name}", flag
  end
end