Files
gitlab-instance-0a899031_ku…/main.py
hackrobot 71f949917e update
2024-05-17 13:30:30 +08:00

689 lines
29 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from fastapi import Depends, FastAPI, HTTPException
from sqlalchemy.orm import Session
# from . import crud, models, schemas
import crud, models, schemas
from database import SessionLocal, engine
# from .database import SessionLocal, engine
import json
import os
import threading
import time
from pydantic import BaseModel
from flask import request, Flask
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import WXBotService
from planet import planetXml
from tengxunyun import tengxunyunXml
from lxml import etree
import xml.dom.minidom
from pydantic import BaseModel
import utils
import requests
import config
from urllib.parse import quote, unquote
import re
import emoji
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
# 全局消息变量
globalMsgData = None
def is_chinese(char):
"""检查字符是否为中文字符。"""
return '\u4e00' <= char <= '\u9fff'
def chatglmApi(msg, data, group, account_wxid, wxid, wx_name):
# 不是自己发的消息
if data.get('isSender') != 1:
# chaglm api在本地8000端口
# winHookUrl='http://192.168.31.184:8000/img'
winHookUrl = 'http://chatbot.hackrobot.cn/img'
if "@异度世界" in msg:
newmsg = re.sub(r"@异度世界\[@emoji=\d+\]", "", msg)
else:
newmsg = msg
print("newmsg=====>", newmsg)
payload = {'query': newmsg}
newPayload = json.loads(json.dumps(payload))
# res = requests.post(winHookUrl, json=newPayload)
# r = res.json()
# answer = r.get("answer", "No answer provided")
# 收到群聊消息
if group:
# 异度世界交流群2 48357370389@chatroom | 小号群18507867712@chatroom
if group == "18507867712@chatroom" or group == "48357370389@chatroom":
# 群聊被@
if "@异度世界" in msg:
res = requests.post(winHookUrl, json=newPayload)
rgroup = res.json()
answer = rgroup.get("answer", "No answer provided")
groupanswer = f'@{wx_name} ,{answer} \n [本消息是机器人bot自动回复]'
if "/img" in msg:
newanswer = re.sub(r'#web_img\s+', '', answer)
# 发送 @ 消息
WXBotService.send_at_message(
robot_wxid=account_wxid,
from_wxid=group,
msg=
f'@{wx_name} ,{newmsg}=>图片已生成 \n [本消息是机器人bot自动回复]',
wx_list=wxid)
WXBotService.send_image_message(
robot_wxid=account_wxid,
# from_wxid=wxid,
from_wxid=group,
msg=newanswer)
else:
# 发送 @ 消息
WXBotService.send_at_message(robot_wxid=account_wxid,
from_wxid=group,
msg=groupanswer,
wx_list=wxid)
else:
# 其他群组消息,不做响应
pass
else:
res = requests.post(winHookUrl, json=newPayload)
r = res.json()
answer = r.get("answer", "No answer provided")
# newanswer="@"+wx_name+", "+answer
if "/img" in msg:
newanswer = re.sub(r'#web_img\s+', '', answer)
WXBotService.send_image_message(robot_wxid=account_wxid,
from_wxid=wxid,
msg=newanswer)
else:
newanswer = f'@{wx_name} ,{answer} \n [本消息是机器人bot自动回复]'
print(newanswer)
WXBotService.send_text_message(robot_wxid=account_wxid,
from_wxid=wxid,
msg=newanswer)
def convert_special_chars_to_emoji(input_string):
output = []
for char in input_string:
# 检查字符是否为 ASCII 字符或中文字符
if ord(char) <= 127 or is_chinese(char):
# ASCII 字符或中文字符直接添加
output.append(char)
else:
# 获取 Unicode 代码点
code_point = f"{ord(char):X}"
# 将代码点转换为 emoji 代码点形式
emoji_representation = f"[@emoji={code_point}]"
# 将非中文且非 ASCII 字符替换为 emoji 代码点形式
output.append(emoji_representation)
# 将列表中的字符组合成一个字符串
return ''.join(output)
# 转换emoji字符串为[]
def transOldemoji(oldEmoji=None):
# oldEmoji = "异度世界🤖"
original_string = WXBotService.emoji_to_unicode(oldEmoji)
# print("original_string", original_string)
# # 全局替换 \\u 为 @emoji=
# converted_string = original_string.replace('\\\\u', '@emoji=')
# # 在 Unicode 编码后添加 ']'
# converted_string = converted_string[:-1] + ']'
# # 输出转换后的字符串
# print(converted_string)
# return converted_string
# 全局替换 \\u 为 @emoji=
converted_string = original_string.replace('\\u', '@emoji=')
# 在 Unicode 编码后添加 ']'
# 如果原始字符串中的 \\uXXX 是在方括号中,需要保留方括号
# 替换后,如果需要,可以调整这一步骤,根据特定需求
converted_string = re.sub(r'\[@emoji=[0-9a-fA-F]{4}\]',
lambda match: f'{match.group()}]',
converted_string)
converted_string = converted_string.replace('[\\@', '[@')
# 输出转换后的字符串
# print(converted_string)
return converted_string
# Dependency
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# 默认首页
@app.get("/")
async def root():
return {"message": "Hello World"}
# 微信登录
@app.get("/login")
def read_users(code, wxid, db: Session = Depends(get_db)):
print('code--', code)
new_user = {}
# 异度星球-小程序
payload = {
'appid': config.appid,
'secret': config.secret,
'js_code': code,
'grant_type': 'authorization_code'
}
res = requests.get(config.tokenUrl, params=payload)
r = res.json()
# 返回参数 session_key/unionid/errmsg/openid/errcode
print('r----', r)
openId = r['openid']
print('openId----', openId)
db_user = crud.get_user_by_openId(db, openId=openId)
print('db_user----', db_user)
if db_user:
# 返回用户完整数据
new_user = db_user
else:
if wxid:
# 机器人id
account_wxid = config.account_wxid
# 新增用户
new_user = utils.saveWxidInfo(account_wxid, wxid, openId)
# "errmsg":r['errmsg'],,"errcode":r['errcode']
# return {"session_key":r['session_key'],"unionid":r['unionid'],"openid":r['openid']}
return new_user
# H5保存用户h5openid与wxid
@app.get("/addH5openid")
def addH5openid(h5openid, wxid, db: Session = Depends(get_db)):
db_user = crud.get_user_by_h5openid(db, h5openid=h5openid)
print('db_user----', db_user)
if db_user:
# 返回用户完整数据
new_user = db_user
else:
if wxid:
# 机器人id
account_wxid = config.account_wxid
# 新增用户
new_user = utils.saveWxidInfo(account_wxid=config.account_wxid,
wxid=wxid,
h5openid=h5openid)
# "errmsg":r['errmsg'],,"errcode":r['errcode']
# return {"session_key":r['session_key'],"unionid":r['unionid'],"openid":r['openid']}
return new_user
# 加入微信群
@app.get("/joingroup")
# 群-异度星球 49187487591@chatroom chatroom
def read_users(wxid, db: Session = Depends(get_db)):
# debug
# chatroomId = '49187487591@chatroom'
# 判断是否在群中
inGroup = False
groupList = WXBotService.get_group_members_list(
robot_wxid=config.account_wxid, from_wxid=config.chatroomId)
print('groupList', groupList)
for groupItem in groupList['data']:
if groupItem['wxid'] == wxid:
inGroup = True
if inGroup:
return {"code": 200, "success": "fail", "message": "已经在群聊中"}
else:
WXBotService.add_group_members_40_more(
robot_wxid=config.account_wxid,
from_wxid=config.chatroomId, #异度星球群
new_wxid=wxid)
print('wxid--', wxid)
return {"code": 200, "success": "ok", "message": "群聊邀请已发送"}
# 加入微信群
@app.get("/h5group")
# 群-异度星球 49187487591@chatroom chatroom
def h5group(nickname, db: Session = Depends(get_db)):
newtext = unquote(nickname, 'utf-8')
# pattern = r'收到(\w+)的在看'
# pattern = r'收到([\w\[\]@=]+)的在看'
# pattern = r'收到([\w\[\]@=\u4e00-\u9fff-]+)的在看'
# 处理空白符
pattern = r'收到((?:[\w\s\[\]@=\u4e00-\u9fff-]|@\w+)+?)的在看'
print("newtext===>", newtext)
# 处理emoji转为[@emoji=1f916] 格式
newtext = transOldemoji(newtext)
# print("newtextemoji", newtext)
# 不是 ASCII 字符,则获取该字符的 Unicode 代码点
newtext = convert_special_chars_to_emoji(newtext)
# print("newtextASI", newtext)
matches = re.findall(pattern, newtext)
# print("matches", matches)
matchesString = None
if len(matches) > 0:
matchesString = matches[0]
print("matchesString", matchesString)
if matchesString:
# matchesString = remove_emojis(matchesString) #删除emoji字符串
print("匹配到的结果:", matchesString)
# 判断是否在群中
inGroup = False
groupList = WXBotService.get_group_members_list(
robot_wxid=config.account_wxid, from_wxid=config.chatroomId)
# print('groupList', groupList)
if groupList['data'] is not None:
for groupItem in groupList['data']:
if groupItem['nickname'] == matchesString:
inGroup = True
if inGroup:
print('已经在群聊中')
return {"code": 200, "success": "fail", "message": "已经在群聊中"}
else:
new_wxid = None
allFriend = WXBotService.get_address_list(config.account_wxid)
for friendItem in allFriend['data']["contactList"]:
if friendItem['nickname'] == matchesString:
# if matchesString in friendItem['nickname']:
new_wxid = friendItem['wxid']
else:
# print('通过nickname查不到wxid')
pass
if new_wxid:
WXBotService.add_group_members_40_more(
robot_wxid=config.account_wxid,
from_wxid=config.chatroomId, #异度星球群
new_wxid=new_wxid)
print('new_wxid--', new_wxid)
# 发送小程序
# utils.sendminiProgram(data=None,
# account_wxid=config.account_wxid,
# wxid=new_wxid,
# msgXml=planetXml)
# WXBotService.send_text_message(
# robot_wxid=config.account_wxid,
# from_wxid=new_wxid,
# msg=f'已收到-[在看]支持,谢谢,请从小程序,点击"立即加入"\n[本消息是机器人自动回复]')
return {"code": 200, "success": "ok", "message": "群聊邀请已发送"}
else:
print('通过nickname查不到wxid')
return {
"code": 200,
"success": "ok",
"message": "查不到nickname"
}
else:
print("Error: 'data' is None.")
else:
print("未找到匹配项,或者有特殊字符")
return {"code": 200, "success": "ok", "message": "未找到匹配项,或者有特殊字符"}
# 创建用户
@app.post("/users")
# schemas.UserCreate决定了swagger文档
def create_user(user: schemas.User, db: Session = Depends(get_db)):
print('user', user)
print('typeuser', type(user))
# 检测是否存在wxid
db_user = crud.get_user_by_wxid(db, user.wxid)
print('db_user', db_user)
if db_user:
raise HTTPException(status_code=400, detail="wxid already registered")
return crud.create_user(db=db, user=user)
# 分页查询-用户
@app.get("/users")
def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
users = crud.get_users(db, skip=skip, limit=limit)
return users
# 根据openId查询用户
@app.post("/openId")
def read_user(user: schemas.User, db: Session = Depends(get_db)):
db_user = crud.get_user_by_openId(db, openId=user.openId)
if db_user is None:
raise HTTPException(status_code=404, detail="openId not found")
return db_user
# 根据wxid查询用户
@app.get("/users")
def read_user(wxid, db: Session = Depends(get_db)):
db_user = crud.get_user_by_wxid(db, wxid=wxid)
if db_user is None:
raise HTTPException(status_code=404, detail="User-wxid not found")
return db_user
# 监听机器人http-get消息
@app.get("/wxbot")
def helloget(q: dict):
data = q
t = threading.Thread(target=kp, args=(data, )) # 通过当前线程开启新的线程去执行
t.start()
return json.dumps({"Code": 0})
def remove_emojis(text):
return ''.join(c for c in text if c not in emoji.UNICODE_EMOJI)
# 监听机器人post日志消息
@app.post("/wxbot")
# def hellopost(requestData:schemas.User):
def hellopost(requestData: dict):
try:
print('requestData---', requestData)
data = requestData
t = threading.Thread(target=kp, args=(data, )) # 通过当前线程开启新的线程去执行
t.start()
return json.dumps({"Code": 0})
except:
print('日志异常---请检查--------------------')
return json.dumps({"Code": 0})
def kp(event_data):
# unicode [\\uxxxxx] 转 emoji 表情
try:
event_data = json.loads(
WXBotService.unicode_to_emoji(
json.dumps(event_data, ensure_ascii=False), 'json'))
except:
print('字符串处理失败=>请检查--------------------')
return
kp_log = '' # 定义鲲鹏日志消息
event_type = event_data.get('event_type') #事件类型
account_wxid = event_data.get('account_wxid') #机器人id
data = event_data.get('data')
print('data===>', data)
# global globalMsgData
# globalMsgData=event_data.get('data')
msg_type = data.get('msgtype') #消息类型
msg = data.get('content')
to_wxid = data.get('to_wxid') #发送给
to_name = data.get('to_name')
filepath = data.get("filepath")
subtype = data.get('subtype') #类型
thumbpath = data.get('thumbpath') #图片,存在电脑绝对路径
wxid = data.get('final_from_wxid') #消息来源-用户wxid
wx_name = data.get('final_from_name') #消息来源-用户名字
# 群聊id
group = None if data.get('from_wxid') == wxid else data.get('from_wxid')
# 群聊名称
group_name = None if data.get('from_name') == wx_name else data.get(
'from_name')
'''event类型判断'''
if event_type == 1001: # 1001 创建WeChat进程成功通讯连接成功
kp_log = f'创建WeChat进程成功通讯连接成功'
elif event_type == 1002: # 1002 登录成功
kp_log = f'登录成功 {data.get("nickname")}{data.get("wxid")}'
elif event_type == 1003: # 1003 账号注销登录
kp_log = f'账号注销登录 {data.get("wxid")} {data.get("reason")}'
elif event_type == 1004: # 1004 切换聊天对象事件
kp_log = f'切换聊天对象事件 {data.get("nickname")}{data.get("wxid")}'
elif event_type == 1005: # 1005 切换联系人事件
kp_log = f'切换联系人事件 {data.get("nickname")}{data.get("wxid")}'
elif event_type == 1007: # 1005 二维码刷新事件
kp_log = f'二维码刷新事件 {data.get("qrcode")}'
elif event_type == 1008: # 1008 连接断开
kp_log = f'连接断开'
elif event_type == 1009: # 1009 群员退群通知
member_list = []
for member in data.get('memberlist'):
member_list.append(
f'{member.get("nickname")}{member.get("wxid")}')
kp_log = f'群员退群通知 {"".join(member_list)} 退出了群聊 {data.get("roomname")}{data.get("roomid")} ' \
f'人数:{data.get("membercount")}'
elif event_type == 1010: # 1010 群员进群通知
member_list = []
for member in data.get('memberlist'):
member_list.append(
f'{member.get("nickName")}{member.get("userName")}')
kp_log = f'群员进群通知 {"".join(member_list)} 加入了群聊 {data.get("roomname")}{data.get("roomid")}'
elif event_type == 1011: # 1011 收款消息
pay_msg = ET.fromstring(msg).find('paymsg')
pay_msg_type = pay_msg.findtext('PayMsgType')
if pay_msg_type == '9': # 二维码收款
status = pay_msg.findtext('status')
username = pay_msg.findtext('username')
display_name = pay_msg.findtext('displayname')
fee = pay_msg.findtext('fee')
if status == '0':
kp_log = f'收款消息 {display_name}{username} 扫描收款二维码'
elif status == '1':
kp_log = f'收款消息 {display_name}{username} 付款成功 {int(fee) / 100}'
elif status == '2':
kp_log = f'收款消息 {display_name}{username} 取消付款'
elif pay_msg_type == '45': # 貌似有未收款转账或转账红包过期会触发 42 和 45 类型
pass # kp_log = f'收款消息 {pay_msg.findtext("fromusername")} {pay_msg.findtext("content")}'
elif event_type == 1040: # 1040 撤回消息事件
if not group:
kp_log = f'撤回消息事件 {wx_name}{wxid} 撤回了 {msg}'
else:
kp_log = f'撤回消息事件 {wx_name}{wxid} 从群 {group_name}{group} 撤回了 {msg}'
elif event_type == 1100: # 1100 同步消息
if group:
type_str = f'同步消息 群聊消息 群聊:{group_name}{group} 发送者:{wx_name}{wxid}'
elif 'gh_' in wxid:
type_str = f'同步消息 公众号消息 {wx_name}{wxid}'
elif '@openim' in wxid:
type_str = f'同步消息 企业微信消息 {wx_name}{wxid}'
else:
type_str = f'同步消息 私聊消息 {wx_name}{wxid}'
if data.get('isSender') == 1:
# 手机发送还是电脑发送这里判断不是很准确
if to_wxid == account_wxid:
type_str = f'机器人手机端 发送的 ' + type_str
else:
type_str = f'机器人电脑端 发送的 ' + type_str
# from_wxid': '18507867712@chatroom'
if msg_type == 1: # 1 文本消息/自带表情
kp_log = f'{type_str} 文本消息 内容:{msg}'
# 将好友信息=>保存到数据库
newFriendDict = WXBotService.get_friend_info(
account_wxid, wxid)
print('newFriendDict==>',newFriendDict)
allFriend = WXBotService.get_address_list(config.account_wxid)
for friendItem in allFriend['data']["contactList"]:
if friendItem['wxid'] == wxid:
# if matchesString in friendItem['nickname']:
newFriendDict = friendItem
print('newFriendDict222==>',newFriendDict)
else:
# print('通过nickname查不到wxid')
pass
# 收到群聊消息
if group:
# 异度世界交流群2 48357370389@chatroom | 小号群18507867712@chatroom
chatglmApi(msg, data, group, account_wxid, wxid, wx_name)
else:
# pass
if msg in ['工具箱']:
# 发送小程序
utils.sendminiProgram(data, account_wxid, wxid, planetXml)
# if msg in ['加群']:
if msg == '加群':
# print('newFriendDict[data]---',newFriendDict['data'])
userClass = models.User(**(newFriendDict['data']))
# print('userClass====',type(userClass))
# crud.create_user(db=SessionLocal(),user=userClass)
# 保存好友信息
# utils.saveWxidInfo(account_wxid, wxid)
# 直接邀请加群>40
# WXBotService.add_group_members_40_more(robot_wxid='wxid_sfvsru738v3122',
# from_wxid='49187487591@chatroom',
# new_wxid='wxid_4413224132412')
# print("data", data)
# if "emoji" in wx_name:
# # 发送小程序
# utils.sendminiProgram(data, account_wxid, wxid, planetXml)
# else:
# H5链接
WXBotService.send_link_message(
account_wxid,
wxid,
title="欢迎加入微信群",
desc="请查看规则",
url=
f'https://link.hackrobot.cn#/pages/index/index?wxid={wxid}',
pic=
"https://www.hackrobot.cn/wp-content/uploads/2023/05/cropped-cropped-Screenshot-2023-05-22-at-17.26.38.png"
)
else:
# 回复ai消息
chatglmApi(msg, data, group, account_wxid, wxid, wx_name)
# if msg in ['腾讯云']:
# # 发送小程序
# utils.sendminiProgram(data, account_wxid, wxid, tengxunyunXml)
elif msg_type == 3: # 3 图片消息
kp_log = f'{type_str} 图片消息 内容:{filepath}'
# 本地dat图片解密
decrypt_path = WXBotService.local_decrypt_image(
filepath, os.path.join(os.getcwd(), '解密图片'))
print(f'{type_str} 图片消息 解密路径:{decrypt_path}')
elif msg_type == 34: # 34 语言消息(需要在设置中打开语言自动转文字)
xml_msg = ET.fromstring(msg)
kp_log = f'{type_str} 语音消息 内容:{xml_msg.find("voicetrans").get("transtext")}'
# elif msg_type == 37: # 37 好友请求
# xml_msg = ET.fromstring(msg)
# kp_log = f'同步消息 好友请求 {xml_msg.get("fromnickname")}{xml_msg.get("fromusername")} ' \
# f'验证内容:{xml_msg.get("content")}'
# # 同意好友请求
# WXBotService.agree_friend_request(account_wxid,
# xml_msg.get('alias'),
# xml_msg.get('encryptusername'),
# xml_msg.get('ticket'),
# xml_msg.get('scene'))
# newFriendWxid = xml_msg.get('alias')
# # 将好友信息=>保存到数据库
# # newFriendDict=WXBotService.get_friend_info(account_wxid, newFriendWxid)
# # userClass=models.User(**(newFriendDict['data']))
# # crud.create_user(db= SessionLocal(),user=userClass)
# newMsg = f'''你好,本消息是bot回复,本人是一名开发者,副业跨境电商,爱折腾homelab,参与交流请回复: 加群'''
# WXBotService.send_text_message(robot_wxid=account_wxid,
# from_wxid=newFriendWxid,
# msg=newMsg)
elif msg_type == 42: # 42 名片消息
xml_msg = ET.fromstring(msg)
kp_log = f'{type_str} 企业微信名片消息 {xml_msg.get("nickname")}{xml_msg.get("username")}'
elif msg_type == 43: # 43 视频消息
kp_log = f'{type_str} 视频消息 内容:{filepath}'
elif msg_type == 47: # 47 表情包
kp_log = f'{type_str} 表情包消息 网址:{ET.fromstring(msg).find("emoji").get("cdnurl".replace("amp;", ""))}'
# 本地下载图片
down_path = WXBotService.local_download_image(
msg, os.path.join(os.getcwd(), '下载图片'))
print(f'{type_str} 表情包消息 下载路径:{down_path}')
elif msg_type == 48: # 48 地理位置
kp_log = f'{type_str} 地理位置 内容:{msg}'
elif msg_type == 49: # 49 xml消息
# 获取根节点
root = ET.fromstring(msg)
xml_appmsg = root.find('appmsg')
xml_title = xml_appmsg.findtext('title')
xml_type = xml_appmsg.findtext('type')
xml_des = xml_appmsg.findtext('des')
xml_url = xml_appmsg.findtext('url')
if xml_type == '1': # 1 文本
kp_log = f'收到 {wxid} xml文本消息'
elif xml_type == '3': # 3 歌曲
kp_log = f'{type_str} 音乐消息 歌曲:{xml_title} 歌手:{xml_des} 网址:{xml_url}'
elif xml_type == '5': # 5 链接
kp_log = f'{type_str} 链接消息 标题:{xml_title} 内容:{xml_des} 网址:{xml_url}'
print("kp_log--------------------------------", msg)
# 本身也是系统消息-link,会无线循环
# 判断是不是自己发的消息
# if data.get('isSender') != 1:
# WXBotService.send_link_message(
# account_wxid, "wxid_w2imh7ki5s4q12", "title", "dec",
# "https://www.baidu.com",
# "https://p1-q.mafengwo.net/s17/M00/E3/9C/CoUBXl_cawCAQWMcAAGGhEoBcRU77.jpeg")
elif xml_type == '6': # 6 文件
kp_log = f'{type_str} 文件消息 文件名:{xml_title} 文件大小:{xml_des} 文件路径:{filepath}'
elif xml_type == '19': # 19 合并转发聊天记录
kp_log = f'{type_str} 合并转发聊天记录 文件名:{xml_title} 文件大小:{xml_des} 文件路径:{filepath}'
elif xml_type == '33': # 33 小程序
kp_log = f'{type_str} 小程序消息 小程序名:{xml_appmsg.findtext("sourcedisplayname")} 标题:{xml_title} ' \
f'appid{xml_appmsg.findtext("weappinfo/appid")} ' \
f'pagepath{xml_appmsg.findtext("weappinfo/pagepath")}'
print("---------------------------kp_log", msg)
elif xml_type == '57': # 引用消息
kp_log = f'{type_str} 引用消息 内容:{msg}'
elif xml_type == '2000': # 2000 转账消息
money = xml_appmsg.findtext('wcpayinfo/feedesc').replace(
'', '')
pay_subtype = xml_appmsg.findtext('wcpayinfo/paysubtype')
transfer_id = xml_appmsg.findtext('wcpayinfo/transferid')
if pay_subtype == '1':
kp_log = f'{type_str} 转账消息 {money}'
# 自动接收转账
WXBotService.transfer_receipt(account_wxid, wxid,
transfer_id)
elif pay_subtype == '3':
kp_log = f'{type_str} 已收款 {money} 元 转账'
elif msg_type == 66: # 66 企业微信名片消息
xml_msg = ET.fromstring(msg)
kp_log = f'企业微信名片消息 {xml_msg.get("nickname")}{xml_msg.get("username")}'
elif msg_type == 10000: # 10000 系统消息
kp_log = f'系统消息 {wx_name}{wxid} {msg}'
#获取通讯录
# allFriends=WXBotService.get_address_list(account_wxid)
# print('allFriends',allFriends)
# 发送H5链接
if not kp_log:
print(
'===================================================================================='
)
print(event_data)
print(
'===================================================================================='
)
else:
print(kp_log)