console.log("start"); require("dotenv").config(); var Discord = require("discord.js"); var puppeteer = require("puppeteer"); var minimist = require("minimist"); var dhms = require("dhms"); var fs = require("fs"); var PREFIX = process.env.PREFIX || "p!"; (async () => { var browser = await puppeteer.launch(process.env.NO_SANDBOX && {args:["--no-sandbox"]}); console.log("chromium launched"); var client = new Discord.Client(); await client.login(process.env.TOKEN); console.log("discord client ready"); client.user.setActivity(`${PREFIX}help`); client.on("message", processMessage); /*client.on("messageUpdate", async (oldMessage, newMessage) => { if (newMessage.responses) newMessage.react('🚫'); });*/ client.on("messageDelete", async message => { if (message.responses) { console.log(`[${new Date().toLocaleString()}] [${message?.guild.id}(${message?.guild.name})] [${message.channel.id}(#${message.channel.name})] Deleted command from ${message.author.id} (${message.author.tag}): ${message.content}`); message.responses.forEach(async message => { (await message).delete(); }); } }); async function processMessage(message) { if (!message.content.startsWith(PREFIX)) return; console.log(`[${new Date().toLocaleString()}] [${message?.guild.id}(${message?.guild.name})] [${message.channel.id}(#${message.channel.name})] User ${message.author.id} (${message.author.tag}) invoked command: ${message.content}`); message.responses = []; function respond() { message.author.pendingResponse = false; if (message.deleted) return; var r = message.channel.send.apply(message.channel, arguments) message.responses.push(r); return r; } var inp = message.content.slice(PREFIX.length); var args = inp.split(" "); var cmd = args[0].toLowerCase(); var pargs = minimist(args.slice(1), { alias: { "wait": "w", "dimensions": "d", "fullpage": "f" }, boolean: "fullpage" }); var query = pargs._.join(' '); var wait_ms = Math.min(dhms(pargs.wait), 30000); var viewport = pargs.dimensions?.split('x'); viewport = { width: Math.min(Number(viewport?.[0] || 1440), 10000), height: Math.min(Number(viewport?.[1] || 900), 10000) }; switch (cmd) { case "help": case "h": respond({embed:{ title: "Commands", description: `\n\`${PREFIX}screenshot \`` + `\n\`${PREFIX}google \`` + `\n\`${PREFIX}google-images \`` + `\n\`${PREFIX}bing \`` + `\n\`${PREFIX}bing-images \`` + `\n\`${PREFIX}youtube \`` + `\n\`${PREFIX}ebay \`` + `\n\`${PREFIX}amazon \`` + `\n\`${PREFIX}duckduckgo \`` + `\n\`${PREFIX}duckduckgo-images \`` + `\n\`${PREFIX}yahoo \`` + `\n\`${PREFIX}yahoo-images \`` + `\n\`${PREFIX}wikipedia \`` + `\n Each command has a logical abbreviated alias (i.e. \`${PREFIX}gi\`)` + `\n` + `\n**Options**` + `\n\`--dimensions=x\` or i.e. \`-d 640x480\` (max 10000x10000)` + `\n\`--wait=