103 lines
3.3 KiB
TypeScript
103 lines
3.3 KiB
TypeScript
import { Discord } from "./lib/discord";
|
|
import { CreateImage } from "./lib/image";
|
|
import { Login, Upload } from "./lib/instagram";
|
|
|
|
console.time("🎉 | Done");
|
|
|
|
async function main() {
|
|
console.time("🔓 | Instagram login");
|
|
|
|
try {
|
|
const data = await Login();
|
|
console.log("✨ | Instagram login successful");
|
|
if (data) {
|
|
console.log(`🤔 | Login as ${data.currentUser.full_name}`);
|
|
}
|
|
} catch (error) {
|
|
console.error("❌ | Instagram login failed:", error);
|
|
} finally {
|
|
console.timeEnd("🔓 | Instagram login");
|
|
}
|
|
|
|
let YYMMDD = "";
|
|
|
|
// 실행할 때 --today 옵션을 주면 오늘 날짜로 바뀜
|
|
const args = process.argv.slice(2);
|
|
if (args.includes("--today")) {
|
|
console.log("📅 | --today option detected, using today's date");
|
|
YYMMDD = new Date().toISOString().slice(0, 10).replace(/-/g, "").toString();
|
|
console.log("📅 | Using today's date:", YYMMDD);
|
|
}
|
|
// Tomorrow is 1st of the month
|
|
const tomorrow = new Date();
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
YYMMDD = tomorrow.toISOString().slice(0, 10).replace(/-/g, "").toString();
|
|
|
|
console.log("📅 | date:", YYMMDD);
|
|
|
|
console.log(tomorrow.getDate());
|
|
if (tomorrow.getDate() === 1) {
|
|
console.log("📅 | Tomorrow is the 1st of the month, fetching schedule...");
|
|
console.time("📅 | Create Post Schedule");
|
|
await CreateImage.PostSchedule();
|
|
console.timeEnd("📅 | Create Post Schedule");
|
|
|
|
console.time("📤 | Upload Post Schedule");
|
|
await Upload.Post(
|
|
`./temp/schedule-${new Date().getFullYear()}-${
|
|
new Date().getMonth() + 1
|
|
}.png`,
|
|
`#인천상정중학교 #상정중학교 #학사일정 \n${new Date().getFullYear()}년도 ${
|
|
new Date().getMonth() + 1
|
|
}월 학사 일정`
|
|
);
|
|
}
|
|
try {
|
|
console.time("📷 | Create Post Image");
|
|
const NutritionInfo = await CreateImage.PostMeal(YYMMDD);
|
|
console.timeEnd("📷 | Create Post Image");
|
|
|
|
console.time("📱 | Create Story Image");
|
|
await CreateImage.ConvertToStory(`./temp/${YYMMDD}.png`);
|
|
console.timeEnd("📱 | Create Story Image");
|
|
|
|
console.time("📤 | Upload Post");
|
|
|
|
let NutritionInfoText = ""
|
|
|
|
const entries = Object.entries(NutritionInfo ?? {}).filter(([_, value]) => value.toString().length > 0);
|
|
entries.forEach(([name, value], idx) => {
|
|
NutritionInfoText += `${name} : ${value.toString().replace(",", ", ")}`;
|
|
if (idx !== entries.length - 1) {
|
|
NutritionInfoText += "\n";
|
|
}
|
|
});
|
|
|
|
await Upload.Post(
|
|
`./temp/${YYMMDD}.png`,
|
|
[
|
|
`🍽️ | ${YYMMDD}일자 급식`,
|
|
"===========================",
|
|
"⚠️ 알레르기 유발 가능 성분이 포함되어 있습니다.",
|
|
NutritionInfoText,
|
|
"===========================",
|
|
"#인천상정중학교 #상정중학교 #급식"
|
|
].join("\n")
|
|
);
|
|
console.timeEnd("📤 | Upload Post");
|
|
|
|
console.time("📤 | Upload Story");
|
|
await Upload.Story(`./temp/${YYMMDD}-story.png`, YYMMDD);
|
|
console.timeEnd("📤 | Upload Story");
|
|
|
|
console.time("🤖 | Discord Webhook");
|
|
await Discord(YYMMDD);
|
|
console.timeEnd("🤖 | Discord Webhook");
|
|
} catch (error) {
|
|
console.error("❌ | Error during image creation or upload:", error);
|
|
} finally {
|
|
console.timeEnd("🎉 | Done");
|
|
}
|
|
}
|
|
|
|
main();
|