- aceasta varianta este shit prin propria ei initiativa dar daca tot s-a postat aveti varianta fixata*
- va recomand sa folositi sentry free panel + trimitere pe discord, pentru ce-i care au habar sa-si faca. se poate face mult mai bine decat varianta sa iti trimita direct pe discord*
Ce aduce varianta mea pentru voi gratuit de Discord Sysser*?
1. filtrarea mesajelor , folosind api de la google mesajele sunt filtrate daca player-ul x a trimis deja eroarea pe discord nu mai primesti aceasi eroare de la player-ul y , primesti doar erorile noi , script-ul este minimal se poate extinde pentru a prinde mai multe *erori inclusiv dump*
2. cache local pentru a nu abuza de apii, deoarece pe google scripts aveti doar 25k request-uri am pus cache local, pentru a nu trimite aceasi eroare de 100 de ori*
se trimite o singura data , daca eroarea este aceasi .
3. script-ul nu ruleaza pe thread-ul clientului, deci daca conexiunea se rupe, clientul nu este influentat asadar nu se mai blocheaza
tutorial cum sa creezi un webhook pe discord *p-asta il pui in script-ul de pe google scripts*
iar link-ul generat de pe google script in fisierul DiscordErrorLogger.cpp
De ce sa folositi google script ? Simplu: filtrarea mesajelor + ca daca lasati in client webhook-ul direct se ghiceste foarte usor cu programe de debug daca are acel webook poate sa trimita orice mesaje doreste pe canal xd
Code:
const DISCORD_WEBHOOK = "aici pui webook de pe discord nu in client, in client trebuie sa pui link-ul de la script google creat de tine prin deploy";
// Aceasta functie raspunde la cererile din C++ (POST)
function doPost(e) {
try {
if (!e || !e.postData || !e.postData.contents) {
return ContentService.createTextOutput("No data");
}
var jsonString = e.postData.contents;
var data = JSON.parse(jsonString);
var errorLog = "";
try {
errorLog = data.embeds[0].fields[2].value;
} catch (err) {
return sendToDiscord(jsonString); // Trimitem oricum daca formatul e ciudat
}
// Hash simplu pentru eroare
var errorHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, errorLog));
// Verificam baza de date Google
var scriptProperties = PropertiesService.getScriptProperties();
var exists = scriptProperties.getProperty(errorHash);
if (exists) {
return ContentService.createTextOutput("Duplicate - Globally Ignored");
}
// Salvam eroarea ca fiind "vazuta"
scriptProperties.setProperty(errorHash, "1");
return sendToDiscord(jsonString);
} catch (error) {
return ContentService.createTextOutput("Error: " + error.toString());
}
}
// Functie auxiliara pentru Discord
function sendToDiscord(payload) {
var options = {
"method": "post",
"contentType": "application/json",
"payload": payload,
"muteHttpExceptions": true
};
UrlFetchApp.fetch(DISCORD_WEBHOOK, options);
return ContentService.createTextOutput("Sent to Discord");
}
// ==========================================================
// PANOUL DE CONTROL (Acceseaza link-ul in browser)
// ==========================================================
function doGet(e) {
// Daca accesezi link-ul cu ?action=clear, sterge memoria
if (e.parameter.action == "clear") {
PropertiesService.getScriptProperties().deleteAllProperties();
return ContentService.createTextOutput("✅ Memoria globala a fost stearsa! Erorile se vor trimite din nou.");
}
// Altfel, arata cate erori sunt memorate
var props = PropertiesService.getScriptProperties().getProperties();
var count = Object.keys(props).length;
return ContentService.createTextOutput("Status: Activ.\nErori unice memorate: " + count + "\n\nPentru a sterge memoria, adauga '?action=clear' la finalul link-ului.");
}
*Poze / Video (obligatoriu):
*Link download:
Conținut: Ascuns
Reacționează la acest mesaj și conținutul se va afișa automat.
Conținut: Ascuns
Reacționează la acest mesaj și conținutul se va afișa automat.