discorb 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +56 -0
- data/.yardopts +6 -0
- data/Changelog.md +5 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +70 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +46 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/discorb.gemspec +37 -0
- data/docs/Examples.md +26 -0
- data/docs/events.md +480 -0
- data/docs/voice_events.md +283 -0
- data/examples/components/authorization_button.rb +43 -0
- data/examples/components/select_menu.rb +61 -0
- data/examples/extension/main.rb +12 -0
- data/examples/extension/message_expander.rb +41 -0
- data/examples/simple/eval.rb +32 -0
- data/examples/simple/ping_pong.rb +16 -0
- data/examples/simple/rolepanel.rb +65 -0
- data/examples/simple/wait_for_message.rb +30 -0
- data/lib/discorb/application.rb +157 -0
- data/lib/discorb/asset.rb +57 -0
- data/lib/discorb/audit_logs.rb +323 -0
- data/lib/discorb/channel.rb +1101 -0
- data/lib/discorb/client.rb +363 -0
- data/lib/discorb/color.rb +173 -0
- data/lib/discorb/common.rb +123 -0
- data/lib/discorb/components.rb +290 -0
- data/lib/discorb/dictionary.rb +119 -0
- data/lib/discorb/embed.rb +345 -0
- data/lib/discorb/emoji.rb +218 -0
- data/lib/discorb/emoji_table.rb +3799 -0
- data/lib/discorb/error.rb +98 -0
- data/lib/discorb/event.rb +35 -0
- data/lib/discorb/extend.rb +18 -0
- data/lib/discorb/extension.rb +54 -0
- data/lib/discorb/file.rb +69 -0
- data/lib/discorb/flag.rb +109 -0
- data/lib/discorb/gateway.rb +967 -0
- data/lib/discorb/gateway_requests.rb +47 -0
- data/lib/discorb/guild.rb +1244 -0
- data/lib/discorb/guild_template.rb +211 -0
- data/lib/discorb/image.rb +43 -0
- data/lib/discorb/integration.rb +111 -0
- data/lib/discorb/intents.rb +137 -0
- data/lib/discorb/interaction.rb +333 -0
- data/lib/discorb/internet.rb +285 -0
- data/lib/discorb/invite.rb +145 -0
- data/lib/discorb/log.rb +70 -0
- data/lib/discorb/member.rb +232 -0
- data/lib/discorb/message.rb +583 -0
- data/lib/discorb/modules.rb +138 -0
- data/lib/discorb/permission.rb +270 -0
- data/lib/discorb/presence.rb +308 -0
- data/lib/discorb/reaction.rb +48 -0
- data/lib/discorb/role.rb +189 -0
- data/lib/discorb/sticker.rb +157 -0
- data/lib/discorb/user.rb +163 -0
- data/lib/discorb/utils.rb +16 -0
- data/lib/discorb/voice_state.rb +251 -0
- data/lib/discorb/webhook.rb +420 -0
- data/lib/discorb.rb +51 -0
- metadata +120 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Discorb
|
4
|
+
#
|
5
|
+
# Represents a reaction to a message.
|
6
|
+
#
|
7
|
+
class Reaction < DiscordModel
|
8
|
+
# @return [Integer] The number of users that have reacted with this emoji.
|
9
|
+
attr_reader :count
|
10
|
+
# @return [Discorb::Emoji] The emoji that was reacted with.
|
11
|
+
attr_reader :emoji
|
12
|
+
# @return [Discorb::Message] The message that this reaction is on.
|
13
|
+
attr_reader :message
|
14
|
+
# @return [Boolean] Whether client user reacted with this emoji.
|
15
|
+
attr_reader :me
|
16
|
+
alias me? me
|
17
|
+
alias reacted? me
|
18
|
+
|
19
|
+
# @!visibility private
|
20
|
+
def initialize(message, data)
|
21
|
+
@message = message
|
22
|
+
_set_data(data)
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Fetch the user that reacted with this emoji.
|
27
|
+
#
|
28
|
+
# @param (see Message#fetch_reacted_users)
|
29
|
+
#
|
30
|
+
# @return [Array<Discorb::User>] The users that reacted with this emoji.
|
31
|
+
#
|
32
|
+
def fetch_users(...)
|
33
|
+
message.fetch_reacted_users(@emoji, ...)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def _set_data(data)
|
39
|
+
@count = data[:count]
|
40
|
+
@me = data[:me]
|
41
|
+
@emoji = if data[:emoji][:id].nil?
|
42
|
+
UnicodeEmoji.new(data[:emoji][:name])
|
43
|
+
else
|
44
|
+
PartialEmoji.new(data[:emoji])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/discorb/role.rb
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Discorb
|
4
|
+
#
|
5
|
+
# Represents a role in the guild.
|
6
|
+
#
|
7
|
+
class Role < DiscordModel
|
8
|
+
# @return [Discorb::Snowflake] The ID of the role.
|
9
|
+
attr_reader :id
|
10
|
+
# @return [String] The name of the role.
|
11
|
+
attr_reader :name
|
12
|
+
# @return [Discorb::Color] The color of the role.
|
13
|
+
attr_reader :color
|
14
|
+
# @return [Discorb::Permission] The permissions of the role.
|
15
|
+
attr_reader :permissions
|
16
|
+
# @return [Integer] The position of the role.
|
17
|
+
attr_reader :position
|
18
|
+
# @return [Discorb::Guild] The guild this role belongs to.
|
19
|
+
attr_reader :guild
|
20
|
+
# @return [Boolean] Whether the role is hoisted.
|
21
|
+
attr_reader :hoist
|
22
|
+
alias hoist? hoist
|
23
|
+
# @return [Boolean] Whether the role is managed.
|
24
|
+
attr_reader :managed
|
25
|
+
alias managed? managed
|
26
|
+
# @return [Boolean] Whether the role is a default role.
|
27
|
+
attr_reader :mentionable
|
28
|
+
alias mentionable? mentionable
|
29
|
+
|
30
|
+
# @!attribute [r] mention
|
31
|
+
# @return [String] The mention of the role.
|
32
|
+
# @!attribute [r] color?
|
33
|
+
# @return [Boolean] Whether the role has a color.
|
34
|
+
# @!attribute [r] tag
|
35
|
+
# @return [Discorb::Role::Tag] The tag of the role.
|
36
|
+
|
37
|
+
include Comparable
|
38
|
+
|
39
|
+
# @!visibility private
|
40
|
+
def initialize(client, guild, data)
|
41
|
+
@client = client
|
42
|
+
@guild = guild
|
43
|
+
@data = {}
|
44
|
+
_set_data(data)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Compares two roles by their position.
|
49
|
+
#
|
50
|
+
# @param [Discorb::Role] other The role to compare to.
|
51
|
+
#
|
52
|
+
# @return [Integer] -1 if the other role is higher, 0 if they are equal, 1 if the other role is lower.
|
53
|
+
#
|
54
|
+
def <=>(other)
|
55
|
+
return false unless other.is_a?(Role)
|
56
|
+
|
57
|
+
@position <=> other.position
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Formats the role as a string.
|
62
|
+
#
|
63
|
+
# @return [String] The formatted string.
|
64
|
+
#
|
65
|
+
def to_s
|
66
|
+
"@#{@name}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def mention
|
70
|
+
"<@&#{@id}>"
|
71
|
+
end
|
72
|
+
|
73
|
+
def color?
|
74
|
+
@color != 0
|
75
|
+
end
|
76
|
+
|
77
|
+
def inspect
|
78
|
+
"#<#{self.class} @#{@name} id=#{@id}>"
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Moves the role to a new position.
|
83
|
+
# @macro async
|
84
|
+
# @macro http
|
85
|
+
#
|
86
|
+
# @param [Integer] position The new position.
|
87
|
+
# @param [String] reason The reason for moving the role.
|
88
|
+
#
|
89
|
+
def move(position, reason: nil)
|
90
|
+
Async do
|
91
|
+
@client.internet.patch("/guilds/#{@guild_id}/roles", { id: @id, position: position }, reason: reason).wait
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# Edits the role.
|
97
|
+
# @macro async
|
98
|
+
# @macro http
|
99
|
+
# @macro edit
|
100
|
+
#
|
101
|
+
# @param [String] name The new name of the role.
|
102
|
+
# @param [Integer] position The new position of the role.
|
103
|
+
# @param [Discorb::Color] color The new color of the role.
|
104
|
+
# @param [Boolean] hoist Whether the role should be hoisted.
|
105
|
+
# @param [Boolean] mentionable Whether the role should be mentionable.
|
106
|
+
# @param [String] reason The reason for editing the role.
|
107
|
+
#
|
108
|
+
def edit(name: :unset, position: :unset, color: :unset, hoist: :unset, mentionable: :unset, reason: nil)
|
109
|
+
Async do
|
110
|
+
payload = {}
|
111
|
+
payload[:name] = name if name != :unset
|
112
|
+
payload[:position] = position if position != :unset
|
113
|
+
payload[:color] = color.to_i if color != :unset
|
114
|
+
payload[:hoist] = hoist if hoist != :unset
|
115
|
+
payload[:mentionable] = mentionable if mentionable != :unset
|
116
|
+
@client.internet.patch("/guilds/#{@guild_id}/roles/#{@id}", payload, reason: reason).wait
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
alias modify edit
|
121
|
+
|
122
|
+
#
|
123
|
+
# Deletes the role.
|
124
|
+
#
|
125
|
+
# @param [String] reason The reason for deleting the role.
|
126
|
+
#
|
127
|
+
def delete!(reason: nil)
|
128
|
+
Async do
|
129
|
+
@client.internet.delete("/guilds/#{@guild_id}/roles/#{@id}", reason: reason).wait
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
alias destroy! delete!
|
134
|
+
|
135
|
+
def tag
|
136
|
+
Tag.new(@tags)
|
137
|
+
end
|
138
|
+
|
139
|
+
alias tags tag
|
140
|
+
|
141
|
+
#
|
142
|
+
# Represents a tag of a role.
|
143
|
+
#
|
144
|
+
class Tag < DiscordModel
|
145
|
+
# @return [Discorb::Snowflake] The ID of the bot that owns the role.
|
146
|
+
attr_reader :bot_id
|
147
|
+
# @return [Discorb::Snowflake] The ID of the integration.
|
148
|
+
attr_reader :integration_id
|
149
|
+
# @return [Boolean] Whether the tag is a premium subscriber role.
|
150
|
+
attr_reader :premium_subscriber
|
151
|
+
alias premium_subscriber? premium_subscriber
|
152
|
+
# @!attribute [r] bot?
|
153
|
+
# @return [Boolean] Whether the role is a bot role.
|
154
|
+
# @!attribute [r] integration?
|
155
|
+
# @return [Boolean] Whether the role is an integration role.
|
156
|
+
|
157
|
+
# @!visibility private
|
158
|
+
def initialize(data)
|
159
|
+
@bot_id = Snowflake.new(data[:bot_id])
|
160
|
+
@integration_id = Snowflake.new(data[:integration_id])
|
161
|
+
@premium_subscriber = data.key?(:premium_subscriber)
|
162
|
+
end
|
163
|
+
|
164
|
+
def bot?
|
165
|
+
!@bot_id.nil?
|
166
|
+
end
|
167
|
+
|
168
|
+
def integration?
|
169
|
+
!@integration_id.nil?
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def _set_data(data)
|
176
|
+
@id = Snowflake.new(data[:id])
|
177
|
+
@name = data[:name]
|
178
|
+
@color = Color.new(data[:color])
|
179
|
+
@hoist = data[:hoist]
|
180
|
+
@position = data[:position]
|
181
|
+
@permissions = Permission.new(data[:permissions].to_i)
|
182
|
+
@managed = data[:managed]
|
183
|
+
@mentionable = data[:mentionable]
|
184
|
+
@tags = data[:tags] || {}
|
185
|
+
@guild.roles[@id] = self unless data[:no_cache]
|
186
|
+
@data.update(data)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Discorb
|
4
|
+
#
|
5
|
+
# Represents a sticker.
|
6
|
+
#
|
7
|
+
class Sticker < DiscordModel
|
8
|
+
# @return [Discorb::Snowflake] The ID of the sticker.
|
9
|
+
attr_reader :id
|
10
|
+
# @return [String] The name of the sticker.
|
11
|
+
attr_reader :name
|
12
|
+
# @return [Array<String>] The tags of the sticker.
|
13
|
+
attr_reader :tags
|
14
|
+
# @return [:official, :guild] The type of sticker.
|
15
|
+
attr_reader :type
|
16
|
+
# @return [:png, :apng, :lottie] The format of the sticker.
|
17
|
+
attr_reader :format
|
18
|
+
# @return [String] The URL of the sticker.
|
19
|
+
attr_reader :description
|
20
|
+
# @return [Discorb::Sticker] The ID of the sticker pack.
|
21
|
+
attr_reader :pack_id
|
22
|
+
# @return [Integer] The sort value of the sticker.
|
23
|
+
attr_reader :sort_value
|
24
|
+
# @return [Discorb::Snowflake] The ID of the guild the sticker is in.
|
25
|
+
attr_reader :guild_id
|
26
|
+
# @return [Discorb::User] The user who created the sticker.
|
27
|
+
attr_reader :user
|
28
|
+
# @return [Boolean] Whether the sticker is available.
|
29
|
+
attr_reader :available
|
30
|
+
alias available? available
|
31
|
+
|
32
|
+
@sticker_type = {
|
33
|
+
1 => :official,
|
34
|
+
2 => :guild,
|
35
|
+
}.freeze
|
36
|
+
@sticker_format = {
|
37
|
+
1 => :png,
|
38
|
+
2 => :apng,
|
39
|
+
3 => :lottie,
|
40
|
+
}
|
41
|
+
# @!visibility private
|
42
|
+
def initialize(client, data)
|
43
|
+
@client = client
|
44
|
+
_set_data(data)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Represents a sticker of guilds.
|
49
|
+
#
|
50
|
+
class GuildSticker < Sticker
|
51
|
+
# @!attribute [r] guild
|
52
|
+
# @macro client_cache
|
53
|
+
# @return [Discorb::Guild] The guild the sticker is in.
|
54
|
+
|
55
|
+
def guild
|
56
|
+
@client.guilds[@guild_id]
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Edits the sticker.
|
61
|
+
# @macro async
|
62
|
+
# @macro http
|
63
|
+
# @macro edit
|
64
|
+
#
|
65
|
+
# @param [String] name The new name of the sticker.
|
66
|
+
# @param [String] description The new description of the sticker.
|
67
|
+
# @param [Discorb::Emoji] tag The new tags of the sticker.
|
68
|
+
# @param [String] reason The reason for the edit.
|
69
|
+
#
|
70
|
+
def edit(name: :unset, description: :unset, tag: :unset, reason: :unset)
|
71
|
+
Async do
|
72
|
+
payload = {}
|
73
|
+
payload[:name] = name unless name == :unset
|
74
|
+
payload[:description] = description unless description == :unset
|
75
|
+
payload[:tags] = tag.name unless tag == :unset
|
76
|
+
@client.internet.patch("/guilds/#{@guild_id}/stickers/#{@id}", payload, audit_log_reason: reason).wait
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
alias modify edit
|
81
|
+
|
82
|
+
#
|
83
|
+
# Deletes the sticker.
|
84
|
+
# @macro async
|
85
|
+
# @macro http
|
86
|
+
#
|
87
|
+
# @param [String] reason The reason for the deletion.
|
88
|
+
#
|
89
|
+
def delete!(reason: nil)
|
90
|
+
Async do
|
91
|
+
@client.internet.delete("/guilds/#{@guild_id}/stickers/#{@id}", audit_log_reason: reason).wait
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
alias destroy! delete!
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# Represents a sticker pack.
|
100
|
+
#
|
101
|
+
class Pack < DiscordModel
|
102
|
+
# @return [Discorb::Snowflake] The ID of the sticker pack.
|
103
|
+
attr_reader :id
|
104
|
+
# @return [String] The name of the sticker pack.
|
105
|
+
attr_reader :name
|
106
|
+
# @return [Discorb::Snowflake] The ID of the SKU.
|
107
|
+
attr_reader :sku_id
|
108
|
+
# @return [Discorb::Snowflake] The cover sticker of the pack.
|
109
|
+
attr_reader :cover_sticker_id
|
110
|
+
# @return [String] The description of the pack.
|
111
|
+
attr_reader :description
|
112
|
+
# @return [Discorb::Store::SKU] The banner asset ID of the pack.
|
113
|
+
attr_reader :banner_asset_id
|
114
|
+
# @return [Array<Discorb::Sticker>] The stickers in the pack.
|
115
|
+
attr_reader :stickers
|
116
|
+
# @return [Discorb::Asset] The banner of the pack.
|
117
|
+
attr_reader :banner
|
118
|
+
|
119
|
+
# @!visibility private
|
120
|
+
def initialize(client, data)
|
121
|
+
@client = client
|
122
|
+
@id = Snowflake.new(data[:id])
|
123
|
+
@name = data[:name]
|
124
|
+
@sku_id = Snowflake.new(data[:sku_id])
|
125
|
+
@cover_sticker_id = Snowflake.new(data[:cover_sticker_id])
|
126
|
+
@description = data[:description]
|
127
|
+
@banner_asset_id = Snowflake.new(data[:banner_asset_id])
|
128
|
+
@banner = Asset.new(self, data[:banner_asset_id], path: "app-assets/710982414301790216/store")
|
129
|
+
@stickers = data[:stickers].map { |s| Sticker.new(@client, s) }
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def _set_data(data)
|
136
|
+
@id = Snowflake.new(data[:id])
|
137
|
+
@name = data[:name]
|
138
|
+
@tags = data[:tags].split(",")
|
139
|
+
@type = self.class.sticker_type[data[:type]]
|
140
|
+
@format = self.class.sticker_format[data[:format]]
|
141
|
+
@description = data[:description]
|
142
|
+
@available = data[:available]
|
143
|
+
if @type == :official
|
144
|
+
@pack_id = Snowflake.new(data[:guild_id])
|
145
|
+
@sort_value = data[:sort_value]
|
146
|
+
else
|
147
|
+
@guild_id = Snowflake.new(data[:guild_id])
|
148
|
+
@user = data[:user] && (@client.users[data[:user][:id]] || User.new(@client, data[:user]))
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class << self
|
153
|
+
# @!visibility private
|
154
|
+
attr_reader :sticker_type, :sticker_format
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
data/lib/discorb/user.rb
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Discorb
|
4
|
+
#
|
5
|
+
# Represents a user of discord.
|
6
|
+
#
|
7
|
+
class User < DiscordModel
|
8
|
+
# @return [Boolean] Whether the user is verified.
|
9
|
+
attr_reader :verified
|
10
|
+
# @return [String] The user's username.
|
11
|
+
attr_reader :username
|
12
|
+
alias name username
|
13
|
+
# @return [Discorb::Snowflake] The user's ID.
|
14
|
+
attr_reader :id
|
15
|
+
# @return [Discorb::User::Flag] The user's flags.
|
16
|
+
attr_reader :flag
|
17
|
+
# @return [String] The user's discriminator.
|
18
|
+
attr_reader :discriminator
|
19
|
+
# @return [Discorb::Asset] The user's avatar.
|
20
|
+
attr_reader :avatar
|
21
|
+
# @return [Boolean] Whether the user is a bot.
|
22
|
+
attr_reader :bot
|
23
|
+
alias bot? bot
|
24
|
+
|
25
|
+
include Discorb::Messageable
|
26
|
+
|
27
|
+
# @!visibility private
|
28
|
+
def initialize(client, data)
|
29
|
+
@client = client
|
30
|
+
@data = {}
|
31
|
+
@dm_channel_id = nil
|
32
|
+
_set_data(data)
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Format the user as `Username#Discriminator` style.
|
37
|
+
#
|
38
|
+
# @return [String] The formatted username.
|
39
|
+
#
|
40
|
+
def to_s
|
41
|
+
"#{@username}##{@discriminator}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def inspect
|
45
|
+
"#<#{self.class} #{self}>"
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Whether the user is a owner of the client.
|
50
|
+
# @macro async
|
51
|
+
# @macro http
|
52
|
+
#
|
53
|
+
# @param [Boolean] strict Whether don't allow if the user is a member of the team.
|
54
|
+
#
|
55
|
+
# @return [Boolean] Whether the user is a owner of the client.
|
56
|
+
#
|
57
|
+
def bot_owner?(strict: false)
|
58
|
+
Async do
|
59
|
+
app = @client.fetch_application.wait
|
60
|
+
if app.team.nil?
|
61
|
+
app.owner == self
|
62
|
+
elsif strict
|
63
|
+
app.team.owner == self
|
64
|
+
else
|
65
|
+
app.team.members.any? { |m| m.user == self }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
alias app_owner? bot_owner?
|
71
|
+
|
72
|
+
# @!visibility private
|
73
|
+
def base_url
|
74
|
+
Async do
|
75
|
+
next @dm_channel_id if @dm_channel_id
|
76
|
+
|
77
|
+
dm_channel = @client.internet.post("/users/#{@id}/channels", { recipient_id: @client.user.id }).wait
|
78
|
+
@dm_channel_id = dm_channel[:id]
|
79
|
+
"/channels/#{@dm_channel_id}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# Represents the user's flags.
|
85
|
+
# ## Flag fields
|
86
|
+
# |`1 << 0`|`:discord_employee`|
|
87
|
+
# |`1 << 1`|`:partnered_server_owner`|
|
88
|
+
# |`1 << 2`|`:hypesquad_events`|
|
89
|
+
# |`1 << 3`|`:bug_hunter_level_1`|
|
90
|
+
# |`1 << 6`|`:house_bravery`|
|
91
|
+
# |`1 << 7`|`:house_brilliance`|
|
92
|
+
# |`1 << 8`|`:house_balance`|
|
93
|
+
# |`1 << 9`|`:early_supporter`|
|
94
|
+
# |`1 << 10`|`:team_user`|
|
95
|
+
# |`1 << 14`|`:bug_hunter_level_2`|
|
96
|
+
# |`1 << 16`|`:verified_bot`|
|
97
|
+
# |`1 << 17`|`:early_verified_bot_developer`|
|
98
|
+
# |`1 << 18`|`:discord_certified_moderator`|
|
99
|
+
#
|
100
|
+
class Flag < Discorb::Flag
|
101
|
+
@bits = {
|
102
|
+
discord_employee: 0,
|
103
|
+
partnered_server_owner: 1,
|
104
|
+
hypesquad_events: 2,
|
105
|
+
bug_hunter_level_1: 3,
|
106
|
+
house_bravery: 6,
|
107
|
+
house_brilliance: 7,
|
108
|
+
house_balance: 8,
|
109
|
+
early_supporter: 9,
|
110
|
+
team_user: 10,
|
111
|
+
bug_hunter_level_2: 14,
|
112
|
+
verified_bot: 16,
|
113
|
+
early_verified_bot_developer: 17,
|
114
|
+
discord_certified_moderator: 18,
|
115
|
+
}.freeze
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def _set_data(data)
|
121
|
+
@username = data[:username]
|
122
|
+
@verified = data[:verified]
|
123
|
+
@id = Snowflake.new(data[:id])
|
124
|
+
@flag = User::Flag.new(data[:public_flags] | (data[:flags] || 0))
|
125
|
+
@discriminator = data[:discriminator]
|
126
|
+
@avatar = Asset.new(self, data[:avatar])
|
127
|
+
@bot = data[:bot]
|
128
|
+
@raw_data = data
|
129
|
+
@client.users[@id] = self if !data[:no_cache] && data.is_a?(User)
|
130
|
+
@data.update(data)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
#
|
135
|
+
# Represents a client user.
|
136
|
+
#
|
137
|
+
class ClientUser < User
|
138
|
+
#
|
139
|
+
# Edit the client user.
|
140
|
+
# @macro async
|
141
|
+
# @macro http
|
142
|
+
# @macro edit
|
143
|
+
#
|
144
|
+
# @param [String] name The new username.
|
145
|
+
# @param [Discorb::Image] avatar The new avatar.
|
146
|
+
#
|
147
|
+
def edit(name: :unset, avatar: :unset)
|
148
|
+
Async do
|
149
|
+
payload = {}
|
150
|
+
payload[:username] = name unless name == :unset
|
151
|
+
if avatar == :unset
|
152
|
+
# Nothing
|
153
|
+
elsif avatar.nil?
|
154
|
+
payload[:avatar] = nil
|
155
|
+
else
|
156
|
+
payload[:avatar] = avatar.to_s
|
157
|
+
end
|
158
|
+
@client.internet.patch("/users/@me", payload).wait
|
159
|
+
self
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|