const Command = require("../lib/command.js"); const CATEGORY = "misc"; const fetch = require("node-fetch"); const { getTopColor, pastelize, safeString, parseHtmlEntities, } = require("../lib/utils.js"); const yt = new Command("youtube"); yt.addAlias("yt"); yt.category = CATEGORY; yt.helpText = "Search YouTube"; yt.usage = "[search term]"; yt.callback = async function (msg, line) { if (!line) return "Arguments are required."; const req = await fetch( `https://www.googleapis.com/youtube/v3/search?key=${ hf.apikeys.google }&maxResults=5&part=snippet&type=video&q=${encodeURIComponent(line)}` ).then((x) => x.json()); const topVid = req.items[0]; let out = `**${safeString( parseHtmlEntities(topVid.snippet.title) )}** | \`${safeString( parseHtmlEntities(topVid.snippet.channelTitle) )}\`\nhttps://youtu.be/${topVid.id.videoId}\n\n**__See Also:__**\n`; for (let i = 1; i < req.items.length; i++) { const vid = req.items[i]; out += `- **${safeString( parseHtmlEntities(vid.snippet.title) )}** | By: \`${safeString( parseHtmlEntities(vid.snippet.channelTitle) )}\` | \n`; } return out; }; hf.registerCommand(yt); const fyt = new Command("fyt"); fyt.category = CATEGORY; fyt.helpText = "Search YouTube and take the first result."; fyt.usage = "[search term]"; fyt.callback = async function (msg, line) { if (!line) return "Arguments are required."; const req = await fetch( `https://www.googleapis.com/youtube/v3/search?key=${ hf.apikeys.google }&maxResults=2&part=snippet&type=video&q=${encodeURIComponent(line)}` ).then((x) => x.json()); const vid = req.items[0]; return `**${safeString( parseHtmlEntities(vid.snippet.title) )}** | \`${safeString( parseHtmlEntities(vid.snippet.channelTitle) )}\`\nhttps://youtu.be/${vid.id.videoId}`; }; hf.registerCommand(fyt); const WA_NO_ANSWER = "<:ms_cross:503341994974773250> No answer."; const wolfram = new Command("wolfram"); wolfram.category = CATEGORY; wolfram.helpText = "Search YouTube and take the first result."; wolfram.usage = "<-v> [query]"; wolfram.addAlias("wa"); wolfram.callback = async function (msg, line, verboseFlag, _query) { let verbose = false; let query = _query; if (verboseFlag == "-v" && _query) { verbose = true; } if (!_query) { query = verboseFlag; } const req = await fetch( `http://api.wolframalpha.com/v2/query?input=${encodeURIComponent( query )}&appid=LH2K8H-T3QKETAGT3&output=json` ).then((x) => x.json()); const data = req.queryresult.pods; if (!data) return WA_NO_ANSWER; // fake no answer if (data[0].subpods[0].plaintext.includes("geoIP")) return WA_NO_ANSWER; if (verbose) { const embed = { title: `Result for: \`${safeString(query)}\``, color: getTopColor(msg, hf.bot.user.id, pastelize(hf.bot.user.id)), fields: [], footer: { icon_url: "http://www.wolframalpha.com/share.png", text: "Powered by Wolfram Alpha", }, image: { url: data[1].subpods[0].img.src, }, }; const extra = data.slice(1, 6); for (const x in extra) { embed.fields.push({ name: extra[x].title, value: `[${ extra[x].subpods[0].plaintext.length > 0 ? extra[x].subpods[0].plaintext : "" }](${extra[x].subpods[0].img.src})`, inline: true, }); } return {embed}; } else { return `\`${safeString(query)}\` -> ${ data[1].subpods[0].plaintext.length > 0 ? safeString(data[1].subpods[0].plaintext) : data[1].subpods[0].img.src }`; } }; hf.registerCommand(wolfram);