fetch z Node.js 18+.
Funkcja sprawdzająca
lib/zglos-scammera.js
const BASE_URL = "https://zglosscammera.pl";
export async function checkUser(userId) {
const res = await fetch(`${BASE_URL}/api/check?q=${userId}`);
if (!res.ok) throw new Error(`Zgłoś Scammera: HTTP ${res.status}`);
const { results } = await res.json();
const scam = results.find((result) => result.kind !== "legit");
if (scam) {
const entry = scam.entries[0];
return {
status: entry.verified ? "scammer" : "risk",
url: `${BASE_URL}/${scam.kind}?id=${entry.id}`,
reason: entry.descHtml.replace(/<[^>]+>/g, "").trim(),
};
}
if (results.length > 0) return { status: "legit" };
return { status: "unknown" };
}
Ostrzeżenie przy dołączeniu
index.js
import { Client, Events, GatewayIntentBits } from "discord.js";
import { checkUser } from "./lib/zglos-scammera.js";
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers],
});
client.on(Events.GuildMemberAdd, async (member) => {
const result = await checkUser(member.id).catch(() => null);
if (!result || (result.status !== "scammer" && result.status !== "risk")) {
return;
}
const channel = member.guild.systemChannel;
await channel?.send(
`⚠️ ${member} jest na liście ${
result.status === "scammer" ? "oszustów" : "ryzyka"
} Zgłoś Scammera.\nPowód: ${result.reason}\n${result.url}`,
);
});
client.login(process.env.DISCORD_TOKEN);
Komenda /sprawdz
commands/sprawdz.js
import { SlashCommandBuilder } from "discord.js";
import { checkUser } from "../lib/zglos-scammera.js";
const MESSAGES = {
scammer: "🚨 Zweryfikowany oszust",
risk: "⚠️ Lista ryzyka — zachowaj ostrożność",
legit: "✅ Zaufana osoba",
unknown: "Brak na listach Zgłoś Scammera",
};
export const data = new SlashCommandBuilder()
.setName("sprawdz")
.setDescription("Sprawdź użytkownika w bazie Zgłoś Scammera")
.addUserOption((option) =>
option.setName("uzytkownik").setDescription("Kogo sprawdzić").setRequired(true),
);
export async function execute(interaction) {
const user = interaction.options.getUser("uzytkownik", true);
await interaction.deferReply();
const result = await checkUser(user.id);
await interaction.editReply(
[MESSAGES[result.status], result.url].filter(Boolean).join("\n"),
);
}
Trzymaj wyniki w krótkim cache (np. 5 minut na użytkownika), jeśli sprawdzasz członków przy każdej wiadomości.