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