diff --git a/airquality.js b/airquality.js new file mode 100644 index 0000000..4b94b96 --- /dev/null +++ b/airquality.js @@ -0,0 +1,147 @@ +const axios = require('axios'); + +const cities = [ + { id: 1, name: "Adana", latitude: 36.98542, longitude: 35.32502 }, + { id: 2, name: "Adıyaman", latitude: 37.762990, longitude: 38.277298 }, + { id: 3, name: "Afyonkarahisar", latitude: 38.756217, longitude: 30.537846 }, + { id: 4, name: "Ağrı", latitude: 39.718993, longitude: 43.047663 }, + { id: 5, name: "Amasya", latitude: 40.656314, longitude: 35.837068 }, + { id: 6, name: "Ankara", latitude: 39.942928, longitude: 32.860481 }, + { id: 7, name: "Antalya", latitude: 36.896126, longitude: 30.713081 }, + { id: 8, name: "Artvin", latitude: 41.181310, longitude: 41.820537 }, + { id: 9, name: "Aydın", latitude: 37.838044, longitude: 27.845571 }, + { id: 10, name: "Balıkesir", latitude: 39.644878, longitude: 27.885361 }, + { id: 11, name: "Bilecik", latitude: 40.142960, longitude: 29.979159 }, + { id: 12, name: "Bingöl", latitude: 38.88472, longitude: 40.496391 }, + { id: 13, name: "Bitlis", latitude: 38.400664, longitude: 42.108971 }, + { id: 14, name: "Bolu", latitude: 40.732006, longitude: 31.607052 }, + { id: 15, name: "Burdur", latitude: 37.718293, longitude: 30.282248 }, + { id: 16, name: "Bursa", latitude: 40.182816, longitude: 29.066148 }, + { id: 17, name: "Çanakkale", latitude: 40.146777, longitude: 26.408220 }, + { id: 18, name: "Çankırı", latitude: 40.600190, longitude: 33.616304 }, + { id: 19, name: "Çorum", latitude: 40.549853, longitude: 34.953694 }, + { id: 20, name: "Denizli", latitude: 37.783026, longitude: 29.096246 }, + { id: 21, name: "Diyarbakır", latitude: 37.9137, longitude: 40.224899 }, + { id: 22, name: "Edirne", latitude: 41.675907, longitude: 26.553608 }, + { id: 23, name: "Elazığ", latitude: 38.6763, longitude: 39.221802 }, + { id: 24, name: "Erzincan", latitude: 39.75, longitude: 39.5 }, + { id: 25, name: "Erzurum", latitude: 39.905994, longitude: 41.273784 }, + { id: 26, name: "Eskişehir", latitude: 39.766724, longitude: 30.525608 }, + { id: 27, name: "Gaziantep", latitude: 37.062931, longitude: 37.378159 }, + { id: 28, name: "Giresun", latitude: 40.917921, longitude: 38.389876 }, + { id: 29, name: "Gümüşhane", latitude: 40.458673, longitude: 39.478961 }, + { id: 30, name: "Hakkari", latitude: 37.578120, longitude: 43.733805 }, + { id: 31, name: "Hatay", latitude: 36.202621, longitude: 36.160045 }, + { id: 32, name: "Isparta", latitude: 37.762627, longitude: 30.553612 }, + { id: 33, name: "Mersin", latitude: 36.810307, longitude: 34.620414 }, + { id: 34, name: "İstanbul", latitude: 41.046419, longitude: 29.033115 }, + { id: 35, name: "İzmir", latitude: 38.423652, longitude: 27.142797 }, + { id: 36, name: "Kars", latitude: 40.601469, longitude: 43.097496 }, + { id: 37, name: "Kastamonu", latitude: 41.378133, longitude: 33.776539 }, + { id: 38, name: "Kayseri", latitude: 38.722100, longitude: 35.489122 }, + { id: 39, name: "Kırklareli", latitude: 41.735547, longitude: 27.224502 }, + { id: 40, name: "Kırşehir", latitude: 39.146209, longitude: 34.160577 }, + { id: 41, name: "Kocaeli", latitude: 40.765600, longitude: 29.940659 }, + { id: 42, name: "Konya", latitude: 37.872817, longitude: 32.491991 }, + { id: 43, name: "Kütahya", latitude: 39.419993, longitude: 29.985721 }, + { id: 44, name: "Malatya", latitude: 38.355390, longitude: 38.333476 }, + { id: 45, name: "Manisa", latitude: 38.614027, longitude: 27.429533 }, + { id: 46, name: "Kahramanmaraş", latitude: 37.582047, longitude: 36.926934 }, + { id: 47, name: "Mardin", latitude: 37.313051, longitude: 40.732555 }, + { id: 48, name: "Muğla", latitude: 37.215266, longitude: 28.363718 }, + { id: 49, name: "Muş", latitude: 38.732415, longitude: 41.489878 }, + { id: 50, name: "Nevşehir", latitude: 38.623861, longitude: 34.712756 }, + { id: 51, name: "Niğde", latitude: 37.969110, longitude: 34.678619 }, + { id: 52, name: "Ordu", latitude: 40.985592, longitude: 37.879123 }, + { id: 53, name: "Rize", latitude: 41.025113, longitude: 40.516397 }, + { id: 54, name: "Sakarya", latitude: 40.773626, longitude: 30.403235 }, + { id: 55, name: "Samsun", latitude: 41.28157, longitude: 36.33812 }, + { id: 56, name: "Siirt", latitude: 37.927462, longitude: 41.942270 }, + { id: 57, name: "Sinop", latitude: 42.026596, longitude: 35.151245 }, + { id: 58, name: "Sivas", latitude: 39.750528, longitude: 37.015028 }, + { id: 59, name: "Tekirdağ", latitude: 40.978127, longitude: 27.511091 }, + { id: 60, name: "Tokat", latitude: 40.323397, longitude: 36.552149 }, + { id: 61, name: "Trabzon", latitude: 41.001289, longitude: 39.716549 }, + { id: 62, name: "Tunceli", latitude: 39.106339, longitude: 39.549694 }, + { id: 63, name: "Şanlıurfa", latitude: 37.158216, longitude: 38.796905 }, + { id: 64, name: "Uşak", latitude: 38.680692, longitude: 29.414491 }, + { id: 65, name: "Van", latitude: 38.495711, longitude: 43.382035 }, + { id: 66, name: "Yozgat", latitude: 39.819880, longitude: 34.807030 }, + { id: 67, name: "Zonguldak", latitude: 41.456437, longitude: 31.798535 }, + { id: 68, name: "Aksaray", latitude: 38.36869, longitude: 34.03698 }, + { id: 69, name: "Bayburt", latitude: 40.258763, longitude: 40.226103 }, + { id: 70, name: "Karaman", latitude: 37.181008, longitude: 33.221007 }, + { id: 71, name: "Kırıkkale", latitude: 39.846821, longitude: 33.515251 }, + { id: 72, name: "Batman", latitude: 37.888176, longitude: 41.131005 }, + { id: 73, name: "Şırnak", latitude: 37.513690, longitude: 42.457748 }, + { id: 74, name: "Bartın", latitude: 41.634673, longitude: 32.336074 }, + { id: 75, name: "Ardahan", latitude: 41.110480, longitude: 42.703964 }, + { id: 76, name: "Iğdır", latitude: 39.919672, longitude: 44.042573 }, + { id: 77, name: "Yalova", latitude: 40.655844, longitude: 29.269269 }, + { id: 78, name: "Karabük", latitude: 41.200000, longitude: 32.627676 }, + { id: 79, name: "Kilis", latitude: 36.715556, longitude: 37.115000 }, + { id: 80, name: "Osmaniye", latitude: 37.072991, longitude: 36.256844 }, + { id: 81, name: "Düzce", latitude: 40.843062, longitude: 31.159222 }, +]; + +function getAqiLabel(aqi) { + if (aqi <= 50) return 'İyi'; + if (aqi <= 100) return 'Orta'; + if (aqi <= 150) return 'Hassas'; + if (aqi <= 200) return 'Sağlıksız'; + if (aqi <= 300) return 'Çok Sağlıksız'; + return 'Tehlikeli'; +} + +function formatAqiMessage(city, data) { + const aqi = data.us_aqi; + const label = getAqiLabel(aqi); + const pm25 = parseFloat(data.pm2_5.toFixed(1)); + const pm10 = parseFloat(data.pm10.toFixed(1)); + const no2 = parseFloat(data.nitrogen_dioxide.toFixed(1)); + const o3 = parseFloat(data.ozone.toFixed(1)); + const co = Math.round(data.carbon_monoxide); + return `${city.name} AQI:${aqi} ${label}\nPM2.5:${pm25} PM10:${pm10} NO2:${no2} O3:${o3} CO:${co}`; +} + +async function fetchAirQuality(city, utils) { + try { + const response = await axios.get( + `https://air-quality-api.open-meteo.com/v1/air-quality` + + `?latitude=${city.latitude}&longitude=${city.longitude}` + + `¤t=us_aqi,pm2_5,pm10,nitrogen_dioxide,ozone,carbon_monoxide` + ); + const data = response.data.current; + const message = formatAqiMessage(city, data); + utils.publishMessage(4294967295, message); + utils.sendDiscord(message); + } catch (error) { + console.error('AirQuality API Error:', error.message); + utils.publishMessage(4294967295, 'Hava kalitesi verisi alınamadı.'); + } +} + +module.exports = { + name: 'airquality', + description: 'Hava kalitesi sorgulama — /air [şehir_id]', + run: async (message, utils) => { + const args = message.substring(utils.PREFIX.length).split(' '); + const command = args[0].toLowerCase(); + + if (command === 'air') { + const plaka = args[1]; + if (!plaka || isNaN(plaka)) { + utils.publishMessage(4294967295, 'Geçersiz şehir ID. /air [1-81]'); + return; + } + const city = cities.find(c => c.id === parseInt(plaka)); + if (!city) { + utils.publishMessage(4294967295, 'Geçersiz şehir ID. /air [1-81]'); + return; + } + await fetchAirQuality(city, utils); + } + }, + getAqiLabel, + formatAqiMessage, +};