Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Der letzte Code von Dir war in #22 und da war außer dem Timer nichts zu sehen. Sorry, dass meine Glaskugel kaputt ist und ich daher Deinen aktuellen Stand nicht sehen konnte.
Die ganzen Punkte, dass du zB schon einen lauffähigen Bot hast etc, hättest du ruhig am Anfang mit nennen können. Im ersten Post sah es so aus als hättest du NUR die main-Methode.
Ja, aber es ging ja jetzt prinzipiell NUR um das erstellen eines funktionstüchtigen Timers. Deswegen hatte ich es nicht für notwendig gehalten, die Integration mit zu posten.
Also wohin das weiß ich. Aber der Code ist falsch/die Imports fehlen bei mir. Die folgenden Fehler tauchen auf:
Multiple markers at this line
- ScheduledExecutorService cannot be resolved
to a type
- Executors cannot be resolved
Syntax error on token ".", @ expected after this token
Multiple markers at this line
- Syntax error, insert "Identifier (" to complete
MethodHeaderName
- Syntax error on tokens, delete these tokens
- Syntax error, insert "SimpleName" to complete
QualifiedName
- Syntax error, insert ")" to complete MethodDeclaration
Und der Befehl System.out.println("") gibt den Text ja in der Konsole aus, der Bot soll den Text aber in einem Channel ausgeben.
Auf der einen Seite sagst du, du weißt wohin mit dem Code, auf der anderen Seite schreibst du dass er ja nur etwas auf der Konsole ausgibt. Das ist mir schon klar .. aber wenn du weißt wohin mit dem Code wird es ja auch ein leichtes Unterfangen sein, die Konsolenausgabe mit einer Ausgabe auf dem Server zu ersetzen.
Mich würde wirklich mal interessieren, wo du den Code hinkopiert hast. Das ganze klingt irgendwie so, als würde es nicht in einer Methode, sondern direkt in einer Klasse stehen. Und wenn du selber sagst, dass dir Imports fehlen, dann füg sie doch hinzu?
Weil Wochenende ist .. ein letzer Versuch mit einem kompletten Code - sogar mit Imports und der JDA Version, die du verwendest.
Java:
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import javax.security.auth.login.LoginException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TimerBotExample {
public TimerBotExample() throws InterruptedException, LoginException {
JDA jda = new JDABuilder("TOKEN")
.addEventListeners(new MessageListener())
.setActivity(Activity.playing("Some game..."))
.setStatus(OnlineStatus.ONLINE)
.build();
jda.awaitReady();
}
class MessageListener extends ListenerAdapter {
@Override
public void onMessageReceived( MessageReceivedEvent event ) {
final User author = event.getAuthor();
if(!author.isBot()) {
Message message = event.getMessage();
String displayMessage = message.getContentDisplay();
if(displayMessage.equals("/start")) {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(() -> event.getChannel().sendMessage("Next message in 1h...").queue(), 0L, 1L, TimeUnit.HOURS);
}
}
}
}
public static void main( String[] args ) throws LoginException, InterruptedException {
new TimerBotExample();
}
}
Das ist ein vollständiges Beispiel von einem Discord-Bot der einen Timer startet sobald du /start schreibst. Er gibt dann jede Stunde 1 mal die Nachricht "Next message in 1h.." aus. Dem ganzen müsste man natürlich noch ein kleines Refactoring unterziehen im Sinne von MessageListener in eine eigene Datei, nur 1 Timer starten, .. aber das spielt jetzt gerade keine Rolle.
. Ja, wie soll ich denn wissen, welche Imports es sind, bzw. die Bezeichnung?
Natürlich müsste man noch bei deinem Code eine Stopp Methode einfügen, aber das spielt jetzt auch keine große Rolle.
Shit... mir ist gerade was aufgefallen. Der Timer ist ja hauptsächlich dazu da, dass er einen Command senden soll, worauf ein anderer Bot antworten soll. Nun ist das Problem, dass der Bot, der den Command dann ausführen soll, diesen nicht ausführt. Nur wenn ich den Command schreibe, dass wird dieser ausgeführt.
Gibt es eine Möglichkeit, dass man den Bot irgendwie als normalen User "tarnen" kann?
Kann es sein, dass du ohne IDE (Eclipse, Netbeans, Intellij, ... ) programmierst?
Eine IDE würde dir automatisch sagen wenn Klassen einen Import brauchen.
Wie du die Imports rauskriegst hab ich hier schon mal angesprochen. Das sollte dir die IDE (also Eclipse bei dir) automatisch sagen ..
Ob du den Bot tarnen kannst, weiß ich nicht. Kannst du die Funktion des Bots nicht einfach nachbasteln? Was macht der denn?
Ja, aber macht sie komischer Weise nicht. Vielleicht habe ich auch was falsches aktiviert, müsste ich mal nach gucken. Aber ich habe eigentlich nicht an den Einstellungen rum gebastelt.
Der Bot, der den Befehl ausführen soll, DISBOARD. Dieser Bot gehört zufälliger Weise zur Website disboard.org. Wenn man nun aller 1 Stunden den Befehl !disboard bump eingibt, wird mein Server auf der Website nach oben gepusht, sodass ich mehr User auf meinen Server bekomme und ich mein Netzwerk aufbauen kann. Und da ich nicht immer alle 1 Stunde den Befehl eingeben will, ist es viel effektiver, wenn man einen Bot hat, der das macht.