diff --git a/coolq/api.go b/coolq/api.go index b969716..69cde3e 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -154,6 +154,77 @@ func (bot *CQBot) CQGetGuildMembers(guildID uint64) global.MSG { }) } +// CQGetGuildRoles 获取频道角色列表 +// @route(get_guild_roles) +func (bot *CQBot) CQGetGuildRoles(guildID uint64) global.MSG { + roles, err := bot.Client.GuildService.GetGuildRoles(guildID) + if err != nil { + log.Errorf("获取频道 %v 角色列表时出现错误: %v", guildID, err) + return Failed(100, "API_ERROR", err.Error()) + } + return OK(global.MSG{ + "roles": roles, + }) +} + +// CQCreateGuildRole 创建频道角色 +// @route(create_guild_role) +func (bot *CQBot) CQCreateGuildRole(guildID uint64, name string, color uint32, independent bool, initialUsers gjson.Result) global.MSG { + userSlice := []uint64{} + if initialUsers.IsArray() { + for _, user := range initialUsers.Array() { + userSlice = append(userSlice, user.Uint()) + } + } + role, err := bot.Client.GuildService.CreateGuildRole(guildID, name, color, independent, userSlice) + if err != nil { + log.Errorf("创建频道 %v 角色时出现错误: %v", guildID, err) + return Failed(100, "API_ERROR", err.Error()) + } + return OK(global.MSG{ + "role": role, + }) +} + +// CQDeleteGuildRole 删除频道角色 +// @route(delete_guild_role) +func (bot *CQBot) CQDeleteGuildRole(guildID uint64, roleID uint64) global.MSG { + err := bot.Client.GuildService.DeleteGuildRole(guildID, roleID) + if err != nil { + log.Errorf("删除频道 %v 角色时出现错误: %v", guildID, err) + return Failed(100, "API_ERROR", err.Error()) + } + return OK(nil) +} + +// CQSetGuildMemberRole 设置用户在频道中的角色 +// @route(set_guild_member_role) +func (bot *CQBot) CQSetGuildMemberRole(guildID uint64, set bool, roleID uint64, users gjson.Result) global.MSG { + userSlice := []uint64{} + if users.IsArray() { + for _, user := range users.Array() { + userSlice = append(userSlice, user.Uint()) + } + } + err := bot.Client.GuildService.SetUserRoleInGuild(guildID, set, roleID, userSlice) + if err != nil { + log.Errorf("设置用户在频道 %v 中的角色时出现错误: %v", guildID, err) + return Failed(100, "API_ERROR", err.Error()) + } + return OK(nil) +} + +// CQModifyRoleInGuild 修改频道角色 +// @route(modify_role_in_guild) +func (bot *CQBot) CQModifyRoleInGuild(guildID uint64, roleID uint64, name string, color uint32, indepedent bool) global.MSG { + err := bot.Client.GuildService.ModifyRoleInGuild(guildID, roleID, name, color, indepedent) + if err != nil { + log.Errorf("修改频道 %v 角色时出现错误: %v", guildID, err) + return Failed(100, "API_ERROR", err.Error()) + } + return OK(nil) +} + // CQGetFriendList 获取好友列表 // // https://git.io/Jtz1L diff --git a/go.mod b/go.mod index 79f6fba..d02ea95 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f github.com/Microsoft/go-winio v0.5.1 - github.com/Mrs4s/MiraiGo v0.0.0-20211119150245-3216c69d469d + github.com/Mrs4s/MiraiGo v0.0.0-20211122140519-ec4cd4a6f3fe github.com/dustin/go-humanize v1.0.0 github.com/fumiama/go-hide-param v0.1.4 github.com/gabriel-vasile/mimetype v1.4.0 diff --git a/go.sum b/go.sum index fb92163..f6f8412 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,8 @@ github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/g github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Mrs4s/MiraiGo v0.0.0-20211119150245-3216c69d469d h1:H0XKbw4aZMBxZAb8InemvoDPtOeWrIESwTg4ReVlC5o= -github.com/Mrs4s/MiraiGo v0.0.0-20211119150245-3216c69d469d/go.mod h1:imVKbfKqqeit+C/eaWGb4MKQ3z3gN6pRpBU5RMtp5so= +github.com/Mrs4s/MiraiGo v0.0.0-20211122140519-ec4cd4a6f3fe h1:ydfvvxZsVwbqzyfmQ5ExOhQhiZr/5IyjauBIBnupkFA= +github.com/Mrs4s/MiraiGo v0.0.0-20211122140519-ec4cd4a6f3fe/go.mod h1:imVKbfKqqeit+C/eaWGb4MKQ3z3gN6pRpBU5RMtp5so= github.com/bits-and-blooms/bitset v1.2.1 h1:M+/hrU9xlMp7t4TyTDQW97d3tRPVuKFC6zBEK16QnXY= github.com/bits-and-blooms/bitset v1.2.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/modules/api/api.go b/modules/api/api.go index 60b425c..c4a5196 100644 --- a/modules/api/api.go +++ b/modules/api/api.go @@ -45,6 +45,13 @@ func (c *Caller) call(action string, p Getter) global.MSG { p1 := p.Get("parent_id").String() p2 := p.Get("name").String() return c.bot.CQGroupFileCreateFolder(p0, p1, p2) + case "create_guild_role": + p0 := p.Get("guild_id").Uint() + p1 := p.Get("name").String() + p2 := uint32(p.Get("color").Int()) + p3 := p.Get("independent").Bool() + p4 := p.Get("initial_users") + return c.bot.CQCreateGuildRole(p0, p1, p2, p3, p4) case "delete_essence_msg": p0 := int32(p.Get("message_id").Int()) return c.bot.CQDeleteEssenceMessage(p0) @@ -60,6 +67,10 @@ func (c *Caller) call(action string, p Getter) global.MSG { p0 := p.Get("group_id").Int() p1 := p.Get("folder_id").String() return c.bot.CQGroupFileDeleteFolder(p0, p1) + case "delete_guild_role": + p0 := p.Get("guild_id").Uint() + p1 := p.Get("role_id").Uint() + return c.bot.CQDeleteGuildRole(p0, p1) case "delete_msg": p0 := int32(p.Get("message_id").Int()) return c.bot.CQDeleteMessage(p0) @@ -135,6 +146,9 @@ func (c *Caller) call(action string, p Getter) global.MSG { case "get_guild_meta_by_guest": p0 := p.Get("guild_id").Uint() return c.bot.CQGetGuildMetaByGuest(p0) + case "get_guild_roles": + p0 := p.Get("guild_id").Uint() + return c.bot.CQGetGuildRoles(p0) case "get_guild_service_profile": return c.bot.CQGetGuildServiceProfile() case "get_image": @@ -160,6 +174,13 @@ func (c *Caller) call(action string, p Getter) global.MSG { case "mark_msg_as_read": p0 := int32(p.Get("message_id").Int()) return c.bot.CQMarkMessageAsRead(p0) + case "modify_role_in_guild": + p0 := p.Get("guild_id").Uint() + p1 := p.Get("role_id").Uint() + p2 := p.Get("name").String() + p3 := uint32(p.Get("color").Int()) + p4 := p.Get("indepedent").Bool() + return c.bot.CQModifyRoleInGuild(p0, p1, p2, p3, p4) case "ocr_image", ".ocr_image": p0 := p.Get("image").String() return c.bot.CQOcrImage(p0) @@ -271,6 +292,12 @@ func (c *Caller) call(action string, p Getter) global.MSG { p1 = pt.Bool() } return c.bot.CQSetGroupWholeBan(p0, p1) + case "set_guild_member_role": + p0 := p.Get("guild_id").Uint() + p1 := p.Get("set").Bool() + p2 := p.Get("role_id").Uint() + p3 := p.Get("users") + return c.bot.CQSetGuildMemberRole(p0, p1, p2, p3) case "upload_group_file": p0 := p.Get("group_id").Int() p1 := p.Get("file").String()