IRC-Client

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.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Ist auch egal mit den Versionsnummern jetzt.
Ich hab mir jetzt mal Twisted angeschaut.
Da hab ich mir gleich mal ein Beispielprogramm für einen IRC Log-Bot angeschaut ... Naja irgendwie blick ich da nicht so ganz durch.
Sowas wie:

Code: Alles auswählen

        if msg.startswith(self.nickname + ":"):
            msg = "%s: I am a log bot" % user
            self.msg(channel, msg)
            self.logger.log("<%s> %s" % (self.nickname, msg))
Versteh ich, ist ja irgendwie auch selbsterklärend. Aber das Problem ist eher, dass ich einfach nicht durchblicke, wenn eine neue Klasse erstellt wird, die von irgendeiner Klasse erbt, die ich natürlich nicht kenne, weil ich das Twisted-Framework noch nie benutzt hab.
Außerdem war der Bot auch recht lahm, der antwortet einem bei einer Query-Message immer "It isn't nice to whisper! Play nice with the group."
Das kommt dann so ca. 15 sekunden später an :o Aber kann ja auch andere Gründe haben.

Ja ich weiß, Tutorials lesen würde das Problem beheben, dass ich nicht so richtig durchblicke, man kann sich nicht ein paar Codebeispiele anschaun und dann erwarten, dass man versteht, wie das ganze Funktioniert.
Aber irgendwie mag ich Twisted jetzt schon nicht :p Mag sein, dass ich Twisted irgendwann schätzen werde, wenn ich merke, wie umständlich ich's hab wenn ich's nicht benutze.
Ich guck mir vielleicht erstmal an, wie die IRC-lib so ist und danach kann ich ja immer noch Twisted nehmen, wenn mir das noch weniger gefällt :p
Das ganze selbst mit Sockets/Threads/KA-was-alles zu machen, ist wahrscheinlich der umständlichste Weg oder? Aber vielleicht auch der lehrreichste :p
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nocta hat geschrieben:Das ganze selbst mit Sockets/Threads/KA-was-alles zu machen, ist wahrscheinlich der umständlichste Weg oder?
Ja, und damit auch der Weg bei dem man am meisten falsch machen kann.

Kannst dir gatskerd.py ansehen, der IRC-Part dort ist echt simpel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Um das Thema Versionsnummern abzuschließen noch ein paar Hinweise dazu: Kopete (KDE Multi Protokoll Messenger) und XCDRoast (http://www.xcdroast.org/) sind wohl gute Beispiele dafür. Wobei letzteres seit 10 Jahren "unfertig" ist :D
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Über Twisted habe ich zwar ein Buch im Regal, aber so richtig grün geworden bin und gemocht habe ich es bisher nie.

Für kleine Bots habe ich mit der irclib keine Probleme gehabt, würde in Zukunft aber wohl auf Supybot oder Gozerbot setzen.

Wenn es dir darum geht, etwas zu lernen (und ziemlich gute IRC-Clients gibt es ja bereits) und mit dem Protokoll zu spielen, dann ist ein recht niedriger Ansatz über Sockets oder ggf. über asyncore/asynchat (habe ich bisher leider noch nicht benutzt) wohl die beste Wahl. Netzwerkprogrammierung kann aber sehr tricky sein, von daher bin ich letztlich doch meistens von eigenen Implementierungen auf bewährte Lösungen gewechselt ;)
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Oh, das sieht ja richtig einfach und simpel aus :)
Ich glaub damit komm ich gut zurecht, danke für das Beispiel.
Kommt mir auf jeden Fall viel einfacher vor als Twisted oder so.
Edit:
Ich hab das jetzt mal grad so ausprobiert, wie es im Paste stehst und folgendes krieg ich von Python:

Code: Alles auswählen

warning: unhandled exception
warning: unhandled exception
warning: unhandled exception
warning: unhandled exceptionerror: uncaptured python exception, closing channel <__main__.IRCBot at 0xc5ab98> (<type 'exceptions.KeyboardInterrupt'>: [C:\Python25\lib\asyncore.py|_exception|84] [C:\Python25\lib\asyncore.py|handle_expt_event|400] [C:\Python25\lib\asyncore.py|handle_expt|423] [C:\Python25\lib\asyncore.py|log_info|376] [C:\Python25\lib\idlelib\rpc.py|__call__|597] [C:\Python25\lib\idlelib\rpc.py|remotecall|211] [C:\Python25\lib\idlelib\rpc.py|asyncreturn|240] [C:\Python25\lib\idlelib\rpc.py|getresponse|280] [C:\Python25\lib\idlelib\rpc.py|_getresponse|308] [C:\Python25\lib\threading.py|wait|214])
Ähm ja ... Hä?!
Was genau ist denn das Problem?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nocta hat geschrieben:Was genau ist denn das Problem?
Du hast Strg+C (KezboardInterrupt) gedrueckt? ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Leonidas hat geschrieben:
Nocta hat geschrieben:Was genau ist denn das Problem?
Du hast Strg+C (KezboardInterrupt) gedrueckt? ;)
Okay, das erklärt aber nicht die vielen warning: unhandled exception. Das kommt solange, bis ich abbreche :shock:
Antworten