@@ -85,6 +85,21 @@ type rootHandler struct {
8585 Config map [string ]any
8686}
8787
88+ // InformationError represents an information level error that occurred during command execution.
89+ // it will give some information but not error, such as help and skip reasons.
90+ type InformationError error
91+
92+ // SkipError represents a skip level error that occurred during command execution.
93+ type SkipError error
94+
95+ // Status enums
96+ const (
97+ StatusSuccess = "success"
98+ StatusFailure = "failure"
99+ StatusSkip = "skip"
100+ StatusInfo = "info"
101+ )
102+
88103func NewRootForMessage (respondCli * lark.Client , cfg map [string ]any ) func (ctx context.Context , event * larkim.P2MessageReceiveV1 ) error {
89104 cacheCfg := bigcache .DefaultConfig (10 * time .Minute )
90105 cacheCfg .Logger = & log .Logger
@@ -143,11 +158,23 @@ func (r *rootHandler) Handle(ctx context.Context, event *larkim.P2MessageReceive
143158 go func () {
144159 defer r .deleteReaction (* event .Event .Message .MessageId , refactionID )
145160 message , err := r .handleCommand (ctx , command )
146- if err != nil {
161+ if err == nil {
162+ r .sendResponse (* event .Event .Message .MessageId , StatusSuccess , message )
163+ return
164+ }
165+
166+ // send different level response for the error types.
167+ switch e := err .(type ) {
168+ case SkipError :
169+ message = fmt .Sprintf ("%s\n ---\n **skip:**\n %v" , message , e )
170+ r .sendResponse (* event .Event .Message .MessageId , StatusSkip , message )
171+ case InformationError :
172+ message = fmt .Sprintf ("%s\n ---\n **information:**\n %v" , message , e )
173+ r .sendResponse (* event .Event .Message .MessageId , StatusInfo , message )
174+ default :
147175 message = fmt .Sprintf ("%s\n ---\n **error:**\n %v" , message , err )
148- r .sendResponse (* event .Event .Message .MessageId , "failed" , message )
176+ r .sendResponse (* event .Event .Message .MessageId , StatusFailure , message )
149177 }
150- r .sendResponse (* event .Event .Message .MessageId , "success" , message )
151178 }()
152179
153180 return nil
0 commit comments