From 811253dac17e3663f1581ded972328e8a39cef6b Mon Sep 17 00:00:00 2001 From: fdvkey Date: Thu, 19 Feb 2026 05:08:03 +0700 Subject: [PATCH] feat: add Dockerfile and .dockerignore; update index.js to use luxon for date handling --- .dockerignore | 2 ++ Dockerfile | 27 +++++++++++++++++++++++++++ index.js | 13 ++++++++----- package.json | 1 + pnpm-lock.yaml | 9 +++++++++ 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..97aca2e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.env +node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..efe9890 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM node:20-bookworm-slim + +# Install dependencies for canvas +RUN apt-get update && apt-get install -y \ + build-essential \ + libcairo2-dev \ + libpango1.0-dev \ + libjpeg-dev \ + libgif-dev \ + librsvg2-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate + +WORKDIR /app + +# Copy package files +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ + +# Install dependencies +RUN pnpm install --frozen-lockfile + +# Copy application files +COPY . . + +CMD ["pnpm", "start"] diff --git a/index.js b/index.js index db6f1a5..74a346f 100644 --- a/index.js +++ b/index.js @@ -2,13 +2,15 @@ import "dotenv/config"; import cron from "node-cron"; import { Client } from 'discord.js-selfbot-v13'; import { joinVoiceChannel } from "@discordjs/voice"; +import { DateTime } from "luxon"; import generateMeme from "./meme.js"; const TOKEN = process.env.TOKEN; const channelId = process.env.CHANNEL_ID; +const TIMEZONE = "Asia/Jakarta"; -// Ramadan 2026 start date (adjust as needed) -const start = new Date(process.env.START_DATE); +// Ramadan 2026 start date - parsed with consistent timezone +const start = DateTime.fromISO(process.env.START_DATE, { zone: TIMEZONE }); const days = { 1: "Pertama", @@ -63,14 +65,15 @@ client.on('ready', async () => { cron.schedule(process.env.CRON, async () => { try { console.log("Uploading...") - const now = new Date(); - const diff = (Math.floor((now.getTime() - start.getTime())/(1000*60*60*24))) + 1; + // Use luxon for timezone-aware day calculation + const now = DateTime.now().setZone(TIMEZONE); + const diff = Math.floor(now.startOf('day').diff(start.startOf('day'), 'days').days) + 1; const image = await generateMeme("./assets/images/mr_crab.jpg", "SEMANGAT PUASA HARI " + (days[diff]?.toUpperCase() || "KE-" + diff), "YAA.... HARI " + (days[diff]?.toUpperCase() || "KE-" + diff)); client.channels.fetch(process.env.CHANNEL_ID).then(channel => { channel.send({ files: [{ attachment: image, - name: new Date().toLocaleDateString() + '.jpg' + name: now.toFormat('dd-MM-yyyy') + '.jpg' }] }); }).catch(console.error); diff --git a/package.json b/package.json index 2bf9da4..c4a157f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "debug": "^4.4.3", "discord.js-selfbot-v13": "^3.7.1", "dotenv": "^17.3.1", + "luxon": "^3.7.2", "node-cron": "^4.2.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ea0038..68abb68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: dotenv: specifier: ^17.3.1 version: 17.3.1 + luxon: + specifier: ^3.7.2 + version: 3.7.2 node-cron: specifier: ^4.2.1 version: 4.2.1 @@ -346,6 +349,10 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} + engines: {node: '>=12'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -896,6 +903,8 @@ snapshots: loglevel@1.9.2: {} + luxon@3.7.2: {} + mimic-response@3.1.0: {} minimist@1.2.8: {}