diff --git a/commands/message/search/weather.js b/commands/message/search/weather.js new file mode 100644 index 0000000..03135a6 --- /dev/null +++ b/commands/message/search/weather.js @@ -0,0 +1,55 @@ +const { createEmbed } = require('../../../labscore/utils/embed') +const { editOrReply } = require('../../../labscore/utils/message') +const { STATICS } = require('../../../labscore/utils/statics') + +const { weather } = require('../../../labscore/api'); +const { pill, icon } = require('../../../labscore/utils/markdown'); + +module.exports = { + name: 'weather', + label: 'query', + metadata: { + description: 'Weather information.', + examples: ['weather Berlin'], + category: 'search', + usage: 'weather ' + }, + run: async (context, args) => { + context.triggerTyping(); + if(!args.query) return editOrReply(context, {embeds:[createEmbed("warning", context, `Missing Parameter (location).`)]}) + try{ + let data = await weather(context, args.query) + + data = data.response.body + + let e = createEmbed("default", context, { + description: `**${data.name}** ${pill(data.temperature.celcius.main)} ${pill(data.temperature.fahrenheit.main)}\n*${data.display.name}, ${data.display.description}*`, + fields: [{ + name: `${icon("upvote")} Maximum Temperature`, + value: `${pill(data.temperature.celcius.max)} ${pill(data.temperature.fahrenheit.max)}\n\n${icon("downvote")} **Minimum Temperature**\n${pill(data.temperature.celcius.min)} ${pill(data.temperature.fahrenheit.min)}`, + inline: true + },{ + name: `Humidity`, + value: `${pill(data.misc.humidity)}\n\n**Felt Temperature**\n${pill(data.temperature.celcius.feels_like)} ${pill(data.temperature.fahrenheit.feels_like)}`, + inline: true + },{ + name: `Wind Speed`, + value: `${pill(data.wind.speed)}\n\n**Wind Direction**\n${pill(data.wind.degree + '°')}`, + inline: false + }], + thumbnail: { + url: data.display.icon + }, + footer: { + iconUrl: STATICS.openweathermap, + text: `OpenWeatherMap • ${context.application.name}` + } + }) + + return editOrReply(context, {embeds: [e]}) + }catch(e){ + console.log(e) + return editOrReply(context, {embeds:[createEmbed("warning", context, `No weather data available for given location.`)]}) + } + }, +}; \ No newline at end of file diff --git a/labscore/api/endpoints.js b/labscore/api/endpoints.js index 255a5d6..3fa24f2 100644 --- a/labscore/api/endpoints.js +++ b/labscore/api/endpoints.js @@ -35,6 +35,7 @@ const Api = Object.freeze({ SEARCH_RULE34: '/search/booru', SEARCH_TINEYE: '/search/tineye', SEARCH_URBANDICTIONARY: '/search/urbandictionary', + SEARCH_WEATHER: '/search/weather', SEARCH_WIKIHOW: '/search/wikihow', SEARCH_WOLFRAM_ALPHA: '/search/wolfram-alpha', SEARCH_YOUTUBE: '/search/youtube', diff --git a/labscore/api/index.js b/labscore/api/index.js index 93dc8b6..e1d6dc1 100644 --- a/labscore/api/index.js +++ b/labscore/api/index.js @@ -164,6 +164,12 @@ module.exports.urbandictionary = async function(context, query){ }) } +module.exports.weather = async function(context, location){ + return await request(Api.SEARCH_WEATHER, "GET", {}, { + location: location + }) +} + module.exports.wikihow = async function(context, query){ return await request(Api.SEARCH_WIKIHOW, "GET", {}, { q: query diff --git a/labscore/utils/markdown.js b/labscore/utils/markdown.js index 676ab78..c2ee3a4 100644 --- a/labscore/utils/markdown.js +++ b/labscore/utils/markdown.js @@ -23,7 +23,11 @@ module.exports.timestamp = function(time, flag = "t"){ return `` } +module.exports.pill = function(content){ + return " **` " + content + " `**" +} + module.exports.iconPill = function(icon, content){ if(!ICONS[icon]) icon = "question" - return ICONS[icon] + " **` " + content + " `**" + return ICONS[icon] + " **` " + content + " `**" } \ No newline at end of file diff --git a/labscore/utils/statics.js b/labscore/utils/statics.js index e63d018..f206c93 100644 --- a/labscore/utils/statics.js +++ b/labscore/utils/statics.js @@ -28,6 +28,10 @@ const Statics = Object.freeze({ file: "brands/makesweet.png", revision: 0 }, + openweathermap: { + file: "brands/openweathermap.png", + revision: 0 + }, photofunia: { file: "brands/photofunia.png", revision: 1 @@ -88,6 +92,7 @@ module.exports.STATICS = Object.freeze({ emojipedia: staticAsset(Statics.brands.emojipedia), inferkit: staticAsset(Statics.brands.inferkit), makesweet: staticAsset(Statics.brands.makesweet), + openweathermap: staticAsset(Statics.brands.openweathermap), photofunia: staticAsset(Statics.brands.photofunia), reddit: staticAsset(Statics.brands.reddit), tineye: staticAsset(Statics.brands.tineye),