pleroma_pixiv_hatsunemiku_a.../index.js

63 lines
2.2 KiB
JavaScript

import {unescape} from 'html-escaper';
import fetchRetry from "fetch-retry";
import { appendFileSync } from "fs";
import credentials from "./credentials.json" assert { type: 'json' };
import Bot from "./Bot.js";
import { getPostDataById, getNewPixivPosts } from "./pixiv.js";
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
global.fetch = fetchRetry(global.fetch);
var mikubot = new Bot({
url: "https://mikuobsession.net",
app: credentials.app,
username: credentials.accounts[0].username,
password: credentials.accounts[0].password
});
var mikubot_nsfw = new Bot({
url: "https://mikuobsession.net",
app: credentials.app,
username: credentials.accounts[1].username,
password: credentials.accounts[1].password
});
await mikubot.login();
await mikubot_nsfw.login();
var newPosts = await getNewPixivPosts("初音ミク");
for (let post of newPosts) {
let bot = post.xRestrict ? mikubot_nsfw : mikubot;
let url = `https://www.pixiv.net/en/artworks/${post.id}`;
try {
let {images, illust} = await getPostDataById(post.id);
let date = new Date(illust.createDate);
let dateString = date.toLocaleDateString("en-US", {timeZone: "JST", month: "long", day: "numeric", year: "numeric"});
let timeString = date.toLocaleTimeString("en-US", {timeZone: "JST", hour12: true, hour: "numeric", "minute": "numeric"});
let status = `<b>${illust.title}</b> / ${illust.userName} / ${dateString} ${timeString}<br>${unescape(illust.description)}<br>${illust.aiType == 2 ? `#AIgenerated ` : ''}${post.tags.map(tag => `#${tag}`).join(" ")}<br>${url}<br>https://www.pixiv.net/en/users/${illust.userId}`;
if (images.length > 4) {
status += `<br>⚠ There are ${images.length} images.`;
}
if (illust.illustType == 2) {
status += `<br>⚠ This is ugoria, you have to view on Pixiv.`;
}
await bot.post({
status,
content_type: "text/html",
files: images,
sensitive: Boolean(post.xRestrict),
visibility: "public"
});
appendFileSync(`known_ids/初音ミク.txt`, "\n" + post.id);
} catch(error) {
console.error(error.stack);
await bot.post({
status: `${url}\n#error\n${error.stack}`,
visibility: "public"
});
}
}