diff --git a/README.md b/README.md index 6f84c1c..cd20012 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,18 @@ yl_survey.get_question(s_id, q_id, include_responses, playername) Returns `true, {question}` if successful, `false, "errormessage"` if not. +``` +yl_survey.get_response(s_id, q_id, playername, include_question, include_freetext) +``` + +* s_id: string, required. This is the survey/UUID the question is added to. +* q_id: number, required. +* playername: string, required. +* include_question: boolean, optional, defaults to `false`. If `true`, the question to that response is included. +* include_freetext: boolean, optional, defaults to `false`. If `true`, the freetext of that response is included. + +Returns `true, {response}` if successful, `false, "errormessage"` if not. May be `{}`, if the player did not yet respond to that question. + ``` yl_survey.answer_question(s_id, q_id, playername, {responses}, overwrite) ``` @@ -171,7 +183,7 @@ Creates a book of the answers of the survey and places it in the player's invent yl_survey.validate_questions(s_id) ``` -Returns `true, number` if successfully validated `number` amount of questions, `false, "errormessage"` if teh validation was not successful. +Returns `true, number` if successfully validated `number` amount of questions, `false, "errormessage"` if the validation was not successful. ## Limitations diff --git a/api.lua b/api.lua index 804a521..ee3a7b5 100644 --- a/api.lua +++ b/api.lua @@ -751,3 +751,49 @@ end function yl_survey.get_question(s_id, q_id, include_responses, playername) return get_question(s_id, q_id, include_responses, playername) end + +-- get_response +-- + +local function get_response(id, q_id, playername, include_question, include_freetext) + -- Defense + if (validate(id, "string", false) == false) then + return false, yl_survey.t("id must be string") + end + if (validate(q_id, "number", false) == false) then + return false, yl_survey.t("q_id must be number") + end + if (q_id <= 0) then return false, "q_id must be positive number" end + if (validate(playername, "string", false) == false) then + return false, yl_survey.t("playername must be string") + end + if (validate(include_question, "boolean", true) == false) then + return false, yl_survey.t("include_question must be boolean") + end + if (validate(include_freetext, "boolean", true) == false) then + return false, yl_survey.t("include_freetext must be boolean") + end + + local record = yl_survey.get_record(id) + + if (record == nil) then + return false, yl_survey.t("record does not exist") + end + + -- Payload + local question = record[tostring(q_id)] or {} + local response = question["responses"] and question["responses"][playername] or {} + + if (include_question ~= true) then response["q"] = nil end + if (include_freetext ~= true) then response["0"] = nil end + + if (next(question) ~= nil) then + return true, response + else + return false, yl_survey.t("question does not exist") + end +end + +function yl_survey.get_response(s_id, q_id, playername, include_question) + return get_response(s_id, q_id, playername, include_question) +end