| author | Tero Marttila <terom@paivola.fi> |
| Fri, 11 Jan 2013 22:41:26 +0200 | |
| changeset 87 | 70edcd13a447 |
| parent 81 | 448ed86d0510 |
| child 92 | 715ca17d1260 |
| permissions | -rwxr-xr-x |
|
81
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
#!/usr/bin/python |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
from twisted.internet import reactor, endpoints, defer |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
from twisted.python import usage, log |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
import urlparse |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
import pvl.irker.irk |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
import pvl.irker.irc |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
class Options (usage.Options) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
optParameters = [ |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
[ 'irc-nickname', 'n', pvl.irker.irc.IRCFactory.NICKNAME, "Default IRC nickname" ], |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
] |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
def __init__ (self) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
usage.Options.__init__(self) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
self.listen = [] |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
self.connect = [] |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
self.target = [] |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
self.privmsg = [] |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
def opt_listen_tcp (self, listen) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
Twisted endpoint. |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
self.listen.append((endpoints.TCP4ServerEndpoint, (int(listen), ))) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
def opt_connect (self, connect) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
Connect to given target. |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
self.connect.append(urlparse.urlparse(connect)) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
def opt_target (self, target) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
Join given target. |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
self.target.append(urlparse.urlparse(target)) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
def opt_privmsg (self, privmsg) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
Send message to targets |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
self.privmsg.append(privmsg) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
@defer.inlineCallbacks |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
def connect (irc, connect) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
Connect to given urls. |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
try : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
clients = yield defer.gatherResults([irc.client(url) for url in connect]) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
except Exception as ex : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
log.err(ex) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
return |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
for client in clients : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
log.msg('--connect', client)
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
@defer.inlineCallbacks |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
def target (irc, target, privmsg) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
Connect to given urls. |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
""" |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
try : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
targets = yield defer.gatherResults([irc.target(url) for url in target]) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
except Exception as ex : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
log.err(ex) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
return |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
for target in targets : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
log.msg('--target', target)
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
83 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
target.privmsg(*privmsg) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
def main (args) : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
options = Options() |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
options.parseOptions(args) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
# logging |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
log.startLogging(sys.stderr, setStdout=False) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
# connect |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
irc = pvl.irker.irc.IRCFactory() |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
connect(irc, options.connect) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
target(irc, options.target, options.privmsg) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
# listen |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
irk = pvl.irker.irk.IrkFactory(irc) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
for endpoint, args in options.listen : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
endpoint = endpoint(reactor, *args) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
log.msg("listen:", endpoint)
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
endpoint.listen(irk) |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
# go |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
111 |
reactor.run() |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
112 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
return 0 |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
|
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
if __name__ == '__main__' : |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
import sys |
|
448ed86d0510
pvl.irker: irker reimplementation in Twisted
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
sys.exit(main(sys.argv[1:])) |