2019-05-13 10:37:49 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-07-03 11:08:14 +01:00
|
|
|
# name: discourse-chat-integration
|
2023-11-27 12:04:54 +00:00
|
|
|
# about: Allows integration with several external chat system providers
|
2023-11-09 05:27:54 +10:00
|
|
|
# meta_topic_id: 66522
|
2017-06-26 15:08:06 +01:00
|
|
|
# version: 0.1
|
2017-07-03 11:08:14 +01:00
|
|
|
# url: https://github.com/discourse/discourse-chat-integration
|
2017-07-13 13:32:11 +01:00
|
|
|
# author: David Taylor
|
2017-06-26 15:08:06 +01:00
|
|
|
|
2017-07-03 11:08:14 +01:00
|
|
|
enabled_site_setting :chat_integration_enabled
|
2017-06-26 15:08:06 +01:00
|
|
|
|
2023-12-11 20:00:34 +01:00
|
|
|
register_asset "stylesheets/chat-integration.scss"
|
2017-07-03 22:11:17 +01:00
|
|
|
|
2018-11-01 18:03:39 -04:00
|
|
|
register_svg_icon "rocket" if respond_to?(:register_svg_icon)
|
2020-06-15 11:45:25 -04:00
|
|
|
register_svg_icon "fa-arrow-circle-o-right" if respond_to?(:register_svg_icon)
|
2018-11-01 18:03:39 -04:00
|
|
|
|
2017-07-03 16:28:26 +01:00
|
|
|
# Site setting validators must be loaded before initialize
|
2021-07-13 14:36:16 -05:00
|
|
|
require_relative "lib/discourse_chat_integration/provider/slack/slack_enabled_setting_validator"
|
2017-06-29 17:50:54 +01:00
|
|
|
|
2017-06-26 15:08:06 +01:00
|
|
|
after_initialize do
|
2021-07-13 14:36:16 -05:00
|
|
|
require_relative "app/initializers/discourse_chat_integration"
|
2024-04-03 14:51:19 -06:00
|
|
|
|
2024-03-15 13:21:11 +08:00
|
|
|
require_relative "app/services/problem_check/channel_errors"
|
2017-08-01 20:53:39 +01:00
|
|
|
|
2024-04-03 14:51:19 -06:00
|
|
|
register_problem_check ProblemCheck::ChannelErrors
|
|
|
|
|
2024-03-04 16:01:07 +01:00
|
|
|
on(:site_setting_changed) do |setting_name, old_value, new_value|
|
|
|
|
is_enabled_setting = setting_name == :chat_integration_telegram_enabled
|
|
|
|
is_access_token = setting_name == :chat_integration_telegram_access_token
|
|
|
|
|
|
|
|
if (is_enabled_setting || is_access_token)
|
2024-03-04 16:34:01 +01:00
|
|
|
enabled =
|
|
|
|
is_enabled_setting ? new_value == true : SiteSetting.chat_integration_telegram_enabled
|
2024-03-04 16:01:07 +01:00
|
|
|
|
|
|
|
if enabled && SiteSetting.chat_integration_telegram_access_token.present?
|
|
|
|
Scheduler::Defer.later("Setup Telegram Webhook") do
|
|
|
|
DiscourseChatIntegration::Provider::TelegramProvider.setup_webhook
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-10-10 10:08:26 +08:00
|
|
|
on(:post_created) do |post|
|
|
|
|
# This will run for every post, even PMs. Don't worry, they're filtered out later.
|
|
|
|
time = SiteSetting.chat_integration_delay_seconds.seconds
|
|
|
|
Jobs.enqueue_in(time, :notify_chats, post_id: post.id)
|
2017-06-26 19:19:50 +01:00
|
|
|
end
|
|
|
|
|
2022-12-29 12:31:05 +00:00
|
|
|
add_admin_route "chat_integration.menu_title", "chat-integration"
|
2017-06-26 19:19:50 +01:00
|
|
|
|
2021-07-13 14:36:16 -05:00
|
|
|
DiscourseChatIntegration::Provider.mount_engines
|
2022-02-25 12:17:20 -07:00
|
|
|
|
|
|
|
if defined?(DiscourseAutomation)
|
2022-12-29 12:31:05 +00:00
|
|
|
add_automation_scriptable("send_slack_message") do
|
2022-02-25 12:17:20 -07:00
|
|
|
field :message, component: :message, required: true, accepts_placeholders: true
|
|
|
|
field :url, component: :text, required: true
|
|
|
|
field :channel, component: :text, required: true
|
|
|
|
|
|
|
|
version 1
|
|
|
|
|
2024-08-13 15:14:35 -03:00
|
|
|
triggerables %i[point_in_time recurring topic_tags_changed]
|
2022-02-25 12:17:20 -07:00
|
|
|
|
|
|
|
script do |context, fields, automation|
|
2022-12-29 12:31:05 +00:00
|
|
|
channel_name = fields.dig("channel", "value")
|
|
|
|
channel =
|
|
|
|
DiscourseChatIntegration::Channel.new(
|
|
|
|
provider: "slack",
|
|
|
|
data: {
|
|
|
|
identifier: "##{channel_name}",
|
|
|
|
},
|
|
|
|
)
|
2022-02-25 12:17:20 -07:00
|
|
|
|
2024-08-13 15:14:35 -03:00
|
|
|
begin
|
|
|
|
message =
|
|
|
|
DiscourseChatIntegration::Provider::SlackProvider.create_slack_message(
|
|
|
|
context: context,
|
|
|
|
content: fields.dig("message", "value"),
|
|
|
|
url: fields.dig("url", "value"),
|
|
|
|
channel_name: channel_name,
|
|
|
|
)
|
|
|
|
DiscourseChatIntegration::Provider::SlackProvider.send_via_api(nil, channel, message)
|
|
|
|
rescue StandardError => _
|
|
|
|
# StandardError here is when there are no tags but content includes reference to them.
|
|
|
|
end
|
2022-02-25 12:17:20 -07:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-06-26 15:08:06 +01:00
|
|
|
end
|