From 396836bbf01f1634a673e70b1d8a0c9cccd8ea5a Mon Sep 17 00:00:00 2001 From: luchoaravena Date: Fri, 25 Oct 2024 18:02:18 -0300 Subject: [PATCH] Refactor Discord bot logic to split response messages in paragraphs --- lib/bas/bot/write_media_review_in_discord.rb | 24 ++++--------------- lib/bas/utils/discord/request.rb | 17 +++++++++++-- .../bot/write_media_review_in_discord_spec.rb | 8 +++---- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/lib/bas/bot/write_media_review_in_discord.rb b/lib/bas/bot/write_media_review_in_discord.rb index 6075517..e17bd46 100644 --- a/lib/bas/bot/write_media_review_in_discord.rb +++ b/lib/bas/bot/write_media_review_in_discord.rb @@ -60,12 +60,12 @@ def read def process return { success: { review_added: nil } } if unprocessable_response - response = Utils::Discord::Request.write_media_text(params) + response = Utils::Discord::Request.split_paragraphs(params) - if response.code == 200 + if !response.empty? { success: { message_id: read_response.data["message_id"], property: read_response.data["property"] } } else - { error: { message: response.parsed_response, status_code: response.code } } + { error: { message: "Response is empty" } } end end @@ -88,27 +88,11 @@ def conditions def params { - body:, + body: read_response.data["review"], secret_token: process_options[:secret_token], message_id: read_response.data["message_id"], channel_id: read_response.data["channel_id"] } end - - def body - { content: "#{toggle_title}\n\n#{read_response.data["review"]}\n\n#{mention_content}" } - end - - def mention_content - author_name = read_response.data["author"] - "<@#{author_name}>" - end - - def toggle_title - case read_response.data["media_type"] - when "images" then "Image review results" - when "paragraph" then "Text review results" - end - end end end diff --git a/lib/bas/utils/discord/request.rb b/lib/bas/utils/discord/request.rb index 52dea60..8b3eb09 100644 --- a/lib/bas/utils/discord/request.rb +++ b/lib/bas/utils/discord/request.rb @@ -39,10 +39,23 @@ def self.get_discord_images(message) } end - def self.write_media_text(params) + def self.write_media_text(params, combined_paragraphs) url_message = URI.parse("#{DISCORD_BASE_URL}/channels/#{params[:channel_id]}/messages") headers = headers(params[:secret_token]) - HTTParty.post(url_message, { body: params[:body].to_json, headers: }) + body = { content: combined_paragraphs }.to_json + + HTTParty.post(url_message, { body:, headers: }) + end + + def self.split_paragraphs(params) + paragraphs = params[:body].split("--PARAGRAPH--").map(&:strip).reject(&:empty?) + + paragraphs.each_slice(2) do |paragraph| + next if paragraph.empty? + + combined_paragraphs = paragraph.join("\n\n") + write_media_text(params, combined_paragraphs) + end end def self.headers(secret_token) diff --git a/spec/bas/bot/write_media_review_in_discord_spec.rb b/spec/bas/bot/write_media_review_in_discord_spec.rb index 037ab64..18d4ac0 100644 --- a/spec/bas/bot/write_media_review_in_discord_spec.rb +++ b/spec/bas/bot/write_media_review_in_discord_spec.rb @@ -80,7 +80,7 @@ "message_id" => "1285685692772646922", "channel_id" => "1285685692772646933", "media_type" => "images" } end - let(:error_response) { { "object" => "error", "status" => 404, "message" => "not found" } } + let(:error_response) { { "object" => "error", "message" => "Response is empty" } } let(:response) { double("https_response") } @@ -99,13 +99,11 @@ end it "returns an error hash with the error message" do - allow(response).to receive(:code).and_return(404) - - allow(response).to receive(:parsed_response).and_return(error_response) + allow(Utils::Discord::Request).to receive(:split_paragraphs).and_return([]) processed = @bot.process - expect(processed).to eq({ error: { message: error_response, status_code: 404 } }) + expect(processed).to eq({ error: { message: "Response is empty" } }) end end