Skip to content

Commit

Permalink
Merge pull request #9 from Killjoyer/build-selection
Browse files Browse the repository at this point in the history
Build selection
  • Loading branch information
pamparamm authored Oct 10, 2020
2 parents 62fb507 + 11fa112 commit 8babe19
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 44 deletions.
17 changes: 9 additions & 8 deletions src/main/java/org/tbplusc/app/Main.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.tbplusc.app;

import discord4j.core.DiscordClient;
import discord4j.core.event.domain.lifecycle.DisconnectEvent;
import discord4j.core.event.domain.message.MessageCreateEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tbplusc.app.discordinteraction.DefaultChatState;
import org.tbplusc.app.discordinteraction.MessageHandler;
import reactor.core.publisher.Mono;

public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
Expand All @@ -17,12 +17,13 @@ public static void main(String[] args) {
final var client = DiscordClient.create(token);
DefaultChatState.registerDefaultCommands();
final var messageHandler = new MessageHandler();
client.login()
.flatMapMany(gateway -> gateway.on(MessageCreateEvent.class))
.map(MessageCreateEvent::getMessage)
.map(message -> {
messageHandler.handleMessage(message);
return Mono.empty();
}).blockLast();
final var gateway = client.login().block();
if (gateway == null) {
logger.error("Can't connect to discord");
return;
}
gateway.on(MessageCreateEvent.class).map(MessageCreateEvent::getMessage)
.subscribe(messageHandler::handleMessage);
gateway.on(DisconnectEvent.class).blockLast();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import static org.tbplusc.app.discordinteraction.DiscordUtil.getChannelForMessage;

import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;
Expand Down Expand Up @@ -44,32 +45,8 @@ public static void registerDefaultCommands() {
registerCommand("build", (args, message) -> {
final var validator = new Validator();
logger.info("Typed hero name: {}", args);
final var heroName = IcyVeinsParser
.normalizeHeroName(validator.getClosestToInput(args));
logger.info("Normalized hero name: {}", heroName);
try {
final var builds = IcyVeinsParser.getBuildsByHeroName(heroName);
final var channel = getChannelForMessage(message);
channel.createMessage(
String.format("Selected hero is **%s**", heroName)
).block();
builds.getBuilds().stream().map((build) -> {
final var talents = new StringBuilder();
for (var i = 0; i < build.getTalents().size(); i++) {
talents.append(String.format(
"%3d. %s \n",
HeroConsts.HERO_TALENTS_LEVELS[i],
build.getTalents().get(i))
);
}
return String.format("**%s**: ```md\n%s```**Description:** %s",
build.getName(), talents, build.getDescription());
})
.forEach(build -> channel.createMessage(build).block());
} catch (IOException e) {
logger.error("Hero was not loaded", e);
}
return new DefaultChatState();
final var possibleHeroNames = validator.getSomeCosestToInput(args, 10);
return new HeroSelectionState(Arrays.asList(possibleHeroNames.clone()), message);
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,67 @@
package org.tbplusc.app.discordinteraction;

import discord4j.core.object.entity.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tbplusc.app.talenthelper.HeroConsts;
import org.tbplusc.app.talenthelper.icyveinsparser.IcyVeinsParser;

import java.io.IOException;
import java.util.List;

import static org.tbplusc.app.discordinteraction.DiscordUtil.getChannelForMessage;

public class HeroSelectionState implements ChatState {
public HeroSelectionState() {
private static final Logger logger = LoggerFactory.getLogger(HeroSelectionState.class);

private final List<String> availableHeroes;

private final Message message;

public HeroSelectionState(List<String> availableHeroes, Message message) {
this.availableHeroes = availableHeroes;
this.message = message;
showInitMessage();
}

public void showInitMessage() {
final var channel = getChannelForMessage(message);
final var heroes = new StringBuilder();
for (var i = 0; i < availableHeroes.size(); i++) {
heroes.append(String.format("%3d. %s \n", i + 1, availableHeroes.get(i)));
}
channel.createMessage(String.format("Choice hero (type number): \n ```md\n%s```", heroes))
.block();
}

private static void showHeroBuildToDiscord(Message message, String heroName) {
logger.info("Normalized hero name: {}", heroName);
try {
final var builds = IcyVeinsParser.getBuildsByHeroName(heroName);
final var channel = getChannelForMessage(message);
channel.createMessage(String.format("Selected hero is **%s**", heroName)).block();
builds.getBuilds().stream().map((build) -> {
final var talents = new StringBuilder();
for (var i = 0; i < build.getTalents().size(); i++) {
talents.append(String.format("%3d. %s \n", HeroConsts.HERO_TALENTS_LEVELS[i],
build.getTalents().get(i)));
}
return String.format("**%s**: ```md\n%s```**Description:** %s", build.getName(),
talents, build.getDescription());
}).forEach(build -> channel.createMessage(build).block());
} catch (IOException e) {
logger.error("Hero was not loaded", e);
}
}

@Override
public ChatState handleMessage(Message message) {
return null;
@Override public ChatState handleMessage(Message message) {
var number = Integer.parseInt(message.getContent());
if (number <= 1 || number >= 10) {
getChannelForMessage(message).createMessage("Wrong number").block();
return this;
}
final var heroName = IcyVeinsParser.normalizeHeroName(availableHeroes.get(number - 1));
showHeroBuildToDiscord(message, heroName);
return new DefaultChatState();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;

import org.tbplusc.app.util.HttpGetter;

public class IcyVeinsParser {
Expand Down Expand Up @@ -40,10 +41,7 @@ public static List<IcyVeinsBuild> getBuildsListFromDocument(org.jsoup.nodes.Docu
}

public static String normalizeHeroName(String heroName) {
return heroName.replace(".", "")
.replace(" ", "-")
.replace("'", "")
.toLowerCase();
return heroName.replace(".", "").replace(" ", "-").replace("'", "").toLowerCase();
}

private static org.jsoup.nodes.Document getDocumentFromHeroName(String heroName)
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/org/tbplusc/app/validator/Validator.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,12 @@ public Validator(){
}

public String getClosestToInput(String userInput){
var loweredInput = userInput.toLowerCase();
return Arrays.stream(charactersNames)
.min(getComporator(userInput))
.get();
}

public String[] getSomeCosestToInput(String userInput, int length){
var loweredInput = userInput.toLowerCase();
return Arrays.stream(charactersNames)
.sorted(getComporator(userInput))
.limit(length)
Expand Down

0 comments on commit 8babe19

Please sign in to comment.