# frozen_string_literal: true
module ESM
module Command
module Community
class Mode < ApplicationCommand
#################################
#
# Arguments (required first, then order matters)
#
# See Argument::TEMPLATES[:community_id]
argument :community_id, display_name: :for
#
# Configuration
#
change_attribute :allowed_in_text_channels, modifiable: false, default: false
change_attribute :cooldown_time, modifiable: false
change_attribute :enabled, modifiable: false
change_attribute :allowlist_enabled, modifiable: false
change_attribute :allowlisted_role_ids, modifiable: false
command_namespace :community, :admin, command_name: :change_mode
command_type :admin
does_not_require :registration
limit_to :dm
#################################
def on_execute
check_for_owner!
enable_player_mode = !target_community.player_mode_enabled?
check_for_active_servers! if enable_player_mode
# Flip it, flip it good
target_community.update!(player_mode_enabled: enable_player_mode)
# Reply back
embed =
ESM::Embed.build do |e|
e.description = I18n.t(
"commands.mode.#{enable_player_mode ? "enabled" : "disabled"}",
community_name: target_community.name
)
e.color = :green
end
reply(embed)
end
private
def check_for_active_servers!
raise_error!(:servers_exist, user: current_user.mention) if target_community.servers.any?
end
end
end
end
end