Add meme generator module
This commit is contained in:
parent
fc1c2db27c
commit
883147550f
2
modules/meme_generator/.env.sample
Normal file
2
modules/meme_generator/.env.sample
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
IMGFLIP_USER=
|
||||||
|
IMGFLIP_PASSWORD=
|
139
modules/meme_generator/index.js
Normal file
139
modules/meme_generator/index.js
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
require("dotenv").config({path: process.env.MODULES_DIR + "/meme_generator/.env"});
|
||||||
|
|
||||||
|
const Imgflip = require("imgflip.com").Imgflip;
|
||||||
|
const imgflip = new Imgflip();
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const shortcutMemes = {
|
||||||
|
"perhaps": 105577219,
|
||||||
|
"drake": 181913649
|
||||||
|
}
|
||||||
|
|
||||||
|
let meme = undefined;
|
||||||
|
|
||||||
|
let command = process.argv[2].substring(6);
|
||||||
|
|
||||||
|
let paramLimiter = command.indexOf(' ') === -1 ? command.length : command.indexOf(' ');
|
||||||
|
|
||||||
|
let memeParameter = command.substring(0, paramLimiter);
|
||||||
|
|
||||||
|
let paramDivider = command.indexOf('-') === -1 ? command.length : command.indexOf('-');
|
||||||
|
|
||||||
|
let text0 = command.substring(paramLimiter, paramDivider);
|
||||||
|
|
||||||
|
let text1 = command.substring(paramDivider + 2);
|
||||||
|
|
||||||
|
switch(memeParameter) {
|
||||||
|
case "help":
|
||||||
|
printHelp();
|
||||||
|
return;
|
||||||
|
case "shortcuts":
|
||||||
|
printShortcuts();
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(/^\d+$/.test(memeParameter)) {
|
||||||
|
meme = memeParameter;
|
||||||
|
} else {
|
||||||
|
meme = shortcutMemes[memeParameter];
|
||||||
|
|
||||||
|
if(meme === undefined) {
|
||||||
|
printError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function requestMeme() {
|
||||||
|
return imgflip.api
|
||||||
|
.captionImage({
|
||||||
|
username: process.env.IMGFLIP_USER,
|
||||||
|
password: process.env.IMGFLIP_PASSWORD,
|
||||||
|
template_id: meme,
|
||||||
|
text0: text0 || ' ',
|
||||||
|
text1: text1 || ' '
|
||||||
|
})
|
||||||
|
.then(res => res)
|
||||||
|
.catch(err => console.error(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
function printError() {
|
||||||
|
console.log("Failed to generate meme");
|
||||||
|
}
|
||||||
|
|
||||||
|
function printShortcuts() {
|
||||||
|
let fields = [];
|
||||||
|
|
||||||
|
for(let shortcut in shortcutMemes) {
|
||||||
|
fields.push({
|
||||||
|
name: shortcut,
|
||||||
|
value: "https://imgflip.com/memegenerator/" + shortcutMemes[shortcut],
|
||||||
|
inline: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(JSON.stringify({
|
||||||
|
status: "success",
|
||||||
|
action: "standard",
|
||||||
|
format: "embed",
|
||||||
|
profile: {
|
||||||
|
color: 0x0099f,
|
||||||
|
title: "Meme shortcuts",
|
||||||
|
url: undefined,
|
||||||
|
author: undefined,
|
||||||
|
description: "Meme shortcuts, linked to respective template id",
|
||||||
|
thumbnail: undefined,
|
||||||
|
fields: fields
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function printHelp() {
|
||||||
|
console.log(JSON.stringify({
|
||||||
|
status: "success",
|
||||||
|
action: "standard",
|
||||||
|
format: "embed",
|
||||||
|
profile: {
|
||||||
|
color: 0x0099f,
|
||||||
|
title: "Meme generator",
|
||||||
|
url: undefined,
|
||||||
|
author: undefined,
|
||||||
|
description: "Generate meme using imgflip API",
|
||||||
|
thumbnail: undefined,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: "`!meme <shortcut> <text 1/optional> <text 2/optional>`",
|
||||||
|
value: "Generate a meme using the given shortcut and the two provided texts (if provided)",
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "`!meme <template id> <text 1/optional> <text 2/optional>`",
|
||||||
|
value: "Generate a meme using the given template id and the two provided texts (if provided)",
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "`!meme shortcuts`",
|
||||||
|
value: "List available shortcuts",
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "`!meme help`",
|
||||||
|
value: "Display this help menu",
|
||||||
|
inline: false,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatOutput(result) {
|
||||||
|
if(result.success === true) {
|
||||||
|
console.log(result.data.url);
|
||||||
|
} else {
|
||||||
|
printError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requestMeme().then(res => formatOutput(res));
|
16
modules/meme_generator/package.json
Normal file
16
modules/meme_generator/package.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "meme-generator",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "Generate meme via command text message using imgflip API",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "Tanguy Herbron",
|
||||||
|
"license": "MIT",
|
||||||
|
"prefix": "!meme",
|
||||||
|
"dependencies": {
|
||||||
|
"dotenv": "^9.0.1",
|
||||||
|
"imgflip.com": "^3.1.3"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user