| for err in ["unhandledRejection", "uncaughtException"] |
| process.on err, console.log |
|
|
| client = require "./client" |
| express = require "express" |
| fs = require "fs" |
| { Events } = require "whatsapp-web.js" |
| rateLimit = require "express-rate-limit" |
| { STATUS_CODES } = require "http" |
| { tmpdir } = require "os" |
| v8 = require "v8" |
|
|
| { GROUP_ID, PORT } = process.env |
|
|
| app = express() |
| app.set "json spaces", 4 |
| app.set "trust proxy", ["loopback", "uniquelocal"] |
| app.use express.json() |
| app.use express.urlencoded extended: true |
| app.use "/file", express.static tmpdir() |
|
|
| app.use (req, res, next) -> |
| time = new Date().toLocaleString "fr" |
| param = Object.assign req.query, req.body |
| console.log "\n[#{time}] #{req.method}: #{req.url}\n", param |
| next() |
|
|
| app.all "/", (_, res) -> |
| res.json |
| data: |
| uptime: new Date(process.uptime() * 1e3).toUTCString().split(" ")[4], |
| memoryUsage: process.memoryUsage(), |
| v8HeapStats: v8.getHeapStatistics() |
|
|
| imagineLimiter = rateLimit |
| windowMs: 60 * 1000, |
| max: 20 |
|
|
| app.all "/imagine", imagineLimiter, (req, res) -> |
| unless req.method is "GET" or req.method is "POST" |
| res.status(405).json |
| message: STATUS_CODES["405"] |
| |
| try |
| { prompt } = Object.assign req.query, req.body |
| unless prompt |
| res.status(400).json |
| message: STATUS_CODES["400"] |
| |
| botId = ["13135550002", "@c.us"] |
| filePath = "#{tmpdir()}/#{Math.random().toString(36).slice(2)}.jpg" |
| |
| await client.sendMessage GROUP_ID, "@#{botId[0]} imagine #{prompt}", |
| mentions: [botId.join ""], |
| invokedBotWid: botId.join "" |
| |
| client.on Events.MESSAGE_CREATE, (msg) -> |
| |
| if msg.from is GROUP_ID and msg.author is botId.join "" |
| |
| if msg.type is "image" |
| image = await msg.downloadMedia() |
| image = Buffer.from image.data, "base64" |
| fs.writeFile filePath, image, (e) -> |
| unless e |
| client.removeAllListeners Events.MESSAGE_CREATE |
| filePath = filePath.replace tmpdir(), "file" |
| fileUrl = "https://#{req.hostname}/#{filePath}" |
| res.redirect fileUrl |
| else |
| res.status(500).json |
| message: String e |
| |
| else |
| text = msg.body |
| client.removeAllListeners Events.MESSAGE_CREATE |
| res.status(400).json |
| message: text |
| |
| catch e |
| console.log e |
| e = String e |
| text = if e.startsWith "[object " then STATUS_CODES["500"] else e |
| res.status(500).json |
| message: text |
| |
| setImmediate () -> |
| await client.initialize() |
| |
| process.nextTick () -> |
| app.listen PORT or 7860 |
|
|