def onTextMessageEvent(self, schid, targetMode, toID, fromID, fromName, fromUniqueIdentifier, message, ffIgnored): try: mClientID = ts3.getClientID(schid)[1] if (mClientID == fromID): return messageL = message.lower() parts = message.split(" ") msg = "no " foundNo = False foundU = False for current in parts: if (current == "no"): msg += "no " foundNo = True elif (current == "u"): msg += current foundU = True break else: continue if (not foundNo or not foundU): return if (targetMode == 1): #private msg ts3.requestSendPrivateTextMsg(schid, msg, fromID, "") if (targetMode == 2): #channel msg ts3.requestSendChannelTextMsg(schid, msg, 0, "") except: from traceback import format_exc;ts3.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon", 0)
def sendCommand(name, cmd, schid=0, silent=True, reverse=False, mode=1): """ Sends a command through TS3Hook. :param mode: See enum: HookMode :param reverse: :param name: :param cmd: :param schid: :param silent: """ if schid == 0: schid = ts3lib.getCurrentServerConnectionHandlerID() if PluginHost.cfg.getboolean("general", "verbose") or not silent: ts3lib.printMessage( schid, '{timestamp} [color=orange]{name}[/color]:[color=white] {prefix}{message}' .format(timestamp=timestamp(), name=name, prefix="-" if reverse else "~", message=cmd), ts3defines.PluginMessageTarget.PLUGIN_MESSAGE_TARGET_SERVER) print("mode:", mode) if mode == HookMode.TS3HOOK: cmd = "{}cmd{}".format("-" if reverse else "~", cmd.replace(" ", "~s")) elif mode == HookMode.TSPATCH: cmd = "{}{}".format("-" if reverse else "~", cmd) else: raise SyntaxError("No HookMode specified!") (err, clid) = ts3lib.getClientID(schid) retcode = "" # "TS3Hook:Command:{}".format(ts3lib.createReturnCode(256)) err = ts3lib.requestSendPrivateTextMsg(schid, cmd, clid, retcode) if err != ts3defines.ERROR_ok: ts3lib.requestSendChannelTextMsg(schid, cmd, 0, retcode) if err != ts3defines.ERROR_ok: ts3lib.requestSendServerTextMsg(schid, cmd, retcode)
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)
def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID): if menuItemID != 0: return if atype == ts3defines.PluginItemType.PLUGIN_CHANNEL: ts3lib.requestSendChannelTextMsg(schid, self.steammsg, selectedItemID) elif atype == ts3defines.PluginItemType.PLUGIN_CLIENT: ts3lib.requestSendPrivateTextMsg(schid, self.steammsg, selectedItemID)
def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID): if menuItemID != 0: return if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL: self.printContacts() elif atype == ts3defines.PluginItemType.PLUGIN_CHANNEL: ts3lib.requestSendChannelTextMsg(schid, self.contactStats(), selectedItemID) elif atype == ts3defines.PluginItemType.PLUGIN_CLIENT: ts3lib.requestSendPrivateTextMsg(schid, self.contactStats(), selectedItemID)
def answerMessage(self, schid, targetMode, toID, fromID, message, hideprefix=False): if schid in self.noperms: ts3lib.printMessageToCurrentTab("Insufficient permissions to answer message from {0}".format(fromID)); return message = [message[i:i + 1024] for i in range(0, len(message), 1024)] if targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CLIENT: for msg in message: self.returnCode = ts3lib.createReturnCode(); ts3lib.requestSendPrivateTextMsg(schid, msg, fromID, self.returnCode) elif targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CHANNEL: if hideprefix: for msg in message: self.returnCode = ts3lib.createReturnCode(); ts3lib.requestSendChannelTextMsg(schid, "{0}".format(msg), toID, self.returnCode) else: for msg in message: self.returnCode = ts3lib.createReturnCode(); ts3lib.requestSendChannelTextMsg(schid, "[url=client://]@[/url]%s: %s" % ( self.clientURL(schid, fromID), msg), toID, self.returnCode)
def commandChannelMessage(self, schid, targetMode, toID, fromID, params=""): try: _p = params.split(" ",1);target = int(_p[0]);message = _p[1] if self.cfg.getboolean("general", "debug"): ts3lib.printMessageToCurrentTab("Found Channel ID: {0}".format(target)) except: (error, target) = ts3lib.getChannelOfClient(schid, fromID);message = params if self.cfg.getboolean("general", "debug"): ts3lib.printMessageToCurrentTab("Found No Channel ID.") (error, ownID) = ts3lib.getClientID(schid) (error, ownChan) = ts3lib.getChannelOfClient(schid, ownID) if not ownChan == target: ts3lib.requestClientMove(schid, ownID, target, "123") ts3lib.requestSendChannelTextMsg(schid, "Message from {0}: {1}".format(self.clientURL(schid, fromID), message), target) if not ownChan == target: ts3lib.requestClientMove(schid, ownID, ownChan, "123")
def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID): if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL: if menuItemID == 0: self.printContacts() elif menuItemID == 1: ts3lib.printMessageToCurrentTab("{}{}".format( timestamp(), self.onlineContacts(schid, False))) elif atype == ts3defines.PluginItemType.PLUGIN_CHANNEL: ts3lib.requestSendChannelTextMsg(schid, self.contactStats(), selectedItemID) elif atype == ts3defines.PluginItemType.PLUGIN_CLIENT: ts3lib.requestSendPrivateTextMsg(schid, self.contactStats(), selectedItemID)
def onClientKickFromChannelEvent(self, schid, clientID, oldChannelID, newChannelID, visibility, kickerID, kickerName, kickerUniqueIdentifier, kickMessage): if not self.toggle == clientID: return try: self.count += 1 ts3lib.requestSendChannelTextMsg( schid, "Kick {0}, lol".format(self.count), oldChannelID) except: from traceback import format_exc ts3lib.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "pyTSon", 0)
def onTextMessageEvent(self, schid, targetMode, toID, fromID, fromName, fromUniqueIdentifier, message, ffIgnored): if targetMode != ts3defines.TextMessageTargetMode.TextMessageTarget_CHANNEL: return if fromUniqueIdentifier != self.botUID: return # if fromName != self.botNick: return (err, suid) = ts3lib.getServerVariable( schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_UNIQUE_IDENTIFIER) if suid != self.sUID: return if not self.msg in message: return ts3lib.requestSendChannelTextMsg(schid, "!play", toID) self.schid = schid self.botCLID = fromID QTimer.singleShot(self.delay, self.doBet)
def onNetworkReply(self, reply): if reply.error() == QNetworkReply.NoError: try: message = str( json.loads(reply.readAll().data().decode('utf-8'))) if self.mode: if self.target == 1: ts3.requestSendPrivateTextMsg(self.schid, message, self.fromID) if self.target == 2: (error, mych) = ts3.getChannelOfClient(self.schid, self.myid) ts3.requestSendChannelTextMsg(self.schid, message, mych) else: ts3.printMessageToCurrentTab(str(message)) except: ts3.printMessageToCurrentTab(format_exc())
def sendScores(self, schid, scores, mode, string): place = 1 for k, v in scores: string += '{place}: {clientURL} {val}\n'.format( place=place, clientURL=clientURL(schid, k), val=self.processVar(v, mode)) place += 1 (err, ownid) = ts3lib.getClientID(schid) (err, ownchan) = ts3lib.getChannelOfClient(schid, ownid) message = [string[i:i + 900] for i in range(0, len(string), 900)] # message = re.findall('.{1,1024}(?:\n|$)', string) # message = (textwrap.wrap(string, 1024)) # message = (line.strip() for line in re.findall(r'.{1,80}(?:\s+|$)', string)) # message = textwrap.wrap(string, 1024, break_long_words=False) c = 0 for msg in message: ts3lib.requestSendChannelTextMsg( schid, '\n{0}'.format(msg) if c > 0 else msg, ownchan) c += 1
def sendMessage(self, schid, targetMode, toID): x = QWidget() clipboard = QApplication.clipboard().text(); _message = QInputDialog.getMultiLineText(x, "Enter long text here", "", clipboard) message = [_message[i:i + self.maxsize] for i in range(0, len(_message), self.maxsize)] if targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CHANNEL: for msg in message: error = ts3lib.requestSendChannelTextMsg(schid, "\n"+msg, toID) if not error == ts3defines.ERROR_ok: _t = QMessageBox(QMessageBox.Critical, "Error #%s"%error,"Unable to send message to #%s!"%toID);_t.show();return elif targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CLIENT: for msg in message: error = ts3lib.requestSendPrivateTextMsg(schid, "\n"+msg, toID) if not error == ts3defines.ERROR_ok: _t = QMessageBox(QMessageBox.Critical, "Error #%s"%error,"Unable to send message to #%s!"%toID);_t.show();return
def answerMessage(schid: int, targetMode: int, fromID: int, message: str, returnCode: str = "", prefix: bool = True): mode = TextMessageTargetMode if prefix and targetMode == mode.TextMessageTarget_CHANNEL: message = "{}: {}".format( clientURL(schid, fromID, quote=False, mention=True), message) print(message) message = [message[i:i + 900] for i in range(0, len(message), 900)] if targetMode == mode.TextMessageTarget_SERVER: for msg in message: ts3lib.requestSendServerTextMsg(schid, msg, returnCode) elif targetMode == mode.TextMessageTarget_CHANNEL: for msg in message: ts3lib.requestSendChannelTextMsg(schid, msg, 0, returnCode) elif targetMode == mode.TextMessageTarget_CLIENT: for msg in message: ts3lib.requestSendPrivateTextMsg(schid, msg, fromID, returnCode) else: ts3lib.printMessageToCurrentTab("".join(message))
def csend(message): if message == None: return 'no message' err, client = ts3lib.getClientID(schid()) if err: return err err, channelid = ts3lib.getChannelOfClient(schid(), client) if err: return err return ts3lib.requestSendChannelTextMsg(schid(), message, channelid)
def processCommand(self, schid, command): tokens = command.split(' ') if len(tokens) == 0: return True (err, myid) = ts3lib.getClientID(schid) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error getting client id: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True (err, cid) = ts3lib.getChannelOfClient(schid, myid) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error getting channel id: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True if tokens[0] == "time": err = ts3lib.requestSendChannelTextMsg(schid, "It's %s" % time.asctime(time.localtime(time.time())), cid) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error sending txt message: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True elif tokens[0] == "greet": (err, svname) = ts3lib.getServerVariableAsString(schid, ts3defines.VirtualServerProperties.VIRTUALSERVER_NAME) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error getting server name: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True (err, cname) = ts3lib.getChannelVariableAsString(schid, cid, ts3defines.ChannelProperties.CHANNEL_NAME) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error getting channel name: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True err = ts3lib.requestSendChannelTextMsg(schid, "Welcome in %s on %s" % (cname, svname), cid) if err != ts3defines.ERROR_ok: ts3lib.printMessageToCurrentTab("Error sending txt message: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1])) return True
def commandSay(self, schid, targetMode, toID, fromID, params=""): if targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CLIENT: ts3lib.requestSendPrivateTextMsg(schid, params, fromID) elif targetMode == ts3defines.TextMessageTargetMode.TextMessageTarget_CHANNEL: ts3lib.requestSendChannelTextMsg(schid, "{0}: {1}".format(self.clientURL(schid, fromID), params), toID)
def sendTextMsg(self, msg): err = ts3lib.requestSendChannelTextMsg(self.schid, msg, self.channelID) if err != ts3defines.ERROR_ok: raise ts3Error("Error sending message to channel: (%s, %s)" % (err, ts3lib.getErrorMessage(err)[1]))
def onMenuItemEvent(self, schid, atype, menuItemID, selectedItemID): try: if atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_GLOBAL: if menuItemID == 1: # Message all Clients (error, clients) = ts3lib.getClientList(schid) msgs = self.getText(multiline=True,title="Message all %s clients on this server"%len(clients),text="Enter Private Message") if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue for msg in msgs: ts3lib.requestSendPrivateTextMsg(schid, msg, c) elif menuItemID == 2: # OffineMessage all Clients (error, clients) = ts3lib.getClientList(schid) (error, ownID) = ts3lib.getClientID(schid) uids = [] for c in clients: if c == ownID: continue (error, uid) = ts3lib.getClientVariableAsString(schid, c, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) uids.append(uid) if not self.dlg: self.dlg = MessageDialog(schid, uids) self.dlg.show();self.dlg.raise_();self.dlg.activateWindow() elif menuItemID == 3: # Message all Channels (error, channels) = ts3lib.getChannelList(schid) msgs = self.getText(multiline=True,title="Message all %s channels on this server"%len(channels),text="Enter Channel Message") (error, ownID) = ts3lib.getClientID(schid) for c in channels: error = ts3lib.requestClientMove(schid, ownID, c, "123") if not error == ts3defines.ERROR_ok: continue for msg in msgs: ts3lib.requestSendChannelTextMsg(schid, msg, c) elif menuItemID == 4: # Poke all Clients (error, clients) = ts3lib.getClientList(schid) msgs = self.getText(title="Poke all %s clients on this server"%len(clients),text="Enter Poke Message",max=100) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue for msg in msgs: ts3lib.requestClientPoke(schid, c, msg) elif menuItemID == 5: # ChannelKick all Clients (error, clients) = ts3lib.getClientList(schid) msg = self.getText(title="Kick all %s clients on this server from their channel"%len(clients),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.requestClientKickFromChannel(schid, c, msg) elif menuItemID == 6: # ChannelBan all Clients (error, clients) = ts3lib.getClientList(schid) msg = self.getText(title="ChannelBan all %s clients on this server"%len(clients),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue (error, chan) = ts3lib.getChannelOfClient(schid, selectedItemID) (error, dbid) = ts3lib.getClientVariableAsUInt64(schid, c, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID) ts3lib.requestSetClientChannelGroup(schid, [self.sbgroup], [chan], [dbid]) ts3lib.requestClientKickFromChannel(schid, c, msg) elif menuItemID == 7: # Kick all Clients (error, clients) = ts3lib.getClientList(schid) msg = self.getText(title="Kick all %s clients from this server"%len(clients),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.requestClientKickFromServer(schid, c, msg) elif menuItemID == 8: # Ban all Clients (error, clients) = ts3lib.getClientList(schid) msg = self.getText(title="Ban all %s clients from this server"%len(clients),text="Enter Ban Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.banclient(schid, c, -1, msg) elif menuItemID == 9: # Delete all Channels (error, channels) = ts3lib.getChannelList(schid) confirmation = self.confirm('Delete all Channels', 'Do you really want to delete all {0} channels on this server?'.format(len(channels))) if not confirmation: return for c in channels: ts3lib.requestChannelDelete(schid, c, True) elif atype == ts3defines.PluginMenuType.PLUGIN_MENU_TYPE_CHANNEL: if menuItemID == 1: # Message all Clients (error, clients) = ts3lib.getChannelClientList(schid, selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msgs = self.getText(multiline=True,title="Message to all %s clients in channel \"%s\""%(len(clients),name),text="Enter Private Message") if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue for msg in msgs: ts3lib.requestSendPrivateTextMsg(schid, msg, c) if menuItemID == 2: # OfflineMessage all Clients (error, clients) = ts3lib.getChannelClientList(schid, selectedItemID) (error, ownID) = ts3lib.getClientID(schid) uids = [] for c in clients: if c == ownID: continue (error, uid) = ts3lib.getClientVariableAsString(schid, c, ts3defines.ClientProperties.CLIENT_UNIQUE_IDENTIFIER) uids.append(uid) if not self.dlg: self.dlg = MessageDialog(schid, uids) self.dlg.show();self.dlg.raise_();self.dlg.activateWindow() elif menuItemID == 3: # Poke all Clients (error, clients) = ts3lib.getChannelClientList(schid, selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msgs = self.getText(title="Poke all %s clients in channel \"%s\""%(len(clients),name),text="Enter Poke Message",max=100) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue for msg in msgs: ts3lib.requestClientPoke(schid, c, msg) elif menuItemID == 4: # ChannelKick all Clients (error, clients) = ts3lib.getChannelClientList(schid,selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msg = self.getText(title="Kick all %s clients from channel \"%s\""%(len(clients),name),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.requestClientKickFromChannel(schid, c, msg) elif menuItemID == 5: # ChannelBan all Clients (error, clients) = ts3lib.getChannelClientList(schid,selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msg = self.getText(title="ChannelBan all %s clients from channel \"%s\""%(len(clients),name),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue (error, dbid) = ts3lib.getClientVariableAsUInt64(schid, c, ts3defines.ClientPropertiesRare.CLIENT_DATABASE_ID) ts3lib.requestSetClientChannelGroup(schid, [self.sbgroup], [selectedItemID], [dbid]) ts3lib.requestClientKickFromChannel(schid, c, msg) elif menuItemID == 6: # Kick all Clients (error, clients) = ts3lib.getChannelClientList(schid,selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msg = self.getText(title="Kick all %s clients in channel \"%s\" from this server"%(len(clients),name),text="Enter Kick Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.requestClientKickFromServer(schid, c, msg) elif menuItemID == 7: # Ban all Clients (error, clients) = ts3lib.getChannelClientList(schid,selectedItemID) (err, name) = ts3lib.getChannelVariableAsString(schid, selectedItemID, ts3defines.ChannelProperties.CHANNEL_NAME) msg = self.getText(title="Ban all %s clients in channel \"%s\""%(len(clients),name),text="Enter Ban Reason",multimsg=False,max=80) if bool(self.ok) != True:return (error, ownID) = ts3lib.getClientID(schid) for c in clients: if c == ownID: continue ts3lib.banclient(schid, c, -1, msg) except: from traceback import format_exc;ts3lib.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "pyTSon", 0)