Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I combine these two languages(httpservice)?

Asked by
k1nq 30
6 years ago
Edited 6 years ago

So, the first script in question isn't lua, but is javascript.

var SCRIPT_PROP = PropertiesService.getScriptProperties();

function doGet(e){
  try {
    var key = e.parameter["key"]
    var sheetName = e.parameter["sheet"]
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(e.parameter["sheet"]);
    var data = sheet.getDataRange().getValues();
    var value
    for (var i = 1; i < data.length; i++) {
      if (data[i][0] == key) {
        value = data[i][1];
      }
    }
    if (value){
      return ContentService
      .createTextOutput(JSON.stringify({"result":"success", "value": value}))
      .setMimeType(ContentService.MimeType.JSON);
    } else {
      return ContentService
      .createTextOutput(JSON.stringify({"result":"error", "error": "Key not found"}))
      .setMimeType(ContentService.MimeType.JSON);
    }
  } catch(e){
    return ContentService
          .createTextOutput(JSON.stringify({"result":"error", "error": "Database does not exist"}))
          .setMimeType(ContentService.MimeType.JSON);
  } 
}

function doPost(e){
  var sheetNom = e.parameter["sheet"];
  var lock = LockService.getPublicLock();
  lock.waitLock(30000);
  try {
    var key = e.parameter["key"]
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(e.parameter["sheet"]);
    var data = sheet.getDataRange().getValues();
    var headRow = e.parameter.header_row || 1;
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow()+1;
    var row = [];
    for (var i = 1; i < data.length; i++) {
      if (data[i][0] == e.parameter["key"]) {
        nextRow = i + 1;
      }
    }
    for (i in headers){
        row.push(e.parameter[headers[i]]);
    }
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
    return ContentService
          .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
          .setMimeType(ContentService.MimeType.JSON);
  } catch(e){
    return ContentService
    .createTextOutput(JSON.stringify({"result":"error", "error": e, "test": "Test", "sheet": sheetNom}))
          .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}

function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}

Yes, I know I know, this is a site strictly on lua but the javascript is aiding the lua script to run, which is as followed.

local scriptId = "AKfycbwQhOD-lpTR7l5mv85gReaGVVBe_3FjOxoFIAxveNzN4BAxmak"

local url = "https://script.google.com/macros/s/" .. scriptId .. "/exec"
local httpService = game:GetService'HttpService'
local module = {}

game:WaitForChild('HttpService')

function decodeJson(json)
    local jsonTab = {} pcall(function ()
    jsonTab = httpService:JSONDecode(json)
    end) return jsonTab
end

function encodeJson(data)
    local jsonString = data pcall(function ()
    jsonString = httpService:JSONEncode(data)
    end) return jsonString
end

function doGet(sheet, key)
    local json = httpService:GetAsync(url .. "?sheet=" .. sheet .. "&Player Name=" .. key)
    local data = decodeJson(json)
    if data.result == "success" then
        return data.value
    else
        warn("Database error:", data.error)
        return
    end
end

function doPost(sheet, key, data)
    local json = httpService:UrlEncode(encodeJson(data))
    local retJson = httpService:PostAsync(url, "sheet=" .. sheet .. "&Player Name=" .. key .. "&EXP=" .. json, 2)
    local data = decodeJson(retJson)
    print(retJson)
    if data.result == "success" then
        return true
    else
        warn("Database error:", data.error)
        return false
    end
end



function module:GetDatabase(sheet)
    local database = {}
    function database:PostAsync(key, value)
        return doPost(sheet, key, value)
    end
    function database:GetAsync(key)
        return doGet(sheet, key)
    end
    return database
end


return module

How would I add or remove arguments from this script? I want it to be able to print the value of something in google sheets in the roblox game(the java script is in the google sheets)

Answer this question