bkk-raindar-misskey/src/index.js

126 lines
3.9 KiB
JavaScript

import { v4 as uuidv4 } from 'uuid';
import fs from 'node:fs';
import path from 'node:path';
import express from 'express';
import { pipeline } from 'node:stream/promises';
import * as Post from './api/post.cjs';
import * as Auth from './api/auth.cjs';
const __dirname = path.resolve();
const credentials_file_path = path.join(__dirname, '/config/credentials.json');
if(!fs.existsSync(credentials_file_path)) {
fs.writeFileSync(
credentials_file_path,
JSON.stringify({
"token": ""
})
);
}
const config = JSON.parse(fs.readFileSync(path.join(__dirname, '/config/config.json')));
const credentials = JSON.parse(fs.readFileSync(credentials_file_path));
let app = express();
let port = process.env.PORT || 4000;
process.env.TZ = config.timezone;
let host = config.host;
let app_name = config.app.name;
let app_callback = config.app.callback;
let app_permission = config.app.permission;
let session_id = uuidv4();
let auth_url = `${host}/miauth/${session_id}?name=${app_name}&callback=${app_callback}&permission=${app_permission}`;
app.get('/callback', function(req, res) {
if(req.query.session) {
res.send({
"status": 200,
"success": true,
})
Auth.verify_auth_status();
} else {
res.send({
"status": 400,
"success": false,
"message": "Invalid callback request"
})
}
});
(async () => {
let access_token = null;
if(!credentials.token) { // if existing token not exist
console.log(auth_url);
await Auth.check_auth_status();
access_token = await Auth.get_access_token(host, session_id);
let json_data = {
"token": access_token
}
fs.writeFileSync(
credentials_file_path,
JSON.stringify(json_data)
);
} else {
access_token = credentials.token;
}
(async function post() {
let raw_date = new Date();
/* let curr_image_path = path.join(__dirname, '/data/' + date + '.jpg'); */
let static_radar_path = path.join(__dirname, '/data/current_radar.jpg');
let static_radar_image_name = `${raw_date.toISOString}.jpg`;
console.log(static_radar_image_name)
const upload_radar_image = await Post.create_image(host, access_token, static_radar_image_name, static_radar_path);
let note_caption = `# Raindar Update\n## ${raw_date.toLocaleString('th-TH')}\nLeft: Current Observation\nRight: 3 hour forecast`
const post_note = await Post.create_note(
host,
access_token,
note_caption,
[upload_radar_image.id],
"public"
)
// setInterval(post, 30000);
})();
/* setInterval(async function post() {
let static_radar_path = path.join(__dirname, '/data/current_radar.jpg');
const static_radar_image = await Post.create_image(host, access_token, static_radar_path);
const static_radar_image__id = static_radar_image.data.id;
console.log(static_radar_image__id);
return ;
}, 60000); */
/* setInterval(async () => {
let date = new Date().toLocaleString('th-TH');
/* let curr_image_path = path.join(__dirname, '/data/' + date + '.jpg');
let static_radar_path = path.join(__dirname, '/data/current_radar.jpg');
const static_radar_image = Post.create_image(host, access_token, name, static_radar_path);
const static_radar_image__id = static_radar_image.data.id;
let note_caption = `# Raindar Update\n## ${date}\n${radar_caption}\n\nLeft: Current Observation\nRight: 3 hour forecast`
const post_note = Post.create_note(
host,
access_token,
note_text,
[static_radar_image__id],
"public"
)
}, 60000); */
})();
app.listen(port);
console.log(`Callback URL: http://localhost:${port}/callback`);