물론이죠, 하지만 있으면 좋겠습니다.
어쨌든 카테고리 ID와 그룹 이름을 하드코딩하는 한 이 방식은 역할을 수행할 것 같습니다.
이 코드를 확장하여 플러그인 설정 페이지에서 해당 변수를 설정할 수 있도록 해줄 수 있는 실제 개발자가 있을까요?
# 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
# 플러그인 활성화/비활성화를 위한 사이트 설정
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
# 게시글 생성 이벤트 리스닝
DiscourseEvent.on(:post_created) do |post|
next unless SiteSetting.auto_remove_group_enabled
next unless post&.user # 게시글에 사용자가 있는지 확인
next unless post&.topic&.category_id # 게시글이 카테고리에 있는지 확인
target_category_id = SiteSetting.auto_remove_group_category_id
group_name = SiteSetting.auto_remove_group_name
# 게시글이 설정된 카테고리에 있는지 확인
if post.topic.category_id == target_category_id
begin
group = Group.find_by(name: group_name)
unless group
Rails.logger.error("AutoRemoveGroup: Group '#{group_name}' not found")
next
end
user = post.user
if group.users.include?(user)
group.remove(user)
Rails.logger.info("AutoRemoveGroup: Removed user #{user.username} from group #{group_name} after posting in category #{target_category_id}")
else
Rails.logger.info("AutoRemoveGroup: User #{user.username} is not in group #{group_name}, no action taken")
end
rescue StandardError => e
Rails.logger.error("AutoRemoveGroup: Error removing user from group: #{e.message}")
end
end
end
end