Search in sources :

Example 1 with OAuthBattleNetApi

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));
            }
        });
    }));
}
Also used : OAuthBattleNetApi(com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi) Document(org.bson.Document) Spark.get(spark.Spark.get) java.util(java.util) ServiceBuilder(com.github.scribejava.core.builder.ServiceBuilder) WoWCharacter(com.greatmancode.legendarybot.plugins.wowlink.utils.WoWCharacter) MongoCollection(com.mongodb.client.MongoCollection) LegendaryBotPlugin(com.greatmancode.legendarybot.api.plugin.LegendaryBotPlugin) LoggerFactory(org.slf4j.LoggerFactory) OAuth20Service(com.github.scribejava.core.oauth.OAuth20Service) BattleNetAPIInterceptor(com.greatmancode.legendarybot.api.utils.BattleNetAPIInterceptor) HeroClass(com.greatmancode.legendarybot.api.utils.HeroClass) Spark.path(spark.Spark.path) JSONArray(org.json.simple.JSONArray) PluginWrapper(org.pf4j.PluginWrapper) com.greatmancode.legendarybot.plugins.wowlink.commands(com.greatmancode.legendarybot.plugins.wowlink.commands) PermissionException(net.dv8tion.jda.core.exceptions.PermissionException) Filters.and(com.mongodb.client.model.Filters.and) ParseException(org.json.simple.parser.ParseException) OAuth2AccessToken(com.github.scribejava.core.model.OAuth2AccessToken) GuildSettings(com.greatmancode.legendarybot.api.server.GuildSettings) ResultSet(java.sql.ResultSet) Filters.eq(com.mongodb.client.model.Filters.eq) UpdateOptions(com.mongodb.client.model.UpdateOptions) Updates.unset(com.mongodb.client.model.Updates.unset) Role(net.dv8tion.jda.core.entities.Role) Request(okhttp3.Request) Logger(org.slf4j.Logger) JSONParser(org.json.simple.parser.JSONParser) Verb(com.github.scribejava.core.model.Verb) IOException(java.io.IOException) Filters.exists(com.mongodb.client.model.Filters.exists) FileInputStream(java.io.FileInputStream) Updates.set(com.mongodb.client.model.Updates.set) Guild(net.dv8tion.jda.core.entities.Guild) OkHttpClient(okhttp3.OkHttpClient) JSONObject(org.json.simple.JSONObject) OAuthRequest(com.github.scribejava.core.model.OAuthRequest) Block(com.mongodb.Block) User(net.dv8tion.jda.core.entities.User) Response(com.github.scribejava.core.model.Response) HttpUrl(okhttp3.HttpUrl) Spark(spark.Spark) OAuthRequest(com.github.scribejava.core.model.OAuthRequest) UpdateOptions(com.mongodb.client.model.UpdateOptions) OAuth20Service(com.github.scribejava.core.oauth.OAuth20Service) ServiceBuilder(com.github.scribejava.core.builder.ServiceBuilder) OAuth2AccessToken(com.github.scribejava.core.model.OAuth2AccessToken) WoWCharacter(com.greatmancode.legendarybot.plugins.wowlink.utils.WoWCharacter) JSONArray(org.json.simple.JSONArray) IOException(java.io.IOException) OAuthBattleNetApi(com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi) FileInputStream(java.io.FileInputStream) Response(com.github.scribejava.core.model.Response) MongoCollection(com.mongodb.client.MongoCollection) JSONObject(org.json.simple.JSONObject) JSONParser(org.json.simple.parser.JSONParser)

Example 2 with OAuthBattleNetApi

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());
}
Also used : OAuthBattleNetApi(com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi) ZeroArgsCommand(com.greatmancode.legendarybot.api.commands.ZeroArgsCommand) ServiceBuilder(com.github.scribejava.core.builder.ServiceBuilder) Logger(org.slf4j.Logger) MessageReceivedEvent(net.dv8tion.jda.core.events.message.MessageReceivedEvent) LoggerFactory(org.slf4j.LoggerFactory) OAuth20Service(com.github.scribejava.core.oauth.OAuth20Service) PublicCommand(com.greatmancode.legendarybot.api.commands.PublicCommand) WoWLinkPlugin(com.greatmancode.legendarybot.plugins.wowlink.WoWLinkPlugin) OAuthBattleNetApi(com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi) OAuth20Service(com.github.scribejava.core.oauth.OAuth20Service) ServiceBuilder(com.github.scribejava.core.builder.ServiceBuilder)

Aggregations

ServiceBuilder (com.github.scribejava.core.builder.ServiceBuilder)2 OAuth20Service (com.github.scribejava.core.oauth.OAuth20Service)2 OAuthBattleNetApi (com.greatmancode.legendarybot.plugins.wowlink.utils.OAuthBattleNetApi)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 OAuth2AccessToken (com.github.scribejava.core.model.OAuth2AccessToken)1 OAuthRequest (com.github.scribejava.core.model.OAuthRequest)1 Response (com.github.scribejava.core.model.Response)1 Verb (com.github.scribejava.core.model.Verb)1 PublicCommand (com.greatmancode.legendarybot.api.commands.PublicCommand)1 ZeroArgsCommand (com.greatmancode.legendarybot.api.commands.ZeroArgsCommand)1 LegendaryBotPlugin (com.greatmancode.legendarybot.api.plugin.LegendaryBotPlugin)1 GuildSettings (com.greatmancode.legendarybot.api.server.GuildSettings)1 BattleNetAPIInterceptor (com.greatmancode.legendarybot.api.utils.BattleNetAPIInterceptor)1 HeroClass (com.greatmancode.legendarybot.api.utils.HeroClass)1 WoWLinkPlugin (com.greatmancode.legendarybot.plugins.wowlink.WoWLinkPlugin)1 com.greatmancode.legendarybot.plugins.wowlink.commands (com.greatmancode.legendarybot.plugins.wowlink.commands)1 WoWCharacter (com.greatmancode.legendarybot.plugins.wowlink.utils.WoWCharacter)1 Block (com.mongodb.Block)1 MongoCollection (com.mongodb.client.MongoCollection)1