1
0
Fork 0
panel/notifications.mjs

57 lines
1.8 KiB
JavaScript

import { createClient } from 'redis';
import { NtfyClient, MessagePriority } from 'ntfy';
/**
* NTFY_SERVER
* NTFY_TOPIC
* NTFY_USERNAME
* NTFY_PASSWORD
*/
if (!process.env.NTFY_TOPIC) {
console.log('$NTFY_TOPIC not set');
} else {
console.log('Listening for new reports');
const ntfy = new NtfyClient(process.env.NTFY_SERVER);
const redis = createClient({
url: process.env.REDIS,
});
redis.SUBSCRIBE('global', async (message) => {
try {
const event = JSON.parse(message);
if (event.type != "ReportCreate") return;
console.log('New report:', event.content);
await ntfy.publish({
title: `Report created (${event.content.type}, ${event.content.report_reason})`,
message: event.additional_context || "No reason provided",
iconURL: 'https://admin.revolt.chat/attention.png',
actions: [
{
label: 'View report',
type: 'view',
url: `https://admin.revolt.chat/panel/reports/${event._id}`,
clear: true,
}
],
priority: event.content.report_reason.includes('Illegal')
? MessagePriority.HIGH
: MessagePriority.DEFAULT,
topic: process.env.NTFY_TOPIC,
authorization: process.env.NTFY_USERNAME && process.env.NTFY_PASSWORD
? {
username: process.env.NTFY_USERNAME,
password: process.env.NTFY_PASSWORD,
}
: undefined,
});
} catch(e) {
console.log(e);
}
});
redis.connect();
}