]> git.treefish.org Git - mtxbot.git/blob - src/mtxbot-post.py
3e97ef2043f68675abe6929881002f13f0afab5f
[mtxbot.git] / src / mtxbot-post.py
1 #!/usr/bin/env python3
2
3 import base64
4 import errno
5 import os
6 import posix
7 import stat
8 import sys
9 import time
10
11 assert sys.version_info >= (3, 5)
12
13 if len(sys.argv) != 2:
14     print("Usage: %s <channel>" % sys.argv[0])
15     sys.exit(1)
16
17 fifo_dir = os.getenv('MTXBOT_FIFO_DIR', '/run/mtxbot')
18 fifo_path = "%s/%s" % (fifo_dir, sys.argv[1])
19
20 if not os.path.isdir(fifo_dir):
21     print("Fifo directory %s does not exist!" % fifo_dir, file=sys.stderr)
22     sys.exit(2)
23
24 if not ( os.path.exists(fifo_path) and
25          stat.S_ISFIFO(os.stat(fifo_path).st_mode) ):
26     print("Channel %s does not exist!" % sys.argv[1], file=sys.stderr)
27     sys.exit(3)
28
29 inBytes = sys.stdin.read().encode("UTF-8")
30 inB64 = base64.b64encode(inBytes)
31
32 for i in range(0, 10):
33     fifo = -1
34     try:
35         fifo = posix.open(fifo_path, posix.O_WRONLY | posix.O_NONBLOCK)
36         posix.write(fifo, inB64)
37         sys.exit(0)
38     except OSError as e:
39         if e.errno == errno.ENXIO:
40             time.sleep(1.0)
41     finally:
42         if fifo != -1:
43             posix.close(fifo)
44
45 print("Error posting to channel %s!" % sys.argv[1], file=sys.stderr)
46 sys.exit(4)