def silence(self, seconds=None, reason="", author=999): """ Silences this user (db, packet and token) :param seconds: silence length in seconds. If None, get it from db. Default: None :param reason: silence reason. Default: empty string :param author: userID of who has silenced the user. Default: 999 (Your Bot Name lol) :return: """ if seconds is None: # Get silence expire from db if needed seconds = max( 0, userUtils.getSilenceEnd(self.userID) - int(time.time())) else: # Silence in db and token userUtils.silence(self.userID, seconds, reason, author) # Silence token self.silenceEndTime = int(time.time()) + seconds # Send silence packet to user self.enqueue(serverPackets.silenceEndTime(seconds)) # Send silenced packet to everyone else glob.streams.broadcast("main", serverPackets.userSilenced(self.userID))
def silence(fro, chan, message): message = [x.lower() for x in message] target = message[0] amount = message[1] unit = message[2] reason = ' '.join(message[3:]).strip() if not reason: return "Please provide a valid reason." if not amount.isdigit(): return "The amount must be a number." # Get target user ID targetUserID = userUtils.getIDSafe(target) userID = userUtils.getID(fro) # Make sure the user exists if not targetUserID: return "{}: user not found".format(target) # Calculate silence seconds if unit == 's': silenceTime = int(amount) elif unit == 'm': silenceTime = int(amount) * 60 elif unit == 'h': silenceTime = int(amount) * 3600 elif unit == 'd': silenceTime = int(amount) * 86400 else: return "Invalid time unit (s/m/h/d)." # Max silence time is 7 days if silenceTime > 604800: return "Invalid silence time. Max silence time is 7 days." # Send silence packet to target if he's connected targetToken = glob.tokens.getTokenFromUsername( userUtils.safeUsername(target), safe=True) if targetToken is not None: # user online, silence both in db and with packet targetToken.silence(silenceTime, reason, userID) else: # User offline, silence user only in db userUtils.silence(targetUserID, silenceTime, reason, userID) # Log message msg = "{} has been silenced for the following reason: {}".format( target, reason) return msg
def removeSilence(fro, chan, message): # Get parameters for i in message: i = i.lower() target = message[0] # Make sure the user exists targetUserID = userUtils.getIDSafe(target) userID = userUtils.getID(fro) if not targetUserID: return "{}: user not found".format(target) # Send new silence end packet to user if he's online targetToken = glob.tokens.getTokenFromUsername(userUtils.safeUsername(target), safe=True) if targetToken is not None: # User online, remove silence both in db and with packet targetToken.silence(0, "", userID) else: # user offline, remove islene ofnlt from db userUtils.silence(targetUserID, 0, "", userID) return "{}'s silence reset".format(target)