Skip to main content

Otomasi dengan JavaScript

Waktu adalah hal yang paling berharga bagi kita semua, dan kita semua sepakat akan hal itu.

Pada tahun 2025 ini, saya mulai membuat script untuk mengotomasi tugas-tugas yang berulang dan membosankan. Jika saya menemukan sesuatu yang sering saya lakukan berulang kali, saya mencoba membuat script untuk menyelesaikannya secara otomatis.

Melalui artikel ini, saya ingin berbagi cara yang dapat membantu kita menghemat waktu.

Catatan: Artikel ini diasumsikan bahwa Anda sudah memiliki Node.js di komputer Anda.


1. Mengatur Folder Secara Otomatis

Apakah Anda sering merasa folder di komputer Anda berantakan? Dengan script sederhana ini, kita dapat mengatur file dan folder secara otomatis.

const fs = require('fs');
const path = require('path');

function organizeFiles(directory) {
fs.readdir(directory, (err, files) => {
if (err) {
console.error("Gagal membaca folder:", err);
return;
}

files.forEach(file => {
const filePath = path.join(directory, file);

// Lewati jika file adalah folder
if (fs.statSync(filePath).isDirectory()) return;

const ext = path.extname(file).slice(1);
const dir = path.join(directory, ext);

if (!fs.existsSync(dir)) fs.mkdirSync(dir);
fs.renameSync(filePath, path.join(dir, file));
});
});
}

// Panggil fungsi ini untuk direktori saat ini
organizeFiles('.');

Dengan menjalankan script ini, file-file Anda akan otomatis dikelompokkan berdasarkan ekstensi ke dalam folder masing-masing. Kini mencari file menjadi lebih mudah!


2. Script Backup Otomatis

Saya sering tanpa sengaja menghapus file atau folder yang penting. Untuk menghindari hal ini, kita dapat membuat backup terlebih dahulu sebelum menghapus file.

const fs = require('fs-extra');

async function backupDirectory(src, dest) {
await fs.copy(src, dest);
console.log(`Backup dari ${src} ke ${dest} selesai.`);
}

// Contoh penggunaan
backupDirectory('./file-penting', './backup/file-penting-backup');

3. Organisasi Folder Downloads Harian

File yang diunduh setiap hari sering membuat folder Downloads berantakan. Dengan script berikut, kita dapat mengotomasi pengaturan file di folder Downloads berdasarkan jenisnya (misalnya, Gambar, Dokumen, Musik) setiap hari pada pukul 20:00.

const cron = require('node-cron');
const fs = require('fs-extra');
const path = require('path');

// Folder Downloads dan subfolder tujuan
const downloadsFolder = path.join(require('os').homedir(), 'Downloads');
const folderMapping = {
Gambar: ['jpg', 'jpeg', 'png', 'gif'],
Dokumen: ['pdf', 'docx', 'txt'],
Musik: ['mp3', 'wav'],
Video: ['mp4', 'mkv', 'avi']
};

// Fungsi untuk mengatur file berdasarkan jenis
function organizeDownloads() {
fs.readdir(downloadsFolder, (err, files) => {
if (err) {
console.error('Gagal membaca folder Downloads:', err);
return;
}

files.forEach(file => {
const fileExtension = path.extname(file).slice(1).toLowerCase();
const destinationFolder = Object.keys(folderMapping).find(folder =>
folderMapping[folder].includes(fileExtension)
);

if (destinationFolder) {
const destinationPath = path.join(downloadsFolder, destinationFolder);
if (!fs.existsSync(destinationPath)) {
fs.mkdirSync(destinationPath);
}

fs.move(
path.join(downloadsFolder, file),
path.join(destinationPath, file),
err => {
if (err) console.error(`Gagal memindahkan file ${file}:`, err);
else console.log(`Memindahkan ${file} ke folder ${destinationFolder}`);
}
);
}
});
});
}

// Jadwalkan script untuk berjalan setiap hari pukul 20:00
cron.schedule('0 20 * * *', () => {
console.log('Mengatur folder Downloads...');
organizeDownloads();
});

Namun, jika terminal ditutup, script ini tidak akan berjalan lagi. Untuk memastikan script terus berjalan meskipun terminal ditutup, kita bisa menggunakan library Node.js seperti pm2.


4. Menyimpan Clipboard Secara Otomatis

Apakah Anda sering menyalin sesuatu ke Notepad untuk dibaca nanti? Script ini akan menyimpan semua yang Anda salin ke clipboard ke dalam file log.

const clipboardy = require('clipboardy');
const fs = require('fs');

setInterval(() => {
const text = clipboardy.readSync(); // Membaca isi clipboard
fs.appendFileSync('clipboard-log.txt', `${new Date().toISOString()}: ${text}\n`); // Menyimpan ke file log
console.log(`Konten clipboard tercatat: ${text}`); // Tampilkan di konsol
}, 5000); // Jalankan setiap 5 detik

5. Reminder Notification

Saya sering lupa terhadap hal-hal yang sederhana ketika fokus mengerjakan sesuatu ataupun hal yang lainnya. Sehingga saya membuat suatu hal yang sederhana yang membuat saya dapat mengingat hal tersebut.

// const notifier = require('node-notifier');
// const {chalk} = require('chalk');

import chalk from 'chalk';
import notifier from 'node-notifier';

function showReminder() {
notifier.notify({
title: 'Time to Take a Break!',
message: 'Remember to stand up, stretch, and drink some water.',
sound: true,
});

// Log a colorful message in the terminal
console.log(chalk.green.bold('Reminder:') + ' ' + chalk.yellow('Time to take a break!'));
}

// Show reminder every hour
setInterval(showReminder, 3600000); // 1 hour (3600000 ms)

Ini adalah salah satu hal yang berguna dimana saya bisa melakukan shorting url hanya dengan terminal

const axios = require('axios');

async function shortenUrl(longUrl) {
const bitlyToken = 'YOUR_BITLY_ACCESS_TOKEN'; // Replace with your Bitly token

try {
const response = await axios.post(
'https://api-ssl.bitly.com/v4/shorten',
{
long_url: longUrl,
},
{
headers: {
Authorization: `Bearer ${bitlyToken}`,
'Content-Type': 'application/json',
},
}
);

console.log(`Shortened URL: ${response.data.link}`);
return response.data.link;
} catch (error) {
console.error('Error shortening URL:', error.response ? error.response.data : error.message);
}
}

// Usage example
shortenUrl('https://www.chat.adarsh-gupta.com/long-url');

7. Buat bisa diakses dimanapun

Ketika kita menjalankan file tersebut di folder tidak akan bekerja. Seperti pada umumnya karena nodejs tidak tau dimana file tersebut berada.

#!/usr/bin/env node

const { exec } = require('child_process');
const args = process.argv.slice(2);

// Define available commands and their script paths
const commands = {
"shorten": './scripts/linkShortener.js',
"log-clipboard": './scripts/clipboardLogger.js',
"remind": './scripts/notifier.js',
"other-task": './scripts/otherScript.js'
};

function runCommand(command) {
if (commands[command]) {
require(commands[command]);
} else {
console.error(`Unknown command: ${command}`);
console.log("Available commands:", Object.keys(commands).join(', '));
process.exit(1);
}
}

// Get command from args
const command = args[0];
runCommand(command);

Untuk struktur folder nya :

automation-cli/

├── package.json
├── cli.js
└── scripts/
├── linkShortener.js
├── clipboardLogger.js
├── notifier.js
└── otherScript.js

dan untuk package.json :

{
"name": "automation-cli",
"version": "1.0.0",
"description": "A CLI tool for automation scripts",
"main": "cli.js",
"bin": {
"jarvis": "./cli.js"
},
"dependencies": {
"axios": "^0.27.2",
"clipboardy": "^2.3.0"
}
}

setelah melakukan setup tersebut buka terminal dan masukkan command npm link.

untuk melakukan testing apakah bekerja atau tidak, kita bisa memasukkan command.

jarvis shorten

untuk melakukan verifikasi apakah sudah terpasang atau belum.

npm list -g --depth=0

untuk melepas fungsi tersebut bisa menggunakan.

npm unlink -g automation-cli