Twisted: Verständnis Problem mit Events

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Hallo,

ich bin gerade dabei mich mit Twisted.ircClient zu beschäftigen. Dabei möchte ich einen Bot porgrammieren, der wenn er auf einem Server connected eine Liste von Channels joint. Damit der Bot weiß, welche channel er joinen soll, brauche ich den namen des Netzwerk auf dem der Bot connected hat.

Im Modul twisted.ircClient gibt es eine Funktion

def myInfo(self, servername, version, umodes, cmodes):


Die wird aufgerufen Während der Bot auf den Server connected und gibt mir auch den korrekten Server Namen zurück.
Allerdings müsste ich auch wenn der Bot schon connected ist an diese Information kommen. An dieser Stelle vestehe ich nicht, wie das gehen soll, da ich ja die Funktion myInfo gar nicht selber aufrufen kann ohne Servername, version etc zu wissen.

Wie komme ich also beispielsweise in der Funktion def signedOn(self): an den Servernamen wo er gerade connected ist?

vielen Dank für die bisher immer äußerst kompetente Hilfe hier im Forum

Gruß
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na in dem du den Servernamen an ein Attribut von ``self`` bindest. Das sind nun ehrlich ganz grobe Grundlagen von OOP...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Das kann sein. Ich bekomme allerdings keinen Wert. Könntest du mir einen konkreten Codeschnipsel liefern. Bitte
deets

Code: Alles auswählen


def myInfo(self, servername, ...):
      self.servername =servername

Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Das ist mir klar. Das geht auch. Aber ich brauche den Servernamen in einer anderen Methode:

Code: Alles auswählen

def signedOn(self):  
     for line in db.channel.filter(db.channel.server_url == $servername):
     self.join(line.chan_name)
Das Problem ist, dass ich in der methode signedOn ja myInfo nicht aufrufen kann um an den server namen zu kommen weil mir die Parameter fehlen.
BlackJack

``$servername``!? Bist Du sicher das Du in Python programmieren willst? ;-)

Die Methode *aufzurufen* geht doch sowieso nicht. Du hast in der Methode doch aber den Servernamen an das Objekt gebunden. Und die Methode wird doch vor der `signedOn()` aufgerufen, also kannst Du in der `signedOn()` auf das Attribut zugreifen.
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Habs jetzt anders gelöst. Vielen dank für eure Anregungen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Herr Lehmann hat geschrieben:Habs jetzt anders gelöst.
Wie?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Ich übergebe den server namen an die factory und kann diesen dann über self.factory.server ansprechen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und was ist wenn die gleiche Factory mehrere Clients produziert?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Es wird bei jeder factory ein anderer server übergeben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du meinst als das wär jetzt zu einfach, oder?

Code: Alles auswählen

def signedOn(self):
     for line in db.channel.filter(db.channel.server_url == self.servername):
         self.join(line.chan_name)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sillas
User
Beiträge: 2
Registriert: Samstag 30. April 2011, 11:14

[spam]
Zuletzt geändert von Anonymous am Samstag 30. April 2011, 12:27, insgesamt 1-mal geändert.
Grund: ~450 Zeilen unsinniges OT entfernt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sillas, was soll der Spam?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sillas
User
Beiträge: 2
Registriert: Samstag 30. April 2011, 11:14

Spam? Ich Spam nicht..Sorey
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Diese ewig lange, englischsprachige und ungewünschte Anleitung zu Eggdrop hat definitiv nichts mit dem Thema zu tun.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Leonidas hat geschrieben:Du meinst als das wär jetzt zu einfach, oder?

Code: Alles auswählen

def signedOn(self):
     for line in db.channel.filter(db.channel.server_url == self.servername):
         self.join(line.chan_name)
Jap. denn wenn ich ich z.b. in meiner liste irc.freenode.net stehen habe. Dann kann es ja sein das er sich aber auf den Server
kornbluth.freenode.net verbindet. Und damit stimmt der Server in der Liste nicht mehr mit dem überein den ich über self.servername bekomme.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und ``myInfo`` wird "irc.freenode.net" statt dem eigentlichen Servernamen übergeben?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

myinfo wird kornbluth.freenode.net ausgeben und in meiner liste steht irc.freenode.org dann passt es nicht zusammen und macht probleme
Antworten