An attempt at making irk clean up after itself.
[irker.git] / irk
1 #!/usr/bin/env python
2 # Illustrates how to test irkerd.
3 #
4 # First argument must be a channel URL. If it does not begin with "irc", 
5 # the base URL for freenode is prepended.
6 #
7 # -k option kills irkerd if irk hard to spawn one.
8 #
9 # Second argument must be a payload string.  Standard C-style escapes 
10 # such as \n and \t are decoded.
11 #
12 import json
13 import socket
14 import sys
15 import fileinput
16 import subprocess
17 import time
18 import os
19 import getopt
20
21 def send(target, message):
22     data = {"to": target, "privmsg" : message}
23     #print(json.dumps(data))
24     try:
25         s = socket.create_connection(("localhost", 6659))
26         s.sendall(json.dumps(data))
27     except socket.error, e:
28         sys.stderr.write("irkerd: write to server failed: %r\n" % e)
29
30 if __name__ == "__main__":
31     (options, arguments) = getopt.getopt(sys.argv[1:], "k", )
32     killafter = False
33     for (opt, val) in options:
34         if opt == '-k':
35             killafter = True
36
37     # Spawn an irkerd instance if none is running.
38     try:
39         # irkerd might already be running
40         s = socket.create_connection(("localhost", 6659))
41         irkerd = None
42     except:
43         # If it isn't, spawn an instance
44         print "Spawning an irker instance..."
45         irkerd = subprocess.Popen("irkerd", shell=True)
46         time.sleep(0.5)
47
48     target = arguments[0]
49     if not "irc:" in target:
50         target = "irc://chat.freenode.net/{0}".format(target)
51     message = " ".join(arguments[1:])
52     message = message.decode('string_escape')
53     if message == '-':
54         for line in fileinput.input('-'):
55             send(target, line.rstrip('\n'))
56     else:
57         send(target, message)
58     if killafter:
59         if irkerd:
60             irkerd.terminate()
61             irkerd.wait()
62             print "...terminated."