feat 微信自动注册菜单
This commit is contained in:
parent
bb729bf976
commit
114788e3ed
@ -101,11 +101,17 @@ class WechatModule(_ModuleBase):
|
|||||||
user_id == admin_user for admin_user in wechat_admins):
|
user_id == admin_user for admin_user in wechat_admins):
|
||||||
self.wechat.send_msg(title="用户无权限执行菜单命令", userid=user_id)
|
self.wechat.send_msg(title="用户无权限执行菜单命令", userid=user_id)
|
||||||
return None
|
return None
|
||||||
|
# 根据Event执行命令
|
||||||
|
content = event
|
||||||
|
logger.info(f"收到微信事件:userid={user_id}, event={content}")
|
||||||
elif msg_type == "text":
|
elif msg_type == "text":
|
||||||
# 文本消息
|
# 文本消息
|
||||||
content = DomUtils.tag_value(root_node, "Content", default="")
|
content = DomUtils.tag_value(root_node, "Content", default="")
|
||||||
if content:
|
|
||||||
logger.info(f"收到微信消息:userid={user_id}, text={content}")
|
logger.info(f"收到微信消息:userid={user_id}, text={content}")
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if content:
|
||||||
# 处理消息内容
|
# 处理消息内容
|
||||||
return CommingMessage(channel=MessageChannel.Wechat,
|
return CommingMessage(channel=MessageChannel.Wechat,
|
||||||
userid=user_id, username=user_id, text=content)
|
userid=user_id, username=user_id, text=content)
|
||||||
@ -145,3 +151,10 @@ class WechatModule(_ModuleBase):
|
|||||||
:return: 成功或失败
|
:return: 成功或失败
|
||||||
"""
|
"""
|
||||||
return self.wechat.send_torrents_msg(title=message.title, torrents=torrents, userid=message.userid)
|
return self.wechat.send_torrents_msg(title=message.title, torrents=torrents, userid=message.userid)
|
||||||
|
|
||||||
|
def register_commands(self, commands: dict):
|
||||||
|
"""
|
||||||
|
注册命令,实现这个函数接收系统可用的命令菜单
|
||||||
|
:param commands: 命令字典
|
||||||
|
"""
|
||||||
|
self.wechat.create_menus(commands)
|
||||||
|
@ -33,6 +33,8 @@ class WeChat(metaclass=Singleton):
|
|||||||
_send_msg_url = f"{settings.WECHAT_PROXY}/cgi-bin/message/send?access_token=%s"
|
_send_msg_url = f"{settings.WECHAT_PROXY}/cgi-bin/message/send?access_token=%s"
|
||||||
# 企业微信获取TokenURL
|
# 企业微信获取TokenURL
|
||||||
_token_url = f"{settings.WECHAT_PROXY}/cgi-bin/gettoken?corpid=%s&corpsecret=%s"
|
_token_url = f"{settings.WECHAT_PROXY}/cgi-bin/gettoken?corpid=%s&corpsecret=%s"
|
||||||
|
# 企业微信创新菜单URL
|
||||||
|
_create_menu_url = f"{settings.WECHAT_PROXY}/cgi-bin/menu/create?access_token=%s&agentid=%s"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""
|
"""
|
||||||
@ -69,6 +71,10 @@ class WeChat(metaclass=Singleton):
|
|||||||
self._access_token = ret_json.get('access_token')
|
self._access_token = ret_json.get('access_token')
|
||||||
self._expires_in = ret_json.get('expires_in')
|
self._expires_in = ret_json.get('expires_in')
|
||||||
self._access_token_time = datetime.now()
|
self._access_token_time = datetime.now()
|
||||||
|
elif res is not None:
|
||||||
|
logger.error(f"获取微信access_token失败,错误码:{res.status_code},错误原因:{res.reason}")
|
||||||
|
else:
|
||||||
|
logger.error(f"获取微信access_token失败,未获取到返回信息")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取微信access_token失败,错误信息:{e}")
|
logger.error(f"获取微信access_token失败,错误信息:{e}")
|
||||||
return None
|
return None
|
||||||
@ -255,14 +261,76 @@ class WeChat(metaclass=Singleton):
|
|||||||
else:
|
else:
|
||||||
if ret_json.get('errcode') == 42001:
|
if ret_json.get('errcode') == 42001:
|
||||||
self.__get_access_token(force=True)
|
self.__get_access_token(force=True)
|
||||||
logger.error(f"发送消息失败,错误信息:{ret_json.get('errmsg')}")
|
logger.error(f"发送请求失败,错误信息:{ret_json.get('errmsg')}")
|
||||||
return False
|
return False
|
||||||
elif res is not None:
|
elif res is not None:
|
||||||
logger.error(f"发送消息失败,错误码:{res.status_code},错误原因:{res.reason}")
|
logger.error(f"发送请求失败,错误码:{res.status_code},错误原因:{res.reason}")
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
logger.error(f"发送消息失败,未获取到返回信息")
|
logger.error(f"发送请求失败,未获取到返回信息")
|
||||||
return False
|
return False
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error(f"发送消息失败,错误信息:{err}")
|
logger.error(f"发送请求失败,错误信息:{err}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def create_menus(self, commands: dict):
|
||||||
|
"""
|
||||||
|
自动注册微信菜单
|
||||||
|
:param commands: 命令字典
|
||||||
|
命令字典:
|
||||||
|
{
|
||||||
|
"/cookiecloud": {
|
||||||
|
"func": CookieCloudChain(self._db).remote_sync,
|
||||||
|
"description": "同步站点",
|
||||||
|
"data": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
注册报文格式:
|
||||||
|
{
|
||||||
|
"button":[
|
||||||
|
{
|
||||||
|
"type":"click",
|
||||||
|
"name":"今日歌曲",
|
||||||
|
"key":"V1001_TODAY_MUSIC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"菜单",
|
||||||
|
"sub_button":[
|
||||||
|
{
|
||||||
|
"type":"view",
|
||||||
|
"name":"搜索",
|
||||||
|
"url":"http://www.soso.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type":"click",
|
||||||
|
"name":"赞一下我们",
|
||||||
|
"key":"V1001_GOOD"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
# 请求URL
|
||||||
|
req_url = self._create_menu_url % (self.__get_access_token(), self._appid)
|
||||||
|
# 按钮
|
||||||
|
buttons = []
|
||||||
|
for key, value in commands.items():
|
||||||
|
buttons.append({
|
||||||
|
"type": "click",
|
||||||
|
"name": value.get("description"),
|
||||||
|
"key": key
|
||||||
|
})
|
||||||
|
|
||||||
|
if buttons:
|
||||||
|
# 请求参数
|
||||||
|
menus = {
|
||||||
|
"button": [
|
||||||
|
{
|
||||||
|
"name": "操作",
|
||||||
|
"sub_button": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
# 发送请求
|
||||||
|
self.__post_request(req_url, menus)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user