0% found this document useful (0 votes)
3 views5 pages

Dampak Penghapusan Cache

This document is a Node.js application that sets up an Express server and a Discord bot using the discord.js library. It includes functionality for handling API endpoints to manage a catalog and ratings, as well as event listeners for Discord member actions and interactions. The application also implements logging and data persistence using JSON files for storing bot data and logs.

Uploaded by

syahramahram
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views5 pages

Dampak Penghapusan Cache

This document is a Node.js application that sets up an Express server and a Discord bot using the discord.js library. It includes functionality for handling API endpoints to manage a catalog and ratings, as well as event listeners for Discord member actions and interactions. The application also implements logging and data persistence using JSON files for storing bot data and logs.

Uploaded by

syahramahram
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

const express = require("express");

const app = express();


const port = 3000;

const {
Collection,
Client,
GatewayIntentBits,
Partials,
} = require("[Link]");
const cfg = require("./config");
const fs = require("fs");
const path = require("path");
const { glob } = require("glob");
const { promisify } = require("util");
const chalk = require("chalk");
const moment = require("moment");
const globPromise = promisify(glob);
const dbDir = [Link](__dirname, "database");
const logsDir = [Link](__dirname, "logs");

[dbDir, logsDir].forEach((dir) => {


if (![Link](dir)) {
[Link](dir, { recursive: true });
[Link]([Link](`Created directory: ${dir}`));
}
});

const {
Guilds,
GuildMembers,
GuildMessages,
MessageContent,
GuildVoiceStates,
GuildMessageReactions,
DirectMessages,
} = GatewayIntentBits;
const { User, Message, GuildMember, ThreadMember, Channel } = Partials;
const dataFilePath = [Link](dbDir, "[Link]");
const logsFilePath = [Link](logsDir, "[Link]");

let savedData = {};


try {
if ([Link](dataFilePath)) {
const dataFileContent = [Link](dataFilePath, "utf-8").trim();
if (dataFileContent) {
savedData = [Link](dataFileContent);
} else {
[Link]([Link]("[Link] kosong. Menginisialisasi data
kosong."));
}
}
} catch (error) {
[Link]([Link]("Terjadi kesalahan saat membaca atau mem-parsing
[Link]:"), [Link]);
}

// Express API ENDPOINT - JANGAN DIHAPUS


[Link]("/api/katalog", (req, res) => {
const katalogPath = [Link](__dirname, "data", "[Link]");
[Link](katalogPath, "utf-8", (err, data) => {
if (err) {
[Link]("Error reading [Link]:", err);
return [Link](500).json({ error: "Failed to read [Link]" });
}
try {
const katalog = [Link](data);
[Link](katalog);
} catch (parseErr) {
[Link]("Error parsing [Link]:", parseErr);
[Link](500).json({ error: "Failed to parse [Link]" });
}
});
});

[Link]("/api/ratings", (req, res) => {


const ratingsPath = [Link](__dirname, "database", "[Link]");
[Link](ratingsPath, "utf-8", (err, data) => {
if (err) {
[Link]("Error reading [Link]:", err);
return [Link](500).json({ error: "Failed to read [Link]" });
}
try {
const ratings = [Link](data);
[Link](ratings);
} catch (parseErr) {
[Link]("Error parsing [Link]:", parseErr);
[Link](500).json({ error: "Failed to parse [Link]" });
}
});
});

const os = require("os");

[Link](port, () => {
const networkInterfaces = [Link]();
let localIp = "localhost";

for (const interfaceDetails of [Link](networkInterfaces)) {


for (const details of interfaceDetails) {
if ([Link] === "IPv4" && ![Link]) {
localIp = [Link];
break;
}
}
if (localIp !== "localhost") break;
}

[Link](`Express API server listening at [Link]


});

// END API EXPRESS

const DiscordClient = new Client({


intents: [
Guilds,
GuildMembers,
GuildMessages,
MessageContent,
GuildVoiceStates,
GuildMessageReactions,
DirectMessages,
],
partials: [User, Message, GuildMember, ThreadMember, Channel],
});

[Link] = new Collection();


[Link] = DiscordClient;

require("./deploySlash");

const handlerFiles = fs
.readdirSync("./handlers")
.filter((file) => [Link](".js"));

for (const handlerFile of handlerFiles) {


try {
const handlerPath = `./handlers/${handlerFile}`;
const stat = [Link](handlerPath);

if ([Link]()) {
const handler = require(handlerPath);
if (typeof handler === "function") {
handler(DiscordClient);
logToConsoleAndFile([Link](`Handler '${handlerFile}' Berhasil
Terbaca.`));
} else {
logToConsoleAndFile([Link](`Handler '${handlerFile}' Tidak Terbaca.`));
}
} else {
logToConsoleAndFile([Link](`Handler '${handlerFile}' Bukan file.`));
}

} catch (error) {
logToConsoleAndFile([Link](`Error loading handler '${handlerFile}': $
{error}`), [Link]);
}
}

async function loadSlashCommands() {


const slashCommandFiles = await globPromise("./SlashCommand/**/*.js");
[Link]((file) => {
const slashCommand = require([Link](file));
[Link]([Link], slashCommand);
});

const testimoniCommand = require("./SlashCommand/admin/[Link]");


[Link]("testimoni", testimoniCommand);
}
loadSlashCommands();

[Link]("guildMemberAdd", (member) => {


const memberData = savedData[[Link]];
if (memberData) {
[Link]([Link]);
[Link]([Link]);
}
});

[Link]("guildMemberRemove", (member) => {


savedData[[Link]] = {
roles: [Link]((role) => [Link]),
nickname: [Link],
};
writeDataToFile();
});

[Link]("ready", () => {
logToConsoleAndFile([Link]("Bot sudah siap pakai"));
writeDataToFile();
});

[Link]("disconnect", () => {
logToConsoleAndFile([Link]("Bot is now disconnected. Saving data..."));
writeDataToFile();
});

[Link]([Link]).catch((error) => {
logToConsoleAndFile([Link]("Error during login: " + [Link]));
});

[Link]("unhandledRejection", (reason, promise) => {


logToConsoleAndFile([Link]("[ANTI-CRASH] Unhandled Rejection: " + reason));
logToConsoleAndFile([Link]("Promise:" + [Link](promise, null, 2)));
});

[Link]("error", (error) => {


logToConsoleAndFile([Link]("[DISCORD ERROR]: " + error));
});

function writeDataToFile() {
try {
[Link](dataFilePath, [Link](savedData, null, 2), "utf-8");
} catch (error) {
[Link]([Link]("Terjadi kesalahan saat menulis ke [Link]:"),
[Link]);
}
}

function logToConsoleAndFile(message) {
const logMessage = `[${moment().format("YYYY-MM-DD HH:mm:ss")}] ${message}`;
writeLogToFile(logMessage);
[Link](logMessage);
}

function writeLogToFile(logMessage) {
try {
[Link](logsFilePath, logMessage + "\n", "utf-8");
} catch (error) {
[Link]([Link]("Terjadi kesalahan saat menulis log:"), [Link]);
}
}

const messageCreateHandler = require("./events/[Link]");


[Link]("messageCreate", [Link]);
const sayCommand = require("./SlashCommand/admin/[Link]");
[Link]("say", sayCommand);

const ticketCommand = require("./SlashCommand/admin/[Link]");


[Link]("setup-tiket", ticketCommand);

[Link]("interactionCreate", async (interaction) => {


if (![Link]()) return;
const ticketCommand = require("./SlashCommand/admin/[Link]");
await [Link](interaction);
});

You might also like