www.WebTips.pl: problem z wyrażeniami regularnymi - www.WebTips.pl

Skocz do zawartości


Strona 1 z 1

problem z wyrażeniami regularnymi

#1 Użytkownik nie jest zalogowany   griwes 

  • Netherilski Arkanista
  • PipPipPipPipPipPip
  • Grupa Moderator
  • Postów 1747
  • Rejestracja 11 lip 06
  • MiejscowośćRacibórz/Wrocław

Napisano 12 styczeń 2009 - 21:46

import socket
import cPickle
import sys
import os
import re

class IRCBot:
	  def __init__(self, ircserver, ircchannel, botname, botpass):
		  self.diction = {}
		  self.server = ircserver
		  self.channel = ircchannel
		  self.nick = botname
		  self.password = botpass
		  
	  def run(self):
		  self.sock=socket.socket()
		  self.sock.connect((self.server, 6667))
		  self.sock.send('NICK %s \r\n' % self.nick)
		  self.sock.send('USER %s %s bla : %s \r\n' % (self.nick, self.server, self.nick))
		  self.sock.send('JOIN %s \r\n' % self.channel)
		  self.sock.send('PRIVMSG NickServ : IDENTIFY %s\r\n' % self.password)
		  self.sock.send('PRIVMSG %s : Witam obecnych na kanale. \r\n' % self.channel)
		  self.receive()
	  
	  def receive(self):
		  privmsg = r'^:(.*?)!(.*?) PRIVMSG (#.*?) :(.*)$'
		  privmsgpat = re.compile(privmsg)
		  mode = r'^:(.*?)!(.*?) MODE (#.*?) :(.*)$'
		  modepat = re.compile(mode)
		  plik = file('cos.txt', 'a')
		  while True:
				data = self.sock.recv(4096)
				if privmsgpat.search(data):
					 privmsgdata = privmsgpat.search(data).groups()
					 plik.write("<%s> %s" % (privmsgdata[0], privmsgdata[2]))
				elif modepat.search(data):
					 modedata = modepat.search(data).groups()
					 plik.write("%s ustawia: %s" % (modedata[0], modedata[2]))
				else:
					 plik.write("nie wiem co napisano\n")



obojętne, co zostanie wpisane na kanale IRC, bot i tak zapisuje do pliku cos.txt linijki "nie wiem co napisano". ma ktoś jakiś pomysł, co można z tym zrobić?
0


Strona 1 z 1

Odpowiedzi do tego tematu

#2 Użytkownik nie jest zalogowany   pbnan 

  • Weteran
  • PipPipPipPipPipPip
  • Grupa Użytkownik
  • Postów 1465
  • Rejestracja 25 lis 06
  • MiejscowośćOsiek almost City :)

Napisano 13 styczeń 2009 - 16:38

printuj data w pętli, potem w konsoli sprawdź, co jest nie tak. Może (.*?) zbyt wiele znaków chwyta?

BTW. Ja mam takie:
re.compile("^(:(?P<prefix>[^ ]+) +)?(?P<command>[^ ]+)( *(?P<argument> .+))?")

I działa całkiem OK - oczywiście chwyta nie tylko wiadomości.
GCS/GM d++(-) s+++:+>++ a--- C++++ UL+++ P! L+++ E---@ W+++ N o? K- w>+ O? M->+ V? PS+ PE+(-) Y? PGP+ t 5? X+ R+ tv--(+) b++ Dl+ D G e-- h! r !y+
0

Strona 1 z 1


Szybka odpowiedź

  

Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych