Skocz do zawartości

Bot wyświetlający ilość graczy na kanale discord


patryk96
 Udostępnij

Rekomendowane odpowiedzi

Witam, wszystkich w tym poradniku dowiesz się jak stworzyć plugin, który będzie wyświetlał ilość graczy z naszego serwera na kanale Discord.

Zaczynajmy!

 

Krok 1. Stworzenie serwera discord.

Klikamy plusik na pasku serwerów po lewej stronie naszego discorda następnie klikamy "Stwórz serwer" wpisujemy nazwe serwer i klikamy przycisk Stwórz.

Krok 2. Stworzenie kanału głosowego.

Kanał głosowy tworzymy dlatego, iż w kanałach tekstowych nie możemy używać spacji, a wygląd kanału "online-0" jest niezbyt profesjonalny. :P

Kanał możemy już nazwać nazwą "Online: 0".

Krok 3. Stworzenie aplikacji Discord oraz bota.

Przejdź na stronę Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! zaloguj się następnie przejdź do zakładki Applications i w prawym górnym rogu kliknij przycisk New Application wpisz nazwę aplikacji np.: minecraft i klikamy przycisk Create. Teraz przejdź do zakładki Bot i klikamy przycisk Add bot po prawo. Bot został stworzony.

Krok 4. Zaproszenie bota na nasz serwer discord.

Przechodzimy do zakładki OAuth2 w SCOPES zaznaczamy bot, w BOT_PERMISSIONS Admininistrator kopiujemy link i wklejamy go w nową kartę w przeglądarce wybieramy serwer i dołączamy do niego.

Szczegółowo jest to opisane tutaj: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

 

Bot jest już na naszym serwerze teraz przejdźmy do pisania wtyczki pod serwer.

Do stworzenia wtyczki będziemy potrzebowali api discorda my użyjemy JDA (Java Discord API).

Aktualizować nazwę kanału możemy 2 razy na 10 minut, więc aktualizowanie nazwy kanału zrobimy w tasku co 6 minut.

 

Repozytoria maven:

Spigot: Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

JDA (Java Discord API) Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

 

Teraz zaczniemy tworzyć wtyczkę.

   

1. Stwórz klasę główną z jej statyczną instancją.


import org.bukkit.plugin.java.JavaPlugin;

public class DiscordPlugin extends JavaPlugin {

    private static DiscordPlugin discordPlugin;

    @Override
    public void onEnable(){
        discordPlugin = new DiscordPlugin();
    }

    public static DiscordPlugin getDiscordPlugin() {
        return discordPlugin;
    }
}

       

2. Stwórz klasę Bot w której uruchomimy bota.

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;

import javax.security.auth.login.LoginException;

public class Bot {

    private JDA jda;
    
    //Tworzymy voida z zmienną String która będzie przechowywała token.
    public Bot(String token){
        try {
            jda = new JDABuilder(token).build();
        } catch (LoginException e) {
            e.printStackTrace();
        }
    }

    public JDA getJda() {
        return jda;
    }
}

   

3. Tworzymy zmienną long o nazwie channelOnlineID, do której przypisujemy ID kanału, w którym chcemy zmienić nazwę. Aby otrzymać ID kanału kliknij PPM na kanał i z samego dołu wybierz: Kopiuj ID.

import org.bukkit.plugin.java.JavaPlugin;

public class DiscordPlugin extends JavaPlugin {

    private static DiscordPlugin discordPlugin;
	private long channelOnlineID;    
	private Bot bot;

    @Override
    public void onEnable(){
        discordPlugin = new DiscordPlugin();
        //Token który odbierasz na stronie discord developer w zakładce bot
        this.bot = new Bot("NzI1MDkzNDc5MjIyMzQ1ODUy.XvdcVw.3NxaTmfIKYr6fsPnxOuaW2ZwFBg");
        //ID kanału na którym nazwa ma być odświeżana
        this.channelOnlineID = 724920522042900533l;
    }

    public static DiscordPlugin getDiscordPlugin() {
        return discordPlugin;
    }

    public Bot getBot() {
        return bot;
    }

    public long getChannelOnlineID() {
        return channelOnlineID;
    }
}

 

4. Tworzenie taska.

import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitRunnable;

public class Task extends BukkitRunnable {

    @Override
    public void run() {
        DiscordPlugin
                .getDiscordPlugin()
                .getBot()
                .getJda()
                .getVoiceChannelById(DiscordPlugin.getDiscordPlugin().getChannelOnlineID())
                .getManager()
                .setName("Online: "+ Bukkit.getOnlinePlayers().size())
                .queue();
    }

}

 

5. Rejestracja taska.

Ja taska zarejestrowałem co 6 min, bo wiadomo na styk nie wszystko jest dobre. :) 

@Override
    public void onEnable(){
        discordPlugin = new DiscordPlugin();
        this.bot = new Bot("NzI1MDkzNDc5MjIyMzQ1ODUy.XvdcVw.3NfaTmBIKYr6fsPnxOuaW2ZwFBg");
        this.channelOnlineID = 724920522042900533l;
        //Rejestracja taska
        new Task().runTaskTimerAsynchronously(this, ((60*20L)*6), ((60*20L)*6));
    }

 

Stwórz plugin.yml, a następnie zbuduj plugin i wgraj go na serwer.

Dziękuję za obejrzenie całego poradnika. :D

W razie problemów proszę pisać tutaj chętnie pomogę.

Czekam na jakieś propozycje do innych poradników.

Edytowane przez Wojciu
Wojciu

Poprawiam formatowanie.

Notatka dodana przez Wojciu

Odnośnik do komentarza
Udostępnij na innych stronach

  • 10 miesięcy temu...
  • 3 tygodnie później...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...