mirror of
https://github.com/discourse/discourse.git
synced 2025-05-21 18:12:32 +08:00
DEV: Make discourse_narrative_bot
use Rails autoload (#26044)
Why this change? Instead of manually loading files, we should just structure the plugin so that it relies on Rails autoload strategy and avoid all the manual `require_relative`s. What does this change do? 1. Structure the plugin to use Rails autoloading convention 2. Remove onceff jobs that were added 5-6 years ago. There is no need to carry these jobs anymore after such a long time. 3. Move setting of `SiteSetting.discourse_narrative_bot_enabled` to `false` in the test environment from core into the plugin.
This commit is contained in:

committed by
GitHub

parent
6b46b9ab78
commit
3491642f98
@ -0,0 +1,44 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module DiscourseNarrativeBot
|
||||
class CertificatesController < ::ApplicationController
|
||||
requires_plugin DiscourseNarrativeBot::PLUGIN_NAME
|
||||
layout false
|
||||
skip_before_action :check_xhr
|
||||
requires_login
|
||||
|
||||
def generate
|
||||
immutable_for(24.hours)
|
||||
|
||||
%i[date user_id].each do |key|
|
||||
unless params[key]&.present?
|
||||
raise Discourse::InvalidParameters.new("#{key} must be present")
|
||||
end
|
||||
end
|
||||
|
||||
if params[:user_id].to_i != current_user.id
|
||||
rate_limiter = RateLimiter.new(current_user, "svg_certificate", 3, 1.minute)
|
||||
else
|
||||
rate_limiter = RateLimiter.new(current_user, "svg_certificate_self", 30, 10.minutes)
|
||||
end
|
||||
rate_limiter.performed! unless current_user.staff?
|
||||
|
||||
user = User.find_by(id: params[:user_id])
|
||||
raise Discourse::NotFound if user.blank?
|
||||
|
||||
hijack do
|
||||
generator = CertificateGenerator.new(user, params[:date], avatar_url(user))
|
||||
|
||||
svg = params[:type] == "advanced" ? generator.advanced_user_track : generator.new_user_track
|
||||
|
||||
respond_to { |format| format.svg { render inline: svg } }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def avatar_url(user)
|
||||
UrlHelper.absolute(Discourse.base_path + user.avatar_template.gsub("{size}", "250"))
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jobs
|
||||
class BotInput < ::Jobs::Base
|
||||
sidekiq_options queue: "critical", retry: false
|
||||
|
||||
def execute(args)
|
||||
return unless user = User.find_by(id: args[:user_id])
|
||||
|
||||
I18n.with_locale(user.effective_locale) do
|
||||
::DiscourseNarrativeBot::TrackSelector.new(
|
||||
args[:input].to_sym,
|
||||
user,
|
||||
post_id: args[:post_id],
|
||||
topic_id: args[:topic_id],
|
||||
).select
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jobs
|
||||
class NarrativeInit < ::Jobs::Base
|
||||
sidekiq_options queue: "critical"
|
||||
|
||||
def execute(args)
|
||||
if user = User.find_by(id: args[:user_id])
|
||||
I18n.with_locale(user.effective_locale) { args[:klass].constantize.new.input(:init, user) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jobs
|
||||
class NarrativeTimeout < ::Jobs::Base
|
||||
def execute(args)
|
||||
if user = User.find_by(id: args[:user_id])
|
||||
I18n.with_locale(user.effective_locale) do
|
||||
args[:klass].constantize.new.notify_timeout(user)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jobs
|
||||
class SendDefaultWelcomeMessage < ::Jobs::Base
|
||||
def execute(args)
|
||||
if user = User.find_by(id: args[:user_id])
|
||||
type = user.invited_by ? "welcome_invite" : "welcome_user"
|
||||
params = SystemMessage.new(user).defaults
|
||||
|
||||
title = I18n.t("system_messages.#{type}.subject_template", params)
|
||||
raw = I18n.t("system_messages.#{type}.text_body_template", params)
|
||||
discobot_user = ::DiscourseNarrativeBot::Base.new.discobot_user
|
||||
|
||||
post =
|
||||
PostCreator.create!(
|
||||
discobot_user,
|
||||
title: title,
|
||||
raw: raw,
|
||||
archetype: Archetype.private_message,
|
||||
target_usernames: user.username,
|
||||
skip_validations: true,
|
||||
)
|
||||
|
||||
post.topic.update_status("closed", true, discobot_user)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user