AIReply.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const API = require("../../../../lib/API.js");
  2. const db = require("../../../../plugin/DataBase/db.js");
  3. const { BaseStdResponse } = require("../../../../BaseStdResponse.js");
  4. const OneBotV11 = require("../../../../plugin/OneBot/OneBotV11.js");
  5. class AIReply extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Kefu/Order/Bot/AIReply')
  9. this.setMethod('POST')
  10. this.noEncrypt()
  11. }
  12. async onRequest(req, res) {
  13. const onebot = OneBotV11.getOneBotConfig()
  14. if (!onebot.enabled) {
  15. return res.json({ ...BaseStdResponse.ERR, msg: 'OneBot v11 未启用' })
  16. }
  17. const token = req.headers['x-onebot-access-token'] || req.headers['authorization'] || ''
  18. if (onebot.callbackToken && !String(token).includes(onebot.callbackToken)) {
  19. return res.status(401).json({
  20. ...BaseStdResponse.ACCESS_DENIED,
  21. msg: 'AI 回调 token 校验失败'
  22. })
  23. }
  24. const { id, content } = req.body || {}
  25. if ([id, content].some(value => value === '' || value === null || value === undefined)) {
  26. return res.json({
  27. ...BaseStdResponse.MISSING_PARAMETER,
  28. msg: '缺少 id 或 content'
  29. })
  30. }
  31. const selectSql = 'SELECT msg, state FROM work_order WHERE id = ?'
  32. const rows = await db.query(selectSql, [id])
  33. if (!rows || rows.length !== 1 || rows[0].state === 2) {
  34. return res.json({
  35. ...BaseStdResponse.ERR,
  36. msg: '工单不存在或已关闭'
  37. })
  38. }
  39. const now = Date.now()
  40. const msg = rows[0].msg || []
  41. msg.push({
  42. time: now,
  43. content: String(content).trim(),
  44. uuid: 'e4fe0277-0b1a-41a1-b25f-8b6e4cec3281',
  45. type: 'ai',
  46. files: []
  47. })
  48. const updateSql = 'UPDATE work_order SET msg = ?, update_time = ?, state = 3 WHERE id = ?'
  49. await db.query(updateSql, [msg, now, id])
  50. return res.json({
  51. ...BaseStdResponse.OK
  52. })
  53. }
  54. }
  55. module.exports.AIReply = AIReply