def __init__(self, bm): self.YES = "yes" self.NO = "no" self.SPLITMARK = "###" self.XPATHARG = "{@@}" self.driver = bm.getDriver() self.proxyIp = bm.getIp() self.proxyPort = bm.getPort() self.operate = Operate(self.driver) self.currentWindow = self.driver.current_window_handle self.defaultWindow = self.driver.current_window_handle
def plan(fileoutName, virusPlotName, runNumber): fileT = fileoutName + str(runNumber) + ".dat" fileT2 = virusPlotName + str(runNumber) l = [] for i in range(0, constants.N_vacc): x = randint(constants.cs_minX, constants.cs_maxX) y = randint(constants.cs_minY, constants.cs_maxY) l.append((x, y)) operator = Operate(CoordinateSystem(), [FSM(24, 1)], Vaccine(l)) reporter = Report(operator, fileT, fileT2, [0.33, 0.42, 0.5, 0.58, 0.67]) for i in range(constants.N_turns): operator.run() reporter.update() reporter.reveal_virus(i) reporter.output()
class AutoForm(object): def __init__(self, bm): self.YES = "yes" self.NO = "no" self.SPLITMARK = "###" self.XPATHARG = "{@@}" self.driver = bm.getDriver() self.proxyIp = bm.getIp() self.proxyPort = bm.getPort() self.operate = Operate(self.driver) self.currentWindow = self.driver.current_window_handle self.defaultWindow = self.driver.current_window_handle def getCurrentWindow(self): return self.currentWindow def getDefaultWindow(self): return self.defaultWindow def setCurrentWindow(self, cWindow): self.currentWindow = cWindow def setDefaultWindow(self, dWindow): self.defaultWindow = dWindow def getDriver(self): return self.driver ''' 结合operate中操作,生成带窗口状态处理的新操作 ''' def doOperate(self, by, xpath, value, op): operateDic = { "closeotherwindows": self.closeOtherWindows, "switchtowindowbyclick": self.switchToWindowByClick, "switchtodefaultwindow": self.switchToDefaultWindow, "setcurrwinasdefault": self.setCurrWinAsDefault } try: if (operateDic.has_key(op.lower())): return operateDic.get(op.lower())(xpath, value, by) else: # 处理非WebDriver处理的请求方法 if (op.lower() == "sameaslocalfile"): if (self.proxyIp <> "" and self.proxyIp <> None): t_proxy = self.proxyIp + str(self.proxyPort) else: t_proxy = "" return self.operate.sameAsLocalFile(by, xpath, value, proxy=t_proxy) # 处理WebDriver处理的请求方法 else: return self.operate.operate(by, xpath, value, op.lower()) except Exception as e: return { "state": False, "info": getErrInfo(xpath, op, value, str(e)) } ''' 设置当前窗口作为默认窗口 ''' def setCurrWinAsDefault(self, xpath, value): result = {} try: self.setDefaultWindow(self.driver.current_window_handle) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "setCurrWinAsDefault", value, str(e)) } return result ''' 关闭当前窗口以外的窗口 ''' def closeOtherWindows(self, xpath, value): result = {} try: allWindows = self.driver.window_handles for i in range(0, allWindows.__len__()): tempWindow = allWindows.__getitem__(i) if (self.currentWindow <> tempWindow): self.driver.switch_to.window(tempWindow) self.driver.close() self.driver.switch_to.window(self.currentWindow) self.setDefaultWindow(self.driver.current_window_handle) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "closeOtherWindows", value, str(e)) } return result ''' 点击某个元素后,打开新窗口,并指向新窗口 ''' def switchToWindowByClick(self, xpath, value, by): result = {} try: oriWindows = self.driver.window_handles self.driver.find_element(by, xpath).click() self.driver.implicitly_wait(3) nowWindows = self.driver.window_handles newWindow = None for i in range(0, nowWindows.__len__()): t = nowWindows.__getitem__(i) try: oriWindows.index(t) continue except: newWindow = t break if (newWindow <> None): self.driver.switch_to.window(newWindow) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} else: result = { "state": False, "info": getErrInfo(xpath, "switchToWindowByClick", value, "can't find new Window by click this element!") } except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "switchToWindowByClick", value, str(e)) } return result ''' 指向原窗口 ''' def switchToDefaultWindow(self, xpath, value): result = {} try: self.driver.switch_to.window(self.getDefaultWindow()) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "switchToDefaultWindow", value, str(e)) } return result ''' 合并way数组,xpath数组,操作数组,值数组. 构成字典列表 ''' def mergeInputDatas(self, filePath): em = ExcelManage(filePath) casename_array = em.getDatasByCol('case', 0, 1) caseinfro_array = em.getDatasByCol('case', 1, 1) way_array = em.getDatasByCol('case', 2, 1) xpath_array = em.getDatasByCol('case', 3, 1) option_array = em.getDatasByCol('case', 4, 1) data_array = em.getDatasByCol('case', 5, 1) length = casename_array.__len__() inputDatas = [] for i in range(0, length): if (i >= caseinfro_array.__len__()): t_caseinfro = "" else: t_caseinfro = caseinfro_array[i] if (i >= way_array.__len__()): t_way = "" else: t_way = way_array[i] if (i >= xpath_array.__len__()): t_xpath = "" else: t_xpath = xpath_array[i] if (i >= option_array.__len__()): t_op = "" else: t_op = option_array[i] if (i >= data_array.__len__()): t_value = "" else: t_value = data_array[i] inputDatas.append({ "casename": casename_array[i], "caseinfro": t_caseinfro, "way": t_way, "xpath": t_xpath, "op": t_op, "value": t_value }) return inputDatas def fixTheForm(self, caseinfro, by, xpath, value, op, logDir=None): result = { "state": True, "info": self.getNowStrftime(), "title": ">>>" + caseinfro } t_result = self.doOperate(by, xpath, value, op) if (not t_result.get("state")): if ((xpath or "").__len__() > 0 and getElement.isElementPresent(self.driver, by, xpath)): getElement.scrollToElement(self.driver, self.driver.find_element(by, xpath)) result = self.mergeResult(result, t_result) if (result.get("state")): result.__setitem__("info", result.get("info") + " PASS\n") return result ''' 获取当前时间的格式化字符串 ''' def getNowStrftime(self): return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") def getNowStrftime2(self): return datetime.datetime.now().strftime("%Y%m%d%H%M%S") ''' 合并各个步骤的测试结果(没用) ''' def mergeResult(self, result, t_result): result.__setitem__("state", result.get("state") and t_result.get("state")) result.__setitem__("info", result.get("info") + "\n" + t_result.get("info")) return result ''' 获取查找元素的方式 ''' def getWays(self, way): by = '' if way == 'id': by = By.ID elif way == "name": by = By.NAME elif way == "xpath": by = By.XPATH elif way == "css": by = By.CSS_SELECTOR elif way == "text": by = By.LINK_TEXT elif way == "classname": by = By.CLASS_NAME return by ''' 运行指定格式sheet页case中的测试用例 ''' def runCase(self, filePath, casename, logsDir=None): #获取case中可执行的用例数 resultList = [] datas = self.mergeInputDatas(filePath) for i in range(0, datas.__len__()): tmp = datas.__getitem__(i) runcase = tmp.get('casename') if runcase == casename and runcase != "": way = tmp.get("way") caseinfro = tmp.get("caseinfro") xpath = tmp.get("xpath") op = tmp.get("op") value = tmp.get('value') by = self.getWays(way) t_result = self.fixTheForm(caseinfro, by, xpath, value, op, logDir=logsDir) resultList.append(t_result) return resultList ''' 获取testcase指定格式excel中的测试集,可运行状态是否 ''' @staticmethod def getTestSuiteFromStdExcel(filePath): em = ExcelManage(filePath) caseArray = em.getDatasByCol('testcase', 0, 1) stateArray = em.getDatasByCol('testcase', 1, 1) caseinfro = em.getDatasByCol('testcase', 2, 1) print caseinfro print stateArray.__len__() runCaseList = [] for i in range(0, stateArray.__len__()): if (stateArray[i] == 'Y'): runCaseList.append({ "caseinfro": caseinfro[i], "testmethod": caseArray[i] }) return runCaseList ''' 退出WebDriver ''' def quitDriver(self): self.driver.quit()
class AutoForm(object): def __init__(self, bm): self.YES = "yes" self.NO = "no" self.SPLITMARK = "###" self.XPATHARG ="{@@}" self.driver = bm.getDriver() self.proxyIp= bm.getIp() self.proxyPort=bm.getPort() #self.driver = webdriver.Chrome() self.operate = Operate(self.driver) self.currentWindow = self.driver.current_window_handle self.defaultWindow = self.driver.current_window_handle def getCurrentWindow(self): return self.currentWindow def getDefaultWindow(self): return self.defaultWindow def setCurrentWindow(self, cWindow): self.currentWindow = cWindow def setDefaultWindow(self, dWindow): self.defaultWindow = dWindow def getDriver(self): return self.driver ''' 结合operate中操作,生成带窗口状态处理的新操作 ''' def doOperate(self, op, xpath, value): operateDic = { "closeotherwindows": self.closeOtherWindows, "switchtowindowbyclick": self.switchToWindowByClick, "switchtodefaultwindow": self.switchToDefaultWindow, "setcurrwinasdefault": self.setCurrWinAsDefault } try: if (operateDic.has_key(op.lower())): return operateDic.get(op.lower())(xpath, value) else: #处理非WebDriver处理的请求方法 if(op.lower()=="sameaslocalfile"): if (self.proxyIp <> "" and self.proxyIp <> None): t_proxy=self.proxyIp+str(self.proxyPort) else: t_proxy="" return self.operate.sameAsLocalFile(xpath, value,proxy=t_proxy) else: return self.operate.operate(op.lower(), xpath, value) except Exception as e: return {"state": False, "info": getErrInfo(xpath,op,value,str(e))} ''' 设置当前窗口作为默认窗口 ''' def setCurrWinAsDefault(self,xpath,value): result = {} try: self.setDefaultWindow(self.driver.current_window_handle) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = {"state": False, "info": getErrInfo(xpath,"setCurrWinAsDefault",value,str(e))} return result ''' 关闭当前窗口以外的窗口 ''' def closeOtherWindows(self, xpath, value): result = {} try: allWindows = self.driver.window_handles for i in range(0, allWindows.__len__()): tempWindow = allWindows.__getitem__(i) if (self.currentWindow <> tempWindow): self.driver.switch_to.window(tempWindow) self.driver.close() self.driver.switch_to.window(self.currentWindow) self.setDefaultWindow(self.driver.current_window_handle) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = {"state": False, "info": getErrInfo(xpath,"closeOtherWindows",value,str(e))} return result ''' 点击某个元素后,打开新窗口,并指向新窗口 ''' def switchToWindowByClick(self, xpath, value): result = {} try: oriWindows = self.driver.window_handles self.driver.find_element_by_xpath(xpath).click() self.driver.implicitly_wait(3) nowWindows = self.driver.window_handles newWindow = None for i in range(0, nowWindows.__len__()): t = nowWindows.__getitem__(i) try: oriWindows.index(t) continue except: newWindow = t break if (newWindow <> None): self.driver.switch_to.window(newWindow) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} else: result = {"state": False, "info": getErrInfo(xpath,"switchToWindowByClick",value,"can't find new Window by click this element!")} except Exception as e: result = {"state": False, "info": getErrInfo(xpath,"switchToWindowByClick",value,str(e))} return result ''' 指向原窗口 ''' def switchToDefaultWindow(self, xpath, value): result = {} try: self.driver.switch_to.window(self.getDefaultWindow()) self.setCurrentWindow(self.driver.current_window_handle) result = {"state": True, "info": ""} except Exception as e: result = {"state": False, "info": getErrInfo(xpath,"switchToDefaultWindow",value,str(e))} return result ''' 读取指定格式的datas,完成指定操作 datas格式要求如下: datas=[ {"xpath":"","op":"get","value":""}, {"xpath":"//input[@id='logonInfo.logUserName']","op":"sendKeys","value":"dongfang"} ] ''' def fixTheForm(self, title,datas,logDir=None,filePath=None,defaultParams=None): params={} if(defaultParams <> None and defaultParams.__len__()>0): for (k,v) in defaultParams.items(): params.__setitem__(k,v) result = {"state": True, "info": self.getNowStrftime(),"title":">>>"+title} for i in range(datas.__len__()): tmp = datas.__getitem__(i) _op=tmp.get("op").lower() _xpath=tmp.get("xpath") _value=tmp.get("value") if(_op=="skip"): continue #处理保存参数操作,value是个有返回值的js语句 pattern1=re.compile(r"\{@(\w+)@\}") m1=pattern1.match(_op) if(m1): try: ret=str(self.driver.execute_script(_value)) self.driver.implicitly_wait(2) params.__setitem__(m1.group(1),ret) t_result = {"state": True, "info": ""} result = self.mergeResult(result,t_result) continue except Exception as e: t_result = {"state": False, "info": getErrInfo(_xpath,"executeJs",_value,str(e))} result = self.mergeResult(result,t_result) continue #print params #处理带参数的xpath if (_xpath.__contains__(self.XPATHARG) and _value.__contains__(self.SPLITMARK)): indx = _value.find(self.SPLITMARK) xpathParm = _value[:indx] _xpath = _xpath.replace(self.XPATHARG,xpathParm) _value = _value[indx + self.SPLITMARK.__len__():] #处理value中含有参数 pattern2=re.compile(r".*\{@(\w+)@\}.*") c=0 while pattern2.match(_value) and c<100: #防止无限循环 m2=pattern2.match(_value) t_key=m2.group(1) c=c+1 if(params.has_key(t_key)): _value=_value.replace("{@"+t_key+"@}",params.get(t_key)) else: _value==_value.replace("{@"+t_key+"@}","{"+t_key+"}") #处理调用公共步骤 if(_op=="call" and filePath<>None): dParams={} tValues=_value.split(self.SPLITMARK) if(tValues.__len__()>1): for i in range(1,tValues.__len__()): tParamValue=tValues[i].split("=") dParams.__setitem__(tParamValue[0],tParamValue[1]) t_result=self.runSteps(filePath,tValues[0],None,dParams).__getitem__(0) t_result.__setitem__("info",u"第"+str(i+1)+u"步调用公共步骤"+_value+":"+t_result.get("info")) result = self.mergeResult(result,t_result) continue #处理上传\比较下载文件操作的相对链接 if((_op=="upload" or _op=="sameaslocalfile") and (not _value.__contains__(":"))): if(logDir<>None): _value=os.path.join(os.path.dirname(logDir),_value) else: print "can't find the logs dir,can't use the relative path" #处理正常操作 t_result = self.doOperate(_op,_xpath,_value) if(not t_result.get("state")): if((_xpath or "").__len__()>0 and BrowserManage.isElementPresent(self.driver,By.XPATH,_xpath)): BrowserManage.scrollToElement(self.driver,self.driver.find_element_by_xpath(_xpath)) if(logDir<>None): snapFile=os.path.join(logDir,self.getNowStrftime2()+".png") self.driver.get_screenshot_as_file(snapFile) snapInfo="<img 0src=\"file:\\\\\\"+os.path.abspath(snapFile).strip()+"\" height=\"600\" width=\"800\">" else: print "can't find the logs dir,can't use the relative path" snapInfo="" t_result.__setitem__("info",u"第"+str(i+1)+u"步:"+t_result.get("info")+u"\n截图:\n"+snapInfo+"\n") result = self.mergeResult(result,t_result) if(result.get("state")): result.__setitem__("info",result.get("info")+" PASS\n") return result ''' 解析指定格式数据,将其解析成fixTheForm需要的数据 originDatas的格式(元素名称)如下: ''' def parseDatasFromStdExcel(self,filePath,sheetName): em=ExcelManage(filePath) dataStepSize=int(em.getDatasByCol(sheetName,1,0,1)[0]) dataGroupSize=int(em.getDatasByCol(sheetName,2,0,1)[0]) xpath_array=self.getXpathArrayFromStdExcel(filePath,sheetName,dataStepSize) datas=[] i=0 while(i<dataGroupSize): piece=None runState=self.YES title="" isRun=em.getDatasByCol(sheetName,3+2*i,0,1)[0] if( isRun==u"忽略" or isRun==""): runState=self.NO title=em.getDatasByCol(sheetName,4+2*i,0,1)[0] op_array=em.getDatasByCol(sheetName,3+2*i,2,dataStepSize) value_array=em.getDatasByCol(sheetName,4+2*i,2,dataStepSize) piece=(runState,title,self.mergeInputDatas(xpath_array,op_array,value_array)) datas.append(piece) i=i+1 em.closeExcel() return datas ''' 获取xpathArray ''' def getXpathArrayFromStdExcel(self,filePath,sheetName,dataSize): em=ExcelManage(filePath) sheetNames=em.getDatasByCol(sheetName,1,2,dataSize) elementNames=em.getDatasByCol(sheetName,2,2,dataSize) xpath_array=[] for i in range(0,dataSize): t_sheetName=sheetNames[i].strip() t_elementName=elementNames[i].strip() if(t_sheetName=="" or t_elementName==""): xpath_array.append("") continue else: idx=em.getIndexByCol(t_sheetName,1,t_elementName) if(idx>9000): raise ValueError,"The (%d)st row in sheet(%s) of file(%s) has ERROR" % (i,sheetName,filePath) xpath_array.append(em.getDatasByCol(t_sheetName,2,idx,1)[0]) continue return xpath_array ''' 合并xpath数组,操作数组,值数组. 构成字典列表 ''' def mergeInputDatas(self,xpath_array,op_array,value_array): length=xpath_array.__len__() inputDatas=[] for i in range(0,length): t_op="" t_value="" if(i>=op_array.__len__()): t_op="" else: t_op=op_array[i] if(i>=value_array.__len__()): t_value="" else: t_value=value_array[i] inputDatas.append({"xpath":xpath_array[i],"op":t_op,"value":t_value}) return inputDatas ''' 获取当前时间的格式化字符串 ''' def getNowStrftime(self): return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") def getNowStrftime2(self): return datetime.datetime.now().strftime("%Y%m%d%H%M%S") ''' 合并各个步骤的测试结果 ''' def mergeResult(self,result,t_result): result.__setitem__("state",result.get("state") and t_result.get("state")) result.__setitem__("info",result.get("info")+"\n"+t_result.get("info")) return result ''' 运行指定格式sheet页中的测试用例 ''' def runCase(self,filePath,sheetName,logsDir=None): datas=self.parseDatasFromStdExcel(filePath,sheetName) resultList=[] for i in range(0,datas.__len__()): piece=datas.__getitem__(i) runState=piece[0] if(runState==self.NO): continue else: title=piece[1] inputDatas=piece[2] t_result=self.fixTheForm(title,inputDatas,logDir=logsDir,filePath=filePath) resultList.append(t_result) return resultList ''' 运行指定格式sheet页中的测试用例 ''' def runSteps(self,filePath,sheetName,logsDir=None,dParams=None): datas=self.parseDatasFromStdExcel(filePath,sheetName) resultList=[] for i in range(0,datas.__len__()): piece=datas.__getitem__(i) runState=piece[0] if(runState==self.NO): continue else: title=piece[1] inputDatas=piece[2] t_result=self.fixTheForm(title,inputDatas,logDir=logsDir,filePath=filePath,defaultParams=dParams) resultList.append(t_result) return resultList ''' 获取指定格式excel中的测试集 ''' @staticmethod def getTestSuiteFromStdExcel(filePath): em=ExcelManage(filePath) caseCount=int(em.getDatasByCol(u'配置',3,0,1)[0]) caseArray=em.getDatasByCol(u"配置",2,2,caseCount) stateArray=em.getDatasByCol(u"配置",3,2,caseCount) runCaseList=[] for i in range(0,caseCount): if(stateArray[i]<>u"忽略"): runCaseList.append(caseArray[i]) return runCaseList ''' 退出WebDriver ''' def quitDriver(self): self.driver.quit()
def __init__(self): self.operate = Operate() self._api = OpenApi() self._http = HttpClient.getInstance() self._pool = ThreadPool(5) # 初始化5个线程 print("Task Class 初始化完毕")
class Tasks(Codes): def __init__(self): self.operate = Operate() self._api = OpenApi() self._http = HttpClient.getInstance() self._pool = ThreadPool(5) # 初始化5个线程 print("Task Class 初始化完毕") def getAllAdmin(self): print("所有管理员: %s", variable.Admins) return variable.Admins def getAllGroup(self): print("所有关注群: %s", variable.Groups) return variable.Groups def addAdmin(self, qq): return self.operate.addAdmin(qq) def delAdmin(self, qq): return self.operate.delAdmin(qq) def isAdmin(self, qq): return self.operate.isAdmin(qq) def addGroup(self, qq): return self.operate.addGroup(qq) def delGroup(self, qq): return self.operate.delGroup(qq) def inGroup(self, qq): # print("inGroup: %s", qq) return self.operate.inGroup(qq) def addAsk(self, question, answer): return self.operate.addAsk(question, answer) def delAsk(self, Id): return self.operate.delAsk(Id) def getAsk(self, content): return self.operate.getAsk(content) def end(self): self._pool.destroy() def uin_to_qq(self, uin): if uin in variable.UsersQQ: return variable.UsersQQ.get(uin) print("获取qq %s %s %s", uin, variable.Vfwebqq, variable.Referer) html = self._http.get(variable.Get_friend_uin2.format(uin, self.bytesToStr(variable.Vfwebqq)), referer = variable.Referer) print("uin_to_qq: %s", html) try: result = json.loads(self.bytesToStr(html)) if result.get("retcode") != 0: return "" qq = result.get("result").get("account") if qq: variable.UsersQQ[uin] = str(qq) return str(qq) except Exception as e: print(e) return "" def sendMsg(self, *args, **kwargs): print("回复消息") url = kwargs.get("url") data = kwargs.get("data") # print(data) referer = kwargs.get("referer") result = self._http.post(url = url, data = data, referer = referer) print("回复结果: %s", result) def otherMsg(self, content, to, url, uin): if content: html = self._http.get(url = variable.RobotUrl.format(quote(content), uin)) html = html.replace("\\n", "").replace("\n", "") html = self._api.parse(html) html = self._api.getResult() if html: print("智能回复: ", html) data = {'r' : variable.Msg_Data.format(to, uin, html, variable.Clientid, variable.Msgid, variable.Psessionid)} print(data) self._pool.add_task(callback = self.sendMsg, url = url, data = data, referer = variable.Referer) def analyze(self, qq, uin, content, iseq = None): print("开始解析消息") if iseq: print("消息来自群") to = "group_uin" url = variable.Send_qun_msg2 else: print("消息来自好友") to = "to" url = variable.Send_buddy_msg2 # 是管理员 if self.isAdmin(qq) and content in ("开启机器人", "关闭机器人", "退出"): # 解析管理员命令 _msg = "" print("是管理员消息") if content == "开启机器人": variable.State = True print("机器人已开启") _msg = "机器人已开启" elif content == "关闭机器人": variable.State = False print("机器人已关闭") _msg = "机器人已关闭" elif content == "退出": variable.State = False variable.Exit = True print("机器人已退出") _msg = "机器人已退出" if _msg: data = {'r' : variable.Msg_Data.format(to, uin, _msg, variable.Clientid, variable.Msgid, variable.Psessionid)} self._pool.add_task(callback = self.sendMsg, url = url, data = data, referer = variable.Referer) return # 给我发送的私人消息(是否是命令) result = variable.Command.findall(content) if result and to == "to": ver, msg = result[0] _msg = "" if ver == variable.AddAdmin: # 添加管理员 print("添加管理员") if self.addAdmin(msg): _msg = "添加管理员: " + msg + " 成功" else: _msg = "添加管理员: " + msg + " 失败" elif ver == variable.DelAdmin: # 删除管理员 print("删除管理员") if self.delAdmin(msg): _msg = "删除管理员: " + msg + " 成功" else: _msg = "删除管理员: " + msg + " 失败" elif ver == variable.AddAttention: # 添加关注群号 print("添加关注群") if self.addGroup(msg): _msg = "添加关注群: " + msg + " 成功" else: _msg = "添加关注群: " + msg + " 失败" elif ver == variable.DelAttention: # 删除关注群号 print("删除关注群号") if self.delGroup(msg): _msg = "删除关注群: " + msg + " 成功" else: _msg = "删除关注群: " + msg + " 失败" if _msg: data = {'r' : variable.Msg_Data.format(to, uin, _msg, variable.Clientid, variable.Msgid, variable.Psessionid)} self._pool.add_task(callback = self.sendMsg, url = url, data = data, referer = variable.Referer) return if content.startswith("#") and len(content) > 2 and self.inGroup(iseq): # 开头以#开头并且长度大于2并且是关注群发送的消息 i = 0 content = content[1:].strip() for w in content: if w in variable.Filter: print("发现过滤词: ", w) i += 1 if i == 0: self._pool.add_task(callback = self.otherMsg, content = content, to = to, url = url, uin = uin) return else: data = {'r' : variable.Msg_Data.format(to, uin, "你想干什么!f**k", variable.Clientid, variable.Msgid, variable.Psessionid)} self._pool.add_task(callback = self.sendMsg, url = url, data = data, referer = variable.Referer) return if to == "to" and len(content) > 2: # 私人消息 self._pool.add_task(callback = self.otherMsg, content = content.strip(), to = to, url = url, uin = uin) return def delwith(self, fuin, suin, iseq, content): ''' #fuin 消息发送者 #suin 群消息发送人qq #iseq 群号码 #content 消息内容 ''' print("%s %s %s %s", fuin, suin, iseq, content) # 如果是群文件消息 if content.startswith("<?xml"): print("发现共享文件") # 发送者qq if iseq and suin: qq = self.uin_to_qq(suin) else: qq = self.uin_to_qq(fuin) print("qq: %s", qq) self.analyze(qq, fuin, content, iseq)