goat
command
namaz
Get Islamic prayer times
0
views
0
likes
0
installs
Aliases: salah, prayertime, salat, namaj
raw source
const axios = require("axios");
module.exports = {
config: {
name: 'namaz',
aliases: ['salah', 'prayertime', 'salat', 'namaj'],
version: '1.0',
author: 'Mueid Mursalin Rifat',
countDown: 5,
role: 0,
shortDescription: 'Get Islamic prayer times',
longDescription: 'Get accurate prayer times for any city worldwide',
category: 'info',
guide: {
en: '{pn} [city] [country]\nExample: {pn} Dhaka Bangladesh\n{pn} Riyadh Saudi Arabia\n{pn} Dubai UAE'
}
},
onStart: async function ({ api, event, args }) {
try {
// Check if user provided arguments
if (args.length === 0) {
return api.sendMessage(
`๐ ๐ก๐ฎ๐บ๐ฎ๐ / ๐ฆ๐ฎ๐น๐ฎ๐ต ๐ง๐ถ๐บ๐ฒ๐\nโโโโโโโโโโโโโโโโโโโโโโ\n\n` +
`๐ ๐จ๐๐ฎ๐ด๐ฒ:\n` +
`โข ${this.config.name} [city] [country]\n\n` +
`๐ ๐๐
๐ฎ๐บ๐ฝ๐น๐ฒ๐:\n` +
`โข .namaz Dhaka Bangladesh\n` +
`โข .namaz New York USA\n` +
`โข .namaz London UK\n\n` +
`๐คฒ May Allah accept your prayers!`,
event.threadID,
event.messageID
);
}
let city, country;
// Parse arguments
if (args.length >= 2) {
// If country name has multiple words
const multiWordCountries = [
"united kingdom", "united states", "united arab emirates",
"saudi arabia", "south africa", "south korea", "new zealand",
"north korea", "bosnia herzegovina", "czech republic"
];
const argsLower = args.join(" ").toLowerCase();
let foundCountry = "";
for (const multiCountry of multiWordCountries) {
if (argsLower.includes(multiCountry)) {
foundCountry = multiCountry;
const countryWords = multiCountry.split(" ").length;
city = args.slice(0, -countryWords).join(" ");
country = args.slice(-countryWords).join(" ");
break;
}
}
if (!foundCountry) {
city = args.slice(0, -1).join(" ");
country = args[args.length - 1];
}
} else {
return api.sendMessage(
`โ Please specify both city and country.\n\n` +
`๐ ๐๐ผ๐ฟ๐ฟ๐ฒ๐ฐ๐ ๐๐ผ๐ฟ๐บ๐ฎ๐:\n` +
`โข ${this.config.name} [city] [country]\n\n` +
`๐ ๐๐
๐ฎ๐บ๐ฝ๐น๐ฒ๐:\n` +
`โข ${this.config.name} ${args[0]} Bangladesh\n` +
`โข ${this.config.name} ${args[0]} Pakistan\n` +
`โข ${this.config.name} ${args[0]} USA`,
event.threadID,
event.messageID
);
}
// Send waiting message
const waitingMsg = await api.sendMessage(
`๐ Fetching prayer times for ${city}, ${country}...\nโณ Please wait...`,
event.threadID,
event.messageID
);
// Make API request
const response = await axios.get(
`https://shadowx-api.onrender.com/api/namaz?city=${encodeURIComponent(city)}&country=${encodeURIComponent(country)}`,
{ timeout: 10000 }
);
const data = response.data;
if (!data.status) {
throw new Error("API returned an error response");
}
// Format the timings
const timings = data.timings;
const location = data.location;
// Get current time in that timezone
function getCurrentTime(timezone) {
try {
const now = new Date();
const options = {
timeZone: timezone || 'UTC',
hour12: false,
hour: '2-digit',
minute: '2-digit'
};
return now.toLocaleTimeString('en-US', options);
} catch (error) {
return "N/A";
}
}
// Calculate time remaining for next prayer
function getNextPrayer(currentTime, timings) {
if (currentTime === "N/A") return null;
const prayers = [
{ name: "Fajr", time: timings.Fajr, emoji: "๐
" },
{ name: "Dhuhr", time: timings.Dhuhr, emoji: "โ๏ธ" },
{ name: "Asr", time: timings.Asr, emoji: "โ
" },
{ name: "Maghrib", time: timings.Maghrib, emoji: "๐" },
{ name: "Isha", time: timings.Isha, emoji: "๐" }
];
const [currentHour, currentMinute] = currentTime.split(":").map(Number);
const currentMinutes = currentHour * 60 + currentMinute;
for (let prayer of prayers) {
const [prayerHour, prayerMinute] = prayer.time.split(":").map(Number);
const prayerMinutes = prayerHour * 60 + prayerMinute;
if (prayerMinutes > currentMinutes) {
const minutesLeft = prayerMinutes - currentMinutes;
const hours = Math.floor(minutesLeft / 60);
const minutes = minutesLeft % 60;
return {
name: prayer.name,
emoji: prayer.emoji,
time: prayer.time,
hoursLeft: hours,
minutesLeft: minutes,
totalMinutesLeft: minutesLeft
};
}
}
const [fajrHour, fajrMinute] = timings.Fajr.split(":").map(Number);
const fajrMinutes = fajrHour * 60 + fajrMinute;
const minutesLeft = (24 * 60 - currentMinutes) + fajrMinutes;
const hours = Math.floor(minutesLeft / 60);
const minutes = minutesLeft % 60;
return {
name: "Fajr",
emoji: "๐
",
time: timings.Fajr,
hoursLeft: hours,
minutesLeft: minutes,
totalMinutesLeft: minutesLeft,
isTomorrow: true
};
}
// Get current time
const currentTime = getCurrentTime(location.timezone);
const nextPrayer = currentTime !== "N/A" ? getNextPrayer(currentTime, timings) : null;
// Create beautiful message with better design
let message = `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
message += `โ ๐ ๐ฃ๐ฅ๐๐ฌ๐๐ฅ ๐ง๐๐ ๐๐ฆ โ\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
message += `๐ ๐๐ผ๐ฐ๐ฎ๐๐ถ๐ผ๐ป: ${data.city}, ${data.country}\n`;
message += `๐
${data.date} โข ${data.weekday}\n`;
message += `๐ ${data.hijri} (${data.hijriMonth})\n`;
if (currentTime !== "N/A") {
message += `โฐ ๐๐๐ฟ๐ฟ๐ฒ๐ป๐ ๐ง๐ถ๐บ๐ฒ: ${currentTime}\n`;
}
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
// Prayer Times in a beautiful table
message += `๐ ๐๐๐๐๐ฌ ๐ฆ๐๐๐๐ ๐ง๐๐ ๐๐ฆ\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
message += `โ ๐
Fajr โธ ${timings.Fajr.padEnd(8)}โ\n`;
message += `โ ๐ Sunrise โธ ${timings.Sunrise.padEnd(8)}โ\n`;
message += `โ โ๏ธ Dhuhr โธ ${timings.Dhuhr.padEnd(8)}โ\n`;
message += `โ โ
Asr โธ ${timings.Asr.padEnd(8)}โ\n`;
message += `โ ๐ Maghrib โธ ${timings.Maghrib.padEnd(8)}โ\n`;
message += `โ ๐ Isha โธ ${timings.Isha.padEnd(8)}โ\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
// Important Times
message += `โณ ๐๐ ๐ฃ๐ข๐ฅ๐ง๐๐ก๐ง ๐ง๐๐ ๐๐ฆ\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค\n`;
message += `โ Imsak โธ ${timings.Imsak.padEnd(10)}โ\n`;
message += `โ Midnight โธ ${timings.Midnight.padEnd(10)}โ\n`;
message += `โ 1st Third โธ ${timings.Firstthird.padEnd(10)}โ\n`;
message += `โ Last Third โธ ${timings.Lastthird.padEnd(10)}โ\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
// Next Prayer Information
if (nextPrayer) {
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
message += `๐ ๐ก๐๐ซ๐ง ๐ฆ๐๐๐๐\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
if (nextPrayer.isTomorrow) {
message += `โ ${nextPrayer.emoji} ${nextPrayer.name} (Tomorrow)\n`;
message += `โ โฐ Time: ${nextPrayer.time}\n`;
message += `โ โณ Remaining: ${nextPrayer.hoursLeft}h ${nextPrayer.minutesLeft}m\n`;
message += `โ ๐ซ Night prayers are highly rewarded!\n`;
} else {
message += `โ ${nextPrayer.emoji} ${nextPrayer.name}\n`;
message += `โ โฐ Time: ${nextPrayer.time}\n`;
message += `โ โณ Remaining: ${nextPrayer.hoursLeft}h ${nextPrayer.minutesLeft}m\n`;
const prayerTips = {
"Fajr": "โข Wake up for Tahajjud before Fajr\nโข Perfect time for Quran recitation",
"Dhuhr": "โข Take a break from work\nโข Remember Allah before prayer",
"Asr": "โข Don't delay Asr prayer\nโข Make dua before sunset",
"Maghrib": "โข Break fast if fasting\nโข Pray quickly after sunset",
"Isha": "โข Perfect for night prayers\nโข Great time for reflection"
};
if (prayerTips[nextPrayer.name]) {
message += `โ ${prayerTips[nextPrayer.name]}\n`;
}
}
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
}
// Location and Method Info
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
message += `๐ ๐๐ผ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐๐ป๐ณ๐ผ๐ฟ๐บ๐ฎ๐๐ถ๐ผ๐ป\n`;
message += `โข Coordinates: ${location.latitude.toFixed(4)}ยฐN, ${location.longitude.toFixed(4)}ยฐE\n`;
message += `โข Timezone: ${location.timezone}\n`;
message += `โข Calculation: ${location.method}\n\n`;
// Footer
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
message += `๐ Note: Always verify with local mosque\n`;
message += `๐คฒ May Allah accept our prayers (Ameen)\n`;
message += `โก Powered by: ${data.operator}\n`;
message += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ`;
// Delete waiting message and send final result
await api.deleteMessage(waitingMsg.messageID);
return api.sendMessage(message, event.threadID, event.messageID);
} catch (error) {
console.error("Error fetching prayer times:", error);
let errorMessage = `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
errorMessage += `โ โ ๐๐ฅ๐ฅ๐ข๐ฅ โ\n`;
errorMessage += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
if (error.response) {
errorMessage += `โ ๏ธ API Error: ${error.response.status}\n`;
if (error.response.status === 404) {
errorMessage += `โข Location not found\n`;
errorMessage += `โข Check city/country spelling\n`;
}
} else if (error.request) {
errorMessage += `๐ Network Error\n`;
errorMessage += `โข Could not reach server\n`;
errorMessage += `โข Check your internet\n`;
} else {
errorMessage += `๐ง Error: ${error.message}\n`;
}
errorMessage += `\nโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n`;
errorMessage += `๐ ๐๐ข๐ฅ๐ฅ๐๐๐ง ๐๐ข๐ฅ๐ ๐๐ง:\n`;
errorMessage += `โข ${this.config.name} [city] [country]\n\n`;
errorMessage += `๐ ๐ฃ๐ข๐ฃ๐จ๐๐๐ฅ ๐๐ซ๐๐ ๐ฃ๐๐๐ฆ:\n`;
errorMessage += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค\n`;
errorMessage += `โ โข .namaz Dhaka Bangladesh โ\n`;
errorMessage += `โ โข .namaz Karachi Pakistan โ\n`;
errorMessage += `โ โข .namaz London UK โ\n`;
errorMessage += `โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n`;
errorMessage += `๐คฒ Try again with correct format...`;
return api.sendMessage(errorMessage, event.threadID, event.messageID);
}
}
};