IRC Bot Programmierung...seltsames Problem...
-
Hi, erstmal, ist ja Mega das mein Uraltaccount noch geht, Danke :).
Aber komme ich mal zu meiner Frage.
Ich versuche einen IRC Bot zu schreiben.
Oder, sagen wir so, ich verwende einen fertigen IRC Bot und versuche da
eigene Features einzubauen.
Ich benutze folgenden Bot:
http://www.jibble.org/pircbot.phpEs klappt grundsätzlich auch alles wunderbar.
Es gibt nur eine Stelle an der komme ich seit Tagen/Wochen nicht weiter.
Ich möchte für diesen Bot und die Benutzung des selbigen ein
Usersystem schreiben.
Das funktioniert auch schon in groben Zügen.Angenommen es möchte sich also ein Nutzer bei dem Bot anmelden muss er eingeben:
!login <Benutzername> <passwort>Und JETZT gehts mitm Problem los.
Ich habe alle Daten (Benutzer, Passwörter usw.) in verschiedenen Datenstrukturen (Objekten/Hashtables usw.) gespeichert.
Aber:
Jedesmal wenn der Bot eine Nachricht aus dem IRC erhält, dann
ruft er z.B. die Methode "onMessage" auf.
Dazu ein Beispiel von der Homepage:import org.jibble.pircbot.*; public class MyBot extends PircBot { public MyBot() { this.setName("MyBot"); } public void onMessage(String channel, String sender, String login, String hostname, String message) { if (message.equalsIgnoreCase("time")) { String time = new java.util.Date().toString(); sendMessage(channel, sender + ": The time is now " + time); } } }
Das ist ja alles kein Prob. aber wenn ich jetzt z.B. überprüfen möchte ob der User der gerade versucht sich einzuloggen auch wirklich in der Datenbank gespeichert ist (Textdatei dann will ich dazu eine Funktion aufrufen wie
public void login(blablabla)
Aber ich muss doch dieser Funktion noch die Information geben, welche in meinem aktuellen Objekt gespeichert ist.
Aber WIE, WIE soll das gehen? Drücke ich mich verständlich aus?
Wahrscheinlich nicht, also ich versuchs nochmal "plain" zu erklären.Also, angenommen ich habe ein"SuperObjekt", aus diesem Objekt kann ich sämtliche
Informationen über meine User bekommen.Dann muss ich eine Funktion definieren.
Diese Loginfunktion wird immer dann aufgerufen wenn die onMessage Methode des PircBot aufgerufen wird (Das heisst ich MUSS sie im Rumpf der onMessage Methode definieren oder aus ihrem Rumpf aufrufen!).
Also, können die Daten welche an die Loginfunktion weitergegeben werden NUR die sein, welche auch die onMessage Methode von dem Bot erhält.
Dies sind aber NUR Daten aus dem IRChat.
WIE kann ich Informationen aus meinem Objekt an die onMessage Methode, bzw. an die Loginfunktion weitergeben?!?!?Für jegliche Ideen wäre ich dankbar.
Ich bin zwar kein Newbie in Java aber ich sehe einfach keine Möglichkeit wie es gehen könnte und ich vermute dass man dazu einfach viel Erfahrung braucht um dieses Problem zu lösen.
Wenn einer von euch ne Idee hätte wäre ich dafür sehr dankbar!Also in diesem Sinne erstmal herzlichen Dank für die Mühe.
P.S. Arghs ich kriege langsam mittelschwere Zustände ich habe
überhaupt keinen Plan wies gehen soll *sehrsehrverzweifelt*
-
Ich hab' nicht im Geringsten Dein Problem verstanden... sorry.
-
Ok, ich versuchs nochmal anders zu erklären.
class the_bot main(){ //In dem Objekt userinformation sind alle Daten gespeichert, welche //ich über meine User weiss (name, passwort usw.) UserSystem userinformation = new UserSystem(user-file-location); } //überladen der "mitgelieferten" Funktion on Message onMessage(String channel, string nameofsender etc, string message.){ if(message startsWith(!login) then login(String nameofsender)) }
Und genau in dem Rumpf der if-Schleife tritt das Problem auf.
Wenn ich die (von mir geschriebene Funktion login aufrufe)
Dann kann ich an die keine weiteren Informationen als irgendwelche Strings oder so mitgeben.
Aber wie soll ich in der Loginfunktion auf mein "userinformation" Objekt zugreifen?
Oder bin ich inzwschen so Banane, das es eigentlich total trivial wäre ich es aber nicht sehe?ABER: Man darf nicht vergessen, dass die onMessage IMMER dann aufgerufen
wird wenn neuer Input ausm IRC kommt.Man beachte in diesem Fall das Beispiel aus meiner oberen Beschreibung,
dort wird einfach nur ein argumentloser Konstruktor aufgerufen(aus dem Rumpf der if-Schleife), das kann ich aber leider nicht, weil ich an die Objekte (welche ich erzeuge) doch die Information übergeben muss wo sich (z.B.) die Userdatei befindet.
Und GENAU DAS, ist das Problem. Gut genug erklärt? Ich hoffe doch