Something went wrong. Try again.
A rhythm game leaderboard server that can't EOS. tsunagite.dev
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677function handle() if action == "delete" then -- record was deleted - remove from leaderboard table too local oldRecord = db.get(uri) log("Attempted to find old score record: " .. json.encode(oldRecord)) local tableName = getTableName(oldRecord.game) db.raw("DELETE FROM '" .. tableName .. "' WHERE uri = '" .. uri .. "'") log("deleted " .. uri) return true elseif action == "create" then -- record was created - scores should not be updatable later! local tableName = getTableName(record.game) local game = db.get(record.game) local columnOrder = "(uri, did, chart, judgments, " local valueOrder = "('" .. uri .. "', '" .. did .. "', '" .. record.chart .. "', '" .. json.encode(record.judgments) .. "', " if record.version then columnOrder = columnOrder .. "version, " valueOrder = valueOrder .. "'" .. record.version .. "', " end if record.mode then columnOrder = columnOrder .. "mode, " valueOrder = valueOrder .. "'" .. record.mode .. "', " end if record.inputMethod then columnOrder = columnOrder .. "inputMethod, " valueOrder = valueOrder .. "'" .. record.inputMethod .. "', " end for k, v in pairs(record.scoreComponents) do columnOrder = columnOrder .. "'" .. k .. "', " if v["$type"] == "dev.tsunagite.score#enum" then -- put enums in as their number local enumComp = game.scoreComponents[k] local foundValues = "" for _, e in ipairs(enumComp.values) do foundValues = foundValues .. e.id .. "(" .. e.index .. ") " if e.id == v.value then valueOrder = valueOrder .. e.index .. ", " end end log("Attempted to find enum value " .. v.value .. " among enum set: " .. foundValues) elseif v["$type"] == "dev.tsunagite.score#text" then -- put strings in quotes valueOrder = valueOrder .. "'" .. v.value .. "', " else -- put ints and floats in directly as numbers valueOrder = valueOrder .. v.value .. ", " end end columnOrder = columnOrder .. "timestamp)" valueOrder = valueOrder .. "'" .. record.scoredAt .. "')" local query = "INSERT INTO '" .. tableName .. "' " .. columnOrder .. " VALUES " .. valueOrder log("Record submission query: " .. query) db.raw(query) --db.raw("INSERT INTO '$1' $2 VALUES $3;", {tableName, columnOrder, valueOrder}) log(action .. " " .. uri) return true endend
function getTableName(uri) local trimmed = string.sub(uri, string.len("at://")+1) local did = string.sub(trimmed, 1, string.find(trimmed, "/")-1) local _, j = string.find(trimmed, "dev.tsunagite.game/") local key = string.sub(trimmed, j+1, string.len(trimmed)) local resp = http.get("https://slingshot.microcosm.blue/xrpc/blue.microcosm.identity.resolveMiniDoc?identifier=" .. did) local hdl = json.decode(resp.body).handle local splitHandle = {} for str in string.gmatch(hdl, "([^.]+)") do table.insert(splitHandle, str) end local result = "" for i=0, #splitHandle-1 do result = result .. splitHandle[#splitHandle-i] .. "." end result = result .. key return resultend