add mumble.py
This commit is contained in:
parent
4ba99e57b7
commit
82bee70ca0
1 changed files with 33 additions and 0 deletions
33
modules/mumble.py
Normal file
33
modules/mumble.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
import datetime, socket, struct
|
||||
from src import ModuleManager, utils
|
||||
|
||||
DEFAULT_PORT = 64738
|
||||
|
||||
class Module(ModuleManager.BaseModule):
|
||||
@utils.hook("received.command.mumble")
|
||||
@utils.kwarg("min_args", 1)
|
||||
@utils.kwarg("help", "Get user and bandwidth stats for a mumble server")
|
||||
@utils.kwarg("usage", "<server>[:<port>]")
|
||||
def mumble(self, event):
|
||||
server, _, port = event["args_split"][0].partition(":")
|
||||
if port:
|
||||
if not port.isdigit():
|
||||
raise utils.EventError("Port must be numeric")
|
||||
port = int(port)
|
||||
else:
|
||||
port = DEFAULT_PORT
|
||||
|
||||
ping_packet = struct.pack(">iQ", 0, datetime.datetime.now().microsecond)
|
||||
s = socket.socket(type=socket.SOCK_DGRAM)
|
||||
s.sendto(ping_packet, (server, port))
|
||||
|
||||
pong_packet = s.recv(24)
|
||||
pong = struct.unpack(">bbbbQiii", pong_packet)
|
||||
|
||||
ping = (datetime.datetime.now().microsecond - pong[4])/1000
|
||||
users = pong[5]
|
||||
max_users = pong[6]
|
||||
bandwidth = pong[7]/1000 # kbit/s
|
||||
|
||||
event["stdout"].write("%s: %d/%d users, %.1fms ping, %dkbit/s bandwidth"
|
||||
% (server, users, max_users, ping, bandwidth))
|
Loading…
Reference in a new issue