summaryrefslogtreecommitdiff
path: root/src/main/java/net/tylermurphy/ken/Ken.java
blob: 7c614485d716faa637cc02104016f30ab6d51d1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package net.tylermurphy.ken;

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;

import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.youtube.YouTube;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.utils.MemberCachePolicy;
import net.tylermurphy.ken.command.Responder;
import net.tylermurphy.ken.database.Database;
import net.tylermurphy.ken.music.PlayerManager;
import net.tylermurphy.ken.util.ImageFetcher;
import net.tylermurphy.ken.util.ModerationChecker;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.*;
import java.io.File;
import java.io.InputStream;

public class Ken {

    private static Ken instance;
    private final Config config;
    private final Logger log;
    private final JDA api;
    private final PlayerManager playerManager;
    private final YouTube youTube;
    private final Responder responder;
    private final Database database;
    private final ImageFetcher imageFetcher;

    private Ken(){
        Ken.instance = this;
        this.config = Config.create("config.yml");
        this.log = LoggerFactory.getLogger(Ken.class);
        this.database = new Database();
        this.imageFetcher = new ImageFetcher();
        try {
            api = JDABuilder.createDefault(config.getString("botToken"))
                .setActivity(Activity.playing("@Ken | /help"))
                .setMemberCachePolicy(MemberCachePolicy.ALL)
                .enableIntents(GatewayIntent.GUILD_MEMBERS)
                .build()
                .awaitReady();
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException("Unable to Initialize JDA");
        }
        this.responder = new Responder(api);
        this.responder.registerCommands();
        this.addEventListener(responder);
        this.playerManager = new PlayerManager();
        try {
            youTube = new YouTube.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    GsonFactory.getDefaultInstance(),
                    null
            ).setApplicationName("Ken").build();
        } catch(Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException("Unable to connect with YouTube API");
        }
        new ModerationChecker().start();
    }

    public static Ken getInstance(){
        return instance;
    }

    public File getConfigFolder() {
        return new File("config");
    }

    public InputStream getResource(@NotNull String filename) {
        return getClass().getClassLoader().getResourceAsStream(filename);
    }

    public Config getConfig(){
        return config;
    }

    public Logger getLogger(){
        return log;
    }

    public PlayerManager getPlayerManager() { return playerManager; }

    public YouTube getYouTube() { return youTube; }

    public Database getDatabase() { return database; }

    public ImageFetcher getImageFetcher() { return imageFetcher; }

    public Role getRoleById(long id) { return api.getRoleById(id); }

    public User getUserByName(String username, String discriminator) { return api.getUserByTag(username, discriminator); }

    public Guild getGuildById(long id) { return api.getGuildById(id); }

    public EmbedBuilder getDefaultEmbed() {
        EmbedBuilder builder = new EmbedBuilder();
        builder.setColor(new Color(
                config.getInt("colors.r"),
                config.getInt("colors.g"),
                config.getInt("colors.b")
        ));
        return builder;
    }

    public void addEventListener(ListenerAdapter listener){
        api.addEventListener(listener);
    }

    public static void main(String[] args){
        new Ken();
    }

}