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ß
Twisted: Verständnis Problem mit Events
-
- 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
Code: Alles auswählen
def myInfo(self, servername, ...):
self.servername =servername
-
- 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:
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.
Code: Alles auswählen
def signedOn(self):
for line in db.channel.filter(db.channel.server_url == $servername):
self.join(line.chan_name)
``$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.
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.
-
- User
- Beiträge: 81
- Registriert: Samstag 14. August 2010, 22:20
Habs jetzt anders gelöst. Vielen dank für eure Anregungen.
-
- 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.
-
- User
- Beiträge: 81
- Registriert: Samstag 14. August 2010, 22:20
Es wird bei jeder factory ein anderer server übergeben.
-
- 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
-
- User
- Beiträge: 81
- Registriert: Samstag 14. August 2010, 22:20
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 ServerLeonidas 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)
kornbluth.freenode.net verbindet. Und damit stimmt der Server in der Liste nicht mehr mit dem überein den ich über self.servername bekomme.
-
- 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