|
from wechatpy.enterprise import WeChatClient |
|
|
|
from bridge.context import ContextType |
|
from channel.chat_message import ChatMessage |
|
from common.log import logger |
|
from common.tmp_dir import TmpDir |
|
|
|
|
|
class WechatComAppMessage(ChatMessage): |
|
def __init__(self, msg, client: WeChatClient, is_group=False): |
|
super().__init__(msg) |
|
self.msg_id = msg.id |
|
self.create_time = msg.time |
|
self.is_group = is_group |
|
|
|
if msg.type == "text": |
|
self.ctype = ContextType.TEXT |
|
self.content = msg.content |
|
elif msg.type == "voice": |
|
self.ctype = ContextType.VOICE |
|
self.content = TmpDir().path() + msg.media_id + "." + msg.format |
|
|
|
def download_voice(): |
|
|
|
response = client.media.download(msg.media_id) |
|
if response.status_code == 200: |
|
with open(self.content, "wb") as f: |
|
f.write(response.content) |
|
else: |
|
logger.info(f"[wechatcom] Failed to download voice file, {response.content}") |
|
|
|
self._prepare_fn = download_voice |
|
elif msg.type == "image": |
|
self.ctype = ContextType.IMAGE |
|
self.content = TmpDir().path() + msg.media_id + ".png" |
|
|
|
def download_image(): |
|
|
|
response = client.media.download(msg.media_id) |
|
if response.status_code == 200: |
|
with open(self.content, "wb") as f: |
|
f.write(response.content) |
|
else: |
|
logger.info(f"[wechatcom] Failed to download image file, {response.content}") |
|
|
|
self._prepare_fn = download_image |
|
else: |
|
raise NotImplementedError("Unsupported message type: Type:{} ".format(msg.type)) |
|
|
|
self.from_user_id = msg.source |
|
self.to_user_id = msg.target |
|
self.other_user_id = msg.source |
|
|