clearaichatcontext.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. helper::import('../../control.php');
  3. class myIm extends im
  4. {
  5. public function clearAiChatContext($modelId, $assistantId, $explicitSwitchAssistant, $userID = 0, $version = '', $device = 'desktop')
  6. {
  7. $user = $this->im->user->getByID($userID);
  8. $user->rights = $this->loadModel('user')->authorize($user->account);
  9. global $app;
  10. $app->user = $user;
  11. $aiChatPermission = commonModel::hasPriv('ai', 'chat');
  12. if(!$aiChatPermission) return false;
  13. $aiModel = $this->loadModel('ai')->getLanguageModel($modelId);
  14. if(!$aiModel || $aiModel->enabled == 0) return false;
  15. $chatGid = "$userID&ai-{$modelId}";
  16. $assistant = empty($assistantId)
  17. ? (object) array('name'=> $this->lang->ai->assistant->defaultAssistant)
  18. : $this->ai->getAssistantById($assistantId);
  19. if($explicitSwitchAssistant)
  20. {
  21. $broadcast = new stdclass();
  22. $broadcast->gid = imModel::createGID();
  23. $broadcast->cgid = $chatGid;
  24. $broadcast->user = "ai-{$modelId}";
  25. $broadcast->content = sprintf($this->lang->ai->assistant->switchAndClearContext, $assistant->name);
  26. }
  27. else
  28. {
  29. $broadcast = new stdclass();
  30. $broadcast->gid = imModel::createGID();
  31. $broadcast->cgid = $chatGid;
  32. $broadcast->user = "ai-{$modelId}";
  33. $broadcast->content = $this->lang->ai->miniPrograms->clearContext;
  34. }
  35. $broadcast->type = 'broadcast';
  36. $broadcast->contentType = 'text';
  37. $broadcast->data = json_encode(array('reminders' => array()));
  38. $broadcastMessage = $this->im->messageCreate(array($broadcast), $userID);
  39. $output = new stdclass();
  40. $output->result = 'success';
  41. $output->method = 'messagesend';
  42. $output->users = array($userID);
  43. $output->data = $broadcastMessage;
  44. $outputs = array($output);
  45. if(!empty($assistant->greetings))
  46. {
  47. $replyMessage = new stdclass();
  48. $replyMessage->gid = imModel::createGID();
  49. $replyMessage->cgid = $chatGid;
  50. $replyMessage->user = "ai-{$modelId}";
  51. $replyMessage->content = $assistant->greetings;
  52. $replyMessage->type = 'normal';
  53. $replyMessage->contentType = 'text';
  54. $sender = new stdclass();
  55. $sender->id = 0;
  56. $sender->displayName = empty($aiModel->name) ? $this->lang->ai->models->typeList[$aiModel->type] : $aiModel->name;
  57. if(!empty($assistantId))
  58. {
  59. $sender->displayName = $assistant->name;
  60. $sender->aiAssistantIcon = $assistant->icon;
  61. }
  62. $replyMessage->data = new stdclass();
  63. $replyMessage->data->sender = $sender;
  64. $replyMessage->data = json_encode($replyMessage->data);
  65. $chatMessage = $this->im->messageCreate(array($replyMessage), $userID);
  66. $output = new stdclass();
  67. $output->result = 'success';
  68. $output->method = 'messagesend';
  69. $output->users = array($userID);
  70. $output->data = $chatMessage;
  71. $outputs[] = $output;
  72. }
  73. return $this->im->sendOutputGroup($outputs);
  74. }
  75. }