use of com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi in project legendarybot by greatman.
the class WoWLinkPlugin method start.
@Override
public void start() {
// Load the configuration
props = new Properties();
try {
props.load(new FileInputStream("app.properties"));
} catch (java.io.IOException e) {
e.printStackTrace();
getBot().getStacktraceHandler().sendStacktrace(e);
}
path("/auth", () -> get("/battlenetcallback", (req, res) -> {
String state = req.queryParams("state");
String region = state.split(":")[0];
OAuth20Service service = new ServiceBuilder(props.getProperty("battlenetoauth.key")).apiSecret(props.getProperty("battlenetoauth.secret")).scope("wow.profile").callback("https://legendarybot.greatmancode.com/auth/battlenetcallback").build(new OAuthBattleNetApi(region));
String oAuthCode = req.queryParams("code");
// TODO: Save oauth code to do a character refresh.
OAuth2AccessToken token = service.getAccessToken(oAuthCode);
OAuthRequest request = new OAuthRequest(Verb.GET, "https://" + region + ".api.battle.net/wow/user/characters");
service.signRequest(token, request);
Response response = service.execute(request);
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(response.getBody());
JSONArray charactersArray = (JSONArray) obj.get("characters");
List<WoWCharacter> characterList = new ArrayList<>();
charactersArray.forEach((c) -> {
JSONObject jsonObject = (JSONObject) c;
if (jsonObject.containsKey("guild")) {
characterList.add(new WoWCharacter((String) jsonObject.get("name"), ((String) jsonObject.get("realm")).toLowerCase(), (String) jsonObject.get("guild"), region, HeroClass.values()[((Long) jsonObject.get("class")).intValue()]));
log.info("User " + state.split(":")[1] + " user have the character " + jsonObject.get("name") + " in guild " + jsonObject.get("guild"));
}
});
if (characterList.size() > 0) {
MongoCollection<Document> collection = getBot().getMongoDatabase().getCollection(MONGO_WOW_CHARACTERS_COLLECTION);
characterList.forEach((c) -> collection.updateOne(and(eq("region", c.getRegion()), eq("realm", c.getRealm()), eq("name", c.getCharacterName())), and(set("guild", c.getGuild()), set("owner", state.split(":")[1])), new UpdateOptions().upsert(true)));
}
return "Your WoW characters are now synced to LegendaryBot!";
}));
getBot().getCommandHandler().addCommand("linkwowchars", new LinkWoWCharsCommand(this), "World of Warcraft Character");
getBot().getCommandHandler().addCommand("guildchars", new GuildCharsCommand(this), "World of Warcraft Character");
getBot().getCommandHandler().addCommand("setmainchar", new SetMainCharacterCommand(this), "World of Warcraft Character");
getBot().getCommandHandler().addCommand("enableautorank", new EnableAutoRankCommand(this), "WoW Admin Commands");
getBot().getCommandHandler().addCommand("disableautorank", new DisableAutoRankCommand(this), "WoW Admin Commands");
getBot().getCommandHandler().addCommand("setwowrank", new SetWoWRankCommand(this), "WoW Admin Commands");
getBot().getCommandHandler().addCommand("syncrank", new SyncRankCommand(this), "World of Warcraft Character");
getBot().getCommandHandler().addCommand("syncguild", new SyncGuildCommand(this), "WoW Admin Commands");
getBot().getCommandHandler().addCommand("enableautorankupdate", new EnableAutoRankUpdateCommand(this), "WoW Admin Commands");
getBot().getCommandHandler().addCommand("disableautorankupdate", new DisableAutoRankUpdateCommand(this), "WoW Admin Commands");
// We load the scheduler
getBot().getJDA().forEach((jda -> {
jda.getGuilds().forEach(guild -> {
if (getBot().getGuildSettings(guild).getSetting(SETTING_SCHEDULER) != null && getBot().getGuildSettings(guild).getSetting(SETTING_RANKSET_ENABLED) != null) {
scheduler.put(guild.getId(), new SyncRankScheduler(this, guild));
}
});
}));
}
use of com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi in project legendarybot by greatman.
the class LinkWoWCharsCommand method execute.
@Override
public void execute(MessageReceivedEvent event, String[] args) {
String region = plugin.getBot().getGuildSettings(event.getGuild()).getRegionName();
if (region == null) {
event.getChannel().sendMessage("The Region is not configured. Please ask a server admin to configure it with the setup command").queue();
return;
}
OAuth20Service service = new ServiceBuilder(plugin.getProps().getProperty("battlenetoauth.key")).scope("wow.profile").callback("https://legendarybot.greatmancode.com/auth/battlenetcallback").state(region + ":" + event.getAuthor().getId()).build(new OAuthBattleNetApi(region));
event.getAuthor().openPrivateChannel().queue((privateChannel -> privateChannel.sendMessage("Please follow this link to connect your WoW account to this bot: " + service.getAuthorizationUrl()).queue()));
log.info("User " + event.getAuthor().getName() + ":" + event.getAuthor().getId() + " requested to link his characters. Link generated: " + service.getAuthorizationUrl());
}
Aggregations