diff --git a/mumble/server.py b/mumble/server.py index 032830a..84dfd0e 100644 --- a/mumble/server.py +++ b/mumble/server.py @@ -1,3 +1,4 @@ +import time from .user import User from .channel import Channel @@ -87,7 +88,13 @@ class Server(object): return User(self, user) def kick_user(self, session, reason=''): - self.__server.kickUser(session, reason) + return self.__server.kickUser(session, reason) + + def send_user_message(self, session_id, text): + return self.__server.sendMessage(session_id, text) + + def set_user_state(self, state): + return self.__server.setState(state) # Bans @@ -97,6 +104,18 @@ class Server(object): def set_bans(self, bans): self.__server.setBans(bans) + def add_ban(self, address, reason='', bits=128, duration=360): + from Murmur import Ban + bans = self.get_bans() + bans.append(Ban( + reason=reason, + bits=bits, + duration=duration, + start=int(time.time()), + address=address, + )) + self.set_bans(bans) + # Hooks def add_hook(self, cls): diff --git a/mumble/user.py b/mumble/user.py index 106ae6a..7547c56 100644 --- a/mumble/user.py +++ b/mumble/user.py @@ -6,17 +6,128 @@ class User(object): self.__server = server self.__user = user + @property + def session(self): + return self.__user.session + + @property + def id(self): + return self.__user.userid + + @property + def muted(self): + return bool(self.__user.mute) + + @property + def deafened(self): + return bool(self.__user.deaf) + + @property + def suppress(self): + return bool(self.__user.suppress) + + @property + def priority_speaker(self): + return bool(self.__user.prioritySpeaker) + + @property + def self_muted(self): + return bool(self.__user.selfMute) + + @property + def self_deafened(self): + return bool(self.__user.selfDeaf) + + @property + def channel(self): + return self.__server.get_channel(self.__user.channel) + + @property + def name(self): + return self.__user.name + + @property + def online_seconds(self): + return self.__user.onlinesecs + + @property + def bytes_per_second(self): + return self.__user.bytespersec + + @property + def client_version(self): + return self.__user.osversion + + @property + def client_release(self): + return self.__user.release + + @property + def plugin_identity(self): + return self.__user.identity + + @property + def os(self): + return self.__user.os + + @property + def os_version(self): + return self.__user.osversion + + @property + def plugin_context(self): + return self.__user.context + + @property + def comment(self): + return self.__user.comment + + @property + def ip_address(self): + return self.__user.address + + @property + def tcp_only(self): + return bool(self.__user.tcponly) + + @property + def idle_seconds(self): + return self.__user.idlesecs + + def update(self, **kwargs): + for key, value in kwargs.items(): + setattr(self.__user, key, value) + self.__server.set_user_state(self.__user) + + def send_message(self, text): + return self.__server.send_user_message(self.__user.session, text) + + def mute(self): + return self.update(mute=1) + + def deafen(self): + return self.update(deaf=1) + + def unmute(self): + return self.update(mute=0) + + def undeafen(self): + return self.update(deaf=0) + + def priority_speaker(self): + return self.update(prioritySpeaker=1) + + def remove_priority_speaker(self): + return self.update(prioritySpeaker=0) + + def move(self, channel): + return self.update(channel=channel.id) + + def kick(self, reason=''): + return self.__server.kick_user(self.__user.session, reason) + def ban(self, reason='', bits=128, duration=360): - from Murmur import Ban - bans = self.__server.get_bans() - bans.append(Ban( - reason=reason, - bits=bits, - duration=duration, - start=int(time.time()), - address=self.__user.address, - )) - self.__server.set_bans(bans) + return self.__server.add_ban(self.__user.address, reason, bits, duration) def serialize(self): return {