Skip to content

Commit 03f9104

Browse files
committed
examples/receive-and-send: add message.ParseCommand method to parse message to CMD easier
1 parent fdfda14 commit 03f9104

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

dto/message/message.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,21 @@ import (
1010
// 用于过滤 at 结构的正则
1111
var atRE = regexp.MustCompile(`<@!\d+>`)
1212

13+
// 用于过滤用户发送消息中的空格符号,\u00A0 是 &nbsp; 的 unicode 编码,某些 mac/pc 版本,连续多个空格的时候会转换成这个符号发送到后台
14+
const spaceCharSet = " \u00A0"
15+
16+
// CMD 一个简单的指令结构
17+
type CMD struct {
18+
Cmd string
19+
Content string
20+
}
21+
1322
// ETLInput 清理输出
1423
// - 去掉@结构
1524
// - trim
1625
func ETLInput(input string) string {
1726
etlData := string(atRE.ReplaceAll([]byte(input), []byte("")))
18-
etlData = strings.Trim(etlData, " ")
27+
etlData = strings.Trim(etlData, spaceCharSet)
1928
return etlData
2029
}
2130

@@ -34,3 +43,19 @@ func MentionAllUser() string {
3443
func MentionChannel(channelID string) string {
3544
return fmt.Sprintf("<#%s>", channelID)
3645
}
46+
47+
// ParseCommand 解析命令,支持 `{cmd} {content}` 的命令格式
48+
func ParseCommand(input string) *CMD {
49+
input = ETLInput(input)
50+
s := strings.Split(input, " ")
51+
if len(s) < 2 {
52+
return &CMD{
53+
Cmd: strings.Trim(input, spaceCharSet),
54+
Content: "",
55+
}
56+
}
57+
return &CMD{
58+
Cmd: strings.Trim(s[0], spaceCharSet),
59+
Content: strings.Join(s[1:], " "),
60+
}
61+
}

examples/receive-and-send/process.go

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"log"
7-
"strings"
87
"time"
98

109
"github.com/tencent-connect/botgo/dto"
@@ -16,15 +15,10 @@ type Processor struct {
1615
api openapi.OpenAPI
1716
}
1817

19-
type CMD struct {
20-
Cmd string
21-
Content string
22-
}
23-
2418
func (p Processor) ProcessMessage(input string, data *dto.WSATMessageData) error {
25-
cmd := parseCommand(input)
19+
cmd := message.ParseCommand(input)
2620
toCreate := &dto.MessageToCreate{
27-
Content: "默认回复",
21+
Content: "默认回复 <emoji:37>",
2822
MessageReference: &dto.MessageReference{
2923
// 引用这条消息
3024
MessageID: data.ID,
@@ -49,6 +43,7 @@ func (p Processor) ProcessMessage(input string, data *dto.WSATMessageData) error
4943
reply = true
5044
default:
5145
}
46+
fmt.Println("1111111", reply, []byte(cmd.Cmd), len(cmd.Cmd))
5247
// 是否命中上面的指令,不回复多余的内容
5348
if reply {
5449
if _, err := p.api.PostMessage(context.Background(), data.ChannelID, toCreate); err != nil {
@@ -59,20 +54,6 @@ func (p Processor) ProcessMessage(input string, data *dto.WSATMessageData) error
5954
return nil
6055
}
6156

62-
func parseCommand(input string) *CMD {
63-
s := strings.Split(input, " ")
64-
if len(s) < 2 {
65-
return &CMD{
66-
Cmd: input,
67-
Content: "",
68-
}
69-
}
70-
return &CMD{
71-
Cmd: s[0],
72-
Content: strings.Join(s[1:], " "),
73-
}
74-
}
75-
7657
func (p Processor) dmHandler(data *dto.WSATMessageData) {
7758
dm, err := p.api.CreateDirectMessage(
7859
context.Background(), &dto.DirectMessageToCreate{

0 commit comments

Comments
 (0)