Skip to content

Commit

Permalink
update: MessageContentPostAll, add code_block, hr, md
Browse files Browse the repository at this point in the history
  • Loading branch information
chyroc committed Jun 14, 2024
1 parent e3c623f commit b48a9f6
Showing 1 changed file with 99 additions and 25 deletions.
124 changes: 99 additions & 25 deletions type_message_post.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ func (r *MessageContentPost) UnmarshalJSON(bytes []byte) error {
r.Content[vvIdx][vIdx] = MessageContentPostMedia{FileKey: item.FileKey, ImageKey: item.ImageKey}
case messageContentPostItemTypeEmotion:
r.Content[vvIdx][vIdx] = MessageContentPostEmotion{EmojiType: item.EmojiType}
case messageContentPostItemTypeCodeBlock:
r.Content[vvIdx][vIdx] = MessageContentPostCodeBlock{Language: item.Language, Text: item.Text}
case messageContentPostItemTypeHR:
r.Content[vvIdx][vIdx] = MessageContentPostHR{}
case messageContentPostItemTypeMD:
r.Content[vvIdx][vIdx] = MessageContentPostMD{Text: item.Text}
}
}
}
Expand All @@ -85,20 +91,24 @@ type MessageContentPostItem interface {
}

const (
messageContentPostItemTypeText = "text"
messageContentPostItemTypeLink = "a"
messageContentPostItemTypeAt = "at"
messageContentPostItemTypeImage = "img"
messageContentPostItemTypeMedia = "media"
messageContentPostItemTypeEmotion = "emotion"
messageContentPostItemTypeText = "text" // 文本
messageContentPostItemTypeLink = "a" // 链接
messageContentPostItemTypeAt = "at" // 艾特
messageContentPostItemTypeImage = "img" // 图片
messageContentPostItemTypeMedia = "media" // 视频
messageContentPostItemTypeEmotion = "emotion" // 表情
messageContentPostItemTypeCodeBlock = "code_block" // 代码块
messageContentPostItemTypeHR = "hr" // 分割线
messageContentPostItemTypeMD = "md" // 分割线
)

type messageContentPostAll struct {
Tag string `json:"tag"`

Text string `json:"text"` // 文本内容
UnEscape bool `json:"un_escape"` //
Href string `json:"href"` // 默认的链接地址
Text string `json:"text"` // 文本内容, 代码块的代码
UnEscape bool `json:"un_escape"` // 表示是不是 unescape 解码

Href string `json:"href"` // 默认的链接地址

UserID string `json:"user_id"` // open_id
UserName string `json:"user_name"` // 用户姓名
Expand All @@ -107,62 +117,80 @@ type messageContentPostAll struct {
Height int `json:"height"` // 图片的高
Width int `json:"width"` // 图片的宽

FileKey string `json:"file_key"` // 适配文件的唯一标识
FileKey string `json:"file_key"` // 视频文件 key

EmojiType string `json:"emoji_type"` // 表情类型, 部分可选值请参见表情文案

Style []string `json:"style"` // 文本内容的加粗、下划线、删除线和斜体样式,可选值分别为bold、underline、lineThrough与italic,没有样式则为空列表

EmojiType string `json:"emoji_type"` // 表情类型, 部分可选值请参见表情文案
Language string `json:"language"` // 代码块语言
}

// MessageContentPostText 文本内容
type MessageContentPostText struct {
messageContentPostInterfaceDefaultImpl
Text string `json:"text"` // 文本内容
UnEscape bool `json:"un_escape"` // 表示是不是 unescape 解码,默认为 false ,不用可以不填
Text string `json:"text"` // 文本内容
UnEscape bool `json:"un_escape"` // 表示是不是 unescape 解码,默认为 false ,不用可以不填
Style []string `json:"style"` // 文本内容的加粗、下划线、删除线和斜体样式,可选值分别为bold、underline、lineThrough与italic,没有样式则为空列表
}

// MarshalJSON ...
func (r MessageContentPostText) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
m := map[string]interface{}{
"text": r.Text,
"un_escape": r.UnEscape,
"tag": messageContentPostItemTypeText,
})
}
if len(r.Style) > 0 {
m["style"] = r.Style
}
return json.Marshal(m)
}

// MessageContentPostLink 链接
type MessageContentPostLink struct {
messageContentPostInterfaceDefaultImpl
Text string `json:"text"` // 文本内容
UnEscape bool `json:"un_escape"` //
Href string `json:"href"` // 默认的链接地址
Text string `json:"text"` // 文本内容
UnEscape bool `json:"un_escape"` //
Href string `json:"href"` // 默认的链接地址
Style []string `json:"style"` // 文本内容的加粗、下划线、删除线和斜体样式,可选值分别为bold、underline、lineThrough与italic,没有样式则为空列表
}

// MarshalJSON ...
func (r MessageContentPostLink) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
m := map[string]interface{}{
"text": r.Text,
"un_escape": r.UnEscape,
"href": r.Href,
"tag": messageContentPostItemTypeLink,
})
}
if len(r.Style) > 0 {
m["style"] = r.Style
}
return json.Marshal(m)
}

// MessageContentPostAt At用户
type MessageContentPostAt struct {
messageContentPostInterfaceDefaultImpl
UserID string `json:"user_id"` // open_id
UserName string `json:"user_name"` // 用户姓名
UserID string `json:"user_id"` // open_id
UserName string `json:"user_name"` // 用户姓名
Style []string `json:"style"` // 文本内容的加粗、下划线、删除线和斜体样式,可选值分别为bold、underline、lineThrough与italic,没有样式则为空列表
}

// MarshalJSON ...
func (r MessageContentPostAt) MarshalJSON() ([]byte, error) {
v := map[string]interface{}{
m := map[string]interface{}{
"user_id": r.UserID,
"tag": messageContentPostItemTypeAt,
}
if r.UserName != "" {
v["user_name"] = r.UserName
m["user_name"] = r.UserName
}
if len(r.Style) > 0 {
m["style"] = r.Style
}
return json.Marshal(v)
return json.Marshal(m)
}

// MessageContentPostImage 图片
Expand Down Expand Up @@ -213,6 +241,52 @@ func (r MessageContentPostEmotion) MarshalJSON() ([]byte, error) {
})
}

// MessageContentPostCodeBlock 代码块
type MessageContentPostCodeBlock struct {
messageContentPostInterfaceDefaultImpl
Language string `json:"language"` // 代码块语言,支持 PYTHON、C、CPP、GO、JAVA、KOTLIN、SWIFT、PHP、RUBY、RUST、JAVASCRIPT、TYPESCRIPT、BASH、SHELL、SQL、JSON、XML、YAML、HTML、THRIFT等
Text string `json:"text"` // 代码块内容
}

// MarshalJSON ...
func (r MessageContentPostCodeBlock) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"language": r.Language,
"text": r.Text,
"tag": messageContentPostItemTypeCodeBlock,
})
}

// MessageContentPostHR 分割线
type MessageContentPostHR struct {
messageContentPostInterfaceDefaultImpl
}

// MarshalJSON ...
func (r MessageContentPostHR) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"tag": messageContentPostItemTypeHR,
})
}

// MessageContentPostMD markdown
//
// md 标签会独占一个或多个段落,不能与其他标签在一行中。
// md 标签仅支持发送,获取消息内容时将不包含此标签,会根据 md 中的内容转换为其他标签。
// 引用、有序、无序列表在获取消息时会退化成文本标签(text tag)进行输出。
type MessageContentPostMD struct {
messageContentPostInterfaceDefaultImpl
Text string `json:"text"`
}

// MarshalJSON ...
func (r MessageContentPostMD) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"text": r.Text,
"tag": messageContentPostItemTypeMD,
})
}

type messageContentPostInterfaceDefaultImpl struct{}

// IsMessageContentPostItem ...
Expand Down

0 comments on commit b48a9f6

Please sign in to comment.