diff --git a/config/default_config.yaml b/config/default_config.yaml index 79f8fbe..a9d8bbe 100644 --- a/config/default_config.yaml +++ b/config/default_config.yaml @@ -1,5 +1,8 @@ # bot账号配置,现已不用配置,可自动获取 bots: [] +# 机器人的昵称,可配置多个 +nick_name: + - "小风" # bot超级管理员账户 admin: 0 # bot运行地址,若和gocq在同一台机器则只需要填写127.0.0.1即可,否则填写0.0.0.0,gocq配置你的公网地址 diff --git a/event.go b/event.go index cf8b3c3..93a196e 100644 --- a/event.go +++ b/event.go @@ -360,15 +360,29 @@ func checkOnlyTome(event *Event, state *State) { if event.Message[0].Type == "at" && event.Message[0].Data["qq"] == strconv.Itoa(event.SelfId) { event.Message = event.Message[1:] state.Data["only_tome"] = true + return } for _, segment := range event.Message { if segment.Type == "at" && segment.Data["qq"] == strconv.Itoa(event.SelfId) { state.Data["only_tome"] = true + return + } + } + for _, name := range DefaultConfig.NickName { + if event.Message[0].Type == "text" && strings.HasPrefix(event.Message[0].Data["text"], name) { + state.Data["only_tome"] = true + text := strings.TrimLeft(event.Message[0].Data["text"], name) + event.Message[0].Data["text"] = text + return } } if event.MessageType == "private" { state.Data["only_tome"] = true } + state.Data["only_tome"] = false + + return + } /** diff --git a/init.go b/init.go index b64c8b0..eb19de7 100644 --- a/init.go +++ b/init.go @@ -30,6 +30,7 @@ type Bot struct { type Config struct { Bots []*Bot `json:"bots" yaml:"bots" hjson:"bots"` + NickName []string `json:"nick_name" yaml:"nick_name" hjson:"nick_name"` Admin int `json:"admin" yaml:"admin" hjson:"admin"` Host string `json:"host" yaml:"host" hjson:"host"` Port int `json:"port" yaml:"port" hjson:"port"` diff --git a/rule.go b/rule.go index 9e14a63..ed07606 100644 --- a/rule.go +++ b/rule.go @@ -1,7 +1,5 @@ package leafBot -import "strconv" - type ( Rule func(Event, *Bot, *State) bool ) @@ -14,16 +12,11 @@ type ( * @return bool 返回是否验证通过该rule * example */ -func OnlyToMe(event Event, _ *Bot, _ *State) bool { - if event.MessageType == "private" { +func OnlyToMe(event Event, _ *Bot, state *State) bool { + b := state.Data["only_tome"].(bool) + if b { return true } - msg := event.GetMsg() - for _, segment := range msg { - if segment.Type == "at" && segment.Data["qq"] == strconv.Itoa(event.SelfId) { - return true - } - } return false }