Skip to content

Commit

Permalink
fix: split long text messages into multiple parts in wechatmp_service
Browse files Browse the repository at this point in the history
  • Loading branch information
lanvent committed Apr 21, 2023
1 parent 350633b commit 7cefe2d
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
2 changes: 1 addition & 1 deletion channel/wechatmp/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
result.append(encoded[start:].decode("utf-8"))
break
end = start + max_length
end = min(start + max_length, len(encoded))
# 如果当前字节不是 UTF-8 编码的开始字节,则向前查找直到找到开始字节为止
while end < len(encoded) and (encoded[end] & 0b11000000) == 0b10000000:
end -= 1
Expand Down
6 changes: 5 additions & 1 deletion channel/wechatmp/wechatmp_channel.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,11 @@ def send(self, reply: Reply, context: Context):
else:
if reply.type == ReplyType.TEXT or reply.type == ReplyType.INFO or reply.type == ReplyType.ERROR:
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))
elif reply.type == ReplyType.VOICE:
try:
Expand Down

0 comments on commit 7cefe2d

Please sign in to comment.