212 lines
6.9 KiB
Python
212 lines
6.9 KiB
Python
import tpt
|
|
import sys
|
|
import time
|
|
import socket
|
|
import tpt_console
|
|
|
|
HOST="irc.freenode.net"
|
|
PORT=6667
|
|
name=tpt.get_name()
|
|
print "name is %s"%repr(name)
|
|
if(name==""):
|
|
#fuck. abort?
|
|
raise SystemExit("please log in!")
|
|
|
|
def raw(s,st):
|
|
s.send("%s\n\r"%st)
|
|
|
|
def init():
|
|
global frame,s,rec,readbuffer,namelist,typing,typed,IDENT,NICK
|
|
global REALNAME,CHANNEL
|
|
frame=0
|
|
s=None
|
|
rec=([("",0,0,0,255)]*20)+[("connected.",255,0,0,128)]
|
|
readbuffer=""
|
|
namelist=[]
|
|
typing=False
|
|
typed=""
|
|
NICK=name+"[tpt]"
|
|
IDENT=name+"[tpt]"
|
|
REALNAME=name
|
|
CHANNEL="#powder"
|
|
readbuffer=""
|
|
|
|
def exit():
|
|
raw(s,"QUIT")
|
|
s.close()
|
|
|
|
def console_handle(txt):
|
|
"""
|
|
:doxin!~lieuwe@unaffiliated/lieuwe JOIN :#foobar7
|
|
:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG #foobar7 :there
|
|
:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG #foobar7 :ACTION is fat
|
|
"""
|
|
lst=txt.split(" ")
|
|
if(lst[0]=="/me"):
|
|
rec.append(("%s %s"%(NICK,txt[4:]),255,0,255,128))
|
|
raw(s,"PRIVMSG %s :\x01ACTION %s\x01"%(CHANNEL,txt[4:]))
|
|
tpt.console_close()
|
|
else:
|
|
rec.append(("<%s>: %s"%(NICK,txt),255,255,0,128))
|
|
raw(s,"PRIVMSG %s :%s"%(CHANNEL,txt))
|
|
tpt.console_close()
|
|
|
|
def key(keyy) :
|
|
try:
|
|
a=key.pmod
|
|
except:
|
|
key.pmod=(False,False,False)
|
|
global typing,typed
|
|
#print "got %s"%repr(keyy)
|
|
ctrl1,ctrl2,alt1,alt2,shift1,shift2=tpt.get_modifier()
|
|
mod=(ctrl1 or ctrl2,alt1 or alt2,shift1 or shift2)
|
|
skip=False
|
|
if(not key.pmod[0] and mod[0]):
|
|
skip=True
|
|
if(not key.pmod[1] and mod[1]):
|
|
skip=True
|
|
if(not key.pmod[2] and mod[2]):
|
|
skip=True
|
|
key.pmod=mod
|
|
if(skip):
|
|
return
|
|
|
|
if(typing and ord(keyy)>=32 and ord(keyy)<=126):
|
|
if(mod[2]):
|
|
typed+=keyy.upper()#needs to be fixed for special chars
|
|
else:
|
|
typed+=keyy
|
|
if(keyy=="\x1b" and typing):
|
|
typing=False
|
|
typed=""
|
|
tpt.shortcuts_enable()
|
|
if(keyy=="t" and typing==False):
|
|
typing=True
|
|
tpt.shortcuts_disable()
|
|
if(keyy=="\r" and typing==True):
|
|
console_handle(typed)
|
|
typed=""
|
|
typing=False
|
|
tpt.shortcuts_enable()
|
|
#got '\t'
|
|
#got '\x08'
|
|
if(keyy=="\x08"):
|
|
typed=typed[:-1]
|
|
#if(keyy=="\t"):
|
|
# startswith=
|
|
|
|
|
|
def step():
|
|
global frame,s,rec,readbuffer,namelist
|
|
frame+=1
|
|
if(frame==1):
|
|
tpt.console_close()
|
|
#lets see if we can seize the console:
|
|
tpt_console._handle=console_handle
|
|
if(frame==2):
|
|
tpt.draw_fillrect(0,0,612,384,0,0,0,128)
|
|
tpt.draw_text(32,32,"opening connection\nhold on to your pants.",255,255,255)
|
|
if(frame==3):
|
|
s=socket.socket()
|
|
s.settimeout(5)
|
|
s.connect((HOST, PORT))
|
|
raw(s,"NICK %s" % NICK)
|
|
raw(s,"USER %s %s bla :%s" % (IDENT, HOST, REALNAME))
|
|
s.settimeout(0)
|
|
if(frame==120):
|
|
raw(s,"JOIN %s"%CHANNEL)
|
|
rec.append(("joined",255,0,0,255))
|
|
if(frame>=3):
|
|
try:
|
|
readbuffer=readbuffer+s.recv(1024)
|
|
except IOError:
|
|
pass
|
|
else:
|
|
temp=readbuffer.split("\n")
|
|
readbuffer=temp.pop()
|
|
|
|
for line in temp:
|
|
line=line.strip()
|
|
#print repr(line)
|
|
line=line.split()
|
|
if(line[1]=="PRIVMSG"):
|
|
#:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG doxin[tpt] :some shit
|
|
frm=line[0][1:].partition("!")[0]
|
|
msg=' '.join(line[3:])[1:]
|
|
tmp=["<",frm,"> ",msg]
|
|
if(msg[0]=="\x01" and msg[-1]=="\x01"):
|
|
msg=msg[8:-1]#ACTION
|
|
tmp=[frm," ",msg]
|
|
if(line[2]==NICK):
|
|
rec.append((''.join(tmp),255,255,255,255))
|
|
else:
|
|
rec.append((''.join(tmp),255,255,255,128))
|
|
elif(line[0]=="PING"):
|
|
raw(s,"PONG %s"%line[1])
|
|
elif(line[1]=="353"):
|
|
#:leguin.freenode.net 353 doxin[tpt] = #powder :doxin[tpt] ZebraineZ _-_Rafael_-_ doxin bildramer BlueMaxima TheRazorsEDGE raj-k webb|AP where @devast8a Merbo FrozenKnight EppyMoon EvilJStoker Mortvert SpitfireWP @frankbro Ares
|
|
names=line[4:]
|
|
namelist=[]
|
|
for item in names:
|
|
item=item.strip()
|
|
r=255
|
|
g=255
|
|
b=255
|
|
if(item[0]==":"):
|
|
item=item[1:]
|
|
elif(item[0]=="@"):
|
|
g=0
|
|
b=0
|
|
namelist.append((item,r,g,b,128))
|
|
elif(line[1]=="JOIN"):
|
|
#':savask!~savask@95-190-25-195-xdsl-dynamic.kuzbass.net JOIN :#powder'
|
|
tmp=line[0][1:].partition("!")[0]
|
|
namelist.append((tmp,255,255,255,128))
|
|
rec.append(("%s joined"%name,0,255,0,128))
|
|
elif(line[1]=="PART"):
|
|
#':savask!~savask@95-190-25-195-xdsl-dynamic.kuzbass.net PART #powder :"Leaving."'
|
|
tmp=line[0][1:].partition("!")[0]
|
|
msg=' '.join(line[2:])[1:]
|
|
rem=None
|
|
for item in namelist:
|
|
if(item[0]==tmp or item[0]=="@"+tmp):
|
|
rem=item
|
|
rec.append(("%s parted: %s"%(name,msg),0,255,0,128))
|
|
if(rem!=None):
|
|
namelist.remove(rem)
|
|
elif(line[1]=="NICK"):
|
|
#:doxin!~lieuwe@unaffiliated/lieuwe NICK :d0x1n
|
|
tmp=line[0][1:].partition("!")[0]
|
|
rem=None
|
|
for item in namelist:
|
|
if(item[0]==tmp or item[0]=="@"+tmp):
|
|
rem=item
|
|
rec.append(("%s is now known as %s"%(name,line[2]),0,255,0,128))
|
|
if(rem!=None):
|
|
if(rem[0][0]=="@"):
|
|
namelist.append(("@"+line[2][1:],rem[1],rem[2],rem[3],rem[4]))
|
|
else:
|
|
namelist.append((line[2][1:],rem[1],rem[2],rem[3],rem[4]))
|
|
namelist.remove(rem)
|
|
|
|
|
|
|
|
|
|
yy=32
|
|
if(len(rec)>20):
|
|
rec=rec[-20:]
|
|
for item in rec:
|
|
tpt.draw_text(8,yy,item[0],item[1],item[2],item[3],item[4])
|
|
yy+=8
|
|
if(typing):
|
|
if(frame%30<15):
|
|
tpt.draw_text(8,yy,typed+"|",255,255,255,255)
|
|
else:
|
|
tpt.draw_text(8,yy,typed,255,255,255,255)
|
|
#print namelist
|
|
yy=32
|
|
for item in namelist:
|
|
tpt.draw_text(604-tpt.get_width(item[0]),yy,item[0],item[1],item[2],item[3],item[4])
|
|
yy+=8
|
|
|