JDA-Bot

Lukasbsc

Mitglied
[CODE lang="java" title="Main.class" highlight="17, 18, 19, 20"]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();
});
}
}
}
[/CODE]
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)
 

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.
 

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
 
K

kneitzel

Gast
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 ...
 

Neue Themen


Oben