larksuite/oapi-sdk-go

在使用 sdk 发送文本消息使用 larkim.MessageText 生成消息内容时 有一个体验不好的地方

twgcode opened this issue · 0 comments

在使用 sdk 发送文本消息使用 larkim.MessageText 生成消息内容时 有一个体验不好的地方,业务代码
image
errInfo 会有换行符 导致 生成的消息内容不符合要求,然后发送消息直接失败

我看 larkim.MessageText 使用的这种构造方式
image

能不能改成类似这样的

import (
	"encoding/json"
	"strings"
)

type MessageText struct {
	builder strings.Builder
}

func NewMessageTextBuilder() *MessageText {
	m := &MessageText{}
	return m
}

func (t *MessageText) Text(text string) *MessageText {
	t.builder.WriteString(text)
	return t
}

func (t *MessageText) TextLine(text string) *MessageText {
	t.builder.WriteString(text)
	t.builder.WriteString("\n")
	return t
}

func (t *MessageText) Line() *MessageText {
	t.builder.WriteString("\n")
	return t
}

func (t *MessageText) AtUser(userId, name string) *MessageText {
	t.builder.WriteString(`<at user_id="`)
	t.builder.WriteString(userId)
	t.builder.WriteString(`">`)
	t.builder.WriteString(name)
	t.builder.WriteString("</at>")
	return t
}

func (t *MessageText) AtAll() *MessageText {
	t.builder.WriteString(`<at user_id="all">所有人</at>`)
	return t
}

func (t *MessageText) Build() (data string) {
	var tmp []byte
	tmp, _ = json.Marshal(map[string]string{"text": t.builder.String()})
	data = string(tmp) // TODO 后面优化成高效转化
	return
}

这样 感觉使用起来会舒服很多