diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-11-12 13:12:48 +0300 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-11-12 13:12:48 +0300 |
commit | ca3e9b975922339b25cc7ca902c7c46e24ed1170 (patch) | |
tree | 0223d2408634923ddfba61c3b8f20656f76981d4 /app/models | |
parent | 89686b90939c7dc1d6c5376d711988efd7809f13 (diff) | |
parent | e03ebd80bb610fb106e82c4ab517c050dbd7f6a7 (diff) |
Merge branch 'blackst0ne-add-discord-service' into 'master'
Add Discord integration
Closes #21635
See merge request gitlab-org/gitlab-ce!22684
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/project.rb | 1 | ||||
-rw-r--r-- | app/models/project_services/discord_service.rb | 57 | ||||
-rw-r--r-- | app/models/service.rb | 1 |
3 files changed, 59 insertions, 0 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 48905547ab4..d87fc1e4b86 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -135,6 +135,7 @@ class Project < ActiveRecord::Base # Project services has_one :campfire_service + has_one :discord_service has_one :drone_ci_service has_one :emails_on_push_service has_one :pipelines_email_service diff --git a/app/models/project_services/discord_service.rb b/app/models/project_services/discord_service.rb new file mode 100644 index 00000000000..21afd14dbff --- /dev/null +++ b/app/models/project_services/discord_service.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +require "discordrb/webhooks" + +class DiscordService < ChatNotificationService + def title + "Discord Notifications" + end + + def description + "Receive event notifications in Discord" + end + + def self.to_param + "discord" + end + + def help + "This service sends notifications about project events to Discord channels.<br /> + To set up this service: + <ol> + <li><a href='https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks'>Setup a custom Incoming Webhook</a>.</li> + <li>Paste the <strong>Webhook URL</strong> into the field below.</li> + <li>Select events below to enable notifications.</li> + </ol>" + end + + def event_field(event) + # No-op. + end + + def default_channel_placeholder + # No-op. + end + + def default_fields + [ + { type: "text", name: "webhook", placeholder: "e.g. https://discordapp.com/api/webhooks/…" }, + { type: "checkbox", name: "notify_only_broken_pipelines" }, + { type: "checkbox", name: "notify_only_default_branch" } + ] + end + + private + + def notify(message, opts) + client = Discordrb::Webhooks::Client.new(url: webhook) + + client.execute do |builder| + builder.content = message.pretext + end + end + + def custom_data(data) + super(data).merge(markdown: true) + end +end diff --git a/app/models/service.rb b/app/models/service.rb index 4dbda7acab6..5b8bf6e7cf0 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -253,6 +253,7 @@ class Service < ActiveRecord::Base bugzilla campfire custom_issue_tracker + discord drone_ci emails_on_push external_wiki |