|
@@ -225,30 +225,36 @@ class WechatChannel(Channel): |
|
|
thread_pool.submit(self.handle, context).add_done_callback(thread_pool_callback) |
|
|
thread_pool.submit(self.handle, context).add_done_callback(thread_pool_callback) |
|
|
|
|
|
|
|
|
# 统一的发送函数,每个Channel自行实现,根据reply的type字段发送不同类型的消息 |
|
|
# 统一的发送函数,每个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解耦,此处逻辑可以放置到父类 |
|
|
# 处理消息 TODO: 如果wechaty解耦,此处逻辑可以放置到父类 |
|
|
def handle(self, context): |
|
|
def handle(self, context): |
|
|