← back to browse
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);
    }
  }
};

View raw file