SoI'm pretty sure the code is of mild quality but not entirely sure as I'm not much of a JavaScript programmer. Everything works as expected. A quick rundown of the code. It simply parses a string and builds some game data for saving into a database. One thing I'm not sure of is how I should handle data that doesn't conform to how it's expected.
// var diplo = `!report Game Type: Diplo Early Bird
// 1: <@12321321421412421>
// 2: <@23423052352342334>
// 3: <@45346346345343453>
// 4: <@23423423423523523>`
var diplo = `!report Game Type: Team Modded
Team: 1
<@23452342359234534>
<@34642342359232352>
Team: 2
<@34534342359234879>
<@58493457202345054>`
var report = {};
function gameType(game) {
let data = {};
let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
, {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
let o = {}
let reType = /!report Game Type:[\s+]?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
let match = reType.exec(game)
if(match[1]){
for (var j = 0; j < game_types.length; j++) {
if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
data.type = game_types[j].id;
break;
}
}
}
if(match[2]){
data.moddifier = match[2]
}
diplo = game.slice(reType.lastIndex);
return (data)
}
function getPlayers(game) {
let players = [];
rePlayer = /(\d+):\s?<@(\d+)>[\s\S]?(\w+\s?\w+)?/gi;
do {
let o = {};
player = rePlayer.exec(game);
if (player) {
o.position = player[1]
o.discord_id = player[2]
players.push(o);
}
} while (player);
return players;
}
function getTeamPlayers(game) {
let players = [];
reTeam = /Team:\s(\d)[\s\S](\s+?<@(\d+)>)+/gi;
rePlayer = /\s+?<@(\d+)>/gi;
let i = 1;
do {
team = reTeam.exec(game);
if(team){
do {
player = rePlayer.exec(team[0]);
if(player){
let o = {};
o.team_id = i;
o.position = team[1];
o.discord_id = player[1];
players.push(o);
}
}while(player)
}
i++;
}while(team)
return players;
}
function main() {
console.log("Reading game data...")
try {
report = gameType(diplo)
if(report.type === 5){
report.players = getTeamPlayers(diplo);
}else{
report.players = getPlayers(diplo);
}
console.log(report)
} catch (err) {
return 'Error Processing Report!';
}
}
main();