def updateChannel(self, schid, ownID=0, ownCID=0): if not ownID: (err, ownID) = ts3lib.getClientID(schid) if not ownCID: (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID) (err, cname) = ts3lib.getChannelVariable( schid, ownCID, ts3defines.ChannelProperties.CHANNEL_NAME) name = re.sub(r'^\[[crl\*]spacer(.*)?\]', '', cname, flags=re.IGNORECASE | re.UNICODE) from unidecode import unidecode self.activity["state"] = unidecode(name) clients = len(ts3lib.getChannelClientList(schid, ownCID)[1]) # (err, clients) = ts3lib.getChannelVariable(schid, ts3defines.ChannelPropertiesRare.) (err, cmax) = ts3lib.getChannelVariable( schid, ownCID, ts3defines.ChannelProperties.CHANNEL_MAXCLIENTS) if cmax >= clients: if PluginHost.cfg.getboolean("general", "verbose"): print("cmax", cmax, ">=", "clients", clients) self.activity["party"]["size"] = [clients, cmax] else: (err, smax) = ts3lib.getServerVariable( schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_MAXCLIENTS) # (err, clients) = ts3lib.getServerVariable(schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_CLIENTS_ONLINE) # clients = len(ts3lib.getClientList(schid)[1]) self.activity["party"] = {"size": [clients, smax]} (err, ip) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_IP) (err, port) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_PORT) self.activity["secrets"] = { "join": "ts3server://{}?port={}&cid={}".format(ip, port, ownCID) } self.update = True
def onHotkeyOrCommandEvent(self, keyword, schid=0): if not schid: schid = ts3lib.getCurrentServerConnectionHandlerID() # (err, status) = ts3lib.getConnectionStatus(schid) # if status != ts3defines.ConnectStatus.STATUS_CONNECTION_ESTABLISHED: return arguments = [] if keyword == "yatqa_start": pass elif keyword == "yatqa_connect_current": (err, ownID) = ts3lib.getClientID(schid) (err, ip) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_IP) (err, port) = ts3lib.getServerVariable( schid, ts3defines.VirtualServerPropertiesRare.VIRTUALSERVER_PORT) title = ("{} > {}".format(self.name, ip)) qport = inputInt(title, "Query Port:", 10011, 1, 65535) name = inputBox(title, "Query Login Name:", "serveradmin") pw = inputBox( title, "Query Login Password:"******"") args = ["-c", ip, qport] if name and pw: args.extend([name, pw, port]) else: args.append(port) self.yatqa.setArguments( args) # IP Query_Port [User Pass] [Voice_Port] elif keyword == "yatqa_stats_current": (err, ownID) = ts3lib.getClientID(schid) (err, ip) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_IP) (err, port) = ts3lib.getServerVariable( schid, ts3defines.VirtualServerPropertiesRare.VIRTUALSERVER_PORT) self.yatqa.setArguments(["-s", ip, port]) # IP elif keyword == "yatqa_blacklist_current": (err, ownID) = ts3lib.getClientID(schid) (err, ip) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_IP) self.yatqa.setArguments(["-b", ip]) # IP elif keyword == "yatqa_lookup_dns": (err, host, port, pw) = ts3lib.getServerConnectInfo(schid) self.yatqa.setArguments(["-d", host]) elif keyword == "yatqa_browse_icons": (err, suid) = ts3lib.getServerVariable( schid, ts3defines.VirtualServerProperties. VIRTUALSERVER_UNIQUE_IDENTIFIER) self.yatqa.setArguments(["-i", suid]) elif keyword == "yatqa_permission_editor": self.yatqa.setArguments(["-p"]) elif keyword == "yatqa_connect_default": self.yatqa.setArguments(["-a"]) else: return False if PluginHost.cfg.getboolean("general", "verbose"): print(self.bin, self.yatqa.arguments()) self.yatqa.start() return True
def getInfo(self, schid, selectedItemID, lists): i = [] for lst in lists: for name, var in getItems(lst): (name, var) = self.preProcessVar(schid, selectedItemID, name, var, lst) if var is None: continue if lst in [ VirtualServerProperties, VirtualServerPropertiesRare ]: (err, var) = ts3.getServerVariable(schid, var) elif lst in [ChannelProperties, ChannelPropertiesRare]: (err, var) = ts3.getChannelVariable(schid, selectedItemID, var) elif lst in [ConnectionProperties, ConnectionPropertiesRare]: (err, var) = ts3.getConnectionVariable(schid, selectedItemID, var) else: (err, var) = ts3.getClientVariable(schid, selectedItemID, var) if err != ERROR_ok or var == "" or var == 0: continue if isinstance(var, map): var = ", ".join(map(str, var)) if name in ["VIRTUALSERVER_IP", "CONNECTION_CLIENT_IP"]: i.extend(self.ipInfo(var)) (name, var) = self.postProcessVar(schid, selectedItemID, name, var, lst) i.append('{0}: {1}'.format(name, var)) return i
def setup(self, script, schid, clid, uid, name, ip, mytsid, hwid, servertype): self.setWindowTitle("Ban \"{}\" ({})".format(name, clid)) self.clid = clid if not ip: (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) url = script.cfg.get("general", "ipapi") if url: self.nwmc_ip = QNetworkAccessManager() self.nwmc_ip.connect("finished(QNetworkReply*)", self.checkIP) self.countries = CountryFlags() self.countries.open() self.disableISP() self.grp_ip.setChecked(script.cfg.getboolean("last", "ip")) if ip != "None": self.txt_ip.setText(ip) self.on_txt_ip_textChanged(ip) self.grp_name.setChecked(script.cfg.getboolean("last", "name")) self.txt_name.setText(name) self.on_txt_name_textChanged(name) self.grp_uid.setChecked(script.cfg.getboolean("last", "uid")) self.txt_uid.setText(uid) self.on_txt_uid_textChanged(uid) self.grp_mytsid.setChecked(script.cfg.getboolean("last", "mytsid")) self.txt_mytsid.setText(mytsid) self.on_txt_mytsid_textChanged(mytsid) if servertype == ServerInstanceType.TEASPEAK: self.grp_hwid.setChecked(script.cfg.getboolean("last", "hwid")) self.txt_hwid.setText(hwid) self.on_txt_hwid_textChanged(hwid) else: self.grp_hwid.setVisible(False) self.setDuration(script.cfg.getint("last", "duration"))
def onConnectStatusChangeEvent(self, schid, newStatus, errorNumber): if not self.autoBlackListCheck: return if newStatus != ts3defines.ConnectStatus.STATUS_CONNECTION_ESTABLISHED: return (err, ownID) = ts3lib.getClientID(schid) (err, ip) = ts3lib.getConnectionVariable( schid, ownID, ts3defines.ConnectionProperties.CONNECTION_SERVER_IP) self.yatqa.setArguments(["-b", ip]) self.yatqa.start()
def onConnectionInfoEvent(self, schid, clid): if clid == self.requestedIP: self.requestedIP = 0 (err, uid) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) self.banIP(schid, ip) self.banUID(schid, uid)
def onServerErrorEvent(self, schid, errorMessage, error, returnCode, extraMessage): if not returnCode in self.retcodes: return self.retcodes.remove(returnCode) (err, ip) = ts3lib.getConnectionVariable( schid, self.clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if ip and ip != "None": retCode = ts3lib.createReturnCode() self.retcodes.append(retCode) ts3lib.requestConnectionInfo(schid, self.clid, retCode)
def banClient(self, schid, clid): (err, uid) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if self.moveBeforeBan: ts3lib.requestClientMove(schid, clid, self.moveBeforeBan, "") if not ip: self.requestedIP = clid ts3lib.requestConnectionInfo(schid, clid) else: self.banIP(schid, ip) self.banUID(schid, uid)
def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID): if atype != ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT or menuItemID != 0: return (err, uid) = ts3lib.getClientVariable(schid, selectedItemID, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) if err != ts3defines.ERROR_ok: uid = "" (err, name) = ts3lib.getClientVariable(schid, selectedItemID, ts3defines.ClientProperties.CLIENT_NICKNAME) if err != ts3defines.ERROR_ok: name = "" (err, ip) = ts3lib.getConnectionVariable(schid, selectedItemID, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) self.clid = selectedItemID if err or not ip: ip = "";ts3lib.requestConnectionInfo(schid, selectedItemID); print("requested for", selectedItemID, "on", schid) #TODO: Check if not self.dlg: self.dlg = BanDialog(self, schid, selectedItemID, uid, name, ip) else: self.dlg.setup(self, schid, selectedItemID, uid, name, ip) self.dlg.show() self.dlg.raise_() self.dlg.activateWindow()
def onConnectionInfoEvent(self, schid, clid): if clid == self.requestedIP: self.requestedIP = 0 (err, uid) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) self.banIP(schid, ip) self.banUID(schid, uid) if self.cfg.getint("ban", "duration") != 0: (err, name) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME) self.banName(schid, clid, name)
def getScores(self, schid, flag, mode, count=10): c = {} (err, clids) = ts3lib.getClientList(schid) for clid in clids: # if len(self.c) > 10: break if not clid in self.c: ts3lib.requestConnectionInfo(schid, clid) self.c.append(clid) (err, ping) = ts3lib.getConnectionVariable(schid, clid, flag) if err == ts3defines.ERROR_ok: c[clid] = ping if mode == 0: s = sorted(c.items(), key=lambda x: int(x[1])) elif mode == 1: s = sorted(c.items(), key=lambda x: int(x[1]), reverse=True) return take(count, s)
def onUpdateClientEvent(self, schid, clid, invokerID, invokerName, invokerUID): if schid != self.waiting_for[0]: return if clid != self.waiting_for[1]: return self.waiting_for = (0, 0) (err, uid) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) if err != ts3defines.ERROR_ok: uid = "" (err, mytsid) = ts3lib.getClientVariable(schid, clid, 61) if err != ts3defines.ERROR_ok or not mytsid: if schid in self.mytsids and clid in self.mytsids[schid]: mytsid = self.mytsids[schid][clid] else: mytsid = "" (err, name) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME) if err != ts3defines.ERROR_ok: name = "" self.clid = clid type = getServerType(schid) (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if (err != ts3defines.ERROR_ok or not ip) or (ip and ip == "None"): retcode = ts3lib.createReturnCode() self.retcodes.append(retcode) ts3lib.requestConnectionInfo(schid, clid, retcode) (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if not self.dlg: self.dlg = BanDialog(self, schid, clid, uid, name, ip, mytsid, "", type) else: self.dlg.setup(self, schid, clid, uid, name, ip, mytsid, ip, type) self.dlg.show() self.dlg.raise_() self.dlg.activateWindow()
def onConnectionInfoEvent(self, schid, clid): if PluginHost.cfg.getboolean("general", "verbose"): print(self.name, "> onConnectionInfoEvent", schid, clid) if not hasattr(self, "clid") or clid != self.clid: return (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if ip: if ip == "None": retCode = ts3lib.createReturnCode() self.retcodes.append(retCode) ts3lib.requestConnectionInfo(schid, clid, retCode) return elif self.dlg: self.dlg.txt_ip.setText(ip) del self.clid
def checkVars(self, schid, clid): (err, ownID) = ts3lib.getClientID(schid) (err, uid) = ts3lib.getClientVariable( schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) if ownID == clid: (err, uid) = ts3lib.getClientSelfVariable( schid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) if err != ts3defines.ERROR_ok or not uid: uid = False (err, mytsid) = ts3lib.getClientVariable(schid, clid, 61) if ownID == clid: (err, mytsid) = ts3lib.getClientList(schid, 61) if err != ts3defines.ERROR_ok or not mytsid: mytsid = False (err, ip) = ts3lib.getConnectionVariable( schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if err != ts3defines.ERROR_ok or not ip: ip = False return uid, mytsid, ip
def onConnectionInfoEvent(self, schid, clid): print(self.name,"> onConnectionInfoEvent", schid, clid) if not hasattr(self, "clid") or clid != self.clid: return (err, ip) = ts3lib.getConnectionVariable(schid, clid, ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP) if ip and self.dlg: self.dlg.txt_ip.setText(ip) del self.clid