aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/mumble.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/modules/mumble.py b/modules/mumble.py
new file mode 100644
index 00000000..ce3638ca
--- /dev/null
+++ b/modules/mumble.py
@@ -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))