Exemplo n.º 1
0
 def processCommand(self, schid, cmd):
     cmd = cmd.split(' ', 1)
     command = cmd[0].lower()
     id = int(cmd[1])
     if command == "client":
         (err, cid) = ts3lib.getChannelOfClient(schid, id)
         ts3lib.printMessageToCurrentTab(
             "<{}> Client {} in channel {}".format(Time(),
                                                   clientURL(schid, id),
                                                   channelURL(schid, cid)))
         return True
     elif command == "channel":
         (err, clids) = ts3lib.getChannelClientList(schid, id)
         channel_clients = []
         for clid in clids:
             channel_clients.append(clientURL(schid, clid))
         ts3lib.printMessageToCurrentTab(
             "<{}> Channel {} with [b]{}[/b] clients: {}".format(
                 Time(), channelURL(schid, id), len(clids),
                 ','.join(channel_clients)))
         return True
     elif command == "server":
         ts3lib.printMessageToCurrentTab("<{}> Server {}".format(
             Time(), serverURL(schid)))
         return True
     else:
         ts3lib.printMessageToCurrentTab(
             schid, "Syntax: /py info client/channel/server <id>")
         return False
Exemplo n.º 2
0
 def onClientMoveEvent(self, schid, clientID, oldChannelID, newChannelID,
                       visibility, moveMessage):
     if not self.enabled: return
     if self.schid != schid: return
     if not self.mychan: return
     (err, suid) = ts3lib.getServerVariable(
         schid,
         ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID == ownID: return
     if clientID in self.waiting and (newChannelID == 0
                                      or newChannelID == self.mychan):
         # if newChannelID == self.mychan:
         # (err, dbid) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
         ts3lib.printMessage(
             schid, "{}: [color=orange]Removing channel mod from {}".format(
                 self.name, self.waiting[clientID]
                 if newChannelID == 0 else clientURL(schid, clientID)),
             ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
         ts3lib.requestSetClientChannelGroup(schid, [self.sgid_guest],
                                             [self.mychan],
                                             [self.waiting[clientID]])
         del self.waiting[clientID]
         return
     if newChannelID == 0 or oldChannelID != 0: return
     (err, sgids) = ts3lib.getClientVariableAsString(
         schid, clientID,
         ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     if not self.sgid_guest in intList(sgids): return
     # TODO Any way to get the cgid in another channel?
     (err, uid) = ts3lib.getClientVariable(
         schid, clientID,
         ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if getContactStatus(uid) == ContactStatus.BLOCKED:
         ts3lib.printMessage(
             schid,
             "{}: [color=red]Not allowing blocked user {} in your channel.".
             format(self.name, clientURL(schid, clientID)),
             ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
         return
     (err, dbid) = ts3lib.getClientVariable(
         schid, clientID,
         ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
     self.waiting[clientID] = dbid
     ts3lib.printMessage(
         schid,
         "{}:  [color=green]Found new guest {} giving him channel mod until he's here ;)"
         .format(self.name, clientURL(schid, clientID)),
         ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
     ts3lib.requestSetClientChannelGroup(schid, [self.cgid_mod],
                                         [self.mychan], [dbid])
Exemplo n.º 3
0
 def onClientMoveEvent(self, schid, clientID, oldChannelID, newChannelID,
                       visibility, moveMessage):
     if self.schid == schid and self.channel == oldChannelID:
         clients = self.channelClientCount(schid, oldChannelID)
         if self.debug:
             ts3lib.printMessageToCurrentTab("clients: {0}".format(clients))
         (error, maxclients) = ts3lib.getChannelVariable(
             schid, oldChannelID,
             ts3defines.ChannelProperties.CHANNEL_MAXCLIENTS)
         if self.debug:
             ts3lib.printMessageToCurrentTab(
                 "error: {0} | maxclients: {1}".format(error, maxclients))
         (error, maxfamilyclients) = ts3lib.getChannelVariable(
             schid, oldChannelID,
             ts3defines.ChannelProperties.CHANNEL_MAXFAMILYCLIENTS)
         if self.debug:
             ts3lib.printMessageToCurrentTab(
                 "error: {0} | maxfamilyclients: {1}".format(
                     error, maxfamilyclients))
         if clients < maxclients and clients < maxfamilyclients:
             (error, ownID) = ts3lib.getClientID(schid)
             ts3lib.requestClientMove(schid, ownID, oldChannelID,
                                      self.password)
             self.schid = 0
             self.channel = 0
             self.password = ""
             self.name = ""
         else:
             ts3lib.printMessageToCurrentTab(
                 "{0} left channel {1}. [color=red]{2}[/color] client(s) remaining."
                 .format(clientURL(schid, clientID),
                         channelURL(schid, oldChannelID),
                         maxclients - clients + 1))
Exemplo n.º 4
0
 def onClientMoveEvent(self, schid, clientID, oldChannelID, newChannelID,
                       visibility, moveMessage):
     if self.mychan == 0: return
     (err, suid) = ts3lib.getServerVariable(
         schid,
         ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID == ownID: return
     if clientID in self.waiting and (newChannelID == 0
                                      or newChannelID == self.mychan):
         ts3lib.printMessageToCurrentTab(
             "{} > Removing {} from self.waiting".format(
                 self.name, clientID))
         ts3lib.requestSetClientChannelGroup(schid, [10], [self.mychan],
                                             [self.waiting[clientID]])
         del self.waiting[clientID]
         return
     if newChannelID == 0: return
     (err, sgroups) = ts3lib.getClientVariableAsString(
         schid, clientID,
         ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     # (err2, errmsg) = ts3lib.getErrorMessage(err)
     if oldChannelID != 0: return
     if "10" in sgroups.split(','):
         (err, dbid) = ts3lib.getClientVariable(
             schid, clientID,
             ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
         self.waiting[clientID] = dbid
         ts3lib.printMessageToCurrentTab(
             "{} > #{} Found new guest {} ({}) giving him channel mod until he's here ;)"
             .format(self.name, schid, clientURL(schid, clientID), dbid))
         ts3lib.requestSetClientChannelGroup(schid, [14], [self.mychan],
                                             [dbid])
         return
Exemplo n.º 5
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     if menuItemID != 0: return
     if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL:
         if schid in self.targets: self.stop("", schid, self.targets[schid])
         else:
             ts3lib.printMessageToCurrentTab(
                 "{} {}: [color=red]Not following anyone on this tab.[/color]"
                 .format(timestamp(), self.name))
             uid = inputBox(self.name, "UID:",
                            QApplication.clipboard().text())
             parsed = parseClientURL(uid)
             if parsed: uid = parsed[1]
     elif atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT:
         (err, ownID) = ts3lib.getClientID(schid)
         if selectedItemID == ownID: return
         (err, uid) = ts3lib.getClientVariable(
             schid, selectedItemID,
             ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
         if not uid:
             ts3lib.printMessageToCurrentTab(
                 "{} {}: [color=red]Cannot follow[/color] {}".format(
                     timestamp(), self.name, selectedItemID))
             return
         self.targets[schid] = uid
         ts3lib.printMessageToCurrentTab(
             "{} {}: [color=green]Now auto-following[/color] {}".format(
                 timestamp(), self.name, clientURL(schid, selectedItemID)))
         if PluginHost.cfg.getboolean("general", "verbose"):
             print(self.name, "> self.targets[schid]", self.targets[schid],
                   "selectedItemID", selectedItemID)
         self.joinTarget(schid)
Exemplo n.º 6
0
 def onClientMoveEvent(self, schid, clid, oldChannelID, newChannelID,
                       visibility, moveMessage):
     client = self.ts3host.getUser(schid, clid)
     # if client.server.me.channel.cid == client.cid
     if not client.server.me.getChannelGroupId() in [
             self.tabs[schid]["channelModGroup"],
             client.server.defaultChannelAdminGroup
     ]:
         return
     if clid in self.waiting and (newChannelID == 0
                                  or newChannelID == self.mychan):
         # if newChannelID == self.mychan:
         # (err, dbid) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
         ts3lib.printMessage(
             schid, "{}: [color=orange]Removing channel mod from {}".format(
                 self.name, self.waiting[clid]
                 if newChannelID == 0 else clientURL(schid, clid)),
             ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
         ts3lib.requestSetClientChannelGroup(schid, [self.sgid_guest],
                                             [self.mychan],
                                             [self.waiting[clid]])
         del self.waiting[clid]
         return
     if newChannelID == 0 or oldChannelID != 0: return
     (err, sgids) = ts3lib.getClientVariableAsString(
         schid, clid, ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     if not self.sgid_guest in intList(sgids): return
     # TODO Any way to get the cgid in another channel?
     (err, uid) = ts3lib.getClientVariable(
         schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if getContactStatus(uid) == ContactStatus.BLOCKED:
         ts3lib.printMessage(
             schid,
             "{}: [color=red]Not allowing blocked user {} in your channel.".
             format(self.name, clientURL(schid, clid)),
             ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
         return
     (err, dbid) = ts3lib.getClientVariable(
         schid, clid, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
     self.waiting[clid] = dbid
     ts3lib.printMessage(
         schid,
         "{}:  [color=green]Found new guest {} giving him channel mod until he's here ;)"
         .format(self.name, clientURL(schid, clid)),
         ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
     ts3lib.requestSetClientChannelGroup(schid, [self.cgid_mod],
                                         [self.mychan], [dbid])
Exemplo n.º 7
0
 def onPluginCommandEvent(self, schid, clid, pluginCommand):
     ts3lib.printMessageToCurrentTab("onPluginCommandEvent")
     ts3lib.printMessage(
         schid,
         "{0} PluginMessage from {1}: {2}".format(timestamp(),
                                                  clientURL(clid),
                                                  pluginCommand),
         ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER)
Exemplo n.º 8
0
 def stop(self, reason=" because plugin was stopped", schid=0, target=0):
     ts3lib.printMessageToCurrentTab(
         "{} {}: [color=orange]No longer auto-following[/color] {}{}!".
         format(timestamp(), self.name,
                clientURL(schid, target) if target else "anyone", reason))
     if schid and target != "anyone":
         del self.targets[schid]
     else:
         self.targets = {}
Exemplo n.º 9
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     if atype != ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT: return
     if menuItemID != 0: return
     if self.uid:
         ts3lib.printMessageToCurrentTab("Disabled %s for %s"%(self.name,self.uid))
         self.uid = ""
     else:
         self.kicks = 1
         (err, self.uid) = ts3lib.getClientVariable(schid, selectedItemID, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
         ts3lib.printMessageToCurrentTab("Enabled %s for %s"%(self.name,clientURL(schid, selectedItemID)))
         self.onClientMoveEvent(schid, selectedItemID,0,1,ts3defines.Visibility.RETAIN_VISIBILITY,"")
Exemplo n.º 10
0
 def onClientMoveMovedEvent(self, schid, clientID, oldChannelID,
                            newChannelID, visibility, moverID, moverName,
                            moverUniqueIdentifier, moveMessage):
     if not schid in self.targets: return
     if self.targets[schid] != clientID: return
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID != ownID or moverID == ownID: return
     ts3lib.printMessageToCurrentTab(
         "{} {}: [color=orange]No longer auto-following[/color] {} because we were moved!"
         .format(timestamp(), self.name,
                 clientURL(schid, self.targets[schid])))
     del self.targets[schid]
Exemplo n.º 11
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     if menuItemID != 0: return
     if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL:
         if schid in self.targets:
             ts3lib.printMessageToCurrentTab(
                 "{} {}: [color=orange]No longer auto-following[/color] {}".
                 format(timestamp(), self.name,
                        clientURL(schid, self.targets[schid])))
             del self.targets[schid]
         else:
             ts3lib.printMessageToCurrentTab(
                 "{} {}: [color=red]Not following anyone on this tab.[/color]"
                 .format(timestamp(), self.name))
     elif atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT:
         (err, ownID) = ts3lib.getClientID(schid)
         if selectedItemID == ownID: return
         self.targets[schid] = selectedItemID
         ts3lib.printMessageToCurrentTab(
             "{} {}: [color=green]Now auto-following[/color] {}".format(
                 timestamp(), self.name, clientURL(schid, selectedItemID)))
         self.joinTarget(schid)
Exemplo n.º 12
0
 def onClientMoveEvent(self, schid, clientID, oldChannelID, newChannelID,
                       visibility, moveMessage):
     if not schid in self.targets: return
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID != ownID: return
     (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID)
     # if newChannelID == ownCID: return
     delay = randint(self.delay[0], self.delay[1])
     ts3lib.printMessageToCurrentTab(
         "{} {}: Auto-dragging {} in channel {} in {}ms".format(
             timestamp(), self.name, clientURL(schid, self.targets[schid]),
             channelURL(schid, newChannelID), delay))
     QTimer.singleShot(delay, self.dragTarget)
Exemplo n.º 13
0
 def onIncomingClientQueryEvent(self, schid, commandText):
     if not self.dynamicSilence: return
     (err, suid) = ts3lib.getServerVariable(schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     if commandText.split(" ", 1)[0] != "notifyclientupdated": return
     cmd, params = parseCommand(commandText)
     if len(params) > 0 and "client_nickname" in params:
         clid = int(params["clid"])
         # (err, ownID) = ts3lib.getClientID(schid)
         # if clid == ownID: return
         (err, uid) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
         if getContactStatus(uid) != ContactStatus.FRIEND: return
         if not self.dynamicSilenceName in params["client_nickname"].lower(): return
         ts3lib.requestSendPrivateTextMsg(schid, "Yes, {}-{}?".format(clientURL(schid, clid), choice(["chan","san"])), clid)
Exemplo n.º 14
0
 def join(self, schid, clid, cid):
     (err, ownID) = ts3lib.getClientID(schid)
     (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID)
     if not cid:
         (err, cid) = ts3lib.getChannelOfClient(schid, self.targets[schid])
     if ownCID == cid: return
     delay = randint(self.delay[0], self.delay[1])
     # pw = getChannelPassword(schid, cid, False, False, True)
     ts3lib.printMessageToCurrentTab(
         "{} {}: Auto-following {} in channel {} in {}ms".format(
             timestamp(), self.name, clientURL(schid, clid),
             channelURL(schid, cid), delay))  # with pw \"{}\" pw
     self.cid = cid
     QTimer.singleShot(delay, self.joinTarget)
Exemplo n.º 15
0
 def joinTarget(self, schid=0, cid=0, pw=""):
     if not schid: schid = ts3lib.getCurrentServerConnectionHandlerID()
     (err, ownID) = ts3lib.getClientID(schid)
     (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID)
     clid = getClientIDByUID(schid, self.targets[schid])
     if not cid: (err, cid) = ts3lib.getChannelOfClient(schid, clid)
     if ownCID == cid: return
     pw = getChannelPassword(schid, cid, False, False, True)
     pw = pw if pw else "123"
     # print(schid, ownID, cid, pw)
     ts3lib.printMessageToCurrentTab(
         "{} {}: Now following {} in channel {} with pw \"{}\"".format(
             timestamp(), self.name, clientURL(schid, clid),
             channelURL(schid, cid), pw))
     ts3lib.requestClientMove(schid, ownID, cid, pw)
     self.cid = 0
Exemplo n.º 16
0
 def onConnectionInfoEvent(self, schid, clientID):
     if not self.requested == clientID: return
     (error, ip) = ts3lib.getConnectionVariableAsString(
         schid, clientID,
         ts3defines.ConnectionProperties.CONNECTION_CLIENT_IP)
     if error == ts3defines.ERROR_ok:
         self.ip = ip
         self.nwm = QNetworkAccessManager()
         self.nwm.connect("finished(QNetworkReply*)", self.onMainReply)
         self.nwm.get(
             QNetworkRequest(
                 QUrl(self.cfg['api']['main'].replace("{ip}", ip))))
         if PluginHost.cfg.getboolean("general", "verbose"):
             ts3lib.printMessageToCurrentTab(
                 self.cfg['api']['main'].replace("{ip}", ip))
     else:
         (e, msg) = ts3lib.getErrorMessage(error)
         ts3lib.printMessageToCurrentTab(
             "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the IP for '%s' (Reason: %s)"
             % (clientURL(schid, clientID), msg))
Exemplo n.º 17
0
 def onFallbackReply(self, reply):
     if reply.error() == QNetworkReply.NoError:
         try:
             isp = reply.readAll().data().decode('utf-8')
             if isp.startswith('AS'): isp = isp.split(" ", 1)[1]
             if not isp or isp == "" or isp == "undefined":
                 ts3lib.printMessageToCurrentTab(
                     "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s)"
                     %
                     (clientURL(self.schid, self.requested), format_exc()))
                 if self.cfg.getboolean("failover", "enabled"):
                     if self.cfg.getboolean('failover', 'kickonly'):
                         ts3lib.requestClientKickFromServer(
                             self.schid, self.requested,
                             self.cfg['failover']['reason'].replace(
                                 '{isp}', isp))
                     else:
                         ts3lib.banclient(
                             self.schid, self.requested,
                             int(self.cfg['failover']['bantime']),
                             self.cfg['failover']['reason'].replace(
                                 '{isp}', isp))
                     self.requested = 0
                     reply.deleteLater()
                     return
             if PluginHost.cfg.getboolean("general", "verbose"):
                 ts3lib.printMessageToCurrentTab(
                     "%s's ISP: %s" %
                     (clientURL(self.schid, self.requested), isp))
             _match = False
             for _isp in self.isps:
                 if isp == _isp: _match = True
             if self.cfg.getboolean('general', 'whitelist') and not _match:
                 if self.cfg.getboolean('main', 'kickonly'):
                     ts3lib.requestClientKickFromServer(
                         self.schid, self.requested,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
                 else:
                     ts3lib.banclient(
                         self.schid, self.requested, 60,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
             elif not self.cfg.getboolean('general',
                                          'whitelist') and _match:
                 if self.cfg.getboolean('main', 'kickonly'):
                     ts3lib.requestClientKickFromServer(
                         self.schid, self.requested,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
                 else:
                     ts3lib.banclient(
                         self.schid, self.requested, 60,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
         except:
             ts3lib.printMessageToCurrentTab(
                 "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s)"
                 % (clientURL(self.schid, self.requested), ""))
             if self.cfg.getboolean("failover", "enabled"):
                 if self.cfg.getboolean('failover', 'kickonly'):
                     ts3lib.requestClientKickFromServer(
                         self.schid, self.requested,
                         self.cfg['failover']['reason'].replace(
                             '{isp}', isp))
                 else:
                     ts3lib.banclient(
                         self.schid, self.requested,
                         int(self.cfg['failover']['bantime']),
                         self.cfg['failover']['reason'].replace(
                             '{isp}', isp))
     else:
         ts3lib.printMessageToCurrentTab(
             "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s)"
             % (clientURL(self.schid, self.requested), reply.errorString()))
         if self.cfg.getboolean("failover", "enabled"):
             if self.cfg.getboolean('failover', 'kickonly'):
                 ts3lib.requestClientKickFromServer(
                     self.schid, self.requested,
                     self.cfg['failover']['reason'].replace('{isp}', isp))
             else:
                 ts3lib.banclient(
                     self.schid, self.requested,
                     int(self.cfg['failover']['bantime']),
                     self.cfg['failover']['reason'].replace('{isp}', isp))
     self.requested = 0
     reply.deleteLater()
Exemplo n.º 18
0
 def onMainReply(self, reply):
     if reply.error() == QNetworkReply.NoError:
         try:
             isp = reply.readAll().data().decode('utf-8')
             if isp.startswith('AS'): isp = isp.split(" ", 1)[1]
             if not isp or isp == "" or isp == "undefined":
                 ts3lib.printMessageToCurrentTab(
                     "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s) Falling back to %s"
                     %
                     (clientURL(self.schid, self.requested), format_exc(),
                      self.cfg['api']['fallback'].replace("{ip}", self.ip)))
                 if PluginHost.cfg.getboolean("general", "verbose"):
                     ts3lib.printMessageToCurrentTab(
                         self.cfg['api']['fallback'].replace(
                             "{ip}", self.ip))
                 self.nwb = QNetworkAccessManager()
                 self.nwb.connect("finished(QNetworkReply*)",
                                  self.onFallbackReply)
                 self.nwb.get(
                     QNetworkRequest(
                         QUrl(self.cfg['api']['fallback'].replace(
                             "{ip}", self.ip))))
                 return
             if PluginHost.cfg.getboolean("general", "verbose"):
                 ts3lib.printMessageToCurrentTab(
                     "%s's ISP: %s" %
                     (clientURL(self.schid, self.requested), isp))
             _match = False
             for _isp in self.isps:
                 if isp == _isp: _match = True
             if self.cfg.getboolean('general', 'whitelist') and not _match:
                 if self.cfg.getboolean('main', 'kickonly'):
                     ts3lib.requestClientKickFromServer(
                         self.schid, self.requested,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
                 else:
                     ts3lib.banclient(
                         self.schid, self.requested, 60,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
             elif not self.cfg.getboolean('general',
                                          'whitelist') and _match:
                 if self.cfg.getboolean('main', 'kickonly'):
                     ts3lib.requestClientKickFromServer(
                         self.schid, self.requested,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
                 else:
                     ts3lib.banclient(
                         self.schid, self.requested, 60,
                         "%s is not a valid Internet Service Provider!" %
                         isp)
                     self.requested = 0
         except:
             try:
                 ts3lib.printMessageToCurrentTab(
                     "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s) Falling back to %s"
                     %
                     (clientURL(self.schid, self.requested), format_exc(),
                      self.cfg['api']['fallback'].replace("{ip}", self.ip)))
                 if PluginHost.cfg.getboolean("general", "verbose"):
                     ts3lib.printMessageToCurrentTab(
                         self.cfg['api']['fallback'].replace(
                             "{ip}", self.ip))
                 self.nwb = QNetworkAccessManager()
                 self.nwb.connect("finished(QNetworkReply*)",
                                  self.onFallbackReply)
                 self.nwb.get(
                     QNetworkRequest(
                         QUrl(self.cfg['api']['fallback'].replace(
                             "{ip}", self.ip))))
             except:
                 pass
     else:
         ts3lib.printMessageToCurrentTab(
             "[[color=orange]WARNING[/color]] [color=red]ISPValidator could not resolve the ISP for '%s' (Reason: %s) Falling back to %s"
             % (clientURL(self.schid, self.requested), reply.errorString(),
                self.cfg['api']['fallback'].replace("{ip}", self.ip)))
         if PluginHost.cfg.getboolean("general", "verbose"):
             ts3lib.printMessageToCurrentTab(
                 self.cfg['api']['fallback'].replace("{ip}", self.ip))
         self.nwb = QNetworkAccessManager()
         self.nwb.connect("finished(QNetworkReply*)", self.onFallbackReply)
         self.nwb.get(
             QNetworkRequest(
                 QUrl(self.cfg['api']['fallback'].replace("{ip}",
                                                          self.ip))))
     reply.deleteLater()
Exemplo n.º 19
0
 def onConnectionInfoEvent(self, schid, clid):
     if clid != self.req: return
     self.req = 0
     ts3lib.printMessageToCurrentTab("onConnectionInfoEvent: %s"%clientURL(schid, clid))
Exemplo n.º 20
0
 def onUpdateClientEvent(self, schid, clid, invokerID, invokerName, invokerUID):
     if clid != self.req: return
     self.req = 0
     ts3lib.printMessageToCurrentTab("onUpdateClientEvent: %s"%clientURL(schid, clid))
Exemplo n.º 21
0
 def processCommand(self, schid, keyword):
     args = keyword.split()
     cmd = args.pop(0).lower()
     if cmd == "com":
         command = " ".join(args)
         self.retcode = ts3lib.createReturnCode(); self.schid = schid
         err = ts3lib.requestSendClientQueryCommand(schid, command, self.retcode)
         if err != ts3defines.ERROR_ok:
             (_err, msg) = ts3lib.getErrorMessage(err)
             ts3lib.printMessageToCurrentTab("(%s) %s: %s"%(schid, command, msg))
     elif cmd == "req":
         clid = int(args.pop(0))
         self.req = clid
         ts3lib.requestClientVariables(schid, clid)
     elif cmd == "reqcon":
         clid = int(args.pop(0))
         self.req = clid
         ts3lib.requestConnectionInfo(schid, clid)
     elif cmd == "self":
         err, clid = ts3lib.getClientID(schid)
         ts3lib.printMessageToCurrentTab("[b]{}'s Self Variables:".format(clientURL(schid, clid)))
         open(self.filepath, 'w').close()
         min=0;max=64
         if len(args):
             min = int(args.pop(0))
             if len(args): max = int(args.pop(0))
         for i in range(min, max):
             msg = "%s"%i
             values = set(item.value for item in ts3enums.ClientProperties)
             if i in values: msg += " ({})".format(ts3enums.ClientProperties(i))
             msg += ": "
             (err, var) = ts3lib.getClientSelfVariableAsString(schid, i)
             if err != ts3defines.ERROR_ok:
                 (_err, var) = ts3lib.getErrorMessage(err)
             msg += var
             with open(self.filepath, "a", encoding="utf-8") as myfile:
                 myfile.write(msg+"\n")
             ts3lib.printMessageToCurrentTab(msg)
     elif cmd == "client":
         clid = int(args.pop(0))
         ts3lib.printMessageToCurrentTab("[b]{}'s Client Variables:".format(clientURL(schid, clid)))
         open(self.filepath, 'w').close()
         min=0;max=64
         if len(args):
             min = int(args.pop(0))
             if len(args): max = int(args.pop(0))
         for i in range(min, max):
             msg = "%s"%i
             values = set(item.value for item in ts3enums.ClientProperties)
             if i in values: msg += " ({})".format(ts3enums.ClientProperties(i))
             msg += ": "
             (err, var) = ts3lib.getClientVariableAsString(schid, clid, i)
             if err != ts3defines.ERROR_ok:
                 (_err, var) = ts3lib.getErrorMessage(err)
             msg += var
             with open(self.filepath, "a", encoding="utf-8") as myfile:
                 myfile.write(msg+"\n")
             ts3lib.printMessageToCurrentTab(msg)
     elif cmd == "con":
         clid = int(args.pop(0))
         ts3lib.printMessageToCurrentTab("[b]{}'s Connection Variables:".format(clientURL(schid, clid)))
         open(self.filepath, 'w').close()
         min=0;max=65
         if len(args):
             min = int(args.pop(0))
             if len(args): max = int(args.pop(0))
         for i in range(min, max):
             msg = "%s"%i
             values = set(item.value for item in ts3enums.ConnectionProperties)
             if i in values: msg += " ({})".format(ts3enums.ConnectionProperties(i))
             msg += ": "
             (err, var) = ts3lib.getConnectionVariableAsString(schid, clid, i)
             if err != ts3defines.ERROR_ok:
                 (_err, var) = ts3lib.getErrorMessage(err)
             msg += var
             with open(self.filepath, "a", encoding="utf-8") as myfile:
                 myfile.write(msg+"\n")
             ts3lib.printMessageToCurrentTab(msg)
     else: return False
     return True
Exemplo n.º 22
0
 def onClientMoveMovedEvent(self, schid, clientID, oldChannelID, newChannelID, visibility, moverID, moverName, moverUniqueIdentifier, moveMessage):
     if moverID == 0 and self.backup is not None: return
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID != ownID or moverID == ownID or moverID == 0: return
     (err, sgids) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     if not set(sgids).isdisjoint(self.whitelistSGIDs): return
     (err, uid) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if uid in self.whitelistUIDs: return
     self.backup = {"schid": schid, "cid": oldChannelID}
     delay = randint(self.delay[0], self.delay[1])
     ts3lib.printMessageToCurrentTab("{} {}: Switching back to channel {} in {}ms".format(timestamp(),self.name,clientURL(schid, self.backup["schid"]), channelURL(schid, self.backup["cid"]), delay))
     QTimer.singleShot(delay, self.moveBack)