def disconnect(self): logger.warning('Disconnected to the server!') # 断开连接后执行用户定义的函数,如果有 if self._when_disconnected_do is not None: self._when_disconnected_do[0]() if not self._when_disconnected_do[1]: self._when_disconnected_do = None
async def baseRequest( self, method: str, funcname: str, path: str, payload: dict = None, params: dict = None, ) -> dict: """基础请求方法, 提供部分提示信息,出错返回空字典,其他返回服务端响应结果""" if params is not None: params.update({'funcname': funcname}) else: params = {'funcname': funcname} # 发送请求 try: resp = await self.c.request(method, httpx.URL(url=path, params=params), json=payload) resp.raise_for_status() except httpx.HTTPError as e: if isinstance(e, httpx.TimeoutException): logger.warning(f'响应超时,但不代表处理未成功, 结果未知! => {e}') elif isinstance(e, httpx.HTTPStatusError): logger.error(f"响应码出错 => {resp.status_code}", ) else: logger.error(f'请求出错: {traceback.format_exc()}') return {} # 处理数据 try: data = resp.json() except Exception as e: logger.error('API响应结果非json格式') return {} if data is None: logger.error('返回为null') return {} # 返回码提示 if 'Ret' in data: ret = data.get('Ret') if ret == 0: pass elif ret == 34: logger.error(f'未知错误,跟消息长度似乎无关,可以尝试分段重新发送 => {data}') elif ret == 110: logger.error(f'发送失败,你已被移出该群,请重新加群 => {data}') elif ret == 120: logger.error(f'机器人被禁言 => {data}') elif ret == 241: logger.error( f'消息发送频率过高,对同一个群或好友,建议发消息的最小间隔控制在1100ms以上 => {data}') elif ret == 299: logger.error(f'超过群发言频率限制 => {data}') else: logger.error(f'请求发送成功, 但处理失败 => {data}') return data
def run(self): while True: try: self.tasks.get()() except Exception as e: logger.warning(f'queued_up装饰器: 队列任务出错{e}') finally: self.tasks.task_done() time.sleep(1)
def receive_events(ctx: EventMsg): try: _c.post(httpx.URL(), json=ctx.message) except Exception as e: logger.warning('Webhook请求中的错误: %s' % e)
def receive_group_msg(ctx: GroupMsg): try: _c.post(httpx.URL(), json=ctx.message) except Exception as e: logger.warning('Webhook请求中的错误: %s' % e)