main.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. "strings"
  8. "github.com/eryajf/chatgpt-dingtalk/pkg/process"
  9. "github.com/eryajf/chatgpt-dingtalk/public"
  10. "github.com/eryajf/chatgpt-dingtalk/public/logger"
  11. )
  12. func init() {
  13. public.InitSvc()
  14. }
  15. func main() {
  16. Start()
  17. }
  18. var Welcome string = `Commands:
  19. =================================
  20. 🙋 单聊 👉 单独聊天
  21. 📣 串聊 👉 带上下文聊天
  22. 🔃 重置 👉 重置带上下文聊天
  23. 💵 余额 👉 查询剩余额度
  24. 🚀 帮助 👉 显示帮助信息
  25. 🌈 模板 👉 内置的prompt
  26. =================================
  27. 🚜 例:@我发送 空 或 帮助 将返回此帮助信息
  28. 💪 Power By https://github.com/eryajf/chatgpt-dingtalk
  29. `
  30. func Start() {
  31. // 定义一个处理器函数
  32. handler := func(w http.ResponseWriter, r *http.Request) {
  33. data, err := ioutil.ReadAll(r.Body)
  34. if err != nil {
  35. http.Error(w, err.Error(), http.StatusBadRequest)
  36. logger.Warning(fmt.Sprintf("read request body failed: %v\n", err.Error()))
  37. return
  38. }
  39. if len(data) == 0 {
  40. logger.Warning("回调参数为空,以至于无法正常解析,请检查原因")
  41. return
  42. }
  43. var msgObj = new(public.ReceiveMsg)
  44. err = json.Unmarshal(data, &msgObj)
  45. if err != nil {
  46. logger.Warning(fmt.Errorf("unmarshal request body failed: %v", err))
  47. }
  48. if msgObj.Text.Content == "" || msgObj.ChatbotUserID == "" {
  49. logger.Warning("从钉钉回调过来的内容为空,根据过往的经验,或许重新创建一下机器人,能解决这个问题")
  50. return
  51. }
  52. // TODO: 校验请求
  53. if len(msgObj.Text.Content) == 1 || strings.TrimSpace(msgObj.Text.Content) == "帮助" {
  54. // 欢迎信息
  55. _, err := msgObj.ReplyText(Welcome, msgObj.SenderStaffId)
  56. if err != nil {
  57. logger.Warning(fmt.Errorf("send message error: %v", err))
  58. }
  59. } else {
  60. msgObj.Text.Content = process.GeneratePrompt(strings.TrimSpace(msgObj.Text.Content))
  61. logger.Info(fmt.Sprintf("dingtalk callback parameters: %#v", msgObj))
  62. err = process.ProcessRequest(*msgObj)
  63. if err != nil {
  64. logger.Warning(fmt.Errorf("process request failed: %v", err))
  65. }
  66. }
  67. }
  68. // 创建一个新的 HTTP 服务器
  69. server := &http.Server{
  70. Addr: ":8090",
  71. Handler: http.HandlerFunc(handler),
  72. }
  73. // 启动服务器
  74. logger.Info("Start Listen On ", server.Addr)
  75. err := server.ListenAndServe()
  76. if err != nil {
  77. logger.Danger(err)
  78. }
  79. }