image.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package process
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/eryajf/chatgpt-dingtalk/pkg/db"
  6. "github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
  7. "github.com/eryajf/chatgpt-dingtalk/pkg/logger"
  8. "github.com/solywsh/chatgpt"
  9. )
  10. // ImageGenerate openai生成图片
  11. func ImageGenerate(rmsg *dingbot.ReceiveMsg) error {
  12. qObj := db.Chat{
  13. Username: rmsg.SenderNick,
  14. Source: rmsg.GetChatTitle(),
  15. ChatType: db.Q,
  16. ParentContent: 0,
  17. Content: rmsg.Text.Content,
  18. }
  19. qid, err := qObj.Add()
  20. if err != nil {
  21. logger.Error("往MySQL新增数据失败,错误信息:", err)
  22. }
  23. reply, err := chatgpt.ImageQa(rmsg.Text.Content, rmsg.GetSenderIdentifier())
  24. if err != nil {
  25. logger.Info(fmt.Errorf("gpt request error: %v", err))
  26. _, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
  27. if err != nil {
  28. logger.Error(fmt.Errorf("send message error: %v", err))
  29. return err
  30. }
  31. }
  32. if reply == "" {
  33. logger.Warning(fmt.Errorf("get gpt result falied: %v", err))
  34. return nil
  35. } else {
  36. reply = strings.TrimSpace(reply)
  37. reply = strings.Trim(reply, "\n")
  38. reply = fmt.Sprintf(">点击图片可旋转或放大。\n![](%s)", reply)
  39. aObj := db.Chat{
  40. Username: rmsg.SenderNick,
  41. Source: rmsg.GetChatTitle(),
  42. ChatType: db.A,
  43. ParentContent: qid,
  44. Content: reply,
  45. }
  46. _, err := aObj.Add()
  47. if err != nil {
  48. logger.Error("往MySQL新增数据失败,错误信息:", err)
  49. }
  50. logger.Info(fmt.Sprintf("🤖 %s得到的答案: %#v", rmsg.SenderNick, reply))
  51. // 回复@我的用户
  52. _, err = rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), reply)
  53. if err != nil {
  54. logger.Error(fmt.Errorf("send message error: %v", err))
  55. return err
  56. }
  57. }
  58. return nil
  59. }