forked from administration/panel
57 lines
1.8 KiB
JavaScript
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();
|
|
}
|