JDA-Bot

Lukasbsc

Lukasbsc

Mitglied
Main.class:
package core;

import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;

import javax.security.auth.login.LoginException;

public class Main extends ListenerAdapter
{
    public static void main(String[] args) throws LoginException
    {
        args[0] = "Nzk3NTk1OTM2NzAzNTEyNjI2.X_oxGQ.cwlWFZ4MY4in8cTaRVwswGMW1Ko";
        if (args.length <= 1) {
            System.exit(1);
        }


        JDABuilder.createLight(args[0], GatewayIntent.GUILD_MESSAGES, GatewayIntent.DIRECT_MESSAGES)
                .addEventListeners(new Main())
                .setActivity(Activity.playing("Type !ping"))
                .build();
    }

    @Override
    public void onMessageReceived(MessageReceivedEvent event)
    {
        Message msg = event.getMessage();
        if (msg.getContentRaw().equals("!ping"))
        {
            MessageChannel channel = event.getChannel();
            long time = System.currentTimeMillis();
            channel.sendMessage("Pong!") /* => RestAction<Message> */
                    .queue(response /* => Message */ -> {
                        response.editMessageFormat("Pong: %d ms", System.currentTimeMillis() - time).queue();
                    });
        }
    }
}
In args[0] muss der token. Bloß, wenn Ich das Programm ausführe kommt die Fehlermeldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at core.Main.main(Main.java:17)
 
L

LimDul

Top Contributor
Args sind die Argumente die von außen kommen, die sollte man nicht selber setzen. Du solltest die Zeile 17 eigentlich löschen und den Token als Kommandozeilen-Argument übergeben. Zumindest sieht das Programm das so vor.
 
L

LimDul

Top Contributor
Du startest das Programm ja irgendwie (z.B. java core.Main) - dann da einfach das Token dran hängen:

java core.Main Nzk3NTk1OTM2NzAzNTEyNjI2.X_oxGQ.cwlWFZ4MY4in8cTaRVwswGMW1Ko
 
kneitzel

kneitzel

Top Contributor
Alternativ kannst Du das Token auch über andere Wege als die Kommandozeile einfügen...

Fest codiert (Dann musst Du immer den code anpassen, wenn sich der Token ändert, also eigentlich schlechte Idee):
Java:
    public static void main(String[] args) throws LoginException {
        String token = "Nzk3NTk1OTM2NzAzNTEyNjI2.X_oxGQ.cwlWFZ4MY4in8cTaRVwswGMW1Ko";

        JDABuilder.createLight(token, GatewayIntent.GUILD_MESSAGES, GatewayIntent.DIRECT_MESSAGES)
                .addEventListeners(new Main())
                .setActivity(Activity.playing("Type !ping"))
                .build();
    }

Schon besser: Du hast eine Config-Datei, in der das Token steht:
Java:
    public static void main(String[] args) throws LoginException {

        // Properties auf config File lesen
        Properties prop = new Properties();
        String propFileName = "config.properties";
        try (InputStream inputStream = new FileInputStream(propFileName) {
            prop.load(inputStream);
        } catch (Exception e) {
            System.out.println("Config file " + propFileName + " konnte nicht gelesen werden: " + e);
            e.printStackTrace();
        }

        String token = prop.getProperty("token");

        JDABuilder.createLight(token, GatewayIntent.GUILD_MESSAGES, GatewayIntent.DIRECT_MESSAGES)
                .addEventListeners(new Main())
                .setActivity(Activity.playing("Type !ping"))
                .build();
    }

mit config.properties file:
Code:
token=xxxxxxxxxxxxxxxxxx

Das wären einfach einmal zwei weitere Wege, falls das mit dem Kommandozeilenargument Probleme bereiten sollte ...

Der Code selbst ist in dem Editor des Forums entstanden - Tippfehler sind also möglich ...
 
Anzeige

Neue Themen


Oben