mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-06-15 11:07:10 +08:00
7c85c6f742
- Add support for message encryption in WeChat MP channel. - Add `wechatmp_aes_key` configuration item to `config.json`.
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import textwrap
|
|
import web
|
|
|
|
from config import conf
|
|
from wechatpy.utils import check_signature
|
|
from wechatpy.crypto import WeChatCrypto
|
|
from wechatpy.exceptions import InvalidSignatureException
|
|
MAX_UTF8_LEN = 2048
|
|
|
|
|
|
class WeChatAPIException(Exception):
|
|
pass
|
|
|
|
|
|
def verify_server(data):
|
|
try:
|
|
signature = data.signature
|
|
timestamp = data.timestamp
|
|
nonce = data.nonce
|
|
echostr = data.get("echostr", None)
|
|
token = conf().get("wechatmp_token") # 请按照公众平台官网\基本配置中信息填写
|
|
check_signature(token, signature, timestamp, nonce)
|
|
return echostr
|
|
except InvalidSignatureException:
|
|
raise web.Forbidden("Invalid signature")
|
|
except Exception as e:
|
|
raise web.Forbidden(str(e))
|
|
|
|
|
|
def subscribe_msg():
|
|
trigger_prefix = conf().get("single_chat_prefix", [""])[0]
|
|
msg = textwrap.dedent(
|
|
f"""\
|
|
感谢您的关注!
|
|
这里是ChatGPT,可以自由对话。
|
|
资源有限,回复较慢,请勿着急。
|
|
支持语音对话。
|
|
支持图片输入。
|
|
支持图片输出,画字开头的消息将按要求创作图片。
|
|
支持tool、角色扮演和文字冒险等丰富的插件。
|
|
输入'{trigger_prefix}#帮助' 查看详细指令。"""
|
|
)
|
|
return msg
|
|
|
|
|
|
def split_string_by_utf8_length(string, max_length, max_split=0):
|
|
encoded = string.encode("utf-8")
|
|
start, end = 0, 0
|
|
result = []
|
|
while end < len(encoded):
|
|
if max_split > 0 and len(result) >= max_split:
|
|
result.append(encoded[start:].decode("utf-8"))
|
|
break
|
|
end = min(start + max_length, len(encoded))
|
|
# 如果当前字节不是 UTF-8 编码的开始字节,则向前查找直到找到开始字节为止
|
|
while end < len(encoded) and (encoded[end] & 0b11000000) == 0b10000000:
|
|
end -= 1
|
|
result.append(encoded[start:end].decode("utf-8"))
|
|
start = end
|
|
return result
|