@@ -3,7 +3,7 @@ defmodule Ret.DiscordClient do
3
3
import Bitwise
4
4
5
5
@ oauth_scope "identify email"
6
- @ discord_api_base "https://discordapp .com/api/v6 "
6
+ @ discord_api_base "https://discord .com/api/v10 "
7
7
8
8
def get_oauth_url ( hub_sid ) do
9
9
authorize_params = % {
@@ -91,7 +91,7 @@ defmodule Ret.DiscordClient do
91
91
} ) do
92
92
case Cachex . fetch ( :discord_api , "/users/#{ provider_account_id } " ) do
93
93
{ status , result } when status in [ :commit , :ok ] ->
94
- "#{ result [ "username" ] } # #{ result [ "discriminator" ] } "
94
+ "#{ result [ "username" ] } "
95
95
end
96
96
end
97
97
@@ -161,13 +161,18 @@ defmodule Ret.DiscordClient do
161
161
case Cachex . fetch ( :discord_api , "/guilds/#{ community_id } /roles" ) do
162
162
{ status , result } when status in [ :commit , :ok ] -> result |> Map . new ( & { & 1 [ "id" ] , & 1 } )
163
163
end
164
+ # Note: Whether the bitfield values in guild_roles are represented as strings or integers is inconsistent (possibly based on what permissions the user has), so every time they're used they need to be checked and, if needed, converted to integers.
164
165
165
166
role_everyone = guild_roles [ community_id ]
166
167
permissions = role_everyone [ "permissions" ]
167
168
168
169
user_permissions = user_roles |> Enum . map ( & guild_roles [ & 1 ] [ "permissions" ] )
169
170
170
- permissions = user_permissions |> Enum . reduce ( permissions , & ( & 1 ||| & 2 ) )
171
+ permissions = user_permissions |>
172
+ Enum . reduce ( permissions , & (
173
+ if is_binary ( & 1 ) , do: String . to_integer ( & 1 ) , else: & 1 |||
174
+ if is_binary ( & 2 ) , do: String . to_integer ( & 2 ) , else: & 2
175
+ ) )
171
176
172
177
if ( permissions &&& @ administrator ) == @ administrator do
173
178
@ all
@@ -190,12 +195,15 @@ defmodule Ret.DiscordClient do
190
195
|> Map . get ( "permission_overwrites" )
191
196
|> Map . new ( & { & 1 [ "id" ] , & 1 } )
192
197
end
198
+ # Note: Whether the bitfield values in channel_overwrites are represented as strings or integers is inconsistent (possibly based on what permissions the user has), so every time they're used they need to be checked and, if needed, converted to integers.
193
199
194
200
overwrite_everyone = channel_overwrites [ community_id ]
195
201
196
202
permissions =
197
203
if overwrite_everyone do
198
- ( permissions &&& ~~~ overwrite_everyone [ "deny" ] ) ||| overwrite_everyone [ "allow" ]
204
+ ( permissions &&&
205
+ ~~~ if is_binary ( overwrite_everyone [ "deny" ] ) , do: String . to_integer ( overwrite_everyone [ "deny" ] ) , else: overwrite_everyone [ "deny" ] ) |||
206
+ if is_binary ( overwrite_everyone [ "allow" ] ) , do: String . to_integer ( overwrite_everyone [ "allow" ] ) , else: overwrite_everyone [ "allow" ]
199
207
else
200
208
permissions
201
209
end
@@ -204,8 +212,14 @@ defmodule Ret.DiscordClient do
204
212
user_permissions =
205
213
user_roles |> Enum . map ( & channel_overwrites [ & 1 ] ) |> Enum . filter ( & ( & 1 != nil ) )
206
214
207
- allow = user_permissions |> Enum . reduce ( @ none , & ( & 1 [ "allow" ] ||| & 2 ) )
208
- deny = user_permissions |> Enum . reduce ( @ none , & ( & 1 [ "deny" ] ||| & 2 ) )
215
+ allow = user_permissions |> Enum . reduce ( @ none , & (
216
+ if is_binary ( & 1 [ "allow" ] ) , do: String . to_integer ( & 1 [ "allow" ] ) , else: & 1 [ "allow" ] |||
217
+ & 2
218
+ ) )
219
+ deny = user_permissions |> Enum . reduce ( @ none , & (
220
+ if is_binary ( & 1 [ "deny" ] ) , do: String . to_integer ( & 1 [ "deny" ] ) , else: & 1 [ "deny" ] |||
221
+ & 2
222
+ ) )
209
223
210
224
permissions = ( permissions &&& ~~~ deny ) ||| allow
211
225
@@ -214,7 +228,9 @@ defmodule Ret.DiscordClient do
214
228
215
229
permissions =
216
230
if overwrite_member do
217
- ( permissions &&& ~~~ overwrite_member [ "deny" ] ) ||| overwrite_member [ "allow" ]
231
+ ( permissions &&&
232
+ ~~~ if is_binary ( overwrite_member [ "deny" ] ) , do: String . to_integer ( overwrite_member [ "deny" ] ) , else: overwrite_member [ "deny" ] ) |||
233
+ if is_binary ( overwrite_member [ "allow" ] ) , do: String . to_integer ( overwrite_member [ "allow" ] ) , else: overwrite_member [ "allow" ]
218
234
else
219
235
permissions
220
236
end
0 commit comments