Skip to content

Commit 21ae264

Browse files
authored
Merge pull request #733 from Exairnous/update-discord-api-to-v10
Update Discord API to v10
2 parents 4d7b3fd + 886394a commit 21ae264

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

lib/ret/discord_client.ex

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Ret.DiscordClient do
33
import Bitwise
44

55
@oauth_scope "identify email"
6-
@discord_api_base "https://discordapp.com/api/v6"
6+
@discord_api_base "https://discord.com/api/v10"
77

88
def get_oauth_url(hub_sid) do
99
authorize_params = %{
@@ -91,7 +91,7 @@ defmodule Ret.DiscordClient do
9191
}) do
9292
case Cachex.fetch(:discord_api, "/users/#{provider_account_id}") do
9393
{status, result} when status in [:commit, :ok] ->
94-
"#{result["username"]}##{result["discriminator"]}"
94+
"#{result["username"]}"
9595
end
9696
end
9797

@@ -161,13 +161,18 @@ defmodule Ret.DiscordClient do
161161
case Cachex.fetch(:discord_api, "/guilds/#{community_id}/roles") do
162162
{status, result} when status in [:commit, :ok] -> result |> Map.new(&{&1["id"], &1})
163163
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.
164165

165166
role_everyone = guild_roles[community_id]
166167
permissions = role_everyone["permissions"]
167168

168169
user_permissions = user_roles |> Enum.map(&guild_roles[&1]["permissions"])
169170

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+
))
171176

172177
if (permissions &&& @administrator) == @administrator do
173178
@all
@@ -190,12 +195,15 @@ defmodule Ret.DiscordClient do
190195
|> Map.get("permission_overwrites")
191196
|> Map.new(&{&1["id"], &1})
192197
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.
193199

194200
overwrite_everyone = channel_overwrites[community_id]
195201

196202
permissions =
197203
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"]
199207
else
200208
permissions
201209
end
@@ -204,8 +212,14 @@ defmodule Ret.DiscordClient do
204212
user_permissions =
205213
user_roles |> Enum.map(&channel_overwrites[&1]) |> Enum.filter(&(&1 != nil))
206214

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+
))
209223

210224
permissions = (permissions &&& ~~~deny) ||| allow
211225

@@ -214,7 +228,9 @@ defmodule Ret.DiscordClient do
214228

215229
permissions =
216230
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"]
218234
else
219235
permissions
220236
end

0 commit comments

Comments
 (0)