[discord] thread/forum channel support (#4099)

This commit is contained in:
TheDanniCraft 2024-05-19 21:14:13 +02:00 committed by GitHub
parent 6bfb1be71a
commit 4e24e96dab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 74 additions and 4 deletions

View file

@ -13,6 +13,10 @@ class Discord extends NotificationProvider {
try { try {
const discordDisplayName = notification.discordUsername || "Uptime Kuma"; const discordDisplayName = notification.discordUsername || "Uptime Kuma";
const webhookUrl = new URL(notification.discordWebhookUrl);
if (notification.discordChannelType === "postToThread") {
webhookUrl.searchParams.append("thread_id", notification.threadId);
}
// If heartbeatJSON is null, assume we're testing. // If heartbeatJSON is null, assume we're testing.
if (heartbeatJSON == null) { if (heartbeatJSON == null) {
@ -20,7 +24,12 @@ class Discord extends NotificationProvider {
username: discordDisplayName, username: discordDisplayName,
content: msg, content: msg,
}; };
await axios.post(notification.discordWebhookUrl, discordtestdata);
if (notification.discordChannelType === "createNewForumPost") {
discordtestdata.thread_name = notification.postName;
}
await axios.post(webhookUrl.toString(), discordtestdata);
return okMsg; return okMsg;
} }
@ -72,12 +81,14 @@ class Discord extends NotificationProvider {
], ],
}], }],
}; };
if (notification.discordChannelType === "createNewForumPost") {
discorddowndata.thread_name = notification.postName;
}
if (notification.discordPrefixMessage) { if (notification.discordPrefixMessage) {
discorddowndata.content = notification.discordPrefixMessage; discorddowndata.content = notification.discordPrefixMessage;
} }
await axios.post(notification.discordWebhookUrl, discorddowndata); await axios.post(webhookUrl.toString(), discorddowndata);
return okMsg; return okMsg;
} else if (heartbeatJSON["status"] === UP) { } else if (heartbeatJSON["status"] === UP) {
@ -108,11 +119,15 @@ class Discord extends NotificationProvider {
}], }],
}; };
if (notification.discordChannelType === "createNewForumPost") {
discordupdata.thread_name = notification.postName;
}
if (notification.discordPrefixMessage) { if (notification.discordPrefixMessage) {
discordupdata.content = notification.discordPrefixMessage; discordupdata.content = notification.discordPrefixMessage;
} }
await axios.post(notification.discordWebhookUrl, discordupdata); await axios.post(webhookUrl.toString(), discordupdata);
return okMsg; return okMsg;
} }
} catch (error) { } catch (error) {

View file

@ -16,4 +16,50 @@
<label for="discord-prefix-message" class="form-label">{{ $t("Prefix Custom Message") }}</label> <label for="discord-prefix-message" class="form-label">{{ $t("Prefix Custom Message") }}</label>
<input id="discord-prefix-message" v-model="$parent.notification.discordPrefixMessage" type="text" class="form-control" autocomplete="false" :placeholder="$t('Hello @everyone is...')"> <input id="discord-prefix-message" v-model="$parent.notification.discordPrefixMessage" type="text" class="form-control" autocomplete="false" :placeholder="$t('Hello @everyone is...')">
</div> </div>
<div class="mb-3">
<label for="discord-message-type" class="form-label">{{ $t("Select message type") }}</label>
<select id="discord-message-type" v-model="$parent.notification.discordChannelType" class="form-select">
<option value="channel">{{ $t("Send to channel") }}</option>
<option value="createNewForumPost">{{ $t("Create new forum post") }}</option>
<option value="postToThread">{{ $t("postToExistingThread") }}</option>
</select>
</div>
<div v-if="$parent.notification.discordChannelType === 'createNewForumPost'">
<div class="mb-3">
<label for="discord-target" class="form-label">
{{ $t("forumPostName") }}
</label>
<input id="discord-target" v-model="$parent.notification.postName" type="text" class="form-control" autocomplete="false">
<div class="form-text">
{{ $t("whatHappensAtForumPost", { option: $t("postToExistingThread") }) }}
</div>
</div>
</div>
<div v-if="$parent.notification.discordChannelType === 'postToThread'">
<div class="mb-3">
<label for="discord-target" class="form-label">
{{ $t("threadForumPostID") }}
</label>
<input id="discord-target" v-model="$parent.notification.threadId" type="text" class="form-control" autocomplete="false" :placeholder="$t('e.g. {discordThreadID}', { discordThreadID: 1177566663751782411 })">
<div class="form-text">
<i18n-t keypath="wayToGetDiscordThreadId">
<a
href="https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID-"
target="_blank"
>{{ $t("here") }}</a>
</i18n-t>
</div>
</div>
</div>
</template> </template>
<script>
export default {
mounted() {
if (!this.$parent.notification.discordChannelType) {
this.$parent.notification.discordChannelType = "channel";
}
}
};
</script>

View file

@ -527,6 +527,15 @@
"Bot Display Name": "Bot Display Name", "Bot Display Name": "Bot Display Name",
"Prefix Custom Message": "Prefix Custom Message", "Prefix Custom Message": "Prefix Custom Message",
"Hello @everyone is...": "Hello {'@'}everyone is…", "Hello @everyone is...": "Hello {'@'}everyone is…",
"Select message type": "Select message type",
"Send to channel": "Send to channel",
"Create new forum post": "Create new forum post",
"postToExistingThread": "Post to existing thread / forum post",
"forumPostName": "Forum post name",
"threadForumPostID": "Thread / Forum post ID",
"e.g. {discordThreadID}": "e.g. {discordThreadID}",
"whatHappensAtForumPost": "Create a new forum post. This does NOT post messages in existing post. To post in existing post use \"{option}\"",
"wayToGetDiscordThreadId": "Getting a thread / forum post id is similar to getting a channel id. Read more about how to get ids {0}",
"wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.", "wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.",
"wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.", "wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
"needSignalAPI": "You need to have a signal client with REST API.", "needSignalAPI": "You need to have a signal client with REST API.",