Send.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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, conversation_id].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({ ...BaseStdResponse.OK, data: { message_id: saved.messageId } })
  29. try {
  30. await OneBotV11.sendAiChatMessage({
  31. conversationId: saved.conversationId,
  32. conversationNo: saved.conversationNo,
  33. senderUuid: uuid,
  34. content: saved.content,
  35. images: saved.images
  36. })
  37. } catch (err) {
  38. this.logger.error(`AIChat OneBot 转发失败: ${err.stack || err}`)
  39. await ConversationService.addSystemMessage({
  40. conversationId: saved.conversationId,
  41. content: '消息已保存,但暂时无法连接小妍助理,请稍后再试。',
  42. status: 'error',
  43. errorMsg: err.message || 'OneBot send failed'
  44. })
  45. }
  46. }
  47. }
  48. module.exports.SendMessage = SendMessage