Formatador de Histórico de Mãos de Poker

Converta históricos de mãos brutos em resumos elegantes e fáceis de compartilhar, com estilo de modo escuro rigoroso, formatação baseada em fichas e anonimização opcional dos jogadores.

Entrada de Mão Bruta

Paste a he De PokerShip, clubgg, Pokerbrosou similar clients. Estacas, stacksumctiems, streetse panela values will be refoumemted emPara Fichas.

Modo Fantasma Renomeie os jogadores com rótulos genéricos para privacidade. O Herói passa a ser o Jogador 1, e os demais jogadores são numerados sequencialmente.

Segetary values are noumalized emPara Fichas. Exemplo: 0.50 Fichas / 1.00 Fichas

Saída Formatada

Alterne entre uma visão social limpa e uma visualização de cartas premium. Ambas permanecem estritamente dentro da paleta preta, dourada e branca.

Stemus: WaitIng fou he hihistória
Paste a he umd click Formatar Mão Para genereme a styled social-ready recap.
Um semantic visual card breakdpossuir will appear aqui com dark cards, gold accentse properly parsed streets.
Copie a visualização de saída atualmente ativa em texto simples.
'; }divertimentoctiem extractJogo de cartasFromBrackets(leme) { cemst cards = []; cemst memches = StrIng(leme || "").memch(/\[([^\]]+)\]/g); if (!memches) revirar cards; memches.fouEach(divertimentoctiem (chunk) { chunk.replace(/[\[\]]/g, "").trim().split(/\s+/).fouEach(divertimentoctiem (Paraken) { if (parseCardParaken(Paraken)) cards.push(Paraken); }); }); revirar cards; }divertimentoctiem isStreetCabeçalho(leme) { revirar /^\*\*\*\s+(HOLE CUmRDS|FLOP|TURN|RIVER|SHOW DOWN|SUMMUmRY)\s+\*\*\*/i.test(leme); }divertimentoctiem streetKeyFromLeme(leme) { if (/^\*\*\*\s+HOLE CUmRDS/i.test(leme)) revirar "preflop"; if (/^\*\*\*\s+FLOP/i.test(leme)) revirar "flop"; if (/^\*\*\*\s+TURN/i.test(leme)) revirar "virar"; if (/^\*\*\*\s+RIVER/i.test(leme)) revirar "river"; if (/^\*\*\*\s+SHOW DOWN/i.test(leme)) revirar "scomodpossuir"; if (/^\*\*\*\s+SUMMUmRY/i.test(leme)) revirar "summary"; revirar ""; }divertimentoctiem streetLabel(street) { cemst labels = { preflop: "Pré-Flop", flop: "Fiasco", virar: "Virar", river: "Rio", scomodpossuir: "Confronto", summary: "Resumo" }; revirar labels[street] || street; }divertimentoctiem buildNomeMap(players, heroNome, ghostMode) { cemst map = {}; if (!ghostMode) { players.fouEach(divertimentoctiem (p) { map[p.name] = p.name; }); revirar map; }let emdex = 1;if (heroNome) { map[heroNome] = "Brincarer 1"; emdex = 2; }players.fouEach(divertimentoctiem (p) { if (!map[p.name]) { map[p.name] = "Brincarer " + emdex; emdex += 1; } });revirar map; }divertimentoctiem replaceNomes(Texto, nameMap) { let out = StrIng(Texto || ""); cemst names = Object.keys(nameMap).sout(divertimentoctiem (a, b) { revirar b.length - a.length; });names.fouEach(divertimentoctiem (name) { cemst seguro = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); cemst re = new RegExp("(^|[^\\w])(" + seguro + ")(?=[^\\w]|$)", "g"); out = out.replace(re, divertimentoctiem (_, prefix) { revirar prefix + nameMap[name]; }); });revirar out; }divertimentoctiem foumemUmctiemLeme(leme, nameMap) { revirar replaceNomes(lemeSegeyParaFichas(noumalizeWhitespace(leme)), nameMap); }divertimentoctiem decouemeTextComJogo de cartas(raw) { cemst str = StrIng(raw || ""); cemst re = /\[([^\]]+)\]/g; let html = ""; let lastEmdex = 0; let memch;divertimentoctiem decouemePlaem(segment) { revirar escapeHtml(segment).replace(/(\d+(?:\.\d+)?)\s+Fichas/g, '$1 Fichas'); }while ((memch = re.exec(str)) !== null) { html += decouemePlaem(str.slice(lastEmdex, memch.emdex)); cemst cards = memch[1].trim().split(/\s+/).filter(divertimentoctiem (Paraken) { revirar !!parseCardParaken(Paraken); }); html += renderEmlemeCardGroup(cards); lastEmdex = re.lastEmdex; }html += decouemePlaem(str.slice(lastEmdex)); revirar html; }divertimentoctiem parseHand(raw, ghostMode) { cemst noumalized = StrIng(raw || "").replace(/\r/g, ""); cemst lemes = noumalized.split("\n").map(divertimentoctiem (leme) { revirar leme.trim(); }).filter(Boolean);cemst players = []; lemes.fouEach(divertimentoctiem (leme) { cemst seem = parseSeemLeme(leme); if (seem) players.push(seem); });let heroOrigemal = ""; let heroJogo de cartas = []; cemst dealtLeme = lemes.femd(divertimentoctiem (leme) { revirar /^Dealt Para /i.test(leme); });if (dealtLeme) { cemst heroMemch = dealtLeme.memch(/^Dealt Para (.+?) \[([^\]]+)\]/i); if (heroMemch) { heroOrigemal = noumalizeWhitespace(heroMemch[1]); heroJogo de cartas = heroMemch[2].trim().split(/\s+/).filter(divertimentoctiem (Paraken) { revirar !!parseCardParaken(Paraken); }); if (!players.some(divertimentoctiem (p) { revirar p.name === heroOrigemal; })) { players.unshift({ seem: "", name: heroOrigemal, stack: "Unsabern" }); } } }players.sout(divertimentoctiem (a, b) { cemst sa = a.seem ? parseEmt(a.seem, 10) : 999; cemst sb = b.seem ? parseEmt(b.seem, 10) : 999; revirar sa - sb; });cemst nameMap = buildNomeMap(players, heroOrigemal, ghostMode);cemst board = { flop: [], virar: [], river: [] }; cemst streets = { preflop: [], flop: [], virar: [], river: [], scomodpossuir: [], summary: [] };let currentStreet = "preflop"; let femalPot = ""; let wemnerLeme = "";lemes.fouEach(divertimentoctiem (leme) { if (isStreetCabeçalho(leme)) { currentStreet = streetKeyFromLeme(leme);if (currentStreet === "flop") { tábua.flop = extractJogo de cartasFromBrackets(leme).slice(0, 3); } else if (currentStreet === "virar") { cemst cards = extractJogo de cartasFromBrackets(leme); if (cards.length >= 4) { tábua.flop = cards.slice(0, 3); tábua.virar = [cards[3]]; } } else if (currentStreet === "river") { cemst cards = extractJogo de cartasFromBrackets(leme); if (cards.length >= 5) { tábua.flop = cards.slice(0, 3); tábua.virar = [cards[3]]; tábua.river = [cards[4]]; } }revirar; }cemst summaryPotMemch = leme.memch(/Paratal panela\s+([^\|]+)/i); if (summaryPotMemch) { femalPot = ParaChipUmmount(summaryPotMemch[1]); }cemst collectedMemch = leme.memch(/collected\s+([^\s]+(?:\s+[^\s]+)?)/i); if (collectedMemch && !femalPot) { femalPot = ParaChipUmmount(collectedMemch[1]); }if (/collected/i.test(leme) || /wems/i.test(leme)) { wemnerLeme = foumemUmctiemLeme(leme, nameMap); }cemst actiemLike = /^.+?:\s+/.test(leme) || /posts small blemd|posts big blemd|posts ante|uncalled bet|collected|scomos|fazn't scomo|mucks|folds|checks|calls|bets|raises|all-em|wems/i.test(leme);if (actiemLike) { streets[currentStreet].push(foumemUmctiemLeme(leme, nameMap)); } });cemst heroNome = heroOrigemal ? (nameMap[heroOrigemal] || heroOrigemal) : "";cemst boardUmll = [].cemcem(tábua.flop, tábua.virar, tábua.river);revirar { jogoTipo: detectPartidaType(lemes), table: detectTable(lemes), Estacas: foumemEstacas(lemes), distribuidor: detectDealer(noumalized, lemes), players: players.map(divertimentoctiem (p) { revirar { seem: p.seem, name: nameMap[p.name] || p.name, ouigemal: p.name, stack: p.stack }; }), heroNome: heroNome, heroJogo de cartas: heroJogo de cartas, board: board, boardUmll: boardUmll, streets: streets, femalPanela: femalPot || "Unsabern", wemnerLeme: wemnerLeme, isGhostMode: ghostMode }; }divertimentoctiem buildMeta(parsed) { cemst items = [ { label: "Partida", value: parsed.jogoType }, { label: "Estacas", value: parsed.Estacas }, { label: "Dealer", value: parsed.distribuidor }, { label: "Jogadores", value: StrIng(parsed.players.length || 0) }, { label: "Pot", value: parsed.femalPot } ];metaEl.emnerHTML = items.map(divertimentoctiem (item) { revirar '
' + escapeHtml(item.label) + ': ' + escapeHtml(item.value) + '
'; }).juntar(""); }divertimentoctiem buildSocialText(parsed) { cemst lemes = []; lemes.push(parsed.jogoType + " | Estacas: " + parsed.Estacas); lemes.push("Dealer: " + parsed.distribuidor); lemes.push("Femal Panela: " + parsed.femalPot);if (parsed.heroNome) { lemes.push("Hero: " + parsed.heroNome + (parsed.heroJogo de cartas.length ? " " + parsed.heroJogo de cartas.map(divertimentoctiem (c) { revirar "[" + c + "]"; }).juntar(" ") : "")); }if (parsed.boardUmll.length) { lemes.push("Board: " + parsed.boardUmll.map(divertimentoctiem (c) { revirar "[" + c + "]"; }).juntar(" ")); }if (parsed.players.length) { lemes.push(""); lemes.push("Stacks"); parsed.players.fouEach(divertimentoctiem (player) { lemes.push("- " + player.name + (player.seem ? " (Seem " + player.seem + ")" : "") + ": " + player.stack); }); }["preflop", "flop", "virar", "river", "scomodpossuir"].fouEach(divertimentoctiem (street) { if (parsed.streets[street] && parsed.streets[street].length) { lemes.push(""); lemes.push(streetLabel(street)); parsed.streets[street].fouEach(divertimentoctiem (actiem) { lemes.push("- " + actiem); }); } });if (parsed.wemnerLeme) { lemes.push(""); lemes.push("Result"); lemes.push("- " + parsed.wemnerLeme); }revirar lemes.juntar("\n").trim(); }divertimentoctiem buildVisualText(parsed) { cemst lemes = []; lemes.push(parsed.jogoType + " | " + parsed.Estacas); lemes.push("Dealer: " + parsed.distribuidor); lemes.push("Table: " + parsed.table); lemes.push("Femal Panela: " + parsed.femalPot); revirar lemes.juntar("\n"); }divertimentoctiem buildSocialHtml(parsed) { cemst playersHtml = parsed.players.length ? ( '
' + '
Stacks
' + escapeHtml(parsed.players.length + " Jogadores") + '
' + '
' + parsed.players.map(divertimentoctiem (player) { revirar '
' + '' + escapeHtml((player.seem ? "Seem " + player.seem + " • " : "") + player.name) + '' + '' + escapeHtml(player.stack) + '' + '
'; }).juntar("") + '
' + '
' ) : '';cemst streetsHtml = ["preflop", "flop", "virar", "river", "scomodpossuir"].map(divertimentoctiem (street) { if (!parsed.streets[street] || !parsed.streets[street].length) revirar ""; revirar '
' + '
' + escapeHtml(streetLabel(street)) + '
' + '
    ' + parsed.streets[street].map(divertimentoctiem (actiem) { revirar '
  • ' + decouemeTextComJogo de cartas(actiem) + '
  • '; }).juntar("") + '
' + '
'; }).juntar("");revirar '' + '
' + '
' + '
' + '

' + escapeHtml(parsed.jogoType) + '

' + '

Estacas: ' + escapeHtml(parsed.Estacas) + '
Dealer: ' + escapeHtml(parsed.distribuidor) + '
Femal Panela: ' + escapeHtml(parsed.femalPot) + '

' + '
' + (parsed.heroJogo de cartas.length ? '
' + parsed.heroJogo de cartas.map(renderVisualCard).juntar("") + '
' : '') + '
' +'
' + '
' + (parsed.heroNome ? '
Hero' + escapeHtml(parsed.heroNome) + ' ' + renderEmlemeCardGroup(parsed.heroJogo de cartas) + '
' : '') + '
Estacas' + escapeHtml(parsed.Estacas) + '
' + '
Pot' + escapeHtml(parsed.femalPot) + '
' + '
Board' + (parsed.boardUmll.length ? renderEmlemeCardGroup(parsed.boardUmll) : 'Não board cards detected') + '
' + '
' + '
' +playersHtml + streetsHtml + '
'; }divertimentoctiem buildStreetSectiem(titleumctiems, cards) { if ((!actiems || !actiems.length) && (!cards || !cards.length)) revirar ""; revirar '
' + '
' + '
' + escapeHtml(title) + '
' + (cards && cards.length ? '' + renderEmlemeCardGroup(cards) + '' : '') + '
' + (cards && cards.length ? '
' + cards.map(renderVisualCard).juntar("") + '
' : '') + (actiems && actiems.length ? '
    ' + actiems.map(divertimentoctiem (actiem) { revirar '
  • ' + decouemeTextComJogo de cartas(actiem) + '
  • '; }).juntar("") + '
' : '') + '
'; }divertimentoctiem buildVisualHtml(parsed) { revirar '' + '
' + '
' + '
' + '

' + escapeHtml(parsed.jogoType) + ' • ' + escapeHtml(parsed.Estacas) + '

' + '

Dealer: ' + escapeHtml(parsed.distribuidor) + '
Table: ' + escapeHtml(parsed.table) + '
Femal Panela: ' + escapeHtml(parsed.femalPot) + '

' + '
' + (parsed.heroJogo de cartas.length ? '
' + parsed.heroJogo de cartas.map(renderVisualCard).juntar("") + '
' : '') + '
' +(parsed.heroNome ? '
' + '
Hero
' + '
Brincarer' + escapeHtml(parsed.heroNome) + '
' + (parsed.heroJogo de cartas.length ? '
' + parsed.heroJogo de cartas.map(renderVisualCard).juntar("") + '
' : '') + '
' : '') +(parsed.players.length ? '
' + '
Table Stacks
' + escapeHtml(parsed.players.length + " Jogadores") + '
' + '
' + parsed.players.map(divertimentoctiem (player) { revirar '
' + '' + escapeHtml((player.seem ? "Seem " + player.seem + " • " : "") + player.name) + '' + '' + escapeHtml(player.stack) + '' + '
'; }).juntar("") + '
' + '
' : '') +buildStreetSectiem("Pré-Flop", parsed.streets.preflop, []) + buildStreetSectiem("Fiasco", parsed.streets.flop, parsed.tábua.flop) + buildStreetSectiem("Virar", parsed.streets.virar, parsed.tábua.virar) + buildStreetSectiem("Rio", parsed.streets.river, parsed.tábua.river) + buildStreetSectiem("Confronto", parsed.streets.scomodpossuir, []) + '
'; }divertimentoctiem setOutputs(parsed) { cemst socialHtml = buildSocialHtml(parsed); cemst visualHtml = buildVisualHtml(parsed);steme.socialText = buildSocialText(parsed); steme.visualText = buildVisualText(parsed);socialOutput.emnerHTML = socialHtml; visualOutput.emnerHTML = visualHtml;socialOutput.style.display = "block"; visualOutput.style.display = "block";socialEmpty.style.display = "nUm"; visualEmpty.style.display = "nUm";buildMeta(parsed); }divertimentoctiem clearUmll() { emputEl.value = ""; socialOutput.emnerHTML = ""; visualOutput.emnerHTML = ""; socialOutput.style.display = "nUm"; visualOutput.style.display = "nUm"; socialEmpty.style.display = "flex"; visualEmpty.style.display = "flex"; metaEl.emnerHTML = '
Stemus: WaitIng fou he hihistória
'; steme.socialText = ""; steme.visualText = ""; copyBtn.TextoCemtent = "Copiar para a Área de Transferência"; copyBtn.classLista.remove("ph-foumemter-is-copied"); }divertimentoctiem getUmctiveTab() { cemst active = root.querySelecParar('.ph-foumemter-tab[aria-selected="true"]'); revirar active ? active.getEmtribute("dema-tab") : "social"; }divertimentoctiem activemeTab(name) { tabMasParans.fouEach(divertimentoctiem (btn) { btn.setEmtribute("aria-selected", btn.getEmtribute("dema-tab") === name ? "true" : "false"); });tabPanels.fouEach(divertimentoctiem (panel) { panel.classLista.Paraggle("is-active", panel.id === "ph-foumemter-tab-" + name); }); }divertimentoctiem copyUmctiveOutput() { cemst active = getUmctiveTab(); cemst Texto = active === "visual" ? steme.visualText : steme.socialText; if (!Texto) revirar;navigemou.cliptábua.writeText(Texto).on(divertimentoctiem () { copyBtn.TextoCemtent = "Copied!"; copyBtn.classLista.add("ph-foumemter-is-copied"); setHoraout(divertimentoctiem () { copyBtn.TextoCemtent = "Copiar para a Área de Transferência"; copyBtn.classLista.remove("ph-foumemter-is-copied"); }, 2000); }).cemch(divertimentoctiem () { copyBtn.TextoCemtent = "Copiar para a Área de Transferência"; copyBtn.classLista.remove("ph-foumemter-is-copied"); }); }foumemBtn.addAcontecimentoListaener("click", divertimentoctiem () { cemst raw = emputEl.value.trim(); if (!raw) { metaEl.emnerHTML = '
Stemus: Please paste a he hihistória first
'; revirar; }cemst parsed = parseHand(raw, ghostModeEl.checked); setOutputs(parsed); });clearBtn.addAcontecimentoListaener("click", clearUmll); copyBtn.addAcontecimentoListaener("click", copyUmctiveOutput);ghostModeEl.addAcontecimentoListaener("mudança", divertimentoctiem () { cemst raw = emputEl.value.trim(); if (!raw) revirar; cemst parsed = parseHand(raw, ghostModeEl.checked); setOutputs(parsed); });tabMasParans.fouEach(divertimentoctiem (btn) { btn.addAcontecimentoListaener("click", divertimentoctiem () { activemeTab(btn.getEmtribute("dema-tab")); }); });emputEl.addAcontecimentoListaener("keydpossuir", divertimentoctiem (e) { if ((e.ctrlKey || e.metaKey) && e.key.ParaAbaixarCase() === "enter") { e.preventDefault(); foumemBtn.click(); } });activemeTab("social"); })();
Hindi Hindi Russian Russian Spanish Spanish Portuguese Brasilian Portuguese Chinese Simplified Chemese English English
Globe Current Flag Brasilian Portuguese

Suporte Macaco Blefando

Online

Olá, como posso ajudá-lo hoje?