diff --git a/lib/discordrb/api/server.rb b/lib/discordrb/api/server.rb index 9b383299e..135ea0c9b 100644 --- a/lib/discordrb/api/server.rb +++ b/lib/discordrb/api/server.rb @@ -200,17 +200,18 @@ def bans(token, server_id, limit = nil, before = nil, after = nil) ) end - # Ban a user from a server and delete their messages from the last message_days days + # Ban a user from a server and delete their messages up to a given amount of time. # https://discord.com/developers/docs/resources/guild#create-guild-ban - def ban_user(token, server_id, user_id, message_days, reason = nil) - reason = URI.encode_www_form_component(reason) if reason + def ban_user(token, server_id, user_id, message_seconds, reason = nil) Discordrb::API.request( :guilds_sid_bans_uid, server_id, :put, - "#{Discordrb::API.api_base}/guilds/#{server_id}/bans/#{user_id}?delete_message_days=#{message_days}&reason=#{reason}", - nil, - Authorization: token + "#{Discordrb::API.api_base}/guilds/#{server_id}/bans/#{user_id}", + { delete_message_seconds: message_seconds }.to_json, + Authorization: token, + content_type: :json, + 'X-Audit-Log-Reason': reason ) end diff --git a/lib/discordrb/data/member.rb b/lib/discordrb/data/member.rb index f2cc80b2f..35c639da6 100644 --- a/lib/discordrb/data/member.rb +++ b/lib/discordrb/data/member.rb @@ -247,10 +247,17 @@ def server_unmute end # Bans this member from the server. - # @param message_days [Integer] How many days worth of messages sent by the member should be deleted. + # @param message_days [Integer] How many days worth of messages sent by the member should be deleted. This parameter is deprecated and will be removed in 4.0. + # @param message_seconds [Integer] How many seconds worth of messages sent by the member should be deleted. # @param reason [String] The reason this member is being banned. - def ban(message_days = 0, reason: nil) - server.ban(@user, message_days, reason: reason) + def ban(message_days = 0, message_seconds: nil, reason: nil) + delete_messages = if message_days != 0 && message_days + message_days * 86_400 + else + message_seconds || 0 + end + + server.ban(@user, delete_messages, reason: reason) end # Unbans this member from the server. diff --git a/lib/discordrb/data/server.rb b/lib/discordrb/data/server.rb index 10a7ce02e..8a6f2a062 100644 --- a/lib/discordrb/data/server.rb +++ b/lib/discordrb/data/server.rb @@ -610,10 +610,17 @@ def bans(limit: nil, before_id: nil, after_id: nil) # Bans a user from this server. # @param user [User, String, Integer] The user to ban. - # @param message_days [Integer] How many days worth of messages sent by the user should be deleted. + # @param message_days [Integer] How many days worth of messages sent by the user should be deleted. This is deprecated and will be removed in 4.0. + # @param message_seconds [Integer] How many seconds of messages sent by the user should be deleted. # @param reason [String] The reason the user is being banned. - def ban(user, message_days = 0, reason: nil) - API::Server.ban_user(@bot.token, @id, user.resolve_id, message_days, reason) + def ban(user, message_days = 0, message_seconds: nil, reason: nil) + delete_messages = if message_days != 0 && message_days + message_days * 86_400 + else + message_seconds || 0 + end + + API::Server.ban_user(@bot.token, @id, user.resolve_id, delete_messages, reason) end # Unbans a previously banned user from this server.