webForumDet fria alternativet

Enkel irc-klient skriven i python

12 svar · 470 visningar · startad av Gein

GeinMedlem sedan sep. 20005 700 inlägg
#1

jag är ute efter ett litet program som körs på en linux-server som ska logga allt som sägs i en viss irc-kanal. Min polare tyckte att jag skulle skriva en egen i Python, det skulle tydligen vara väldigt enkelt och inte ta så mycket kod.

Är lite sugen på att prova själv, man lär sej ju alltid nånting, och undrar om någon här har erfarenhet av det? Det handlar egentligen inte om någon klient i den bemärkelse att den ska kunna prata eller så, utan bara sitta i en kanal o logga allting. Hur är pyhon? Är det svårt/enkelt? :q

spangoMedlem sedan juni 20008 205 inlägg
#2

Python är dödsenkelt! Dessutom är det ett snyggt och allmänt mysigt språk som alla borde kunna. Hur IRC-protokollet är funtat är jag inte bekant med, men det kan inte vara så svårt.

GeinMedlem sedan sep. 20005 700 inlägg
#3

Det säger du? Blir riktigt nyfiken nu, får nog ta o ge mej in i det där så fort jag har lite tid över! Någon som har en bra sida om Python? Gärna om nätverksprogrammering och varför inte mot irc-nät också om det finns. Tankar, idéer och länkar till webbsidor om detta uppskattas! :)

psMedlem sedan juni 2000841 inlägg
#4

Hålle rmed spango mycket lätt och framförallt trevligt/kul språk att koda...
Du får hjälp att indentera rätt om inte annat ;)

http://www.python.org/
http://www.python.org/doc/current/tut/tut.html

spangoMedlem sedan juni 20008 205 inlägg
#5

Om IRC (efter en 20-sekunders googling ;) ): http://www.irchelp.org/irchelp/rfc/

GeinMedlem sedan sep. 20005 700 inlägg
#6

Den där RFC hade jag redan fått tag i, tack ändå! :)

GeinMedlem sedan sep. 20005 700 inlägg
#7

Jag måste få verifiera att python va ett alldeles underbart språk! Mitt lilla program som sitter i en irc-kanal o loggar blev precis funktionsdugligt :) Ska bearbeta programmet en hel del och lägga till massa features.. e ju inte så snyggt skrivet just nu.. men det funkar klocka! :e

spangoMedlem sedan juni 20008 205 inlägg
#8

Coolt! Får man ta en flukt på den?

GeinMedlem sedan sep. 20005 700 inlägg
#9

självklart, som sagt, e ju inte så optimalt skrivet men:
som det ser ut just nu, håller på att bearbeta det hela tiden.

#! /bin/python
import socket, time, string, sys

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('se.quakenet.org', 6667))

for arg in sys.argv:
	arg + "\n"
	
errormsg = ""
print "\nSending USER and NICK\n"
user = "USER knivbot hostname server.org :Knivbot\n"
sock.send(user)
nick = "NICK knivbot\n"
sock.send(nick)
while 1:
	data = sock.recv(1024)
	if not data: break
	##print data
	lines = string.split(data, "\n")
	
	for line in lines:
		##print line
		parts = string.split(line, ":")

		if len(parts) < 1: continue

		if parts[0] == "ERROR":
			errmsg = parts[1]
			
		if len(parts) > 2:
			if parts[2][:12] == "End of /MOTD":
				print "Successfully registered @ qnet"
				print "Joining #knivsta"
				sock.send("JOIN #knivsta\n")
				fileobj = open("public_html/logs/#knivsta.log", "a")
				fileobj.write("\nSession Start: " + time.strftime("%a, %d %b %Y %H:%M:%S") + ", #knivsta\n")
				fileobj.flush()
				fileobj.close
			else:
				msgsplit = string.split(parts[1], " ")
				if len(msgsplit) == 4 and msgsplit[1] == "PRIVMSG":
					msgSaveTo = msgsplit[2]
					msgfrom = string.split(msgsplit[0], "!")
					msgFromNick = msgfrom[0]
					msgFromAddr = msgfrom[1]
					i = 0
					msgText = ""
					del parts[0:2]
					msgText = string.join(parts, ":")
					print "(" + msgSaveTo + ")[" + time.strftime("%H:%M:%S") + "]<" + msgFromNick + "> " + msgText
					
					fileobj = open("public_html/logs/" + msgSaveTo + ".log", "a")
					fileobj.write("[" + time.strftime("%H:%M:%S") + "]<" + msgFromNick + "> " + msgText +"\n")
					fileobj.flush()
					fileobj.close 
				
				elif len(msgsplit) == 3 and msgsplit[1] == "NICK":
					msgSaveTo = "All"
					msgfrom = string.split(msgsplit[0], "!")
					msgFromNick = msgfrom[0]
					msgFromAddr = msgfrom[1]
					msgNewNick = parts[2]
					print "[" + time.strftime("%H:%M:%S") + "]*** " + msgFromNick + " is now known as " + msgNewNick
					
			
		if parts[0] == "PING ":  ## Ping event
		    sock.send("PONG :" + parts[1] + "\n")
		    ##print "PONG :" + parts[1] + "\n"
		    
sock.close()

print "Error occured:\n"
print errmsg
spangoMedlem sedan juni 20008 205 inlägg
#10

Snarrigt :)

GeinMedlem sedan sep. 20005 700 inlägg
#11

spango skrev:

Snarrigt :)

vilket betyder? ;)

spangoMedlem sedan juni 20008 205 inlägg
#12

Asså... typ... "najs". Du vet. Vanlig svenska som man talar den i civilisationens hjärta (Nacka/Älta). :D

GeinMedlem sedan sep. 20005 700 inlägg
#13

man lär sej så länge man lever :)

135 ms totalt · 3 externa anrop · v20260731065814-full.c2d75422
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)