mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-05-03 17:31:32 +08:00
fix: split long text messages into multiple parts in wechatmp_service
This commit is contained in:
@@ -51,7 +51,7 @@ def split_string_by_utf8_length(string, max_length, max_split=0):
|
|||||||
if max_split > 0 and len(result) >= max_split:
|
if max_split > 0 and len(result) >= max_split:
|
||||||
result.append(encoded[start:].decode("utf-8"))
|
result.append(encoded[start:].decode("utf-8"))
|
||||||
break
|
break
|
||||||
end = start + max_length
|
end = min(start + max_length, len(encoded))
|
||||||
# 如果当前字节不是 UTF-8 编码的开始字节,则向前查找直到找到开始字节为止
|
# 如果当前字节不是 UTF-8 编码的开始字节,则向前查找直到找到开始字节为止
|
||||||
while end < len(encoded) and (encoded[end] & 0b11000000) == 0b10000000:
|
while end < len(encoded) and (encoded[end] & 0b11000000) == 0b10000000:
|
||||||
end -= 1
|
end -= 1
|
||||||
|
|||||||
@@ -130,7 +130,11 @@ class WechatMPChannel(ChatChannel):
|
|||||||
else:
|
else:
|
||||||
if reply.type == ReplyType.TEXT or reply.type == ReplyType.INFO or reply.type == ReplyType.ERROR:
|
if reply.type == ReplyType.TEXT or reply.type == ReplyType.INFO or reply.type == ReplyType.ERROR:
|
||||||
reply_text = reply.content
|
reply_text = reply.content
|
||||||
self.client.message.send_text(receiver, reply_text)
|
texts = split_string_by_utf8_length(reply_text, MAX_UTF8_LEN)
|
||||||
|
if len(texts)>1:
|
||||||
|
logger.info("[wechatmp] text too long, split into {} parts".format(len(texts)))
|
||||||
|
for text in texts:
|
||||||
|
self.client.message.send_text(receiver, text)
|
||||||
logger.info("[wechatmp] Do send text to {}: {}".format(receiver, reply_text))
|
logger.info("[wechatmp] Do send text to {}: {}".format(receiver, reply_text))
|
||||||
elif reply.type == ReplyType.VOICE:
|
elif reply.type == ReplyType.VOICE:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user