returnfmt.Errorf("failed to create temporary file: %s",err)
}
deferos.Remove(stdout.Name())
command.Stdout=stdout
command.Stderr=stdout
err=command.Start()
iferr!=nil{
returnfmt.Errorf("failed to start process: %s",err)
}
resp,err:=client.Get(fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage?chat_id=%d&text=<code>%%2B%%2B%%2B executing process %d %%2B%%2B%%2B</code>&parse_mode=html&reply_to_message_id=%d&allow_sending_without_reply=true",botToken,message.Chat.Id,command.Process.Pid,message.MessageId))
iferr!=nil{
returnfmt.Errorf("failed to send executing process message: %s",err)
}
rawJson,err:=parseBody(resp)
iferr!=nil{
returnfmt.Errorf("failed to parse sendMessage response: %s",err)
}
rawJsonBytes,err:=rawJson.MarshalJSON()
iferr!=nil{
returnfmt.Errorf("failed to marshal raw json bytes for sendMessage response: %s",err)
}
varreplyMessage
err=json.Unmarshal(rawJsonBytes,&reply)
iferr!=nil{
returnfmt.Errorf("failed to parse raw json bytes for sendMessage response: %s",err)
}
err=command.Wait()
exitCode:=0
iferr!=nil{
ifee,ok:=err.(*exec.ExitError);ok{
exitCode=ee.ExitCode()
}else{
returnfmt.Errorf("error occured while waiting for command: %s",err)
}
}
exitCodeMessage:=fmt.Sprintf("+++ exited with %d +++",exitCode)
fileSize,err:=stdout.Seek(0,2)
iferr!=nil{
returnfmt.Errorf("failed to seek to end of file: %s",err)
}
_,err=stdout.Seek(0,0)
iferr!=nil{
returnfmt.Errorf("failed to seek to start of file: %s",err)
}
reader:=bufio.NewReader(stdout)
iffileSize>4096-1-int64(len(exitCodeMessage)){
varbufbytes.Buffer
w:=multipart.NewWriter(&buf)
fw,err:=w.CreateFormFile("document","output.txt")
iferr!=nil{
returnfmt.Errorf("failed to create output.txt header: %s",err)
}
_,err=io.Copy(fw,reader)
iferr!=nil{
returnfmt.Errorf("failed to copy output.txt: %s",err)