Skocz do zawartości

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


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ę https://discord.com/developers/applications 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: https://discordpy.readthedocs.io/en/latest/discord.html#inviting-your-bot.

 

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: https://www.spigotmc.org/wiki/spigot-maven/.

JDA (Java Discord API) https://github.com/DV8FromTheWorld/JDA.

 

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
https://skript.pl/temat/40144-bot-wy%C5%9Bwietlaj%C4%85cy-ilo%C5%9B%C4%87-graczy-na-kanale-discord/
Udostępnij na innych stronach

  • 10 miesięcy temu...
  • 3 tygodnie później...
  • 2 lata później...
W dniu 24.09.2023 o 15:50, Zwiadowca001 napisał:

I ogólnie, jakbyś to wytłumaczył dla kogos, kto nie umie wgl pisać pluginów ITP? @patryk96

jak ktoś wgl nie umie pisać pluginów to niech nauczy się podstaw bo i tak czy siak nic nie zrozumie:>

Odnośnik do komentarza
https://skript.pl/temat/40144-bot-wy%C5%9Bwietlaj%C4%85cy-ilo%C5%9B%C4%87-graczy-na-kanale-discord/#findComment-337688
Udostępnij na innych stronach

 Proponuje kilka poprawek:
 

1. W klasie głównej DiscordPlugin, metoda onEnable() tworzy nową instancję DiscordPlugin, co jest niepoprawne. Zamiast tego powinieneś przypisać this do discordPlugin, chyba że źle zrozumiałem i onEnable jest w osobnej klasie.

@Override
public void onEnable(){
    discordPlugin = this;
    // reszta kodu
}

2. W klasie Bot, zamiast obsługiwać wyjątek LoginException w konstruktorze, lepiej byłoby go przekazać do metody wywołującej, aby mogła go odpowiednio obsłużyć. Możesz to zrobić, deklarując, że Twój konstruktor rzuca LoginException:

public Bot(String token) throws LoginException { 
    jda = new JDABuilder(token).build(); 
}

3. W klasie DiscordPlugin, token bota i ID kanału są twarde. Zamiast tego powinieneś przechowywać te wartości w pliku konfiguracyjnym i wczytywać je stamtąd.

4. W klasie Task, używasz statycznej metody getDiscordPlugin(), aby uzyskać dostęp do instancji bota i ID kanału. Zamiast tego powinieneś przekazać te wartości jako argumenty do konstruktora Task.

5. Rejestracja zadania powinna być wykonana po utworzeniu bota i ustawieniu ID kanału, aby upewnić się, że te wartości są dostępne, gdy zadanie jest uruchamiane.

Oprócz tego wszystko wygląda git.

Edytowane przez devyy
Odnośnik do komentarza
https://skript.pl/temat/40144-bot-wy%C5%9Bwietlaj%C4%85cy-ilo%C5%9B%C4%87-graczy-na-kanale-discord/#findComment-337781
Udostępnij na innych stronach

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.

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

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