Skip to content

Commit fa86926

Browse files
committed
fix group message
1 parent 7924687 commit fa86926

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

service/bot/api_handler.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package bot
22

33
import (
4+
"math"
45
"strconv"
56

67
"github.com/Mrs4s/MiraiGo/client"
@@ -10,6 +11,28 @@ import (
1011
log "github.com/sirupsen/logrus"
1112
)
1213

14+
const MAX_TEXT_LENGTH = 64
15+
16+
// 风控临时解决方案
17+
func splitText(content string, limit int) []string {
18+
text := []rune(content)
19+
20+
result := make([]string, 0)
21+
num := int(math.Ceil(float64(len(text)) / float64(limit)))
22+
for i := 0; i < num; i++ {
23+
start := i * limit
24+
end := func() int {
25+
if (i+1)*limit > len(text) {
26+
return len(text)
27+
} else {
28+
return (i + 1) * limit
29+
}
30+
}()
31+
result = append(result, string(text[start:end]))
32+
}
33+
return result
34+
}
35+
1336
// 预处理私聊消息,上传图片,MiraiGo更新后删除
1437
func preProcessPrivateSendingMessage(cli *client.QQClient, target int64, m *message.SendingMessage) {
1538
newElements := make([]message.IMessageElement, 0, len(m.Elements))
@@ -32,6 +55,14 @@ func preProcessPrivateSendingMessage(cli *client.QQClient, target int64, m *mess
3255
func preProcessGroupSendingMessage(cli *client.QQClient, groupCode int64, m *message.SendingMessage) {
3356
newElements := make([]message.IMessageElement, 0, len(m.Elements))
3457
for _, element := range m.Elements {
58+
if i, ok := element.(*message.TextElement); ok {
59+
content := i.Content
60+
textList := splitText(content, MAX_TEXT_LENGTH)
61+
for _, text := range textList {
62+
newElements = append(newElements, message.NewText(text))
63+
}
64+
continue
65+
}
3566
if i, ok := element.(*message.ImageElement); ok {
3667
gm, err := cli.UploadGroupImage(groupCode, i.Data)
3768
if err != nil {
@@ -83,7 +114,7 @@ func HandleSendGroupMsg(cli *client.QQClient, req *onebot.SendGroupMsgReq) *oneb
83114
sendingMessage := &message.SendingMessage{Elements: miraiMsg}
84115
log.Infof("Bot(%d) Group(%d) <- %s", cli.Uin, req.GroupId, MiraiMsgToRawMsg(miraiMsg))
85116
preProcessGroupSendingMessage(cli, req.GroupId, sendingMessage)
86-
ret := cli.SendGroupMessage(req.GroupId, sendingMessage)
117+
ret := cli.SendGroupMessage(req.GroupId, sendingMessage, true)
87118
if ret == nil || ret.Id == -1 {
88119
log.Warnf("发送群消息失败,可能被风控")
89120
return nil

service/bot/api_handler_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package bot
2+
3+
import (
4+
"math"
5+
"testing"
6+
)
7+
8+
func TestSplit(t *testing.T) {
9+
text := ""
10+
LIMIT := 3
11+
num := int(math.Ceil(float64(len(text))/float64(LIMIT)))
12+
for i := 0; i < num; i++ {
13+
start := i * LIMIT
14+
end := func() int {
15+
if (i+1)*LIMIT > len(text) {
16+
return len(text)
17+
} else {
18+
return (i + 1) * LIMIT
19+
}
20+
}()
21+
t.Log(text[start:end])
22+
}
23+
}

0 commit comments

Comments
 (0)