mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-04 19:17:37 +08:00
feat: cross version ID converter & audio/mention segment support
This commit is contained in:
parent
847ef6d415
commit
672dafdb9d
@ -65,6 +65,9 @@ func (g *generator) generate(routers []Router) {
|
||||
g.WriteString("\"github.com/Mrs4s/go-cqhttp/global\"\n")
|
||||
g.WriteString(")\n\n")
|
||||
g.WriteString(fmt.Sprintf(`func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
var converter coolq.IDConverter = func(id any) any {
|
||||
return coolq.ConvertIDWithVersion(id,version)
|
||||
}
|
||||
if version == 12 {
|
||||
if action == "get_supported_actions" {
|
||||
return coolq.OK([]string{%v})
|
||||
@ -135,7 +138,7 @@ func (g *generator) router(router Router, pathVersion int) {
|
||||
}
|
||||
|
||||
for i, p := range router.Params {
|
||||
if p.Name == "version" {
|
||||
if p.Name == "version" || p.Name == "converter" {
|
||||
continue
|
||||
}
|
||||
if p.Default == "" {
|
||||
@ -157,6 +160,10 @@ func (g *generator) router(router Router, pathVersion int) {
|
||||
fmt.Fprintf(g.out, "version")
|
||||
continue
|
||||
}
|
||||
if p.Name == "converter" {
|
||||
fmt.Fprintf(g.out, "converter")
|
||||
continue
|
||||
}
|
||||
fmt.Fprintf(g.out, "p%d", i)
|
||||
}
|
||||
g.WriteString(")\n")
|
||||
@ -166,7 +173,7 @@ func conv(v, t string) string {
|
||||
switch t {
|
||||
default:
|
||||
panic("unknown type: " + t)
|
||||
case "gjson.Result":
|
||||
case "gjson.Result", "IDConverter":
|
||||
return v
|
||||
case "int64":
|
||||
return v + ".Int()"
|
||||
|
28
coolq/api.go
28
coolq/api.go
@ -328,13 +328,13 @@ func (bot *CQBot) CQGetTopicChannelFeeds(guildID, channelID uint64) global.MSG {
|
||||
//
|
||||
// https://git.io/Jtz1L
|
||||
// @route(get_friend_list)
|
||||
func (bot *CQBot) CQGetFriendList() global.MSG {
|
||||
func (bot *CQBot) CQGetFriendList(version uint16) global.MSG {
|
||||
fs := make([]global.MSG, 0, len(bot.Client.FriendList))
|
||||
for _, f := range bot.Client.FriendList {
|
||||
fs = append(fs, global.MSG{
|
||||
"nickname": f.Nickname,
|
||||
"remark": f.Remark,
|
||||
"user_id": f.Uin,
|
||||
"user_id": ConvertIDWithVersion(f.Uin, version),
|
||||
})
|
||||
}
|
||||
return OK(fs)
|
||||
@ -400,14 +400,14 @@ func (bot *CQBot) CQDeleteFriend(uin int64) global.MSG {
|
||||
//
|
||||
// https://git.io/Jtz1t
|
||||
// @route(get_group_list)
|
||||
func (bot *CQBot) CQGetGroupList(noCache bool) global.MSG {
|
||||
func (bot *CQBot) CQGetGroupList(noCache bool, converter IDConverter) global.MSG {
|
||||
gs := make([]global.MSG, 0, len(bot.Client.GroupList))
|
||||
if noCache {
|
||||
_ = bot.Client.ReloadGroupList()
|
||||
}
|
||||
for _, g := range bot.Client.GroupList {
|
||||
gs = append(gs, global.MSG{
|
||||
"group_id": g.Code,
|
||||
"group_id": converter(g.Code),
|
||||
"group_name": g.Name,
|
||||
"group_create_time": g.GroupCreateTime,
|
||||
"group_level": g.GroupLevel,
|
||||
@ -422,7 +422,7 @@ func (bot *CQBot) CQGetGroupList(noCache bool) global.MSG {
|
||||
//
|
||||
// https://git.io/Jtz1O
|
||||
// @route(get_group_info)
|
||||
func (bot *CQBot) CQGetGroupInfo(groupID int64, noCache bool) global.MSG {
|
||||
func (bot *CQBot) CQGetGroupInfo(groupID int64, noCache bool, converter IDConverter) global.MSG {
|
||||
group := bot.Client.FindGroup(groupID)
|
||||
if group == nil || noCache {
|
||||
group, _ = bot.Client.GetGroupInfo(groupID)
|
||||
@ -436,7 +436,7 @@ func (bot *CQBot) CQGetGroupInfo(groupID int64, noCache bool) global.MSG {
|
||||
for _, g := range info {
|
||||
if g.Code == groupID {
|
||||
return OK(global.MSG{
|
||||
"group_id": g.Code,
|
||||
"group_id": converter(g.Code),
|
||||
"group_name": g.Name,
|
||||
"group_memo": g.Memo,
|
||||
"group_create_time": 0,
|
||||
@ -448,7 +448,7 @@ func (bot *CQBot) CQGetGroupInfo(groupID int64, noCache bool) global.MSG {
|
||||
}
|
||||
} else {
|
||||
return OK(global.MSG{
|
||||
"group_id": group.Code,
|
||||
"group_id": converter(group.Code),
|
||||
"group_name": group.Name,
|
||||
"group_create_time": group.GroupCreateTime,
|
||||
"group_level": group.GroupLevel,
|
||||
@ -657,7 +657,7 @@ func (bot *CQBot) CQGroupFileDeleteFile(groupID int64, id string, busID int32) g
|
||||
//
|
||||
// https://docs.go-cqhttp.org/api/#%E8%8E%B7%E5%8F%96%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D-%E9%9A%90%E8%97%8F-api
|
||||
// @route(.get_word_slices)
|
||||
func (bot *CQBot) CQGetWordSlices(content string, version uint16) global.MSG {
|
||||
func (bot *CQBot) CQGetWordSlices(content string) global.MSG {
|
||||
slices, err := bot.Client.GetWordSegmentation(content)
|
||||
if err != nil {
|
||||
return Failed(100, "WORD_SEGMENTATION_API_ERROR", err.Error())
|
||||
@ -670,7 +670,7 @@ func (bot *CQBot) CQGetWordSlices(content string, version uint16) global.MSG {
|
||||
|
||||
// CQSendMessage 发送消息
|
||||
//
|
||||
// @route(send_msg)
|
||||
// @route11(send_msg)
|
||||
// @rename(m->message)
|
||||
func (bot *CQBot) CQSendMessage(groupID, userID int64, m gjson.Result, messageType string, autoEscape bool) global.MSG {
|
||||
switch {
|
||||
@ -688,7 +688,7 @@ func (bot *CQBot) CQSendMessage(groupID, userID int64, m gjson.Result, messageTy
|
||||
|
||||
// CQSendForwardMessage 发送合并转发消息
|
||||
//
|
||||
// @route(send_forward_msg)
|
||||
// @route11(send_forward_msg)
|
||||
// @rename(m->messages)
|
||||
func (bot *CQBot) CQSendForwardMessage(groupID, userID int64, m gjson.Result, messageType string) global.MSG {
|
||||
switch {
|
||||
@ -707,7 +707,7 @@ func (bot *CQBot) CQSendForwardMessage(groupID, userID int64, m gjson.Result, me
|
||||
// CQSendGroupMessage 发送群消息
|
||||
//
|
||||
// https://git.io/Jtz1c
|
||||
// @route(send_group_msg)
|
||||
// @route11(send_group_msg)
|
||||
// @rename(m->message)
|
||||
func (bot *CQBot) CQSendGroupMessage(groupID int64, m gjson.Result, autoEscape bool) global.MSG {
|
||||
group := bot.Client.FindGroup(groupID)
|
||||
@ -930,7 +930,7 @@ func (bot *CQBot) uploadForwardElement(m gjson.Result, target int64, sourceType
|
||||
// CQSendGroupForwardMessage 扩展API-发送合并转发(群)
|
||||
//
|
||||
// https://docs.go-cqhttp.org/api/#%E5%8F%91%E9%80%81%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91-%E7%BE%A4
|
||||
// @route(send_group_forward_msg)
|
||||
// @route11(send_group_forward_msg)
|
||||
// @rename(m->messages)
|
||||
func (bot *CQBot) CQSendGroupForwardMessage(groupID int64, m gjson.Result) global.MSG {
|
||||
if m.Type != gjson.JSON {
|
||||
@ -954,7 +954,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupID int64, m gjson.Result) globa
|
||||
// CQSendPrivateForwardMessage 扩展API-发送合并转发(好友)
|
||||
//
|
||||
// https://docs.go-cqhttp.org/api/#%E5%8F%91%E9%80%81%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91-%E7%BE%A4
|
||||
// @route(send_private_forward_msg)
|
||||
// @route11(send_private_forward_msg)
|
||||
// @rename(m->messages)
|
||||
func (bot *CQBot) CQSendPrivateForwardMessage(userID int64, m gjson.Result) global.MSG {
|
||||
if m.Type != gjson.JSON {
|
||||
@ -975,7 +975,7 @@ func (bot *CQBot) CQSendPrivateForwardMessage(userID int64, m gjson.Result) glob
|
||||
// CQSendPrivateMessage 发送私聊消息
|
||||
//
|
||||
// https://git.io/Jtz1l
|
||||
// @route(send_private_msg)
|
||||
// @route11(send_private_msg)
|
||||
// @rename(m->message)
|
||||
func (bot *CQBot) CQSendPrivateMessage(userID int64, groupID int64, m gjson.Result, autoEscape bool) global.MSG {
|
||||
var elem []message.IMessageElement
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/Mrs4s/go-cqhttp/global"
|
||||
"github.com/Mrs4s/go-cqhttp/internal/base"
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
// CQGetVersion 获取版本信息 OneBotV12
|
||||
@ -21,3 +22,11 @@ func (bot *CQBot) CQGetVersion() global.MSG {
|
||||
"runtime_os": runtime.GOOS,
|
||||
})
|
||||
}
|
||||
|
||||
// CQSendMessageV12 发送消息
|
||||
//
|
||||
// @route12(send_message)
|
||||
// @rename(m->message)
|
||||
func (bot *CQBot) CQSendMessageV12(groupID, userID, detailType string, m gjson.Result) global.MSG {
|
||||
return OK(nil)
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package coolq
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@ -13,6 +14,8 @@ import (
|
||||
"github.com/Mrs4s/go-cqhttp/global"
|
||||
)
|
||||
|
||||
type IDConverter func(id any) any
|
||||
|
||||
func convertGroupMemberInfo(groupID int64, m *client.GroupMemberInfo) global.MSG {
|
||||
sex := "unknown"
|
||||
if m.Gender == 1 { // unknown = 0xff
|
||||
@ -221,3 +224,10 @@ func toStringMessage(m []message.IMessageElement, source message.Source) string
|
||||
func fU64(v uint64) string {
|
||||
return strconv.FormatUint(v, 10)
|
||||
}
|
||||
|
||||
func ConvertIDWithVersion(v any, version uint16) any {
|
||||
if version == 12 {
|
||||
return fmt.Sprint(v)
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
@ -832,7 +832,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, sourceType message.So
|
||||
return nil, err
|
||||
}
|
||||
return &message.VoiceElement{Data: base.ResampleSilk(data)}, nil
|
||||
case "record":
|
||||
case "record", "audio":
|
||||
f := d["file"]
|
||||
data, err := global.FindFile(f, d["cache"], global.VoicePath)
|
||||
if err != nil {
|
||||
@ -858,7 +858,10 @@ func (bot *CQBot) ToElement(t string, d map[string]string, sourceType message.So
|
||||
return &message.AnimatedSticker{ID: int32(id)}, nil
|
||||
}
|
||||
return message.NewFace(int32(id)), nil
|
||||
case "at":
|
||||
case "mention_all":
|
||||
d["qq"] = "all"
|
||||
fallthrough
|
||||
case "at", "mention":
|
||||
qq := d["qq"]
|
||||
if qq == "all" {
|
||||
return message.AtAll(), nil
|
||||
|
@ -8,9 +8,12 @@ import (
|
||||
)
|
||||
|
||||
func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
var converter coolq.IDConverter = func(id any) any {
|
||||
return coolq.ConvertIDWithVersion(id, version)
|
||||
}
|
||||
if version == 12 {
|
||||
if action == "get_supported_actions" {
|
||||
return coolq.OK([]string{".get_word_slices", ".handle_quick_operation", ".ocr_image", "ocr_image", "_get_group_notice", "_get_model_show", "_send_group_notice", "_set_model_show", "check_url_safely", "create_group_file_folder", "create_guild_role", "delete_essence_msg", "delete_friend", "delete_group_file", "delete_group_folder", "delete_guild_role", "delete_msg", "delete_unidirectional_friend", "download_file", "get_essence_msg_list", "get_forward_msg", "get_friend_list", "get_group_at_all_remain", "get_group_file_system_info", "get_group_file_url", "get_group_files_by_folder", "get_group_honor_info", "get_group_info", "get_group_list", "get_group_member_info", "get_group_member_list", "get_group_msg_history", "get_group_root_files", "get_group_system_msg", "get_guild_channel_list", "get_guild_list", "get_guild_member_list", "get_guild_member_profile", "get_guild_meta_by_guest", "get_guild_msg", "get_guild_roles", "get_guild_service_profile", "get_image", "get_self_info", "get_msg", "get_online_clients", "get_status", "get_user_info", "get_topic_channel_feeds", "get_unidirectional_friend_list", "get_version", "mark_msg_as_read", "qidian_get_account_info", "reload_event_filter", "send_forward_msg", "send_group_forward_msg", "send_group_msg", "send_group_sign", "send_guild_channel_msg", "send_msg", "send_private_forward_msg", "send_private_msg", "set_essence_msg", "set_friend_add_request", "set_group_add_request", "set_group_admin", "set_group_anonymous_ban", "set_group_ban", "set_group_card", "set_group_kick", "set_group_leave", "set_group_name", "set_group_portrait", "set_group_special_title", "set_group_whole_ban", "set_guild_member_role", "set_qq_profile", "update_guild_role", "upload_group_file"})
|
||||
return coolq.OK([]string{".get_word_slices", ".handle_quick_operation", ".ocr_image", "ocr_image", "_get_group_notice", "_get_model_show", "_send_group_notice", "_set_model_show", "check_url_safely", "create_group_file_folder", "create_guild_role", "delete_essence_msg", "delete_friend", "delete_group_file", "delete_group_folder", "delete_guild_role", "delete_msg", "delete_unidirectional_friend", "download_file", "get_essence_msg_list", "get_forward_msg", "get_friend_list", "get_group_at_all_remain", "get_group_file_system_info", "get_group_file_url", "get_group_files_by_folder", "get_group_honor_info", "get_group_info", "get_group_list", "get_group_member_info", "get_group_member_list", "get_group_msg_history", "get_group_root_files", "get_group_system_msg", "get_guild_channel_list", "get_guild_list", "get_guild_member_list", "get_guild_member_profile", "get_guild_meta_by_guest", "get_guild_msg", "get_guild_roles", "get_guild_service_profile", "get_image", "get_self_info", "get_msg", "get_online_clients", "get_status", "get_user_info", "get_topic_channel_feeds", "get_unidirectional_friend_list", "get_version", "mark_msg_as_read", "qidian_get_account_info", "reload_event_filter", "send_group_sign", "send_guild_channel_msg", "send_message", "set_essence_msg", "set_friend_add_request", "set_group_add_request", "set_group_admin", "set_group_anonymous_ban", "set_group_ban", "set_group_card", "set_group_kick", "set_group_leave", "set_group_name", "set_group_portrait", "set_group_special_title", "set_group_whole_ban", "set_guild_member_role", "set_qq_profile", "update_guild_role", "upload_group_file"})
|
||||
}
|
||||
switch action {
|
||||
case "get_self_info":
|
||||
@ -20,6 +23,12 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
return c.bot.CQGetStrangerInfo(p0)
|
||||
case "get_version":
|
||||
return c.bot.CQGetVersion()
|
||||
case "send_message":
|
||||
p0 := p.Get("group_id").String()
|
||||
p1 := p.Get("user_id").String()
|
||||
p2 := p.Get("detail_type").String()
|
||||
p3 := p.Get("message")
|
||||
return c.bot.CQSendMessageV12(p0, p1, p2, p3)
|
||||
}
|
||||
}
|
||||
if version == 11 {
|
||||
@ -35,12 +44,44 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
return c.bot.CQGetStrangerInfo(p0)
|
||||
case "get_version_info":
|
||||
return c.bot.CQGetVersionInfo()
|
||||
case "send_forward_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("user_id").Int()
|
||||
p2 := p.Get("messages")
|
||||
p3 := p.Get("message_type").String()
|
||||
return c.bot.CQSendForwardMessage(p0, p1, p2, p3)
|
||||
case "send_group_forward_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("messages")
|
||||
return c.bot.CQSendGroupForwardMessage(p0, p1)
|
||||
case "send_group_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("message")
|
||||
p2 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendGroupMessage(p0, p1, p2)
|
||||
case "send_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("user_id").Int()
|
||||
p2 := p.Get("message")
|
||||
p3 := p.Get("message_type").String()
|
||||
p4 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendMessage(p0, p1, p2, p3, p4)
|
||||
case "send_private_forward_msg":
|
||||
p0 := p.Get("user_id").Int()
|
||||
p1 := p.Get("messages")
|
||||
return c.bot.CQSendPrivateForwardMessage(p0, p1)
|
||||
case "send_private_msg":
|
||||
p0 := p.Get("user_id").Int()
|
||||
p1 := p.Get("group_id").Int()
|
||||
p2 := p.Get("message")
|
||||
p3 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendPrivateMessage(p0, p1, p2, p3)
|
||||
}
|
||||
}
|
||||
switch action {
|
||||
case ".get_word_slices":
|
||||
p0 := p.Get("content").String()
|
||||
return c.bot.CQGetWordSlices(p0, version)
|
||||
return c.bot.CQGetWordSlices(p0)
|
||||
case ".handle_quick_operation":
|
||||
p0 := p.Get("context")
|
||||
p1 := p.Get("operation")
|
||||
@ -115,7 +156,7 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
p0 := p.Get("[message_id,id].0").String()
|
||||
return c.bot.CQGetForwardMessage(p0)
|
||||
case "get_friend_list":
|
||||
return c.bot.CQGetFriendList()
|
||||
return c.bot.CQGetFriendList(version)
|
||||
case "get_group_at_all_remain":
|
||||
p0 := p.Get("group_id").Int()
|
||||
return c.bot.CQGetAtAllRemain(p0)
|
||||
@ -138,10 +179,10 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
case "get_group_info":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("no_cache").Bool()
|
||||
return c.bot.CQGetGroupInfo(p0, p1)
|
||||
return c.bot.CQGetGroupInfo(p0, p1, converter)
|
||||
case "get_group_list":
|
||||
p0 := p.Get("no_cache").Bool()
|
||||
return c.bot.CQGetGroupList(p0)
|
||||
return c.bot.CQGetGroupList(p0, converter)
|
||||
case "get_group_member_info":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("user_id").Int()
|
||||
@ -211,21 +252,6 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
case "reload_event_filter":
|
||||
p0 := p.Get("file").String()
|
||||
return c.bot.CQReloadEventFilter(p0)
|
||||
case "send_forward_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("user_id").Int()
|
||||
p2 := p.Get("messages")
|
||||
p3 := p.Get("message_type").String()
|
||||
return c.bot.CQSendForwardMessage(p0, p1, p2, p3)
|
||||
case "send_group_forward_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("messages")
|
||||
return c.bot.CQSendGroupForwardMessage(p0, p1)
|
||||
case "send_group_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("message")
|
||||
p2 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendGroupMessage(p0, p1, p2)
|
||||
case "send_group_sign":
|
||||
p0 := p.Get("group_id").Int()
|
||||
return c.bot.CQSendGroupSign(p0)
|
||||
@ -235,23 +261,6 @@ func (c *Caller) call(action string, version uint16, p Getter) global.MSG {
|
||||
p2 := p.Get("message")
|
||||
p3 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendGuildChannelMessage(p0, p1, p2, p3)
|
||||
case "send_msg":
|
||||
p0 := p.Get("group_id").Int()
|
||||
p1 := p.Get("user_id").Int()
|
||||
p2 := p.Get("message")
|
||||
p3 := p.Get("message_type").String()
|
||||
p4 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendMessage(p0, p1, p2, p3, p4)
|
||||
case "send_private_forward_msg":
|
||||
p0 := p.Get("user_id").Int()
|
||||
p1 := p.Get("messages")
|
||||
return c.bot.CQSendPrivateForwardMessage(p0, p1)
|
||||
case "send_private_msg":
|
||||
p0 := p.Get("user_id").Int()
|
||||
p1 := p.Get("group_id").Int()
|
||||
p2 := p.Get("message")
|
||||
p3 := p.Get("auto_escape").Bool()
|
||||
return c.bot.CQSendPrivateMessage(p0, p1, p2, p3)
|
||||
case "set_essence_msg":
|
||||
p0 := int32(p.Get("message_id").Int())
|
||||
return c.bot.CQSetEssenceMessage(p0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user