Best Practice Objekt an alle Klassen verteilen ( Discord Bot )

JvKbF

Mitglied
Hallo zusammen,

ich stecke leider gerade etwas in der Klemme, bzw. weiß nicht weiter.
Ich habe jetzt seit knapp 2 Jahren kein Java mehr gemacht und versuche wieder rein zu kommen, indem ich einen Bot für Discord entwickle.

Wer schon mal einen Bot für Discord entwickelt hat, weiß dass dort alles über Listener und Events funktioniert. ( z. B. onGuildMessageReceived - wird aufgerufen wenn im Server eine Nachricht gesandt wurde ) Und da es sehr viele Events gibt, habe ich diese anhand von "Kategorien" in Klassen geordnet ( z. B. alle "onGuildMessageXXX" Methoden in eine Klasse, alle "onGuildMemberXXX" in eine Klasse usw. ).

Nun ist es so, dass ich auch verschiedene einstellungen habe, welche sich von Server zu Server unterscheiden ( können ). Dafür habe ich eine Settings-Klasse. Diese habe ich als Singleton konzipiert, sodass nicht jedes Mal, wenn die eine Klasse einstellungen braucht, diese neu aus config Files oder so gelesen werden müssen. ( zur Info am Rande, diese Klasse enthält eine HashMap in der die Objekte als Values und die ServerID als Key gespeichert sind - Wichtig ist hier also die ServerID, dass mir diese immer zur verfügung steht).

Mein Problem jetzt, ist es, dass ich im Konstruktor der jeweiligen Klassen die ServerID nicht zur verfügung habe, diese bekomme ich immer erst durch die Methoden ( eventhandler - also wie oben gesagt z. b. "onGuildMessageReceived( GuildMessageReceivedEvent event ) "). Nun möchte ich nicht in jeder Methode prüfen ob die Settings schon gelesen wurden und zur not dann das Objekt initialisieren. Ich würde sowas gerne nur einmal pro klasse machen - habe aber keine Ahnung wie.

Ist das irgendwie möglich? ( und ist mein Anliegen überhaupt verständlich? )

Edit:
Bzw. Kann ich dann das Settings Objekt irgendwie, wenn es ein Mal durch irgend eine der oben beschriebenen ListenerKlassen initialisiert wurde, an die anderen Listenerklassen verteilen? Ist das möglich?

Ich möchte halt vermeiden, dass in jeder Methode am Anfang steht
Java:
this.settings = settings.get_instance(event.getGuild().getID());

Eine Methode ist immer so aufgebaut:
Java:
    public void onGuildMessageUpdate(GuildMessageUpdateEvent event) {
    }

Um es Grundlegend mal aufzuzeigen, wie der Bot aufgebaut ist:

Java:
public class APP {

public static void main(String[] args){

JDABuilder builder = new JDABuilder(AccountType.BOT);
// some stuff
builder.addEventListener(new GuildMessageListener() );
// add other listeners
}
}

public class GuildMessageListener extends ListenerAdapter {
private Settings settings;

public void onGuildMessageReveived(GuildMessageReceivedEvent event) {
// do stuff
}

// other event methods

}

ich hoffe durch das Coding ist es etwas klarer geworden, was das problem sein könnte...

sonst müsste ich tatsächlich, wie oben beschrieben jede Methode mit dem Singleton ausstatten ... das ist jetzt nicht wirklich schön ..
 
Zuletzt bearbeitet:

JvKbF

Mitglied
Hm... nicht wirklich bzw. verstehe ich das Problem noch nicht.

Wenn Du ein Server-Objekt erzeugst, kennst Du dessen ID? Wenn nicht, warum nicht?

Das liegt an dem Framework. Ich erstelle kein Server-Objekt, es ist so, dass der BOT ein Mitglied auf dem Server ist, heißt der Server existiert schon, egal ob mein Programm läuft oder nicht. Das heißt, mein Bot loggt sich ein und reagiert dann auf verschiedene Ereignisse ( z. B. wenn jemand in den Chat eine Nachricht schreibt ) - dann fängt der Bot die Nachricht ab bzw. er liest die Nachricht und kann damit dann weiter arbeiten. Diese Nachricht erhält er als Objekt, ( z. B. GuildMessageRecievedEvent ). Mit diesem Objekt, kann ich dann erst herausfinden, auf welchem Server ich bin.

Man muss es sich so vorstellen, dass ein User mitglied bei verschiedenen Servern sein kann ( vielleicht haben sie im englischen hier absichtlich das Wort "Guild" verwendet .. hmm .. anstatt server, weil es sonst zu verwirrungen kommt ) und immer wechseln kann. das gleiche ist auch bei Bots so, der ist mitglied bei verschiedenen servern und nimmt immer nur die verschiedenen ereignisse und verarbeitet diese.

Ich habe beim initialisieren leider keine Möglichkeit die Server zu identifizieren.

Edit:
Ist halt im prinzip, wenn man für eine GUI eine Klasse schreibt, die rein auf die EVENTS der Gui reagiert.

Ich werde jetzt dann erst mal in jede von mir implementierte Listener-Methode die "get_instance" methode aufrufen ... falls dennoch jemand eine Lösung weiß, bin ich sehr dankbar!
 
Zuletzt bearbeitet:

Robat

Top Contributor
Gibt es nicht ein Event um abzufangen wann der Bot connected um dort die Server ID abzufangen? Dann könntest du dort deine settings ja initialisieren
 

JvKbF

Mitglied
God damn ... nein,auch das Event hat mir in diesem Fall nichts gebracht.
Ich habe hierbei ein anderes Problem, was sich vermutlich nicht lösen lässt. Und zwar hat die Anwendung von jedem Listener nur eine Instanz, heißt, dass nicht für jeden Server eine eigene Instanz vorhanden ist. Dementsprechend könnte man die einzelnen Listener alle als statische Methoden sehen und dementsprechend funktioniert das so, wie ich es mir ursprünglich gedacht habe gar nicht. - Schade.

dennoch Danke für die Vorschläge!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8
G Entity Objekt Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben