mirror of
https://github.com/fumiama/NanoBot.git
synced 2026-06-11 21:50:29 +08:00
优化API报错消息 & onlyprivate
This commit is contained in:
44
openapi.go
44
openapi.go
@@ -6,6 +6,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@@ -28,14 +29,6 @@ type CodeMessageBase struct {
|
|||||||
M string `json:"message"`
|
M string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkrespbaseunsafe(ptr any) error {
|
|
||||||
respbase := (*CodeMessageBase)(*(*unsafe.Pointer)(unsafe.Add(unsafe.Pointer(&ptr), unsafe.Sizeof(uintptr(0)))))
|
|
||||||
if respbase.C != 0 {
|
|
||||||
return errors.Wrap(errors.New("code: "+strconv.Itoa(respbase.C)+", msg: "+respbase.M), getCallerFuncName())
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (bot *Bot) dohttprequest(constructer HTTPRequsetConstructer, ep, contenttype string, ptr any, body io.Reader) error {
|
func (bot *Bot) dohttprequest(constructer HTTPRequsetConstructer, ep, contenttype string, ptr any, body io.Reader) error {
|
||||||
req, err := constructer(ep, contenttype, bot.Authorization(), body)
|
req, err := constructer(ep, contenttype, bot.Authorization(), body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -49,20 +42,47 @@ func (bot *Bot) dohttprequest(constructer HTTPRequsetConstructer, ep, contenttyp
|
|||||||
if resp.StatusCode == http.StatusNoContent {
|
if resp.StatusCode == http.StatusNoContent {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
errsb := strings.Builder{}
|
||||||
|
var respbase *CodeMessageBase
|
||||||
if resp.StatusCode >= http.StatusBadRequest {
|
if resp.StatusCode >= http.StatusBadRequest {
|
||||||
return errors.Wrap(errors.New("code: "+strconv.Itoa(resp.StatusCode)+", msg: "+resp.Status), getCallerFuncName())
|
errsb.WriteString("code: ")
|
||||||
|
errsb.WriteString(resp.Status)
|
||||||
}
|
}
|
||||||
if ptr == nil {
|
if ptr == nil {
|
||||||
return nil
|
goto RET
|
||||||
}
|
}
|
||||||
err = json.NewDecoder(resp.Body).Decode(ptr)
|
err = json.NewDecoder(resp.Body).Decode(ptr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, getCallerFuncName())
|
if errsb.Len() > 0 {
|
||||||
|
errsb.WriteString(", ")
|
||||||
|
}
|
||||||
|
errsb.WriteString("json: ")
|
||||||
|
errsb.WriteString(err.Error())
|
||||||
|
goto RET
|
||||||
}
|
}
|
||||||
if reflect.ValueOf(ptr).Elem().Kind() == reflect.Slice {
|
if reflect.ValueOf(ptr).Elem().Kind() == reflect.Slice {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return checkrespbaseunsafe(ptr)
|
respbase = (*CodeMessageBase)(*(*unsafe.Pointer)(unsafe.Add(unsafe.Pointer(&ptr), unsafe.Sizeof(uintptr(0)))))
|
||||||
|
if respbase.C != 0 {
|
||||||
|
if errsb.Len() > 0 {
|
||||||
|
errsb.WriteString(", ")
|
||||||
|
}
|
||||||
|
errsb.WriteString("err: [")
|
||||||
|
errsb.WriteString(strconv.Itoa(respbase.C))
|
||||||
|
errsb.WriteString("] ")
|
||||||
|
if len([]rune(respbase.M)) > 256 {
|
||||||
|
errsb.WriteString(string([]rune(respbase.M)[:256]))
|
||||||
|
errsb.WriteString("...")
|
||||||
|
} else {
|
||||||
|
errsb.WriteString(respbase.M)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RET:
|
||||||
|
if errsb.Len() > 0 {
|
||||||
|
return errors.Wrap(errors.New(errsb.String()), getCallerFuncName())
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:generate go run codegen/getopenapiof/main.go ShardWSSGateway User Guild Channel Member RoleMembers GuildRoleList ChannelPermissions Message MessageSetting PinsMessage Schedule MessageReactionUsers
|
//go:generate go run codegen/getopenapiof/main.go ShardWSSGateway User Guild Channel Member RoleMembers GuildRoleList ChannelPermissions Message MessageSetting PinsMessage Schedule MessageReactionUsers
|
||||||
|
|||||||
18
rules.go
18
rules.go
@@ -289,18 +289,24 @@ func CheckGuild(guildID ...string) Rule {
|
|||||||
|
|
||||||
// OnlyPrivate requires that the ctx.Event is direct message
|
// OnlyPrivate requires that the ctx.Event is direct message
|
||||||
func OnlyPrivate(ctx *Ctx) bool {
|
func OnlyPrivate(ctx *Ctx) bool {
|
||||||
if ctx.Type == "" { // 确保无空
|
if ctx.Message != nil {
|
||||||
return false
|
return ctx.Message.SrcGuildID != ""
|
||||||
}
|
}
|
||||||
return strings.HasPrefix(ctx.Type, "Direct")
|
if ctx.Type != "" {
|
||||||
|
return strings.HasPrefix(ctx.Type, "Direct")
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnlyPublic requires that the ctx.Event is channel message
|
// OnlyPublic requires that the ctx.Event is channel message
|
||||||
func OnlyPublic(ctx *Ctx) bool {
|
func OnlyPublic(ctx *Ctx) bool {
|
||||||
if ctx.Type == "" { // 确保无空
|
if ctx.Message != nil {
|
||||||
return false
|
return ctx.Message.SrcGuildID == ""
|
||||||
}
|
}
|
||||||
return !strings.HasPrefix(ctx.Type, "Direct")
|
if ctx.Type != "" {
|
||||||
|
return !strings.HasPrefix(ctx.Type, "Direct")
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnlyChannel requires that the ctx.Event is channel message
|
// OnlyChannel requires that the ctx.Event is channel message
|
||||||
|
|||||||
Reference in New Issue
Block a user