Skip to content
Snippets Groups Projects
mumble 984 B
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)