Lhc_fl
(Linca)
12 نوفمبر 2023، 12:16م
1
الآن بعد أن أصبح بإمكان PostCreator تحديد user كمنشئ للمنشور و guardian للتحقق من أذونات النشر، أود أن يكون لدى Discourse Chat سلوك مماثل، والذي سيسمح للإضافات بالمساعدة في إرسال الرسائل من مستخدم (سواء كان في قناة الدردشة أم لا) مع وصي المستخدم النظامي.
channel.membership_for(guardian.user)
end
def fetch_reply(params:)
Chat::Message.find_by(id: params.in_reply_to_id)
end
def ensure_reply_consistency(channel:, params:, reply:)
return true if params.in_reply_to_id.blank?
reply&.chat_channel == channel
end
def fetch_thread(params:, reply:, channel:, options:)
return Chat::Thread.find_by(id: params.thread_id) if params.thread_id.present?
return unless reply
reply.thread ||
reply.build_thread(
original_message: reply,
original_message_user: reply.user,
channel: channel,
force: options.force_thread,
الاستخدام: في Discourse Automation و Chat bridge، تحتاج إلى إرسال رسائل دردشة من إضافة. ولكن حاليًا، من المرجح أن يفشل هذا النص في الإرسال لأن المستخدم الذي تحدده (مثل DiscoBot) قد لا يكون في القناة.
Some time ago, we encountered a problem with Discourse-Automation where we could not send chat messages regularly. We use it to send weekly news in the chat channel. I noticed in the /logs that chat messages failed to send due to permission issues.
I think the sender configured in discourse automation should simply ignore the channel’s permission settings, since this is set by the administrator. In fact, I am using DiscoBot as the messaging user. Since DiscoBot was not active in the category bo…
script do |context, fields, automation|
sender = User.find_by(username: fields.dig("sender", "value")) || Discourse.system_user
channel = Chat::Channel.find_by(id: fields.dig("chat_channel_id", "value"))
placeholders = { channel_name: channel.title(sender) }.merge(context["placeholders"] || {})
creator =
::Chat::CreateMessage.call(
chat_channel_id: channel.id,
guardian: sender.guardian,
message: utils.apply_placeholders(fields.dig("message", "value"), placeholders),
)
if creator.failure?
Rails.logger.warn "[discourse-automation] Chat message failed to send:\n#{creator.inspect_steps.inspect}\n#{creator.inspect_steps.error}"
end
end
end
end
أعلم أن الفريق مشغول جدًا، لذلك يمكنني القيام بذلك بنفسي. آمل أن يفكر فريق Discourse في إضافة هذا إلى النواة، ثم سأخصص وقتًا لتعديل الكود هنا وتقديم طلب سحب.
إعجاب واحد (1)
Discourse Chatbot حل تحديًا مشابهًا باستخدام التعليمات البرمجية الحالية دون الحاجة إلى أي تغييرات محددة في النواة، هل ألقيت نظرة على حلي؟
module ::DiscourseChatbot
class MessageReplyCreator < ReplyCreator
def initialize(options = {})
super(options)
end
def create
::DiscourseChatbot.progress_debug_message("5. Creating a new Chat Nessage...")
begin
Chat::CreateMessage.call(
chat_channel_id: @topic_or_channel_id,
guardian: @guardian,
message: @message_body,
)
presence = PresenceChannel.new("/chat-reply/#{@topic_or_channel_id}")
presence.leave(user_id: @author.id, client_id: "12345")
::DiscourseChatbot.progress_debug_message("6. The Message has been created successfully")
rescue => e
إعجاب واحد (1)
Lhc_fl
(Linca)
14 نوفمبر 2023، 2:36ص
3
شكرا جزيلا على اقتراحك! دعني أرى ذلك
j.jaffeux
(Joffrey Jaffeux)
4 ديسمبر 2023، 7:53م
4
نعم، كما قال @merefield ، تقبل خدمة الدردشة وصيًا، ويمكنك تعيين الوصي كما تريد.
إعجاب واحد (1)
j.jaffeux
(Joffrey Jaffeux)
تم إغلاقه في
8 ديسمبر 2023، 7:54م
5
تم إغلاق هذا الموضوع تلقائيًا بعد 4 أيام من آخر رد. لم يعد يُسمح بالردود الجديدة.