If wird nicht beachtet

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
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Hallo,

Ich befasse mich erst seid kurzem mit Python und muss mich infolge dessen noch an einiges gewöhnen... aber was ich gar nicht verstehe ist der Fehler in folgendem Programm:

Code: Alles auswählen

import socket

message = str

network = 'irc.iz-smart.net'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
irc.recv ( 4096 )
irc.send ( 'NICK Bacy\r\n' )
irc.send ( 'USER Baconman Baconman Baconman :My IRC\r\n' )
irc.send ( 'JOIN #channel\r\n' )
irc.send ( 'PRIVMSG #channel :Halloele!\r\n' )
while True:
   data = irc.recv ( 4096 )
   if data.find ( 'PING' ) != -1:
      irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
   elif data.find ( 'PRIVMSG' ) != -1:
      nick = data.split ( '!' ) [ 0 ].replace ( ':', '' )
      message = ':'.join ( data.split ( ':' ) [ 2: ] )
      destination = ''.join ( data.split ( ':' ) [ :2 ] ).split ( ' ' ) [ -2 ]
      if destination == 'My IRC':
         destination = 'PRIVATE'
      print '(', destination, ')', nick + ':', message
   if message == 'wie geht es dir bacy?':
      irc.send( 'PRIVMSG #channel :Gut, danke! und dir?\r\n' )
   else:
      print 'else'
Es soll ein Bot für einen IRC Channel werden. Den größten Teil des Codes habe ich aus dem Internet. Möchte ihn halt jetzt selber erweitern.

Das komische ist nur das, auch wen ich "wie geht es dir bacy?" in den Channel schreibe, immer "else" raus kommt... Ich hoffe einer von euch kann mich über meinen Fehler aufklären :D


BTW: Kann mir vielleicht einer ganz ganz kurz die Zeilen 15 - 23 erklären? Nur damit ich überprüfen kann ob ich es richtig verstanden habe. :)

Grüße Baconman
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Baconman hat geschrieben:Den größten Teil des Codes habe ich aus dem Internet. Möchte ihn halt jetzt selber erweitern.
Der Code sieht ziemlich mies aus. Ich würde ihn wegwerfen und mir erst einmal die Grundlagen von Python erarbeiten! Siehe dazu auch in der FAQ die Sektion für Einsteiger.
Das komische ist nur das, auch wen ich "wie geht es dir bacy?" in den Channel schreibe, immer "else" raus kommt... Ich hoffe einer von euch kann mich über meinen Fehler aufklären :D
Wir können es ja selber nur schwerlich starten und testen! Aber die Sache ist an sich erst mal ganz einfach: Wenn er nicht in den if-Zweig springt, dann stimmt eben die Bedingung nicht ;-) Wieso lässt Du Dir nicht mal message anzeigen? Das wäre doch schon mal das einfachste...
BTW: Kann mir vielleicht einer ganz ganz kurz die Zeilen 15 - 23 erklären? Nur damit ich überprüfen kann ob ich es richtig verstanden habe. :)
Das sind lauter Basics, die man durch das Durcharbeiten des Tutorials sich leicht selber beibringen kann.
Gegenvorschlag: Du formulierst einmal, wie DU denkst, dass das abläuft!

Das hat mehrere Vorteile:
- Du lernst etwas dabei
- Da Du etwas wissen willst, zeigst Du hier allen Engagement ;-)

Nebenbei hat zu so etwas hier wohl kaum einer Lust...

Generell würde ich dazu sagen: Die Vorgehensweise des Scriptes ist Schrott. Ich kenne zwar die Struktur von "data" nicht, aber das sieht echt krank aus und würde sich sicherlich besser lösen lassen. Das Parsing sollte man schon strukturiert aufbauen.

Zum Code an sich: Diese sinnlosen Leerzeichen stören das Gesamtbild

Code: Alles auswählen

# schlecht
foo ( bar )
# besser
foo(bar)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Schau dir mal die python-irclib an, damit hat man sowas in ein paar Zeilen bequem gemacht!

Zeile 16 wuerde ich schreiben als:

Code: Alles auswählen

if 'PING' in data:
Zeile 18 entsprechend.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Mein Vorschlag wäre, die komplette ``while``-Schleife zu löschen und durch folgenden Code zu ersetzen:

Code: Alles auswählen

import time
while True:
   data = irc.recv(4096)
   print data
   time.sleep(1)
Dann schau mal, was du bekommst und arbeite damit weiter.

Grüße
Gerrit
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Rebecca hat geschrieben:Zeile 16 wuerde ich schreiben als:

Code: Alles auswählen

if 'PING' in data:
Zeile 18 entsprechend.
Würde ich nicht, was ist wenn dir jemand ne PRIVMSG. NOTICE schickt bzw. im Channel PING schreibt?

[Werbung]http://blog.dav1d.de/code/irc-nach-rfc-parsen/[/Werbung]

irclib != für Anfänger, leider
IMHO finde ich sie wirklich gelungen, allerdings muss den Quelltext durchstöbern um an Infos zu kommen, da AFAIK keine Doku vorhanden ist
the more they change the more they stay the same
Benutzeravatar
Baconman
User
Beiträge: 20
Registriert: Mittwoch 24. März 2010, 22:42
Kontaktdaten:

Danke für eure Antworten :D

Habe viel davon umgesetzt und mein Programm läuft jetzt so wie ich es will!

Code: Alles auswählen

import socket
import time


network = 'irc.iz-smart.net'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
irc.recv ( 4096 )
irc.send ( 'NICK Rocky\r\n' )
irc.send ( 'USER Rocky Rocky Rocky :My IRC\r\n' )
irc.send ( 'JOIN #channel\r\n' )
irc.send ( 'PRIVMSG #channel :Halloele!\r\n' )
while True: 
   data = irc.recv(4096) 
   print data
   if 'PING' in data:
      irc.send ('PONG')
   elif 'fick' and 'dich' and 'Rocky' in data:
      irc.send('PRIVMSG #channel :fick dich selber!\r\n')
   time.sleep(1)
EDIT: Doch nicht, aber ich denke das kriege ich hin!

Danke Leute!
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Baconman hat geschrieben:EDIT: Doch nicht, aber ich denke das kriege ich hin!
Wollt ich gerade anmerken: Jetzt wäre ein guter Zeitpunkt um sich das Tutorial anzuschauen.
Antworten