Exemplo n.º 1
0
 def onClientMoveEvent(self, schid, clid, oldChannelID, newChannelID,
                       visibility, moveMessage):
     (err, ownID) = ts3lib.getClientID(schid)
     if clid == ownID:
         return  #(err, clids) = ts3lib.getChannelClientList(schid, newChannelID)
     (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID)
     if newChannelID == 0:
         if clid in self.clients: del self.clients[clid]
     if ownCID != newChannelID: return
     (err, owncgid) = ts3lib.getClientVariable(
         schid, ownID,
         ts3defines.ClientPropertiesRare.CLIENT_CHANNEL_GROUP_ID)
     if owncgid in self.modcgids: return
     (err, cgid) = ts3lib.getClientVariable(
         schid, clid,
         ts3defines.ClientPropertiesRare.CLIENT_CHANNEL_GROUP_ID)
     (err, dcgid) = ts3lib.getServerVariable(
         schid, ts3defines.VirtualServerPropertiesRare.
         VIRTUALSERVER_DEFAULT_CHANNEL_GROUP)
     if cgid != dcgid: return
     if clid in self.clients:
         violations = self.clients[clid]
         if len(violations) > self.maxviolations:
             if len(violations) > self.maxviolations + 3:
                 del self.clients[clid][0]
             if violations[-1] < violations[-3] + 3:
                 (err, dbid) = ts3lib.getClientVariable(
                     schid, clid,
                     ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
                 ts3lib.requestSetClientChannelGroup(
                     schid, [self.bancgid], [ownCID], [dbid])
                 return
         self.clients[clid].append(time())
     else:
         self.clients[clid] = []
Exemplo n.º 2
0
 def clientURL(self,
               schid=None,
               clid=0,
               uid=None,
               nickname=None,
               encodednick=None):
     if schid == None:
         try:
             schid = ts3lib.getCurrentServerConnectionHandlerID()
         except:
             pass
     if uid == None:
         try:
             (error, uid) = ts3lib.getClientVariable(
                 schid, clid,
                 ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
         except:
             pass
     if nickname == None:
         try:
             (error, nickname) = ts3lib.getClientVariable(
                 schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
         except:
             nickname = uid
     if encodednick == None:
         try:
             encodednick = urlencode(nickname)
         except:
             pass
     return "[url=client://{0}/{1}~{2}]{3}[/url]".format(
         clid, uid, encodednick, nickname)
Exemplo n.º 3
0
def clientURL(schid=0, clid=0, uid="", nickname="", nickname_encoded=""):
    """
    :param schid:
    :param clid:
    :param uid:
    :param nickname:
    :param nickname_encoded:
    :return:
    """
    if not schid:
        try:
            schid = ts3lib.getCurrentServerConnectionHandlerID()
        except:
            pass
    if not uid:
        try:
            (error, uid) = ts3lib.getClientVariable(
                schid, clid,
                ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
        except:
            pass
    if not nickname:
        try:
            (error, nickname) = ts3lib.getClientVariable(
                schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
        except:
            nickname = uid
    if not nickname_encoded:
        try:
            nickname_encoded = quote_plus(nickname)
        except:
            nickname_encoded = uid
    return '[url=client://{0}/{1}~{2}]"{3}"[/url]'.format(
        clid, uid, nickname_encoded, nickname)
Exemplo n.º 4
0
 def onUpdateClientEvent(self, schid, clid, invokerID, invokerName,
                         invokerUniqueIdentifier):
     (err, ownID) = ts3lib.getClientID(schid)
     (err, cid) = ts3lib.getChannelOfClient(schid, clid)
     (err, ownCID) = ts3lib.getChannelOfClient(schid, ownID)
     (err, talker) = ts3lib.getClientVariable(
         schid, clid, ts3defines.ClientPropertiesRare.CLIENT_IS_TALKER)
     if cid == ownCID and talker: self.last_talk_power = clid
     if clid == self.requested:
         self.requested = 0
         if talker == 1: self.revokeTalkPower(schid, clid, True)
         # else: self.revokeTalkPower(schid, clid, False)
         (err, cldbid) = ts3lib.getClientVariable(
             schid, clid,
             ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
         (err, sgids) = ts3lib.getClientVariable(
             schid, clid,
             ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
         loc_sgids = intList(self.cfg.get("restrict", "sgids"))
         if set(loc_sgids).issubset(sgids):
             for sgid in loc_sgids:
                 ts3lib.requestServerGroupDelClient(schid, sgid, cldbid)
         else:
             for sgid in loc_sgids:
                 ts3lib.requestServerGroupAddClient(schid, sgid, cldbid)
Exemplo n.º 5
0
 def onConnectStatusChangeEvent(self, schid, newStatus, errorNumber):
     if newStatus != ts3defines.ConnectStatus.STATUS_CONNECTION_ESTABLISHED:
         return
     if not self.nick_enabled: return
     (err, suid) = ts3lib.getServerVariable(
         schid,
         ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     (err, name) = ts3lib.getClientSelfVariable(
         schid, ts3defines.ClientProperties.CLIENT_NICKNAME)
     _name = choice(self.nicknames)
     if "{" in _name:
         (err, ownID) = ts3lib.getClientID(schid)
         if "{ver}" in _name:
             (err, ver) = ts3lib.getClientVariable(
                 schid, ownID, ts3defines.ClientProperties.CLIENT_VERSION)
             _name = _name.replace("{ver}", ver.split(" ")[0])
         if "{os}" in _name:
             (err, os) = ts3lib.getClientVariable(
                 schid, ownID, ts3defines.ClientProperties.CLIENT_PLATFORM)
             _name = _name.replace("{os}", os)
         if "{con}" in _name:
             # ts3lib.requestClientVariables(schid, ownID)
             (err, os) = ts3lib.getClientVariable(
                 schid, ownID,
                 ts3defines.ClientPropertiesRare.CLIENT_TOTALCONNECTIONS)
             _name = _name.replace("{con}", str(os))
     if _name == name: return
     ts3lib.setClientSelfVariableAsString(
         schid, ts3defines.ClientProperties.CLIENT_NICKNAME, _name)
     ts3lib.flushClientSelfUpdates(schid)
Exemplo n.º 6
0
 def onClientMoveEvent(self, schid, clientID, oldChannelID, newChannelID,
                       visibility, moveMessage):
     if not self.askForAvatar: return
     (err, suid) = ts3lib.getServerVariable(
         schid,
         ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     if oldChannelID != 0: return
     (err, uid) = ts3lib.getClientVariable(
         schid, clientID,
         ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if getContactStatus(uid) == ContactStatus.BLOCKED: return
     if uid in self.alreadyAsked: return
     (err, sgroups) = ts3lib.getClientVariableAsString(
         schid, clientID,
         ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     sgroups = sgroups.split(",")
     if self.ruheGroupID in sgroups: return
     if set(sgroups).isdisjoint(self.premiumGroupIDs): return
     (err, myuid) = ts3lib.getClientSelfVariable(
         schid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     (err, nick) = ts3lib.getClientVariable(
         schid, clientID, ts3defines.ClientProperties.CLIENT_NICKNAME)
     ts3lib.requestSendPrivateTextMsg(
         schid,
         self.avatarmsg.replace("{nick}",
                                nick).replace("{myuid}",
                                              myuid).replace("{uid}", uid),
         clientID)
     self.alreadyAsked.append(uid)
Exemplo n.º 7
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     if atype == ts3defines.PluginItemType.PLUGIN_SERVER:
         if menuItemID == 0:
             self.dynamicSilence = not self.dynamicSilence
             ts3lib.printMessageToCurrentTab(
                 "{}{}: DynamicSilence set to [color=orange]{}".format(
                     timestamp(), self.name, self.dynamicSilence))
         elif menuItemID == 1:
             self.askForAvatar = not self.askForAvatar
             ts3lib.printMessageToCurrentTab(
                 "{}askForAvatar set to [color=orange]{}".format(
                     timestamp(), self.askForAvatar))
             if not self.askForAvatar:
                 self.clids = []
                 self.timer.stop()
                 return
             (err, clids) = ts3lib.getClientList(schid)
             for c in clids:
                 ts3lib.requestClientVariables(schid, c)
             for c in clids:
                 (err, uid) = ts3lib.getClientVariable(
                     schid, c,
                     ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
                 if getContactStatus(uid) == ContactStatus.BLOCKED: continue
                 if uid in self.alreadyAsked: continue
                 (err, sgroups) = ts3lib.getClientVariableAsString(
                     schid, c,
                     ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
                 sgroups = sgroups.split(",")
                 if self.ruheGroupID in sgroups: continue
                 if set(sgroups).isdisjoint(self.premiumGroupIDs): continue
                 self.clids.append(c)
             ts3lib.printMessageToCurrentTab(
                 "{}Asking {} clients for avatar".format(
                     timestamp(), len(self.clids)))
             self.schid = schid
             self.timer.start(1000)
     if atype == ts3defines.PluginItemType.PLUGIN_CHANNEL:
         ts3lib.requestSendChannelTextMsg(schid, self.steammsg,
                                          selectedItemID)
     elif atype == ts3defines.PluginItemType.PLUGIN_CLIENT:
         if menuItemID == 0:
             ts3lib.requestSendPrivateTextMsg(schid, self.steammsg,
                                              selectedItemID)
         elif menuItemID == 1:
             print(self.aka)
             if self.aka != (0, 0, "", ""):
                 self.aka = (0, 0, "", "")
                 return
             realname = inputBox(self.name, "Real name:")
             if not realname: return
             (err, name) = ts3lib.getClientVariable(
                 schid, selectedItemID,
                 ts3defines.ClientProperties.CLIENT_NICKNAME)
             ts3lib.setClientSelfVariableAsString(
                 schid, ts3defines.ClientProperties.CLIENT_NICKNAME,
                 "{} aka {}".format(realname, name))
             ts3lib.flushClientSelfUpdates(schid)
             self.aka = (schid, selectedItemID, realname, name)
Exemplo n.º 8
0
 def fakeClient(self, schid, clientID):
     (error, _clid) = ts3lib.getClientID(schid)
     (error, tnick) = ts3lib.getClientVariable(
         schid, clientID, ts3defines.ClientProperties.CLIENT_NICKNAME)
     (error, tnickp) = ts3lib.getClientVariable(
         schid, clientID,
         ts3defines.ClientPropertiesRare.CLIENT_NICKNAME_PHONETIC)
     ts3lib.flushClientSelfUpdates(schid)
Exemplo n.º 9
0
 def tick(self):
     if not self.askForAvatar or not self.schid or len(self.clids) < 1: self.timer.stop(); return
     (err, myuid) = ts3lib.getClientSelfVariable(self.schid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     (err, uid) = ts3lib.getClientVariable(self.schid, self.clids[0], ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     (err, nick) = ts3lib.getClientVariable(self.schid, self.clids[0], ts3defines.ClientProperties.CLIENT_NICKNAME)
     ts3lib.requestSendPrivateTextMsg(self.schid, self.avatarmsg.replace("{nick}", nick).replace("{myuid}", myuid).replace("{uid}", uid), self.clids[0])
     self.alreadyAsked.append(uid)
     del self.clids[0]
Exemplo n.º 10
0
 def onClientMoveMovedEvent(self, schid, clientID, oldChannelID, newChannelID, visibility, moverID, moverName, moverUniqueIdentifier, moveMessage):
     (err, ownID) = ts3lib.getClientID(schid)
     if clientID != ownID or moverID == ownID: return
     (err, sgids) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientPropertiesRare.CLIENT_SERVERGROUPS)
     if set(sgids).isdisjoint(self.whitelistSGIDs): return
     (err, uid) = ts3lib.getClientVariable(schid, clientID, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if uid in self.whitelistUIDs: return
     self.schid=schid;self.clid=ownID;self.cid=oldChannelID
     if self.delay >= 0: QTimer.singleShot(self.delay, self.moveBack)
     else: self.moveBack()
Exemplo n.º 11
0
def clientURL(schid=None, clid=0, uid=None, nickname=None):
    if schid == None:
        try: schid = ts3lib.getCurrentServerConnectionHandlerID()
        except: pass
    if uid == None:
        try: (error, uid) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
        except: pass
    if nickname == None:
        try: (error, nickname) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
        except: nickname = uid
    return '[url=client://{0}/{1}]{2}[/url]'.format(clid, uid, nickname)
Exemplo n.º 12
0
 def onClientMoveMovedEvent(self, schid, clientID, oldChannelID, newChannelID, visibility, moverID, moverName, moverUniqueIdentifier, moveMessage):
     if moverID == 0 or self.backup is 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,channelURL(schid, self.backup["cid"]), delay))# clientURL(schid, self.backup["schid"]), 
     QTimer.singleShot(delay, self.moveBack)
Exemplo n.º 13
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     try:
         url = ""
         if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT:
             if menuItemID == 1:  # Nickname (TSViewer)
                 url = "http://www.tsviewer.com/index.php?page=search&action=ausgabe_user&nickname=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 2:  # Nickname (GameTracker)
                 url = "http://www.gametracker.com/search/?search_by=online_offline_player&query=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 3:  # Nickname (TS3Index)
                 url = "http://ts3index.com/?page=searchclient&nickname=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 4:  # Nickname (Google)
                 url = "https://www.google.com/search?q=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 5:  # Profil (GameTracker)
                 url = "http://www.gametracker.com/search/?search_by=profile_username&query=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 6:  # UID (TS3Index)
                 url = "http://ts3index.com/?page=searchclient&uid=%%CLIENT_UNIQUE_ID%%"
             elif menuItemID == 7:  # UID (Google)
                 url = "https://www.google.com/search?q=%%CLIENT_UNIQUE_ID%%"
             elif menuItemID == 8:  # Besitzer (TSViewer)
                 url = "http://www.tsviewer.com/index.php?page=search&action=ausgabe&suchbereich=ansprechpartner&suchinhalt=%%CLIENT_NAME_PERCENT_ENCODED%%"
             elif menuItemID == 9:  # Badges (TS3Index)
                 url = "https://ts3index.com/?page=searchclient&badges=%%CLIENT_BADGES%%"
             else:
                 return
             # payload = {'username':'******', 'password':'******'}
             # nickname_encoded = urlencode(nickname, quote_via=quote_plus)
             # nickname_encoded = nickname_encoded.replace("+", "%2B").replace("/", "%2F").replace("=", "%3D")
             if "%%CLIENT_NAME_PERCENT_ENCODED%%" in url:
                 (err, nickname) = ts3lib.getClientVariable(
                     schid, selectedItemID,
                     ts3defines.ClientProperties.CLIENT_NICKNAME)
                 url = url.replace("%%CLIENT_NAME_PERCENT_ENCODED%%",
                                   quote_plus(nickname))
             if "%%CLIENT_UNIQUE_ID%%" in url:
                 (err, uid) = ts3lib.getClientVariable(
                     schid, selectedItemID,
                     ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
                 url = url.replace("%%CLIENT_UNIQUE_ID%%", quote_plus(uid))
             if "%%CLIENT_BADGES%%" in url:
                 (err, badges) = ts3lib.getClientVariable(
                     schid, selectedItemID,
                     ts3defines.ClientPropertiesRare.CLIENT_BADGES)
                 url = url.replace("%%CLIENT_BADGES%%", badges)
         else:
             return
         if PluginHost.cfg.getboolean("general", "verbose"):
             ts3lib.printMessageToCurrentTab(
                 "Opening URL: \"{}\"".format(url))
         QDesktopServices.openUrl(QUrl(url))
     except:
         ts3lib.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR,
                           "pyTSon", 0)
Exemplo n.º 14
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.º 15
0
 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()
Exemplo n.º 16
0
def clientURL(schid=0, clid=0, uid="", nickname="", nickname_encoded=""):
    if schid == 0:
        try: schid = ts3lib.getCurrentServerConnectionHandlerID()
        except: pass
    if uid == "":
        try: (error, uid) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
        except: pass
    if nickname == "":
        try: (error, nickname) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
        except: nickname = uid
    if nickname_encoded == "":
        try: (err, nickname_encoded) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
        except: nickname_encoded = uid
    return '[url=client://{0}/{1}~]"{2}"[/url]'.format(clid, uid, quote_plus(nickname_encoded), nickname)
Exemplo n.º 17
0
 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
Exemplo n.º 18
0
 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)
Exemplo n.º 19
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.º 20
0
 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
Exemplo n.º 21
0
    def onClientMoveMovedEvent(self, serverConnectionHandlerID, clientID,
                               oldChannelID, newChannelID, visibility, moverID,
                               moverName, moverUID, moveMessage):
        (err, myid) = ts3lib.getClientID(serverConnectionHandlerID)
        if err != ts3defines.ERROR_ok:
            self.log(LogLevel.LogLevel_DEBUG,
                     "error getting clientid : %s" % err)

        (err,
         myChannelID) = ts3lib.getChannelOfClient(serverConnectionHandlerID,
                                                  myid)
        if self.debug:
            ts3lib.printMessageToCurrentTab("%s" % clientID)
            ts3lib.printMessageToCurrentTab("%s" % myid)
            ts3lib.printMessageToCurrentTab("%s" % newChannelID)
            ts3lib.printMessageToCurrentTab("%s" % myChannelID)

        if ((newChannelID in self.channels or self.enabled)
                and newChannelID == myChannelID and clientID != myid
                and moverID != myid):
            ts3lib.printMessageToCurrentTab("%s" % clientID)
            (err, movedUID) = ts3lib.getClientVariable(
                serverConnectionHandlerID, clientID,
                ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
            ts3lib.printMessageToCurrentTab("%s" % movedUID)
            if err != ts3defines.ERROR_ok:
                ts3lib.printMessageToCurrentTab("error getting uid: %s" % err)

            if ((moverUID in self.uidsMover) or (movedUID in self.uids)):
                return 0

            #err = ts3lib.requestClientMove(serverConnectionHandlerID, clientID, oldChannelID, "")
            if err != ts3defines.ERROR_ok:
                ts3lib.printMessageToCurrentTab("error moving: %s" % err)
Exemplo n.º 22
0
 def onUserLoggingMessageEvent(self, logMessage, logLevel, logChannel, schid, logTime, completeLogString):
     if logLevel != ts3defines.LogLevel.LogLevel_DEBUG: return
     if schid != ts3lib.getCurrentServerConnectionHandlerID(): return
     if logChannel != "VolumeLeveler": return
     clid, level = parseMessage(logMessage)
     if not clid in self.clients: return
     # date = parseTime(logTime)
     if self.clients[clid] > self.maxviolations:
         self.clients[clid] = 0
         client = self.ts3host.getUser(schid, clid)
         if not client.server.me.getChannelGroupId() in [self.tabs[schid]["channelModGroup"], client.server.defaultChannelAdminGroup]:
             client.mute()
             return
         (err, country) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientPropertiesRare.CLIENT_COUNTRY)
         msg = "[color=red]You exceeded the volume limit {violations} times, your talk power has been revoked!"
         if country in ["DE", "AT", "CH"]: msg = "[color=red]Du hast {violations} mal das Lautstaerkelimit von {limit} ueberschritten, deine Talk Power wurde entzogen!"
         tp = client.channel.neededTalkPower
         if not tp or tp < 1 or tp == "-1":
             ts3lib.requestSetClientChannelGroup(schid, [self.tabs[schid]["channelBanGroup"]], [client.channel.channelID], [client.databaseID])
         err = ts3lib.requestClientSetIsTalker(schid, clid, False)
         if err != ts3defines.ERROR_ok: return
         client.sendTextMsg(msg.replace("{violations}",str(self.maxviolations)).replace("{limit}",str(self.maxlevel)))
         return
     if level > self.maxlevel:
         self.clients[clid] += 1
         print(clid, level, self.clients[clid])
Exemplo n.º 23
0
 def getClientCounts(self, schid):
     ret = {"total": {}, "visible": {}, "hidden": {}}
     visible = self.ts3host.getServer(
         schid).users  # err, visible = ts3lib.getClientList(schid)
     ret["visible"]["users"] = 0
     ret["visible"]["queries"] = 0
     for user in visible:
         (err, ctype) = ts3lib.getClientVariable(
             schid, user.clientID,
             ts3defines.ClientPropertiesRare.CLIENT_TYPE)
         if ctype == ts3defines.ClientType.ClientType_NORMAL:
             ret["visible"]["users"] += 1
         elif ctype == ts3defines.ClientType.ClientType_SERVERQUERY:
             ret["visible"]["queries"] += 1
     ret["visible"]["total"] = ret["visible"]["users"] + ret["visible"][
         "queries"]  # len(visible)
     (err, ret["total"]["clients"]) = ts3lib.getServerVariable(
         schid,
         ts3defines.VirtualServerProperties.VIRTUALSERVER_CLIENTS_ONLINE)
     (err, ret["total"]["queries"]) = ts3lib.getServerVariable(
         schid, ts3defines.VirtualServerPropertiesRare.
         VIRTUALSERVER_QUERYCLIENTS_ONLINE)
     (err, ret["max"]) = ts3lib.getServerVariable(
         schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_MAXCLIENTS)
     ret["hidden"][
         "total"] = ret["total"]["clients"] - ret["visible"]["total"]
     return ret
Exemplo n.º 24
0
 def onNewChannelCreatedEvent(self, schid, cid, channelParentID, invokerID, invokerName, invokerUniqueIdentifier):
     if not schid in self.targets: return
     (err, uid) = ts3lib.getClientVariable(schid, invokerID, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
     if err != ts3defines.ERROR_ok or not uid: return
     if PluginHost.cfg.getboolean("general", "verbose"): print(self.name,"onNewChannelCreatedEvent > self.targets[schid]",self.targets[schid],"uid",uid)
     if self.targets[schid] != uid: return
     self.join(schid, invokerID, cid)
Exemplo n.º 25
0
 def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID):
     if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CLIENT:
         if menuItemID == 0:
             (err, uid) = ts3lib.getClientVariable(
                 schid, selectedItemID,
                 ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
             ts3lib.banadd(schid, "", "", uid, 0, "")
Exemplo n.º 26
0
 def onServerGroupClientAddedEvent(self, schid, clid, clientName, clientUniqueIdentity, sgid, invokerClientID, invokerName, invokerUniqueIdentity):
     if sgid in self.sgids:
         err, description = ts3lib.getClientVariable(schid, clid, ts3defines.ClientPropertiesRare.CLIENT_DESCRIPTION)
         print("description:", description)
         if re.match(".*\d\d.\d\d \d\d:\d\d:\d\d | .*", description): return
         description = "{} {}".format(description, self.description.format(datetime.now(),invokerName=invokerName))
         ts3lib.requestClientEditDescription(schid, clid, description)
Exemplo n.º 27
0
 def setupTable(self):
     tbl = self.tbl_variables
     tbl.clearContents()
     tbl.setRowCount(0)
     for i in self.info.getInfoData(self.schid, self.selectedItemID,
                                    self.atype):
         k = i.split(': ')[0]
         v = i.split(': ')[1]
         pos = tbl.rowCount
         tbl.insertRow(pos)
         tbl.setItem(pos, 0, QTableWidgetItem(k))
         tbl.setItem(pos, 1, QTableWidgetItem(v))
     name = info.name
     if self.atype == PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL:
         err, name = ts3lib.getServerVariable(
             self.schid, VirtualServerProperties.VIRTUALSERVER_NAME)
     elif self.atype == PluginMenuType.PLUGIN_MENU_TYPE_CHANNEL:
         err, name = ts3lib.getChannelVariable(
             self.schid, self.selectedItemID,
             ChannelProperties.CHANNEL_NAME)
     elif self.atype == PluginMenuType.PLUGIN_MENU_TYPE_CLIENT:
         err, name = ts3lib.getClientVariable(
             self.schid, self.selectedItemID,
             ClientProperties.CLIENT_NICKNAME)
     tbl.sortItems(0)
     self.setWindowTitle("{}'s Variables".format(name))
Exemplo n.º 28
0
def getClientIDByUID(schid, uid):
    (err, clids) = ts3lib.getClientList(schid)
    for clid in clids:
        (err, _uid) = ts3lib.getClientVariable(
            schid, clid, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER)
        if uid == _uid: return clid
    return False
Exemplo n.º 29
0
 def onUpdateClientEvent(self, schid, clid, invokerID, invokerName, invokerUniqueIdentifier):
     if schid != self.aka[0]: return
     if clid != self.aka[1]: return
     (err, name) = ts3lib.getClientVariable(schid, clid, ts3defines.ClientProperties.CLIENT_NICKNAME)
     if name == self.aka[3]: return
     ts3lib.setClientSelfVariableAsString(schid, ts3defines.ClientProperties.CLIENT_NICKNAME, "{} aka {}".format(self.aka[2], name))
     ts3lib.flushClientSelfUpdates(schid)
Exemplo n.º 30
0
 def onUpdateChannelEditedEvent(self, schid, channelID, invokerID, invokerName, invokerUniqueIdentifier):
     (err, suid) = ts3lib.getServerVariable(schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER)
     if suid != self.suid: return
     (err, ownID) = ts3lib.getClientID(schid)
     if invokerID == ownID:
         (err, self.settings["maxclients"]) = ts3lib.getChannelVariable(schid, channelID, ts3defines.ChannelProperties.CHANNEL_MAXCLIENTS)
         (err, self.settings["tp"]) = ts3lib.getChannelVariable(schid, channelID, ts3defines.ChannelPropertiesRare.CHANNEL_NEEDED_TALK_POWER)
     (err, ownChannel) = ts3lib.getChannelOfClient(schid, ownID)
     if channelID != ownChannel: return
     (err, invokerChannel) = ts3lib.getChannelOfClient(schid, invokerID)
     if invokerChannel == channelID: return
     _needed = False
     (err, ntp) = ts3lib.getChannelVariable(schid, channelID, ts3defines.ChannelPropertiesRare.CHANNEL_NEEDED_TALK_POWER)
     if ntp != self.settings["tp"]:
         _needed = True
         ts3lib.setChannelVariableAsInt(schid, channelID, ts3defines.ChannelPropertiesRare.CHANNEL_NEEDED_TALK_POWER, self.settings["tp"])
     (err, cmc) = ts3lib.getChannelVariable(schid, channelID, ts3defines.ChannelProperties.CHANNEL_MAXCLIENTS)
     ts3lib.setChannelVariableAsInt(schid, channelID, ts3defines.ChannelPropertiesRare.CHANNEL_FLAG_MAXCLIENTS_UNLIMITED, 0)
     if cmc != self.settings["maxclients"]:
         _needed = True
         ts3lib.setChannelVariableAsInt(schid, channelID, ts3defines.ChannelProperties.CHANNEL_MAXCLIENTS, self.settings["maxclients"])
     if _needed:
         ts3lib.flushChannelUpdates(schid, channelID)
         self.violations[invokerUniqueIdentifier] += 1
         if self.violations[invokerUniqueIdentifier] > 2:
             (err, dbid) = ts3lib.getClientVariable(schid, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID)
             ts3lib.requestSetClientChannelGroup(schid, [9], [channelID], [dbid])
             del self.violations[invokerUniqueIdentifier]