From 0876fa33367e3950514af9fc11731077c54b7dea Mon Sep 17 00:00:00 2001 From: cosmo Date: Fri, 14 Jun 2024 21:20:55 +0800 Subject: [PATCH 1/7] beta430 --- handlers/message_parser.go | 62 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/handlers/message_parser.go b/handlers/message_parser.go index 5c1a7d1a..0f19180b 100644 --- a/handlers/message_parser.go +++ b/handlers/message_parser.go @@ -451,43 +451,41 @@ func parseMessageContent(paramsMessage callapi.ParamsContent, message callapi.Ac qqNumber, _ := segmentMap["data"].(map[string]interface{})["qq"].(string) segmentContent = "[CQ:at,qq=" + qqNumber + "]" case "markdown": - mdContent, ok := segmentMap["data"].(map[string]interface{})["data"] - if ok { - if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { - // mdContent是map[string]interface{},按map处理 - mdContentBytes, err := json.Marshal(mdContentMap) + mdContent := segmentMap["data"] + if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { + // mdContent是map[string]interface{},按map处理 + mdContentBytes, err := json.Marshal(mdContentMap) + if err != nil { + mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) + } + encoded := base64.StdEncoding.EncodeToString(mdContentBytes) + segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" + } else if mdContentStr, isString := mdContent.(string); isString { + // mdContent是string + if strings.HasPrefix(mdContentStr, "base64://") { + // 如果以base64://开头,直接使用 + segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" + } else { + // 处理实体化后的JSON文本 + mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") + mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") + mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") + mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") + + // 将处理过的字符串视为JSON对象,进行序列化和编码 + var jsonMap map[string]interface{} + if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { + mylog.Printf("Error unmarshaling string to JSON:%v", err) + } + mdContentBytes, err := json.Marshal(jsonMap) if err != nil { - mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) + mylog.Printf("Error marshaling jsonMap to JSON:%v", err) } encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - segmentContent = "[CQ:markdown,data=" + encoded + "]" - } else if mdContentStr, isString := mdContent.(string); isString { - // mdContent是string - if strings.HasPrefix(mdContentStr, "base64://") { - // 如果以base64://开头,直接使用 - segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" - } else { - // 处理实体化后的JSON文本 - mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") - mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") - mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") - mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") - - // 将处理过的字符串视为JSON对象,进行序列化和编码 - var jsonMap map[string]interface{} - if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { - mylog.Printf("Error unmarshaling string to JSON:%v", err) - } - mdContentBytes, err := json.Marshal(jsonMap) - if err != nil { - mylog.Printf("Error marshaling jsonMap to JSON:%v", err) - } - encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - segmentContent = "[CQ:markdown,data=" + encoded + "]" - } + segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" } } else { - mylog.Printf("Error marshaling markdown segment to interface,contain type but data is nil.") + mylog.Printf("Error marshaling markdown segment wrong type.") } } From 27d1a91d12678029c5046fc3f2dc2b43c9051da5 Mon Sep 17 00:00:00 2001 From: cosmo Date: Sat, 15 Jun 2024 20:02:56 +0800 Subject: [PATCH 2/7] beta431 --- handlers/message_parser.go | 124 ++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 58 deletions(-) diff --git a/handlers/message_parser.go b/handlers/message_parser.go index 0f19180b..09a45d47 100644 --- a/handlers/message_parser.go +++ b/handlers/message_parser.go @@ -451,41 +451,45 @@ func parseMessageContent(paramsMessage callapi.ParamsContent, message callapi.Ac qqNumber, _ := segmentMap["data"].(map[string]interface{})["qq"].(string) segmentContent = "[CQ:at,qq=" + qqNumber + "]" case "markdown": - mdContent := segmentMap["data"] - if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { - // mdContent是map[string]interface{},按map处理 - mdContentBytes, err := json.Marshal(mdContentMap) - if err != nil { - mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) - } - encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" - } else if mdContentStr, isString := mdContent.(string); isString { - // mdContent是string - if strings.HasPrefix(mdContentStr, "base64://") { - // 如果以base64://开头,直接使用 - segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" - } else { - // 处理实体化后的JSON文本 - mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") - mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") - mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") - mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") - - // 将处理过的字符串视为JSON对象,进行序列化和编码 - var jsonMap map[string]interface{} - if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { - mylog.Printf("Error unmarshaling string to JSON:%v", err) - } - mdContentBytes, err := json.Marshal(jsonMap) + mdContent, ok := segmentMap["data"].(map[string]interface{})["data"] + if ok { + if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { + // mdContent是map[string]interface{},按map处理 + mdContentBytes, err := json.Marshal(mdContentMap) if err != nil { - mylog.Printf("Error marshaling jsonMap to JSON:%v", err) + mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) } encoded := base64.StdEncoding.EncodeToString(mdContentBytes) segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" + } else if mdContentStr, isString := mdContent.(string); isString { + // mdContent是string + if strings.HasPrefix(mdContentStr, "base64://") { + // 如果以base64://开头,直接使用 + segmentContent = "[CQ:markdown,data=" + mdContentStr + "]" + } else { + // 处理实体化后的JSON文本 + mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") + mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") + mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") + mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") + + // 将处理过的字符串视为JSON对象,进行序列化和编码 + var jsonMap map[string]interface{} + if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { + mylog.Printf("Error unmarshaling string to JSON:%v", err) + } + mdContentBytes, err := json.Marshal(jsonMap) + if err != nil { + mylog.Printf("Error marshaling jsonMap to JSON:%v", err) + } + encoded := base64.StdEncoding.EncodeToString(mdContentBytes) + segmentContent = "[CQ:markdown,data=base64://" + encoded + "]" + } + } else { + mylog.Printf("Error marshaling markdown segment wrong type.") } } else { - mylog.Printf("Error marshaling markdown segment wrong type.") + mylog.Printf("Error marshaling markdown segment to interface,contain type but data is nil.") } } @@ -515,41 +519,45 @@ func parseMessageContent(paramsMessage callapi.ParamsContent, message callapi.Ac qqNumber, _ := message["data"].(map[string]interface{})["qq"].(string) messageText = "[CQ:at,qq=" + qqNumber + "]" case "markdown": - mdContent := message["data"] - if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { - // mdContent是map[string]interface{},按map处理 - mdContentBytes, err := json.Marshal(mdContentMap) - if err != nil { - mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) - } - encoded := base64.StdEncoding.EncodeToString(mdContentBytes) - messageText = "[CQ:markdown,data=base64://" + encoded + "]" - } else if mdContentStr, isString := mdContent.(string); isString { - // mdContent是string - if strings.HasPrefix(mdContentStr, "base64://") { - // 如果以base64://开头,直接使用 - messageText = "[CQ:markdown,data=" + mdContentStr + "]" - } else { - // 处理实体化后的JSON文本 - mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") - mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") - mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") - mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") - - // 将处理过的字符串视为JSON对象,进行序列化和编码 - var jsonMap map[string]interface{} - if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { - mylog.Printf("Error unmarshaling string to JSON:%v", err) - } - mdContentBytes, err := json.Marshal(jsonMap) + mdContent, ok := message["data"].(map[string]interface{})["data"] + if ok { + if mdContentMap, isMap := mdContent.(map[string]interface{}); isMap { + // mdContent是map[string]interface{},按map处理 + mdContentBytes, err := json.Marshal(mdContentMap) if err != nil { - mylog.Printf("Error marshaling jsonMap to JSON:%v", err) + mylog.Printf("Error marshaling mdContentMap to JSON:%v", err) } encoded := base64.StdEncoding.EncodeToString(mdContentBytes) messageText = "[CQ:markdown,data=base64://" + encoded + "]" + } else if mdContentStr, isString := mdContent.(string); isString { + // mdContent是string + if strings.HasPrefix(mdContentStr, "base64://") { + // 如果以base64://开头,直接使用 + messageText = "[CQ:markdown,data=" + mdContentStr + "]" + } else { + // 处理实体化后的JSON文本 + mdContentStr = strings.ReplaceAll(mdContentStr, "&", "&") + mdContentStr = strings.ReplaceAll(mdContentStr, "[", "[") + mdContentStr = strings.ReplaceAll(mdContentStr, "]", "]") + mdContentStr = strings.ReplaceAll(mdContentStr, ",", ",") + + // 将处理过的字符串视为JSON对象,进行序列化和编码 + var jsonMap map[string]interface{} + if err := json.Unmarshal([]byte(mdContentStr), &jsonMap); err != nil { + mylog.Printf("Error unmarshaling string to JSON:%v", err) + } + mdContentBytes, err := json.Marshal(jsonMap) + if err != nil { + mylog.Printf("Error marshaling jsonMap to JSON:%v", err) + } + encoded := base64.StdEncoding.EncodeToString(mdContentBytes) + messageText = "[CQ:markdown,data=base64://" + encoded + "]" + } + } else { + mylog.Printf("Error marshaling mdContent wrong type.") } } else { - mylog.Printf("Error marshaling mdContent wrong type.") + mylog.Printf("Error marshaling markdown segment to interface,contain type but data is nil.") } } default: From 9e8bca6bfc4be64b7d347e4abc4b4301fcdbf7ea Mon Sep 17 00:00:00 2001 From: cosmo Date: Sat, 15 Jun 2024 23:47:54 +0800 Subject: [PATCH 3/7] beta432 --- handlers/message_parser.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/handlers/message_parser.go b/handlers/message_parser.go index 09a45d47..a3562074 100644 --- a/handlers/message_parser.go +++ b/handlers/message_parser.go @@ -1377,6 +1377,11 @@ func parseMDData(mdData []byte) (*dto.Markdown, *keyboard.MessageKeyboard, error kb = &keyboard.MessageKeyboard{ Content: &keyboard.CustomKeyboard{Rows: temp.Rows}, } + } else if temp.Keyboard.ID != "" { + // 处理嵌套在 Keyboard 中的 ID(当使用按钮模板时) + kb = &keyboard.MessageKeyboard{ + ID: temp.Keyboard.ID, + } } return md, kb, nil From a3fb2192cc19a9e9d979f418073c5b477f04b9d8 Mon Sep 17 00:00:00 2001 From: cosmo Date: Wed, 19 Jun 2024 16:50:35 +0800 Subject: [PATCH 4/7] beta433 --- handlers/get_friend_list.go | 2 +- handlers/get_group_list.go | 4 ++-- handlers/send_group_msg.go | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/handlers/get_friend_list.go b/handlers/get_friend_list.go index d11a6370..b3b344b1 100644 --- a/handlers/get_friend_list.go +++ b/handlers/get_friend_list.go @@ -56,6 +56,6 @@ func HandleGetFriendList(client callapi.Client, api openapi.OpenAPI, apiv2 opena return "", nil } - mylog.Printf("get_friend_list: %s", result) + //mylog.Printf("get_friend_list: %s", result) return string(result), nil } diff --git a/handlers/get_group_list.go b/handlers/get_group_list.go index 712c5b0c..6c43590d 100644 --- a/handlers/get_group_list.go +++ b/handlers/get_group_list.go @@ -159,7 +159,7 @@ func GetGroupList(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.Open } outputMap := structToMap(groupList) - mylog.Printf("getGroupList(频道): %+v\n", outputMap) + //mylog.Printf("getGroupList(频道): %+v\n", outputMap) err = client.SendMessage(outputMap) if err != nil { @@ -172,7 +172,7 @@ func GetGroupList(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.Open return "", nil } - mylog.Printf("get_group_list: %s", result) + //mylog.Printf("get_group_list: %s", result) return string(result), nil } diff --git a/handlers/send_group_msg.go b/handlers/send_group_msg.go index dad01f2d..a2b8db3c 100644 --- a/handlers/send_group_msg.go +++ b/handlers/send_group_msg.go @@ -6,6 +6,7 @@ import ( "encoding/base64" "fmt" "io" + "math/rand" "net/http" "os" "strconv" @@ -1591,6 +1592,20 @@ func auto_md(message callapi.ActionMessage, messageText string, richMediaMessage Type: 2, // 所有人可操作 } } + case strings.HasPrefix(whiteLabel, "$"): + // 只有5%的概率执行以下代码 + if rand.Float64() < 0.05 { + // 分割whiteLabel来获取显示内容和URL + parts := strings.SplitN(whiteLabel[1:], " ", 2) // [1:] 用于去除白名单标签开头的'%' + if len(parts) == 2 { + whiteLabel = parts[0] // 显示内容 + actiondata = parts[1] // URL + actiontype = 0 // 链接类型 + permission = &keyboard.Permission{ + Type: 2, // 所有人可操作 + } + } + } case strings.HasPrefix(whiteLabel, "^"): // 分割whiteLabel来获取显示内容和URL parts := strings.SplitN(whiteLabel[1:], " ", 2) // [1:] 用于去除白名单标签开头的'^' From 2f3f91029d23c38689dc615ca7b0cc7a0f70b382 Mon Sep 17 00:00:00 2001 From: cosmo Date: Thu, 20 Jun 2024 13:54:02 +0800 Subject: [PATCH 5/7] beta434 --- handlers/get_avatar.go | 73 ++++++++++++++++++++++++++++++ handlers/get_login_info.go | 7 ++- handlers/send_group_msg.go | 53 ++++++++++++---------- handlers/send_guild_channel_msg.go | 4 +- httpapi/httpapi.go | 73 ++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+), 30 deletions(-) create mode 100644 handlers/get_avatar.go diff --git a/handlers/get_avatar.go b/handlers/get_avatar.go new file mode 100644 index 00000000..925cef4e --- /dev/null +++ b/handlers/get_avatar.go @@ -0,0 +1,73 @@ +package handlers + +import ( + "encoding/json" + "fmt" + + "github.com/hoshinonyaruko/gensokyo/callapi" + "github.com/hoshinonyaruko/gensokyo/config" + "github.com/hoshinonyaruko/gensokyo/idmap" + "github.com/hoshinonyaruko/gensokyo/mylog" + "github.com/tencent-connect/botgo/openapi" +) + +type GetAvatarResponse struct { + Message string `json:"message"` + RetCode int `json:"retcode"` + Echo interface{} `json:"echo"` +} + +func init() { + callapi.RegisterHandler("get_avatar", GetStatus) +} + +func GetAvatar(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.OpenAPI, message callapi.ActionMessage) (string, error) { + + var response GetAvatarResponse + var originalUserID string + var err error + + if config.GetIdmapPro() { + // 如果UserID不是nil且配置为使用Pro版本,则调用RetrieveRowByIDv2Pro + _, originalUserID, err = idmap.RetrieveRowByIDv2Pro(message.Params.GroupID.(string), message.Params.UserID.(string)) + if err != nil { + mylog.Printf("Error1 retrieving original GroupID: %v", err) + } + } else { + originalUserID, err = idmap.RetrieveRowByIDv2(message.Params.UserID.(string)) + if err != nil { + mylog.Printf("Error retrieving original UserID: %v", err) + } + } + + avatarurl, _ := GenerateAvatarURLV2(originalUserID) + + response.Message = avatarurl + response.RetCode = 0 + response.Echo = message.Echo + + outputMap := structToMap(response) + + mylog.Printf("get_avatar: %+v\n", outputMap) + + err = client.SendMessage(outputMap) + if err != nil { + mylog.Printf("Error sending message via client: %v", err) + } + //把结果从struct转换为json + result, err := json.Marshal(response) + if err != nil { + mylog.Printf("Error marshaling data: %v", err) + //todo 符合onebotv11 ws返回的错误码 + return "", nil + } + return string(result), nil +} + +// GenerateAvatarURLV2 生成根据32位ID 和 Appid 组合的 新QQ 头像 URL +func GenerateAvatarURLV2(openid string) (string, error) { + + appidstr := config.GetAppIDStr() + // 构建并返回 URL + return fmt.Sprintf("https://q.qlogo.cn/qqapp/%s/%s/640", appidstr, openid), nil +} diff --git a/handlers/get_login_info.go b/handlers/get_login_info.go index a2a4362d..7a9dcf92 100644 --- a/handlers/get_login_info.go +++ b/handlers/get_login_info.go @@ -2,7 +2,6 @@ package handlers import ( "encoding/json" - "fmt" "github.com/hoshinonyaruko/gensokyo/callapi" "github.com/hoshinonyaruko/gensokyo/config" @@ -20,7 +19,7 @@ type LoginInfoResponse struct { type LoginInfoData struct { Nickname string `json:"nickname"` - UserID string `json:"user_id"` // Assuming UserID is a string type based on the pseudocode + UserID int64 `json:"user_id"` // Assuming UserID is a string type based on the pseudocode } func init() { @@ -40,12 +39,12 @@ func GetLoginInfo(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.Open globalBotID = config.GetAppID() } - userIDStr := fmt.Sprintf("%d", globalBotID) + //userIDStr := fmt.Sprintf("%d", globalBotID) botname = config.GetCustomBotName() response.Data = LoginInfoData{ Nickname: botname, - UserID: userIDStr, + UserID: int64(globalBotID), } response.Message = "" response.RetCode = 0 diff --git a/handlers/send_group_msg.go b/handlers/send_group_msg.go index a2b8db3c..8d5608c8 100644 --- a/handlers/send_group_msg.go +++ b/handlers/send_group_msg.go @@ -1540,6 +1540,7 @@ func auto_md(message callapi.ActionMessage, messageText string, richMediaMessage var actiontype keyboard.ActionType var permission *keyboard.Permission var actiondata string + var skip bool //检查是否设置了enter数组 enter := checkDataLabelPrefix(dataLabel) //例外规则 @@ -1605,6 +1606,8 @@ func auto_md(message callapi.ActionMessage, messageText string, richMediaMessage Type: 2, // 所有人可操作 } } + } else { + skip = true } case strings.HasPrefix(whiteLabel, "^"): // 分割whiteLabel来获取显示内容和URL @@ -1625,32 +1628,34 @@ func auto_md(message callapi.ActionMessage, messageText string, richMediaMessage } } - // 创建按钮 - button := &keyboard.Button{ - RenderData: &keyboard.RenderData{ - Label: whiteLabel, - VisitedLabel: whiteLabel, - Style: 1, //蓝色边缘 - }, - Action: &keyboard.Action{ - Type: actiontype, - Permission: permission, - Data: actiondata, - UnsupportTips: "请升级新版手机QQ", - Enter: enter, - }, - } + if !skip { + // 创建按钮 + button := &keyboard.Button{ + RenderData: &keyboard.RenderData{ + Label: whiteLabel, + VisitedLabel: whiteLabel, + Style: 1, //蓝色边缘 + }, + Action: &keyboard.Action{ + Type: actiontype, + Permission: permission, + Data: actiondata, + UnsupportTips: "请升级新版手机QQ", + Enter: enter, + }, + } - // 如果当前行为空或已满(4个按钮),则创建一个新行 - if currentRow == nil || buttonCount == 4 { - currentRow = &keyboard.Row{} - customKeyboard.Rows = append(customKeyboard.Rows, currentRow) - buttonCount = 0 // 重置按钮计数 - } + // 如果当前行为空或已满(4个按钮),则创建一个新行 + if currentRow == nil || buttonCount == 4 { + currentRow = &keyboard.Row{} + customKeyboard.Rows = append(customKeyboard.Rows, currentRow) + buttonCount = 0 // 重置按钮计数 + } - // 将按钮添加到当前行 - currentRow.Buttons = append(currentRow.Buttons, button) - buttonCount++ + // 将按钮添加到当前行 + currentRow.Buttons = append(currentRow.Buttons, button) + buttonCount++ + } } // 在循环结束后,最后一行可能不满4个按钮,但已经被正确处理 diff --git a/handlers/send_guild_channel_msg.go b/handlers/send_guild_channel_msg.go index aeb263a9..5975b293 100644 --- a/handlers/send_guild_channel_msg.go +++ b/handlers/send_guild_channel_msg.go @@ -3,7 +3,7 @@ package handlers import ( "context" "encoding/base64" - "io/ioutil" + "io" "net/http" "os" "strings" @@ -463,7 +463,7 @@ func downloadImageAndConvertToBase64(url string) (string, error) { defer resp.Body.Close() // 读取响应的内容 - data, err := ioutil.ReadAll(resp.Body) + data, err := io.ReadAll(resp.Body) if err != nil { return "", err // 返回错误 } diff --git a/httpapi/httpapi.go b/httpapi/httpapi.go index ec562303..9f536cb0 100644 --- a/httpapi/httpapi.go +++ b/httpapi/httpapi.go @@ -66,6 +66,14 @@ func CombinedMiddleware(api openapi.OpenAPI, apiV2 openapi.OpenAPI) gin.HandlerF handleDeleteMsg(c, api, apiV2) return } + if c.Request.URL.Path == "/get_avatar" { + handleGetAvatar(c, api, apiV2) + return + } + if c.Request.URL.Path == "/get_login_info" { + handleGetLoginInfo(c, api, apiV2) + return + } // 调用c.Next()以继续处理请求链 c.Next() @@ -577,3 +585,68 @@ func handleDeleteMsg(c *gin.Context, api openapi.OpenAPI, apiV2 openapi.OpenAPI) } } + +// handleGetAvatar 处理get_avatar的请求 +func handleGetAvatar(c *gin.Context, api openapi.OpenAPI, apiV2 openapi.OpenAPI) { + var req struct { + Echo string `json:"echo" form:"echo"` // Echo值用于标识消息 + GroupID int64 `json:"group_id" form:"group_id"` + UserID int64 `json:"user_id" form:"user_id"` + } + + // 根据请求方法解析参数 + if c.Request.Method == http.MethodGet { + // 从URL查询参数解析 + if err := c.ShouldBindQuery(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + } else { + // 从JSON或表单数据解析 + if err := c.ShouldBind(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + } + + // 创建 ActionMessage 实例 + message := callapi.ActionMessage{ + Action: "get_avatar", + Echo: req.Echo, + Params: callapi.ParamsContent{ + GroupID: strconv.FormatInt(req.GroupID, 10), // 注意这里需要转换类型,因为 GroupID 是 int64 + UserID: strconv.FormatInt(req.UserID, 10), + }, + } + + // 调用处理函数 + client := &HttpAPIClient{} // 假设HttpAPIClient实现了callapi.Client接口 + retmsg, err := handlers.GetAvatar(client, api, apiV2, message) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + // 返回处理结果 + c.Header("Content-Type", "application/json") + c.String(http.StatusOK, retmsg) +} + +func handleGetLoginInfo(c *gin.Context, api openapi.OpenAPI, apiV2 openapi.OpenAPI) { + // 创建 ActionMessage 实例 + message := callapi.ActionMessage{ + Action: "get_login_info", + } + + // 调用处理函数 + client := &HttpAPIClient{} // 假设HttpAPIClient实现了callapi.Client接口 + retmsg, err := handlers.GetLoginInfo(client, api, apiV2, message) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + // 返回处理结果 + c.Header("Content-Type", "application/json") + c.String(http.StatusOK, retmsg) +} From 41741cc4a39daf82e22e49b57eb64205fc602734 Mon Sep 17 00:00:00 2001 From: cosmo Date: Thu, 20 Jun 2024 14:06:27 +0800 Subject: [PATCH 6/7] bet435 --- handlers/get_avatar.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/handlers/get_avatar.go b/handlers/get_avatar.go index 925cef4e..37606505 100644 --- a/handlers/get_avatar.go +++ b/handlers/get_avatar.go @@ -32,6 +32,10 @@ func GetAvatar(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.OpenAPI _, originalUserID, err = idmap.RetrieveRowByIDv2Pro(message.Params.GroupID.(string), message.Params.UserID.(string)) if err != nil { mylog.Printf("Error1 retrieving original GroupID: %v", err) + _, originalUserID, err = idmap.RetrieveRowByIDv2Pro("690426430", message.Params.UserID.(string)) + if err != nil { + mylog.Printf("Error reading private originalUserID: %v", err) + } } } else { originalUserID, err = idmap.RetrieveRowByIDv2(message.Params.UserID.(string)) From 245780261f44e86d6c4833b3d7aeeea447f7dce8 Mon Sep 17 00:00:00 2001 From: cosmo Date: Sun, 23 Jun 2024 17:39:35 +0800 Subject: [PATCH 7/7] beta436 --- handlers/get_avatar.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handlers/get_avatar.go b/handlers/get_avatar.go index 37606505..edfabfaf 100644 --- a/handlers/get_avatar.go +++ b/handlers/get_avatar.go @@ -18,7 +18,7 @@ type GetAvatarResponse struct { } func init() { - callapi.RegisterHandler("get_avatar", GetStatus) + callapi.RegisterHandler("get_avatar", GetAvatar) } func GetAvatar(client callapi.Client, api openapi.OpenAPI, apiv2 openapi.OpenAPI, message callapi.ActionMessage) (string, error) {