Module:MatchDay: Difference between revisions
From eSportsAmaze
More actions
Esportsamaze (talk | contribs) Created page with "local p = {} local cargo = mw.ext.cargo function p.store(frame) local args = frame:getParent().args local tournament = args.tournament or mw.title.getCurrentTitle().text local date = args.date or "" local stage = args.stage or "" if date == "" then return "Error: Date is required." end -- 1. Look up the Game Type from Tournaments Table local game = "BGMI" -- Default fallback local match_type = "BR" if cargo and cargo.query..." |
Esportsamaze (talk | contribs) No edit summary |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local cargo = mw.ext.cargo | local cargo = mw.ext.cargo | ||
local function sqlEscape(s) | |||
if not s then return "" end | |||
s = s:gsub("\\", "\\\\") | |||
s = s:gsub("'", "\\'") | |||
return s | |||
end | |||
function p.store(frame) | function p.store(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local tournament = args.tournament or mw.title.getCurrentTitle(). | local pageTitle = mw.title.getCurrentTitle().text | ||
local tournament = args.tournament | |||
if not tournament or tournament == "" then | |||
local parts = mw.text.split(pageTitle, '/') | |||
if parts[2] == "Tournaments" and parts[3] then | |||
tournament = parts[3] | |||
else | |||
tournament = mw.title.getCurrentTitle().baseText | |||
end | |||
end | |||
local date = args.date or "" | local date = args.date or "" | ||
local stage = args.stage or "" | local stage = args.stage or "" | ||
-- TIMEZONE LOGIC | |||
local timezone = args.timezone or "IST" | |||
local tz_offset = "+00:00" | |||
if timezone == "IST" then tz_offset = "+05:30" | |||
elseif timezone == "JST" then tz_offset = "+09:00" | |||
elseif timezone == "PST" then tz_offset = "-08:00" | |||
elseif timezone == "EST" then tz_offset = "-05:00" | |||
elseif timezone == "CET" then tz_offset = "+01:00" | |||
elseif timezone:match("^[%+%-]%d%d:%d%d$") then tz_offset = timezone | |||
end | |||
if date == "" then return "Error: Date is required." end | if date == "" then return "Error: Date is required." end | ||
local game = "BGMI" | |||
local game = "BGMI" | local match_type = "BR" | ||
local match_type = "BR" | |||
if cargo and cargo.query then | if cargo and cargo.query then | ||
local tData = cargo.query("Tournaments", "game", { where = "name='" .. tournament | local tData = cargo.query("Tournaments", "game", { where = "name='" .. sqlEscape(tournament) .. "'", limit = 1 }) | ||
if tData and #tData > 0 and tData[1].game then | if tData and #tData > 0 and tData[1].game then | ||
game = tData[1].game | game = tData[1].game | ||
local gLower = game:lower() | local gLower = game:lower() | ||
local vs_games = {"pokemon", "mlbb", "mobile legends", "honor of kings", "hok", "league of legends", "lol", "dota", "counter-strike", "cs2", "valorant", "rainbow six", "r6", "overwatch", "ow2", "rocket league", "ea sports fc", "fifa", "street fighter", "tekken", "fatal fury", "starcraft", "crossfire", "chess", "black ops", "modern warfare"} | |||
match_type = " | for _, v in ipairs(vs_games) do | ||
if gLower:find(v) then match_type = "VS"; break end | |||
end | end | ||
end | end | ||
end | end | ||
-- | -- MULTIPLE STREAMS LOGIC | ||
local streams = {} | |||
for k, v in pairs(args) do | |||
if type(k) == "string" and k:match("^stream") and v ~= "" then | |||
local label = "Watch" | |||
if k:match("^stream_(.+)$") then | |||
label = k:match("^stream_(.+)$") | |||
label = label:gsub("_", " ") -- Convert underscores to spaces (e.g., Watch_Party -> Watch Party) | |||
end | |||
streams[label] = v | |||
end | |||
end | |||
local stream_json = "" | |||
if next(streams) ~= nil then | |||
stream_json = mw.text.jsonEncode(streams) | |||
end | |||
-- MATCH DATA LOGIC | |||
local matches = {} | local matches = {} | ||
for i = 1, 15 do | for i = 1, 15 do | ||
local mTime = args['m'..i..'_time'] | local mTime = args['m'..i..'_time'] | ||
if mTime and mTime ~= "" then | if mTime and mTime ~= "" then | ||
local match = { time = mTime | local match = {} | ||
match.time = date .. "T" .. mTime .. ":00" .. tz_offset | |||
if match_type == "BR" then | if match_type == "BR" then | ||
match.map = args['m'..i..'_map'] or "TBD" | match.map = args['m'..i..'_map'] or "TBD" | ||
match.group = args['m'..i..'_group'] or "" | match.group = args['m'..i..'_group'] or "" | ||
else | else | ||
match.t1 = args['m'..i..'_t1'] or "TBD" | match.t1 = args['m'..i..'_t1'] or "TBD" | ||
| Line 42: | Line 88: | ||
match.group = args['m'..i..'_group'] or "" | match.group = args['m'..i..'_group'] or "" | ||
end | end | ||
table.insert(matches, match) | table.insert(matches, match) | ||
end | end | ||
end | end | ||
local json_data = mw.text.jsonEncode(matches) | local json_data = mw.text.jsonEncode(matches) | ||
if cargo and cargo.store then | if cargo and cargo.store then | ||
cargo.store("Tournament_Schedule", { | cargo.store("Tournament_Schedule", { | ||
| Line 58: | Line 101: | ||
date = date, | date = date, | ||
stage = stage, | stage = stage, | ||
stream = stream_json, | |||
day_data = json_data | day_data = json_data | ||
}) | }) | ||
end | end | ||
return "<div style='display:none;'>Schedule saved.</div>" | |||
return "<div style='display:none;'>Schedule saved | |||
end | end | ||
return p | return p | ||
Latest revision as of 01:33, 3 March 2026
Documentation for this module may be created at Module:MatchDay/doc
local p = {}
local cargo = mw.ext.cargo
local function sqlEscape(s)
if not s then return "" end
s = s:gsub("\\", "\\\\")
s = s:gsub("'", "\\'")
return s
end
function p.store(frame)
local args = frame:getParent().args
local pageTitle = mw.title.getCurrentTitle().text
local tournament = args.tournament
if not tournament or tournament == "" then
local parts = mw.text.split(pageTitle, '/')
if parts[2] == "Tournaments" and parts[3] then
tournament = parts[3]
else
tournament = mw.title.getCurrentTitle().baseText
end
end
local date = args.date or ""
local stage = args.stage or ""
-- TIMEZONE LOGIC
local timezone = args.timezone or "IST"
local tz_offset = "+00:00"
if timezone == "IST" then tz_offset = "+05:30"
elseif timezone == "JST" then tz_offset = "+09:00"
elseif timezone == "PST" then tz_offset = "-08:00"
elseif timezone == "EST" then tz_offset = "-05:00"
elseif timezone == "CET" then tz_offset = "+01:00"
elseif timezone:match("^[%+%-]%d%d:%d%d$") then tz_offset = timezone
end
if date == "" then return "Error: Date is required." end
local game = "BGMI"
local match_type = "BR"
if cargo and cargo.query then
local tData = cargo.query("Tournaments", "game", { where = "name='" .. sqlEscape(tournament) .. "'", limit = 1 })
if tData and #tData > 0 and tData[1].game then
game = tData[1].game
local gLower = game:lower()
local vs_games = {"pokemon", "mlbb", "mobile legends", "honor of kings", "hok", "league of legends", "lol", "dota", "counter-strike", "cs2", "valorant", "rainbow six", "r6", "overwatch", "ow2", "rocket league", "ea sports fc", "fifa", "street fighter", "tekken", "fatal fury", "starcraft", "crossfire", "chess", "black ops", "modern warfare"}
for _, v in ipairs(vs_games) do
if gLower:find(v) then match_type = "VS"; break end
end
end
end
-- MULTIPLE STREAMS LOGIC
local streams = {}
for k, v in pairs(args) do
if type(k) == "string" and k:match("^stream") and v ~= "" then
local label = "Watch"
if k:match("^stream_(.+)$") then
label = k:match("^stream_(.+)$")
label = label:gsub("_", " ") -- Convert underscores to spaces (e.g., Watch_Party -> Watch Party)
end
streams[label] = v
end
end
local stream_json = ""
if next(streams) ~= nil then
stream_json = mw.text.jsonEncode(streams)
end
-- MATCH DATA LOGIC
local matches = {}
for i = 1, 15 do
local mTime = args['m'..i..'_time']
if mTime and mTime ~= "" then
local match = {}
match.time = date .. "T" .. mTime .. ":00" .. tz_offset
if match_type == "BR" then
match.map = args['m'..i..'_map'] or "TBD"
match.group = args['m'..i..'_group'] or ""
else
match.t1 = args['m'..i..'_t1'] or "TBD"
match.t2 = args['m'..i..'_t2'] or "TBD"
match.group = args['m'..i..'_group'] or ""
end
table.insert(matches, match)
end
end
local json_data = mw.text.jsonEncode(matches)
if cargo and cargo.store then
cargo.store("Tournament_Schedule", {
tournament = tournament,
game = game,
match_type = match_type,
date = date,
stage = stage,
stream = stream_json,
day_data = json_data
})
end
return "<div style='display:none;'>Schedule saved.</div>"
end
return p