Suscríbete para publicar un anuncio

Sin duda, pero sería genial tenerlo.
De todos modos, parece que esto haría el trabajo siempre que codifiques la ID de la categoría y el nombre del grupo.
¿Pueden los programadores reales ampliar esto para que puedas configurar esas variables desde la página de configuración del plugin?

# name: discourse-auto-remove-group
# version: 0.1
# authors: tknospdr
# url: https://github.com/tknospdr/discourse-auto-remove-group

enabled_site_setting :auto_remove_group_enabled

# Configuración del sitio para habilitar/deshabilitar el plugin
register_site_setting :auto_remove_group_enabled, type: :boolean, default: false
register_site_setting :auto_remove_group_category_id, type: :integer, default: 0
register_site_setting :auto_remove_group_name, type: :string, default: ""

after_initialize do
  # Escuchar eventos de creación de publicaciones
  DiscourseEvent.on(:post_created) do |post|
    next unless SiteSetting.auto_remove_group_enabled
    next unless post&.user # Asegurarse de que la publicación tenga un usuario
    next unless post&.topic&.category_id # Asegurarse de que la publicación esté en una categoría

    target_category_id = SiteSetting.auto_remove_group_category_id
    group_name = SiteSetting.auto_remove_group_name

    # Comprobar si la publicación está en la categoría configurada
    if post.topic.category_id == target_category_id
      begin
        group = Group.find_by(name: group_name)
        unless group
          Rails.logger.error("AutoRemoveGroup: Grupo '#{group_name}' no encontrado")
          next
        end

        user = post.user
        if group.users.include?(user)
          group.remove(user)
          Rails.logger.info("AutoRemoveGroup: Se eliminó al usuario #{user.username} del grupo #{group_name} después de publicar en la categoría #{target_category_id}")
        else
          Rails.logger.info("AutoRemoveGroup: El usuario #{user.username} no está en el grupo #{group_name}, no se tomó ninguna medida")
        end
      rescue StandardError => e
        Rails.logger.error("AutoRemoveGroup: Error al eliminar al usuario del grupo: #{e.message}")
      end
    end
  end
end