# frozen_string_literal: true
module ESM
module Command
module Territory
class Add < ApplicationCommand
#################################
#
# Arguments (required first, then order matters)
#
# See Argument::TEMPLATES[:target]
argument :target, display_name: :whom
# See Argument::TEMPLATES[:territory_id]
argument :territory_id, display_name: :to
# See Argument::TEMPLATES[:server_id]
argument :server_id, display_name: :on
#
# Configuration
#
command_type :player
command_namespace :territory, command_name: :add_player
#################################
def on_execute
# Either a memer or admin trying to add themselves. Either way, the arma server handles this.
return on_request_accepted if same_user?
# Checks for a registered target user.
# This also keeps people from adding via steam_uid only
check_for_registered_target_user!
check_for_pending_request!
add_request(
to: target_user,
description: I18n.t(
"commands.add.request_description",
current_user: current_user.distinct,
target_user: target_user.mention,
territory_id: arguments.territory_id,
server_id: target_server.server_id
)
)
embed = ESM::Embed.build(:success, description: I18n.t("commands.request.sent"))
reply(embed)
end
def on_request_accepted
response = call_sqf_function!(
"ESMs_command_add",
territory_id: arguments.territory_id
)
# Parse both first in case there are errors
requestee_embed = embed_from_hash!(response.data.requestee)
requestor_embed = embed_from_hash!(response.data.requestor)
# Send to the requestee first since they can be the requestor
ESM.discord_bot.deliver(requestee_embed, to: target_user)
# And if they are the same person, don't send them the second message
return if same_user?
reply(requestor_embed)
end
module V1
def on_request_accepted
# Request the arma server to add the user
deliver!(
function_name: "addPlayerToTerritory",
territory_id: arguments.territory_id,
target_uid: target_user.steam_uid,
uid: current_user.steam_uid
)
end
def on_response
# Send the success message to the requestee (which can be the requestor)
embed = ESM::Embed.build(
:success,
description: I18n.t(
"commands.add.requestee_success",
user: target_user.mention,
territory_id: arguments.territory_id
)
)
ESM.discord_bot.deliver(embed, to: target_user)
# Don't send essentially the same message twice
return if same_user?
# Send a message to the requestor (if they aren't the requestee as well)
embed = ESM::Embed.build(
:success,
description: I18n.t(
"commands.add.requestor_success",
current_user: current_user.mention,
target_user: target_user.distinct,
territory_id: arguments.territory_id,
server_id: target_server.server_id
)
)
reply(embed)
end
end
end
end
end
end