diff --git a/hwe/sammo/API/Message/DecideMessageResponse.php b/hwe/sammo/API/Message/DecideMessageResponse.php new file mode 100644 index 00000000..b4d4f3c2 --- /dev/null +++ b/hwe/sammo/API/Message/DecideMessageResponse.php @@ -0,0 +1,61 @@ +args); + $v->rule('required', ['msgID', 'response']); + $v->rule('integer', 'msgID') + ->rule('boolean', 'response'); + if (!$v->validate()) { + return $v->errorStr(); + } + $this->args['msgID'] = (int)($this->args['msgID'] ?? -1); + + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $msgID = $this->args['msgID']; + $msgResponse = $this->args['response']; + + $generalID = $session->generalID; + + $msg = Message::getMessageByID($msgID); + if ($msg === null) { + return '존재하지 않는 메시지입니다.'; + } + + $reason = 'success'; + $gameStor = KVStorage::getStorage(DB::db(), 'game_env'); + $gameStor->cacheAll(); + if ($msgResponse) { + $result = $msg->agreeMessage($generalID, $reason); + } else { + $result = $msg->declineMessage($generalID, $reason); + } + + + return [ + 'result' => $result !== DiplomaticMessage::INVALID, + 'reason' => $reason + ]; + } +} diff --git a/hwe/ts/SammoAPI.ts b/hwe/ts/SammoAPI.ts index 7d9f5e22..eea6bb06 100644 --- a/hwe/ts/SammoAPI.ts +++ b/hwe/ts/SammoAPI.ts @@ -175,6 +175,10 @@ const apiRealPath = { DeleteMessage: PATCH as APICallT<{ msgID: number, }>, + DecideMessageResponse: POST as APICallT<{ + msgID: number, + response: boolean, + }>, GetContactList: GET as APICallT, GetRecentMessage: GET as APICallT<{ sequence?: number;