FabcatBot/addons/discord_gd/classes/permissions.gd
2025-10-29 22:23:34 +11:00

67 lines
1.5 KiB
GDScript

class_name Permissions extends BitField
"""
Represents a bitfield of Discord permissions.
"""
var ALL
const DEFAULT = 104324673
func _init(bits = default_bit):
default_bit = 0
if bits == null:
bits = default_bit
FLAGS = {
'CREATE_INSTANT_INVITE': 1 << 0,
'KICK_MEMBERS': 1 << 1,
'BAN_MEMBERS': 1 << 2,
'ADMINISTRATOR': 1 << 3,
'MANAGE_CHANNELS': 1 << 4,
'MANAGE_GUILD': 1 << 5,
'ADD_REACTIONS': 1 << 6,
'VIEW_AUDIT_LOG': 1 << 7,
'PRIORITY_SPEAKER': 1 << 8,
'STREAM': 1 << 9,
'VIEW_CHANNEL': 1 << 10,
'SEND_MESSAGES': 1 << 11,
'SEND_TTS_MESSAGES': 1 << 12,
'MANAGE_MESSAGES': 1 << 13,
'EMBED_LINKS': 1 << 14,
'ATTACH_FILES': 1 << 15,
'READ_MESSAGE_HISTORY': 1 << 16,
'MENTION_EVERYONE': 1 << 17,
'USE_EXTERNAL_EMOJIS': 1 << 18,
'VIEW_GUILD_INSIGHTS': 1 << 19,
'CONNECT': 1 << 20,
'SPEAK': 1 << 21,
'MUTE_MEMBERS': 1 << 22,
'DEAFEN_MEMBERS': 1 << 23,
'MOVE_MEMBERS': 1 << 24,
'USE_VAD': 1 << 25,
'CHANGE_NICKNAME': 1 << 26,
'MANAGE_NICKNAMES': 1 << 27,
'MANAGE_ROLES': 1 << 28,
'MANAGE_WEBHOOKS': 1 << 29,
'MANAGE_EMOJIS_AND_STICKERS': 1 << 30,
'USE_APPLICATION_COMMANDS': 1 << 31,
'REQUEST_TO_SPEAK': 1 << 32,
'MANAGE_THREADS': 1 << 34,
'USE_PUBLIC_THREADS': 1 << 35,
'USE_PRIVATE_THREADS': 1 << 36,
'USE_EXTERNAL_STICKERS': 1 << 37,
}
bitfield = resolve(bits)
var values = FLAGS.values()
var prev = default_bit
for value in values:
prev |= value
ALL = prev
func missing(bits):
var BF = load('res://addons/discord_gd/classes/permissions.gd')
return BF.new(bits).remove(self).to_array()