def getme(self): err = 0 while True: try: r = self.session.get(self.getmeurl) response = r.json() except: err += 1 log.exc("fail #%d: error getting initial information" % err) if err >= 80: log.out("fail #%d: waiting 30 minutes, then retrying" % err) time.sleep(30 * 60) elif err >= 20: log.out("fail #%d: waiting 60 seconds, then retrying" % err) time.sleep(60) if err >= 10: log.out("renewing session") self.newsession() continue if not response["ok"]: log.out("response not ok, ignoring") continue break return response["result"]
def sendfile(self, filename, mimetype, content, message): try: r = self.session.post(self.senddocurl, params=message, files={"document": (filename, content, mimetype)}) return r.json()["result"]["document"]["file_id"] except: log.exc( "failed sending document: filename %s, message %s" % (repr(filename), json.dumps(message, indent=4)) )
def run(self): self.server.addMsgHandler("default", self.default_handler) while True: try: self.server.handle_request() except Exception as e: log.error(log.exc(e))
def receive(self): cnt = 0 err = 0 while True: try: r = self.session.get(self.recvurl, params={"offset": self.offset, "timeout": 60}) response = r.json() cnt += 1 except: err += 1 log.exc("fail #%d: error receiving messages" % err) if err >= 80: log.out("fail #%d: waiting 30 minutes, then retrying" % err) time.sleep(30 * 60) elif err >= 20: log.out("fail #%d: waiting 60 seconds, then retrying" % err) time.sleep(60) if err >= 10: log.out("renewing session") self.newsession() cnt = 0 continue err = 0 log.out("receive: %s" % (json.dumps(response, indent=4),)) if not response["ok"]: log.out("response not ok, ignoring") else: for result in response["result"]: update_id = result["update_id"] message = result["message"] yield message self.offset = update_id + 1 if cnt >= 8192: log.out("cnt is %d, renewing session") self.newsession() cnt = 0
def safestr(s): if isinstance(s, str): return s if isinstance(s, unicode): try: s = s.encode('utf-8') except UnicodeEncodeError, e: log.error(log.exc(e)) return "" return s
def send(self, address, data=None): message = OSC.OSCMessage() message.setAddress(address) if data is not None: if type(data) is dict: data = json.dumps(data) if type(data) is tuple: data = list(data) message.extend(data) if verbose: log.info("OSC send (%s): %s" % (len(self.targets), message)) for location, target in self.targets.iteritems(): try: target.send(message, timeout=1) except Exception as e: log.error(log.exc(e))
def kill_process(pid): log.info("--> attempting to kill process %s" % pid) try: pid = int(pid) os.kill(pid, signal.SIGKILL) killed_pid, stat = os.waitpid(pid, os.WNOHANG) if killedpid == 0: log.error("--> could not kill process %s" % pid) return False except (ValueError, OSError) as e: if e.args[0] == 3: log.info("--> no process was running with pid %s" % pid) else: log.error(log.exc(e)) return True else: log.info("--> killed process %s" % pid) return True
def process(self, msginfo): if (time.time() - START_TIME) < 2: log.out("not processing message, started less than 2 seconds ago") return iscommand = msginfo["type"] == "text" and msginfo["message"]["text"].startswith("/") for triginfo in TRIGGERS: if iscommand and not (triginfo.has_key("commands") and triginfo["commands"]): continue if triginfo["message"].has_key(msginfo["type"]): func = triginfo["message"][msginfo["type"]] elif triginfo["message"].has_key("*"): func = triginfo["message"]["*"] else: continue info = { "logic": self, "fromuser": msginfo["from"], "inchat": msginfo["chat"], "msginfo": msginfo } if triginfo.has_key("require") and not self.addrequirements(triginfo["require"], info): continue try: returnmsg = func(info) except: log.exc("exception in trigger function") return if returnmsg: if returnmsg == True: log.exc("ignoring message, trigger '%s' returned True" % (triginfo["id"] if triginfo.has_key("id") else "")) return self.returnmsg(msginfo, returnmsg) if iscommand: cmdstr = msginfo["message"]["text"][1:] try: returnmsg = self.quickexeccmd(cmdstr, msginfo["from"], msginfo["chat"]) except: log.exc("exception in command function") return if returnmsg: self.returnmsg(msginfo, returnmsg)
def resendfile(self, message): try: r = self.session.post(self.senddocurl, params=message) except: log.exc("failed resending document: message %s" % (json.dumps(message, indent=4)))
def send(self, message): try: self.session.post(self.sendurl, params=message) except: log.exc("failed sending message: %s" % json.dumps(message, indent=4))