1- import { Message } from "../types/message"
1+ import { Message } from "../types/message" ;
22import log from "../components/utils/log" ;
33import { exec } from "child_process" ;
44import util from "util" ;
@@ -22,16 +22,29 @@ export default async function (msg: Message): Promise<void> {
2222
2323 const execPromise = util . promisify ( exec ) ;
2424
25- const { stdout, stderr } = await execPromise ( query , {
26- timeout : 30000 ,
27- maxBuffer : 1024 * 1024 ,
28- shell : process . env . SHELL || "/bin/zsh" ,
29- } ) ;
30- let response = `${ stdout } \n\n ${ stderr } ` ;
31- if ( response . length > 4000 ) {
32- response = response . slice ( 0 , 4000 ) + "\n\n[Output truncated]" ;
33- }
25+ try {
26+ const { stdout, stderr } = await execPromise ( query , {
27+ timeout : 30000 ,
28+ maxBuffer : 1024 * 1024 ,
29+ shell : process . env . SHELL || "/bin/zsh" ,
30+ } ) ;
31+
32+ let response = `${ stdout } \n\n${ stderr } ` ;
33+ if ( response . length > 4000 )
34+ response = response . slice ( 0 , 4000 ) + "\n\n[Output truncated]" ;
35+
36+ await Promise . all ( [ msg . reply ( response ) , logService ( msg , query , response ) ] ) ;
37+ log . warn ( "zsh" , `Executed command: ${ query } ` ) ;
38+ } catch ( err : any ) {
39+ const stderr = err . stderr || "" ;
40+ const stdout = err . stdout || "" ;
41+ let response = stderr || err . message ;
3442
35- await Promise . all ( [ msg . reply ( response ) , logService ( msg , query , response ) ] ) ;
36- log . warn ( "zsh" , `Executed command: ${ query } ` ) ;
43+ if ( stdout ) response = `${ stdout } \n\n${ response } ` ;
44+ if ( response . length > 4000 )
45+ response = response . slice ( 0 , 4000 ) + "\n\n[Output truncated]" ;
46+
47+ await Promise . all ( [ msg . reply ( response ) , logService ( msg , query , response ) ] ) ;
48+ log . error ( "zsh" , `Error executing command: ${ query } ` , err ) ;
49+ }
3750}
0 commit comments