1 | #!/usr/bin/env python
|
---|
2 | #
|
---|
3 | # Hack for Telex <> IRC bridge
|
---|
4 | #
|
---|
5 | # Reinders & Rick
|
---|
6 | import sys
|
---|
7 | import socket
|
---|
8 | import string
|
---|
9 | import serial
|
---|
10 | import time
|
---|
11 |
|
---|
12 | telex = serial.Serial(port='/dev/ttyU0', baudrate='9600',timeout=1)
|
---|
13 |
|
---|
14 | HOST="irc.freenode.net"
|
---|
15 | PORT=6667
|
---|
16 | NICK="telex106"
|
---|
17 | IDENT="telex106"
|
---|
18 | REALNAME="Telex Machine at OCC2011"
|
---|
19 | CHANNEL='#occ'
|
---|
20 |
|
---|
21 | s=socket.socket( )
|
---|
22 | s.settimeout(1)
|
---|
23 | s.connect((HOST, PORT))
|
---|
24 | s.send("NICK %s\r\n" % NICK)
|
---|
25 | s.send("USER %s %s bla :%s\r\n" % (IDENT, HOST, REALNAME))
|
---|
26 | s.send("JOIN %s\r\n" % CHANNEL)
|
---|
27 |
|
---|
28 | # Get rid of the annoying spam
|
---|
29 | show_output = False
|
---|
30 | telex_buffer = ''
|
---|
31 | irc_buffer = ''
|
---|
32 |
|
---|
33 | # Infinite Loop
|
---|
34 | while True:
|
---|
35 | irc_buffer = ''
|
---|
36 | try:
|
---|
37 | # Try reading IRC channel activity
|
---|
38 | while True:
|
---|
39 | c = s.recv(1)
|
---|
40 | irc_buffer = irc_buffer + c
|
---|
41 | if c == '\n':
|
---|
42 | break
|
---|
43 | if(irc_buffer[0:4]=="PING"):
|
---|
44 | s.send("PONG %s\r\n" % irc_buffer[1])
|
---|
45 | # Sanitizy and send to tty
|
---|
46 | if ':End of /NAMES list.' in irc_buffer:
|
---|
47 | show_output = True
|
---|
48 |
|
---|
49 | parts = irc_buffer.split()
|
---|
50 | line = parts[0].split('!')[0].lstrip(':') + " = " + ' '.join(parts[3:]).lstrip(':') + "\r\n"
|
---|
51 | print "IRC Received: " + irc_buffer,
|
---|
52 | if 'PRIVMSG' in irc_buffer and show_output:
|
---|
53 | if "BELL" in irc_buffer:
|
---|
54 | telex.write(chr(7))
|
---|
55 | telex.write("\x08\x08"+line)
|
---|
56 | except socket.timeout:
|
---|
57 | # Try reading from Serial and spit to IRC
|
---|
58 | while True:
|
---|
59 | c = telex.read(1)
|
---|
60 | # Need input to process
|
---|
61 | if not c:
|
---|
62 | break
|
---|
63 | print "Telex Input Character: '%s' (%s)" % (c,ord(c))
|
---|
64 | telex_buffer = telex_buffer + c
|
---|
65 | # Get a full line.
|
---|
66 | if c == '\n':
|
---|
67 | # First connect, make machine alive
|
---|
68 | if 'Telex Retrointerface 0.2' in telex_buffer:
|
---|
69 | print "Bringing machine alive"
|
---|
70 | telex.write(str(0x08))
|
---|
71 | else:
|
---|
72 | s.send("PRIVMSG %s : %s\r\n" % (CHANNEL, telex_buffer))
|
---|
73 | print "sending:"+ "PRIVMSG %s : %s\r\n" % (CHANNEL, telex_buffer)
|
---|
74 | telex_buffer = ''
|
---|
75 | continue
|
---|