GO语言实现如流机器人发送图片消息并且@群成员
package chatbot import ( "bytes" "encoding/json" "net/http" ) type ChatMessageType string const ( MessageTypeText ChatMessageType = "TEXT" MessageTypeImage ChatMessageType = "IMAGE" MessageTypeLink ChatMessageType = "LINK" MessageTypeAt ChatMessageType = "AT" ) const ( DefaultURL = "webhook链接" DefaultGroupID = "群id" ) var DefaultAtUsers = []string{"要@的群成员名"} type ChatMessage struct { Type ChatMessageType `json:"type,omitempty"` Content string `json:"content,omitempty"` Href string `json:"href,omitempty"` AtAll bool `json:"atall,omitempty"` AtUserIds []string `json:"atuserids,omitempty"` } type ChatBot struct { URL string `json:"url,omitempty"` GroupID string `json:"group_id,omitempty"` Body []*ChatMessage `json:"msg,omitempty"` } // NewChatBot 函数返回 ChatBot 的指针 func NewChatBot(url, groupID string) *ChatBot { return &ChatBot{URL: url, GroupID: groupID} } // AddMsg 将指定消息添加到聊天机器人实例的消息体中。 func (bot *ChatBot) AddMsg(msg ...*ChatMessage) *ChatBot { bot.Body = append(bot.Body, msg...) return bot } // NewTextChatMessage 创建一个带有内容的文本聊天消息 // 参数: // // content: 字符串类型的聊天消息内容 // // 返回值: // // *ChatMessage: 指向新创建的聊天消息的指针 func NewTextChatMessage(content string) *ChatMessage { return &ChatMessage{Type: MessageTypeText, Content: content} } // NewImageChatMessage 函数返回一个新的图像聊天消息 func NewImageChatMessage(content string) *ChatMessage { return &ChatMessage{Type: MessageTypeImage, Content: content} } // NewLinkChatMessage 函数创建一个 LinkChatMessage 对象,包含一个指向 href 的链接。 // 参数 content 是消息内容,参数 href 是链接地址。 func NewLinkChatMessage(content, href string) *ChatMessage { return &ChatMessage{Type: MessageTypeLink, Href: href} } // NewAtChatMessage @群里成员名称的切片,函数接受一个字符串切片和一个布尔值(是否@全体)作为输入,并返回一个新的 ChatMessage 结构体指针。 func NewAtChatMessage(AtUserIds []string, atAll bool) *ChatMessage { return &ChatMessage{Type: MessageTypeAt, AtAll: atAll, AtUserIds: AtUserIds} } // SendMsg 通过发送消息到指定群组 // 参数: // // bot: 聊天机器人实例,包含需要发送的消息和群组ID信息 // // 返回值: // // 如果发送消息成功则返回nil,否则返回相应错误 func (bot *ChatBot) SendMsg() error { msgBody, err := json.Marshal(bot.Body) if err != nil { return err } jsonStr := []byte(`{ "message": { "header": { "toid": [` + bot.GroupID + `] }, "body": ` + string(msgBody) + ` } }`) req, err := http.NewRequest("POST", bot.URL, bytes.NewBuffer(jsonStr)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() return nil }
使用方式:
var msgList []*chatbot.ChatMessage msgList = append(msgList, chatbot.NewImageChatMessage(base64图片数据)) if len(msg) > 0 { msgList = append(msgList, chatbot.NewTextChatMessage(msg)) } msgList = append(msgList, chatbot.NewAtChatMessage(chatbot.DefaultAtUsers, false)) robot := chatbot.NewChatBot(chatbot.DefaultURL, chatbot.DefaultGroupID) _ = robot.AddMsg(msgList...).SendMsg()
发表评论