mirror of https://github.com/louislam/uptime-kuma
				
				
				
			[discord] thread/forum channel support (#4099)
							parent
							
								
									6bfb1be71a
								
							
						
					
					
						commit
						4e24e96dab
					
				| 
						 | 
				
			
			@ -13,6 +13,10 @@ class Discord extends NotificationProvider {
 | 
			
		|||
 | 
			
		||||
        try {
 | 
			
		||||
            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 == null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +24,12 @@ class Discord extends NotificationProvider {
 | 
			
		|||
                    username: discordDisplayName,
 | 
			
		||||
                    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;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,12 +81,14 @@ class Discord extends NotificationProvider {
 | 
			
		|||
                        ],
 | 
			
		||||
                    }],
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                if (notification.discordChannelType === "createNewForumPost") {
 | 
			
		||||
                    discorddowndata.thread_name = notification.postName;
 | 
			
		||||
                }
 | 
			
		||||
                if (notification.discordPrefixMessage) {
 | 
			
		||||
                    discorddowndata.content = notification.discordPrefixMessage;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                await axios.post(notification.discordWebhookUrl, discorddowndata);
 | 
			
		||||
                await axios.post(webhookUrl.toString(), discorddowndata);
 | 
			
		||||
                return okMsg;
 | 
			
		||||
 | 
			
		||||
            } 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) {
 | 
			
		||||
                    discordupdata.content = notification.discordPrefixMessage;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                await axios.post(notification.discordWebhookUrl, discordupdata);
 | 
			
		||||
                await axios.post(webhookUrl.toString(), discordupdata);
 | 
			
		||||
                return okMsg;
 | 
			
		||||
            }
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,4 +16,50 @@
 | 
			
		|||
        <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...')">
 | 
			
		||||
    </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>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
    mounted() {
 | 
			
		||||
        if (!this.$parent.notification.discordChannelType) {
 | 
			
		||||
            this.$parent.notification.discordChannelType = "channel";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -527,6 +527,15 @@
 | 
			
		|||
    "Bot Display Name": "Bot Display Name",
 | 
			
		||||
    "Prefix Custom Message": "Prefix Custom Message",
 | 
			
		||||
    "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}.",
 | 
			
		||||
    "wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
 | 
			
		||||
    "needSignalAPI": "You need to have a signal client with REST API.",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue