88 "io"
99 "reflect"
1010 "strconv"
11+ "strings"
1112 "time"
1213
1314 "github.com/RomiChan/syncx"
@@ -24,43 +25,47 @@ import (
2425 "github.com/wdvxdr1123/ZeroBot/message"
2526)
2627
27- // AgentChar 将 char.yaml 内容嵌入为默认 agent 性格
28+ // agentChar 将 char.yaml 内容嵌入为默认 agent 性格
2829//
2930//go:embed char.yaml
30- var AgentChar []byte
31+ var agentChar []byte
3132
32- // IsAgentCharReady then logev works
33- var IsAgentCharReady = false
33+ var agentcharcfg charcfg
3434
35- var (
36- ags = syncx.Map [int64 , * goba.Agent ]{}
37- )
35+ // AgentCharConfig 可随时更改的 agent 性格配置
36+ var AgentCharConfig * goba.Config
37+
38+ var ags = syncx.Map [int64 , * goba.Agent ]{}
3839
3940type charcfg struct {
4041 Sex string `yaml:"sex"`
4142 Char string `yaml:"char"`
4243 Default string `yaml:"default"`
4344}
4445
46+ func init () {
47+ err := yaml .NewDecoder (bytes .NewReader (agentChar )).Decode (& agentcharcfg )
48+ if err != nil {
49+ panic (err )
50+ }
51+ AgentCharConfig = & goba.Config {
52+ Nickname : strings .Join (zero .BotConfig .NickName , "/" ),
53+ Sex : agentcharcfg .Sex ,
54+ Chars : agentcharcfg .Char ,
55+ }
56+ }
57+
4558// AgentOf id is self_id
4659func AgentOf (id int64 , service string ) * goba.Agent {
4760 if ag , ok := ags .Load (id ); ok {
4861 return ag
4962 }
50- var cfg charcfg
51- err := yaml .NewDecoder (bytes .NewReader (AgentChar )).Decode (& cfg )
52- if err != nil {
53- panic (err )
54- }
63+
5564 mem , err := atomicgetmemstorage (service )
5665 if err != nil {
5766 panic (err )
5867 }
59- ag := goba .NewAgent (
60- id , 16 , 8 , time .Hour * 24 ,
61- zero .BotConfig .NickName [0 ],
62- cfg .Sex , cfg .Char , cfg .Default , mem , true , false ,
63- )
68+ ag := goba .NewAgent (AgentCharConfig , 16 , 8 , time .Hour * 24 , agentcharcfg .Default , mem , true , false )
6469 ags .Store (id , & ag )
6570 return & ag
6671}
@@ -245,9 +250,6 @@ func truncatecopy(params map[string]any) map[string]any {
245250}
246251
247252func logev (ctx * zero.Ctx ) {
248- if ! IsAgentCharReady {
249- return
250- }
251253 vevent .HookCtxCaller (ctx , vevent .NewAPICallerReturnHook (
252254 ctx , func (req zero.APIRequest , rsp zero.APIResponse , _ error ) {
253255 gid := ctx .Event .GroupID
0 commit comments