@@ -51,6 +51,14 @@ type catdb struct {
5151 sql.Sqlite
5252}
5353
54+ type breedInfo struct {
55+ TypeName string
56+ Temperament string
57+ Description string
58+ ImageURL string
59+ Err error
60+ }
61+
5462type catInfo struct {
5563 User int64 // 主人
5664 Name string // 喵喵名称
@@ -116,12 +124,12 @@ func (inf *catInfo) avatar(gid int64) string {
116124 }
117125
118126 // 4. 后备方案:随机猫图
119- _ , _ , _ , url , err := suineko ()//nolint:dogsled
120- if err == nil && url != "" {
121- if err := downloadAndSave (url , aimgfile ); err == nil {
122- return "file:///" + aimgfile
123- }
124- }
127+ result := suineko ()
128+ if result . Err == nil && result . ImageURL != "" {
129+ if err := downloadAndSave (result . ImageURL , aimgfile ); err == nil {
130+ return "file:///" + aimgfile
131+ }
132+ }
125133
126134 // 5. 最终后备:透明PNG(避免报错)
127135 return "base64://iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
@@ -177,44 +185,55 @@ var (
177185)
178186
179187func init () {
180- engine .OnRegex (`^吸(.*猫)$` ).SetBlock (true ).Handle (func (ctx * zero.Ctx ) {
181- typeOfcat := ctx .State ["regex_matched" ].([]string )[1 ]
182- if typeOfcat == "猫" {
183- typeName , temperament , description , url , err := suineko ()
184- if err != nil {
185- ctx .SendChain (message .Text ("[ERROR]: " , err ))
186- return
187- }
188- ctx .SendChain (message .Image (url ), message .Text ("品种: " , typeName ,
189- "\n 气质:\n " , temperament , "\n 描述:\n " , description ))
190- return
191- }
192- breeds , ok := typeZH2Breeds [typeOfcat ]
193- if ! ok {
194- ctx .SendChain (message .Reply (ctx .Event .MessageID ), message .Text ("没有相关该品种的猫图" ))
195- return
196- }
197- picurl , err := getPicByBreed (breeds )
198- if err != nil {
199- ctx .SendChain (message .Text ("[ERROR]: " , err ))
200- return
201- }
202- ctx .SendChain (message .Text ("品种: " , typeOfcat ), message .Image (picurl ))
203- })
188+ engine .OnRegex (`^吸(.*猫)$` ).SetBlock (true ).Handle (func (ctx * zero.Ctx ) {
189+ typeOfcat := ctx .State ["regex_matched" ].([]string )[1 ]
190+ if typeOfcat == "猫" {
191+ result := suineko ()
192+ if result .Err != nil {
193+ ctx .SendChain (message .Text ("[ERROR]: " , result .Err ))
194+ return
195+ }
196+ ctx .SendChain (
197+ message .Image (result .ImageURL ),
198+ message .Text ("品种: " , result .TypeName ,
199+ "\n 气质:\n " , result .Temperament ,
200+ "\n 描述:\n " , result .Description ),
201+ )
202+ return
203+ }
204+ breeds , ok := typeZH2Breeds [typeOfcat ]
205+ if ! ok {
206+ ctx .SendChain (message .Reply (ctx .Event .MessageID ), message .Text ("没有相关该品种的猫图" ))
207+ return
208+ }
209+ picurl , err := getPicByBreed (breeds )
210+ if err != nil {
211+ ctx .SendChain (message .Text ("[ERROR]: " , err ))
212+ return
213+ }
214+ ctx .SendChain (message .Text ("品种: " , typeOfcat ), message .Image (picurl ))
215+ })
204216}
205217
206- func suineko () (typeName , temperament , description , url string , err error ) {
207- data , err := web .GetData (apiURL + "search?has_breeds=1" )
208- if err != nil {
209- return
210- }
211- picID := gjson .ParseBytes (data ).Get ("0.id" ).String ()
212- picdata , err := web .GetData (apiURL + picID )
213- if err != nil {
214- return
215- }
216- name := gjson .ParseBytes (picdata ).Get ("breeds.0.name" ).String ()
217- return typeEN2ZH [name ], gjson .ParseBytes (picdata ).Get ("breeds.0.temperament" ).String (), gjson .ParseBytes (picdata ).Get ("breeds.0.description" ).String (), gjson .ParseBytes (picdata ).Get ("url" ).String (), nil
218+
219+ func suineko () breedInfo {
220+ data , err := web .GetData (apiURL + "search?has_breeds=1" )
221+ if err != nil {
222+ return breedInfo {Err : err }
223+ }
224+ picID := gjson .ParseBytes (data ).Get ("0.id" ).String ()
225+ picdata , err := web .GetData (apiURL + picID )
226+ if err != nil {
227+ return breedInfo {Err : err }
228+ }
229+ name := gjson .ParseBytes (picdata ).Get ("breeds.0.name" ).String ()
230+ return breedInfo {
231+ TypeName : typeEN2ZH [name ],
232+ Temperament : gjson .ParseBytes (picdata ).Get ("breeds.0.temperament" ).String (),
233+ Description : gjson .ParseBytes (picdata ).Get ("breeds.0.description" ).String (),
234+ ImageURL : gjson .ParseBytes (picdata ).Get ("url" ).String (),
235+ Err : nil ,
236+ }
218237}
219238
220239func getPicByBreed (catBreed string ) (url string , err error ) {
0 commit comments