Send.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const API = require('../../../lib/API')
  2. const { BaseStdResponse } = require('../../../BaseStdResponse')
  3. const AccessControl = require('../../../lib/AccessControl')
  4. const OneBotV11 = require('../../../plugin/OneBot/OneBotV11')
  5. const { ConversationService } = require('../../../lib/AIChat/ConversationService')
  6. class SendMessage extends API {
  7. constructor() {
  8. super()
  9. this.setPath('/AIChat/Message')
  10. this.setMethod('POST')
  11. }
  12. async onRequest(req, res) {
  13. const { uuid, session, conversation_id, content, images = [] } = req.body
  14. if ([uuid, session].some(v => v === '' || v === null || v === undefined)) {
  15. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  16. }
  17. if (!await AccessControl.checkSession(uuid, session)) {
  18. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  19. }
  20. const saved = await ConversationService.addUserMessage({
  21. uuid,
  22. conversationId: conversation_id,
  23. content,
  24. images
  25. })
  26. if (!saved) return res.json({ ...BaseStdResponse.ERR, msg: '会话不存在或无权发送' })
  27. if (saved.missingContent) return res.json({ ...BaseStdResponse.MISSING_PARAMETER, msg: '请输入消息或上传图片' })
  28. res.json({
  29. ...BaseStdResponse.OK,
  30. data: {
  31. message_id: saved.messageId,
  32. conversation_id: saved.conversationId,
  33. conversation_no: saved.conversationNo,
  34. conversation: saved.conversation,
  35. message: saved.message
  36. }
  37. })
  38. try {
  39. await OneBotV11.sendAiChatMessage({
  40. conversationId: saved.conversationId,
  41. conversationNo: saved.conversationNo,
  42. senderUuid: uuid,
  43. content: saved.content,
  44. images: saved.images
  45. })
  46. } catch (err) {
  47. this.logger.error(`AIChat OneBot 转发失败: ${err.stack || err}`)
  48. await ConversationService.addSystemMessage({
  49. conversationId: saved.conversationId,
  50. content: '消息已保存,但暂时无法连接小妍助理,请稍后再试。',
  51. status: 'error',
  52. errorMsg: err.message || 'OneBot send failed'
  53. })
  54. }
  55. }
  56. }
  57. module.exports.SendMessage = SendMessage