mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-24 10:26:02 +03:00
a42f7416b5
Instead of having two different ways of showing the URL field in Discord embeds, always show the raw address.
122 lines
4.6 KiB
JavaScript
122 lines
4.6 KiB
JavaScript
const NotificationProvider = require("./notification-provider");
|
|
const axios = require("axios");
|
|
const { DOWN, UP } = require("../../src/util");
|
|
|
|
class Discord extends NotificationProvider {
|
|
|
|
name = "discord";
|
|
|
|
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
|
let okMsg = "Sent Successfully.";
|
|
|
|
try {
|
|
const discordDisplayName = notification.discordUsername || "Uptime Kuma";
|
|
|
|
// If heartbeatJSON is null, assume we're testing.
|
|
if (heartbeatJSON == null) {
|
|
let discordtestdata = {
|
|
username: discordDisplayName,
|
|
content: msg,
|
|
};
|
|
await axios.post(notification.discordWebhookUrl, discordtestdata);
|
|
return okMsg;
|
|
}
|
|
|
|
let address;
|
|
|
|
switch (monitorJSON["type"]) {
|
|
case "ping":
|
|
address = monitorJSON["hostname"];
|
|
break;
|
|
case "port":
|
|
case "dns":
|
|
case "steam":
|
|
address = monitorJSON["hostname"];
|
|
if (monitorJSON["port"]) {
|
|
address += ":" + monitorJSON["port"];
|
|
}
|
|
break;
|
|
default:
|
|
address = monitorJSON["url"];
|
|
break;
|
|
}
|
|
|
|
// If heartbeatJSON is not null, we go into the normal alerting loop.
|
|
if (heartbeatJSON["status"] === DOWN) {
|
|
let discorddowndata = {
|
|
username: discordDisplayName,
|
|
embeds: [{
|
|
title: "❌ Your service " + monitorJSON["name"] + " went down. ❌",
|
|
color: 16711680,
|
|
timestamp: heartbeatJSON["time"],
|
|
fields: [
|
|
{
|
|
name: "Service Name",
|
|
value: monitorJSON["name"],
|
|
},
|
|
{
|
|
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
|
|
value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
|
|
},
|
|
{
|
|
name: "Time (UTC)",
|
|
value: heartbeatJSON["time"],
|
|
},
|
|
{
|
|
name: "Error",
|
|
value: heartbeatJSON["msg"],
|
|
},
|
|
],
|
|
}],
|
|
};
|
|
|
|
if (notification.discordPrefixMessage) {
|
|
discorddowndata.content = notification.discordPrefixMessage;
|
|
}
|
|
|
|
await axios.post(notification.discordWebhookUrl, discorddowndata);
|
|
return okMsg;
|
|
|
|
} else if (heartbeatJSON["status"] === UP) {
|
|
let discordupdata = {
|
|
username: discordDisplayName,
|
|
embeds: [{
|
|
title: "✅ Your service " + monitorJSON["name"] + " is up! ✅",
|
|
color: 65280,
|
|
timestamp: heartbeatJSON["time"],
|
|
fields: [
|
|
{
|
|
name: "Service Name",
|
|
value: monitorJSON["name"],
|
|
},
|
|
{
|
|
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
|
|
value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
|
|
},
|
|
{
|
|
name: "Time (UTC)",
|
|
value: heartbeatJSON["time"],
|
|
},
|
|
{
|
|
name: "Ping",
|
|
value: heartbeatJSON["ping"] == null ? "N/A" : heartbeatJSON["ping"] + " ms",
|
|
},
|
|
],
|
|
}],
|
|
};
|
|
|
|
if (notification.discordPrefixMessage) {
|
|
discordupdata.content = notification.discordPrefixMessage;
|
|
}
|
|
|
|
await axios.post(notification.discordWebhookUrl, discordupdata);
|
|
return okMsg;
|
|
}
|
|
} catch (error) {
|
|
this.throwGeneralAxiosError(error);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = Discord;
|