diff --git a/channel/wechat/wechat_channel.py b/channel/wechat/wechat_channel.py index 9a7904d..f789ec2 100644 --- a/channel/wechat/wechat_channel.py +++ b/channel/wechat/wechat_channel.py @@ -225,30 +225,36 @@ class WechatChannel(Channel): thread_pool.submit(self.handle, context).add_done_callback(thread_pool_callback) # 统一的发送函数,每个Channel自行实现,根据reply的type字段发送不同类型的消息 - def send(self, reply: Reply, receiver): - if reply.type == ReplyType.TEXT: - itchat.send(reply.content, toUserName=receiver) - logger.info('[WX] sendMsg={}, receiver={}'.format(reply, receiver)) - elif reply.type == ReplyType.ERROR or reply.type == ReplyType.INFO: - itchat.send(reply.content, toUserName=receiver) - logger.info('[WX] sendMsg={}, receiver={}'.format(reply, receiver)) - elif reply.type == ReplyType.VOICE: - itchat.send_file(reply.content, toUserName=receiver) - logger.info('[WX] sendFile={}, receiver={}'.format(reply.content, receiver)) - elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片 - img_url = reply.content - pic_res = requests.get(img_url, stream=True) - image_storage = io.BytesIO() - for block in pic_res.iter_content(1024): - image_storage.write(block) - image_storage.seek(0) - itchat.send_image(image_storage, toUserName=receiver) - logger.info('[WX] sendImage url={}, receiver={}'.format(img_url,receiver)) - elif reply.type == ReplyType.IMAGE: # 从文件读取图片 - image_storage = reply.content - image_storage.seek(0) - itchat.send_image(image_storage, toUserName=receiver) - logger.info('[WX] sendImage, receiver={}'.format(receiver)) + def send(self, reply: Reply, receiver, retry_cnt = 0): + try: + if reply.type == ReplyType.TEXT: + itchat.send(reply.content, toUserName=receiver) + logger.info('[WX] sendMsg={}, receiver={}'.format(reply, receiver)) + elif reply.type == ReplyType.ERROR or reply.type == ReplyType.INFO: + itchat.send(reply.content, toUserName=receiver) + logger.info('[WX] sendMsg={}, receiver={}'.format(reply, receiver)) + elif reply.type == ReplyType.VOICE: + itchat.send_file(reply.content, toUserName=receiver) + logger.info('[WX] sendFile={}, receiver={}'.format(reply.content, receiver)) + elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片 + img_url = reply.content + pic_res = requests.get(img_url, stream=True) + image_storage = io.BytesIO() + for block in pic_res.iter_content(1024): + image_storage.write(block) + image_storage.seek(0) + itchat.send_image(image_storage, toUserName=receiver) + logger.info('[WX] sendImage url={}, receiver={}'.format(img_url,receiver)) + elif reply.type == ReplyType.IMAGE: # 从文件读取图片 + image_storage = reply.content + image_storage.seek(0) + itchat.send_image(image_storage, toUserName=receiver) + logger.info('[WX] sendImage, receiver={}'.format(receiver)) + except Exception as e: + logger.error('[WX] sendMsg error: {}, receiver={}'.format(e, receiver)) + if retry_cnt < 2: + time.sleep(3+3*retry_cnt) + self.send(reply, receiver, retry_cnt + 1) # 处理消息 TODO: 如果wechaty解耦,此处逻辑可以放置到父类 def handle(self, context):