Add Discord integration

This commit is contained in:
blackst0ne 2018-10-30 22:23:20 +11:00
parent af80955baa
commit 846d84602f
9 changed files with 95 additions and 0 deletions

View file

@ -204,6 +204,9 @@ gem 'redis-rails', '~> 5.0.2'
gem 'redis', '~> 3.2'
gem 'connection_pool', '~> 2.0'
# Discord integration
gem 'discordrb-webhooks', '~> 3.3', github: 'blackst0ne/discordrb', require: false
# HipChat integration
gem 'hipchat', '~> 1.5.0'

View file

@ -1,3 +1,10 @@
GIT
remote: git://github.com/blackst0ne/discordrb.git
revision: 2de6ec4dda1e2ea2966f1ced063698d7c5fc5225
specs:
discordrb-webhooks (3.3.0)
rest-client (~> 2.0)
GEM
remote: https://rubygems.org/
specs:
@ -972,6 +979,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0.0)
diffy (~> 3.1.0)
discordrb-webhooks (~> 3.3)!
doorkeeper (~> 4.3)
doorkeeper-openid_connect (~> 1.5)
ed25519 (~> 1.2)

View file

@ -1,3 +1,10 @@
GIT
remote: git://github.com/blackst0ne/discordrb.git
revision: 2de6ec4dda1e2ea2966f1ced063698d7c5fc5225
specs:
discordrb-webhooks (3.3.0)
rest-client (~> 2.0)
GEM
remote: https://rubygems.org/
specs:
@ -981,6 +988,7 @@ DEPENDENCIES
devise (~> 4.4)
devise-two-factor (~> 3.0.0)
diffy (~> 3.1.0)
discordrb-webhooks (~> 3.3)!
doorkeeper (~> 4.3)
doorkeeper-openid_connect (~> 1.5)
ed25519 (~> 1.2)

View file

@ -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

View file

@ -0,0 +1,63 @@
# 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 projects events to Discord channels.<br />
To set up this service:
<ol>
<li><a href='ADD-DISCORD-LINK-HERE'>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 webhook_placeholder
"https://discordapp.com/api/webhooks/..."
end
def event_field(event)
end
def default_channel_placeholder
end
def default_fields
[
{ type: "text", name: "webhook", placeholder: "e.g. #{webhook_placeholder}" },
{ 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
# builder.add_embed do |embed|
# embed.title = 'Embed title'
# embed.description = 'Embed description'
# embed.timestamp = Time.now
# end
end
end
def custom_data(data)
super(data).merge(markdown: true)
end
end

View file

@ -253,6 +253,7 @@ class Service < ActiveRecord::Base
bugzilla
campfire
custom_issue_tracker
discord
drone_ci
emails_on_push
external_wiki

View file

@ -298,6 +298,14 @@ module API
desc: 'Title'
}
],
'discord' => [
{
required: true,
name: :webhook,
type: String,
desc: 'Discord webhook. e.g. https://discordapp.com/api/webhooks/…'
}
],
'drone-ci' => [
{
required: true,
@ -677,6 +685,7 @@ module API
BuildkiteService,
CampfireService,
CustomIssueTrackerService,
DiscordService,
DroneCiService,
EmailsOnPushService,
ExternalWikiService,

View file

@ -198,6 +198,7 @@ project:
- last_event
- services
- campfire_service
- discord_service
- drone_ci_service
- emails_on_push_service
- pipelines_email_service

View file

@ -32,6 +32,7 @@ describe Project do
it { is_expected.to have_one(:asana_service) }
it { is_expected.to have_many(:boards) }
it { is_expected.to have_one(:campfire_service) }
it { is_expected.to have_one(:discord_service) }
it { is_expected.to have_one(:drone_ci_service) }
it { is_expected.to have_one(:emails_on_push_service) }
it { is_expected.to have_one(:pipelines_email_service) }