|
- import threading
-
- from common import kafka_helper,redis_helper,utils
-
- import json,time,re,random
- from common.log import logger, log_exception
-
- from wechat import gewe_chat
-
-
- def wx_messages_process_callback(message):
- wxchat=gewe_chat.wxchat
- msg_content= message
- cleaned_content = clean_json_string(msg_content)
- content=json.loads(cleaned_content)
- data = content.get("data", {})
-
- msg_type_data=data.get("msg_type",None)
- content_data = data.get("content",{})
- agent_tel=content_data.get("agent_tel",None)
- # print(message)
- print(msg_type_data)
-
-
- # # 更新好友缓存
- # save_friends_to_redis(agent_tel,agent_nickname_data,friends)
- if msg_type_data=='group-sending':
- hash_key = f"__AI_OPS_WX__:LOGININFO:{agent_tel}"
- # print('群发')
-
- logininfo=redis_helper.redis_helper.get_hash(hash_key)
- if logininfo:
- token_id=logininfo.get('tokenId')
- app_id=logininfo.get('appId')
- agent_wxid=logininfo.get('wxid')
- # print(token_id)
- # print(app_id)
- contacts_list=wxchat.fetch_contacts_list(token_id, app_id)
- friend_wxids=contacts_list['friends']
- wxid_contact_list_content_data=[c['wxid'] for c in content_data.get("contact_list",None)]
- intersection = list(set(friend_wxids) & set(wxid_contact_list_content_data))
- # print(intersection)
- wx_content_list=content_data.get("wx_content",[])
- for wx_content in wx_content_list:
- if wx_content["type"]=="text":
- for t in intersection:
- res=wxchat.post_text(token_id,app_id,t,wx_content["text"])
- logger.info(f'{agent_wxid} 向 {t} 发送 文字【{wx_content["text"]}】')
-
- input_wx_content_dialogue_message=[{"type": "text", "text": wx_content["text"]}]
- input_message=utils.dialogue_message(agent_wxid,t,input_wx_content_dialogue_message)
- kafka_helper.kafka_client.produce_message(input_message)
- logger.info("发送对话 %s",input_message)
- # 等待随机时间
- time.sleep(random.uniform(5, 15))
- if wx_content["type"]=="image_url":
- aeskey=""
- cdnthumburl=""
- cdnthumblength=0
- cdnthumbheight=0
- cdnthumbwidth=0
- length=0
- md5=""
- image_url= wx_content.get("image_url",{})
- url=image_url.get("url",None)
- for t in intersection:
- if t == intersection[0]:
- res=wxchat.post_image(token_id,app_id,t,url)
- aeskey=res["aesKey"]
- cdnthumburl=res["fileId"]
- cdnthumblength=res["cdnThumbLength"]
- cdnthumbheight=res["height"]
- cdnthumbwidth=res["width"]
- length=res["length"]
- md5=res["md5"]
- logger.info(f'{agent_wxid} 向 {t} 发送 图片【{url}】')
- else:
- res=wxchat.forward_image(token_id,app_id,t,aeskey,cdnthumburl,cdnthumblength,cdnthumbheight,cdnthumbwidth,length,md5)
- logger.info(f'{agent_wxid} 向 {t} 转发送 图片【{url}】')
-
- wx_content_dialogue_message=[{"type": "image_url", "image_url": {"url": url}}]
- input_message=utils.dialogue_message(agent_wxid,t,wx_content_dialogue_message)
- kafka_helper.kafka_client.produce_message(input_message)
- logger.info("发送对话 %s",input_message)
-
- time.sleep(random.uniform(5, 15))
-
-
-
-
-
-
- def clean_json_string(json_str):
-
- # 删除所有控制字符(非打印字符),包括换行符、回车符等
- return re.sub(r'[\x00-\x1f\x7f]', '', json_str)
-
- # 启动 Kafka 消费者线程
- def start_kafka_consumer_thread():
- consumer_thread = threading.Thread(target=kafka_helper.kafka_client.consume_messages, args=(wx_messages_process_callback,))
- consumer_thread.daemon = True # 设置为守护线程,应用退出时会自动结束
- consumer_thread.start()
|