diff --git a/src/grom.gleam b/src/grom.gleam index e069b9a..5326d55 100644 --- a/src/grom.gleam +++ b/src/grom.gleam @@ -5888,7 +5888,7 @@ fn optional_to_string( } } -/// Requires the `GuildMembersIntent` privileged intent. +/// Requires the `GUILD_MEMBERS` privileged intent. /// /// By default, will return one member. The maximum limit is 1000. pub fn get_guild_members_request( @@ -12927,3 +12927,66 @@ pub fn remove_member_from_thread_response( ) -> Result(Nil, RestError) { handle_no_content_response(response) } + +pub fn get_thread_member_request( + token token: Token, + thread_with_id thread_id: Snowflake(Thread), + member_with_id member_id: Snowflake(User), +) -> Request(String) { + new_request( + token:, + to: "/channels/" + <> snowflake_to_string(thread_id) + <> "/thread-members/" + <> snowflake_to_string(member_id), + method: http.Get, + ) +} + +pub fn get_thread_member_response( + response: Response(String), +) -> Result(ThreadMember, RestError) { + handle_response(response, decode_with: thread_member_decoder()) +} + +pub fn get_thread_member_with_guild_member_request( + token token: Token, + thread_with_id thread_id: Snowflake(Thread), + member_with_id member_id: Snowflake(User), +) -> Request(String) { + get_thread_member_request(token, thread_id, member_id) + |> request.set_query([#("with_member", "true")]) +} + +pub fn get_thread_member_with_guild_member_response( + response: Response(String), +) -> Result(#(ThreadMember, GuildMember), RestError) { + let decoder = { + use thread_member <- decode.then(thread_member_decoder()) + use guild_member <- decode.field("member", guild_member_decoder()) + decode.success(#(thread_member, guild_member)) + } + + handle_response(response, decode_with: decoder) +} + +/// Requires that your app has the `GUILD_MEMBERS` priviledged intent enabled. +pub fn get_thread_members_request( + token token: Token, + thread_with_id thread_id: Snowflake(Thread), +) -> Request(String) { + new_request( + token:, + to: "/channels/" <> snowflake_to_string(thread_id) <> "/thread-members", + method: http.Get, + ) +} + +pub fn get_thread_members_response( + response: Response(String), +) -> Result(List(ThreadMember), RestError) { + handle_response( + response, + decode_with: decode.list(of: thread_member_decoder()), + ) +}