Newer
Older
#!/usr/bin/env python
# SPDX-License-Identifier: GPL-3.0-or-later
# usage: $ block-mumble mumble.example.com:64738 mumble.example.org
# depends: python
from struct import pack, unpack
import socket, sys, time, datetime
servers = [(*x.split(':'), 64738)[:2] for x in sys.argv[1:]]
servers = [(host, int(port)) for (host, port) in servers]
if not servers:
exit(1)
msg = '🎧︎'
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.settimeout(1)
for host, port in servers:
msg += f' {host}:' if len(servers) > 1 else ' '
try:
# https://wiki.mumble.info/wiki/Protocol
buf = pack('>iQ', 0, 0)
s.sendto(buf, (host, port))
data, _ = s.recvfrom(1024)
data = unpack(">bbbbQiii", data)
msg += f'{data[5]}/{data[6]}'
except socket.gaierror:
msg += '<error>unknown<error>'
except socket.timeout:
msg += '<warning>?/?<warning>'
print(msg)