bmstefanski/friendly-garbanzo

View on GitHub
src/main/java/pl/bmstefanski/garbanzo/command/CommitCommand.java

Summary

Maintainability
A
45 mins
Test Coverage
package pl.bmstefanski.garbanzo.command;

import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import java.awt.Color;
import java.util.List;
import java.util.concurrent.ExecutionException;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.MessageEmbed;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Component;
import pl.bmstefanski.garbanzo.command.defaults.CommandExecutor;
import pl.bmstefanski.garbanzo.command.defaults.CommandInfo;
import pl.bmstefanski.garbanzo.command.defaults.CommandSender;
import pl.bmstefanski.garbanzo.util.RestServiceType;

@Component
public class CommitCommand implements CommandExecutor {

  @CommandInfo(value = "commit", minArguments = 1, maxArguments = 2, usage = "<username> [Yyyy-Mm-Dd]")
  @Override
  public void execute(CommandSender commandSender, List<String> args) {
    try {
      HttpResponse<JsonNode> httpResponse = Unirest
          .get(RestServiceType.GITHUB_ACTIVITY_API_URL)
          .header("Accept", "application/json")
          .routeParam("username", args.get(0))
          .asJsonAsync()
          .get();

      JSONArray yearsJsonArray = httpResponse.getBody().getObject().getJSONArray("years");

      if (yearsJsonArray.length() == 0) {
        String footerMessage = commandSender.getMessage("wrong-username");
        MessageEmbed messageEmbeds = new EmbedBuilder()
            .setColor(Color.RED)
            .setFooter(footerMessage, null)
            .build();

        commandSender.sendEmbedMessage(messageEmbeds);
        return;
      }

      String titleMessage = commandSender.getMessage("activity-title", args.get(0));

      if (args.size() == 1) {
        EmbedBuilder embedBuilder = new EmbedBuilder()
            .setColor(Color.GREEN)
            .setTitle(titleMessage);

        for (int i = 0; i < yearsJsonArray.length(); i++) {
          String fieldMessage = commandSender
              .getMessage("year", yearsJsonArray.getJSONObject(i).getString("year"));
          embedBuilder.addField(fieldMessage,
              String.valueOf(yearsJsonArray.getJSONObject(i).getInt("total")), true);
        }

        commandSender.sendEmbedMessage(embedBuilder.build());
        return;
      }

      JSONArray contributionsJsonArray = httpResponse.getBody().getObject()
          .getJSONArray("contributions");

      String footerMessage = commandSender.getMessage("no-activity", args.get(1));
      EmbedBuilder embedBuilder = new EmbedBuilder()
          .setColor(Color.RED)
          .setFooter(footerMessage, null);

      for (int i = 0; i < contributionsJsonArray.length(); i++) {
        JSONObject jsonObject = contributionsJsonArray.getJSONObject(i);

        if (args.get(1).equals(jsonObject.getString("date"))) {
          embedBuilder.setTitle(titleMessage);
          embedBuilder.setColor(Color.decode(jsonObject.getString("color")));
          embedBuilder.addField(commandSender.getMessage("searching-date"), args.get(1), true);
          embedBuilder.addField(commandSender.getMessage("contributions"),
              String.valueOf(jsonObject.getInt("count")), true);
          embedBuilder.setFooter(null, null);
        }

      }

      commandSender.sendEmbedMessage(embedBuilder.build());
    } catch (InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
  }

}