@@ -595,13 +595,12 @@ void DynamicCommand::execute(CommandOrigin const& origin, CommandOutput& output)
595595}
596596
597597std::unique_ptr<class DynamicCommandInstance > DynamicCommand::createCommand (
598- CommandRegistry& registry,
599598 std::string const & name,
600599 std::string const & description,
601600 CommandPermissionLevel permission,
602601 CommandFlag flag
603602) {
604- return DynamicCommandInstance::create (registry, name, description, permission, flag);
603+ return DynamicCommandInstance::create (name, description, permission, flag);
605604}
606605
607606DynamicCommandInstance const *
@@ -614,7 +613,6 @@ DynamicCommand::setup(CommandRegistry& registry, std::unique_ptr<class DynamicCo
614613}
615614
616615std::unique_ptr<class DynamicCommandInstance > DynamicCommand::createCommand (
617- CommandRegistry& registry,
618616 std::string const & name,
619617 std::string const & description,
620618 std::unordered_map<std::string, std::vector<std::string>>&& enums,
@@ -624,7 +622,7 @@ std::unique_ptr<class DynamicCommandInstance> DynamicCommand::createCommand(
624622 CommandPermissionLevel permission,
625623 CommandFlag flag
626624) {
627- auto command = createCommand (registry, name, description, permission, flag);
625+ auto command = createCommand (name, description, permission, flag);
628626 if (!command) return std::unique_ptr<class DynamicCommandInstance >();
629627 for (auto & [desc, values] : enums) {
630628 command->setEnum (desc, std::move (values));
@@ -647,9 +645,9 @@ void DynamicCommand::updateAvailableCommands(CommandRegistry& registry) {
647645 registry.serializeAvailableCommands ().sendToClients ();
648646}
649647
650- DynamicCommandInstance const * DynamicCommand::getInstance () const { return getInstance (getCommandName ()); }
648+ DynamicCommandInstance* DynamicCommand::getInstance () const { return getInstance (getCommandName ()); }
651649
652- DynamicCommandInstance const * DynamicCommand::getInstance (std::string const & commandName) {
650+ DynamicCommandInstance* DynamicCommand::getInstance (std::string const & commandName) {
653651 auto iter = dynamicCommandInstances.find (commandName);
654652 if (iter == dynamicCommandInstances.end ()) return nullptr ;
655653 else return iter->second .get ();
@@ -681,7 +679,6 @@ static std::unique_ptr<Command> commandBuilder(uintptr_t t) {
681679}
682680
683681DynamicCommandInstance::DynamicCommandInstance (
684- CommandRegistry& registry,
685682 std::string const & name,
686683 std::string const & description,
687684 CommandPermissionLevel permission,
@@ -691,25 +688,17 @@ DynamicCommandInstance::DynamicCommandInstance(
691688 description_(std::make_unique<std::string>(description)),
692689 permission_(permission),
693690 flag_(flag),
694- registry(registry),
695691 builder(std::make_unique<ll::memory::NativeClosure<std::unique_ptr<Command>>>(commandBuilder, (uintptr_t )this)) {}
696692
697693DynamicCommandInstance::~DynamicCommandInstance () = default ;
698694
699695std::unique_ptr<DynamicCommandInstance> DynamicCommandInstance::create (
700- CommandRegistry& registry,
701696 std::string const & name,
702697 std::string const & description,
703698 CommandPermissionLevel permission,
704699 CommandFlag flag
705700) {
706- if (registry.findCommand (name)) {
707- logger.error (" Command \" {}\" already exists" , name);
708- return nullptr ;
709- }
710- return std::unique_ptr<DynamicCommandInstance>(
711- new DynamicCommandInstance (registry, name, description, permission, flag)
712- );
701+ return std::unique_ptr<DynamicCommandInstance>(new DynamicCommandInstance (name, description, permission, flag));
713702}
714703
715704bool DynamicCommandInstance::addOverload (std::vector<DynamicCommand::ParameterData>&& params) {
@@ -886,10 +875,10 @@ std::string DynamicCommandInstance::setSoftEnum(std::string const& name, std::ve
886875 softEnums.emplace (name, values);
887876 } else {
888877 if (!ll::command::CommandRegistrar::getInstance ().hasSoftEnum (name)) {
889- registry.addSoftEnum (name, values);
890- return name;
878+ ll::command::CommandRegistrar::getInstance ().tryRegisterSoftEnum (name, values);
879+ } else {
880+ ll::command::CommandRegistrar::getInstance ().setSoftEnumValues (name, values);
891881 }
892- CommandSoftEnumRegistry (registry).updateSoftEnum (SoftEnumUpdateType::Replace, name, values);
893882 }
894883 return name;
895884}
@@ -904,10 +893,10 @@ bool DynamicCommandInstance::addSoftEnumValues(std::string const& name, std::vec
904893 }
905894 } else {
906895 if (!ll::command::CommandRegistrar::getInstance ().hasSoftEnum (name)) {
907- registry.addSoftEnum (name, values);
908- return true ;
896+ ll::command::CommandRegistrar::getInstance ().tryRegisterSoftEnum (name, values);
897+ } else {
898+ ll::command::CommandRegistrar::getInstance ().addSoftEnumValues (name, values);
909899 }
910- CommandSoftEnumRegistry (registry).updateSoftEnum (SoftEnumUpdateType::Add, name, values);
911900 }
912901 return true ;
913902}
@@ -924,7 +913,7 @@ bool DynamicCommandInstance::removeSoftEnumValues(std::string const& name, std::
924913 }
925914 return false ;
926915 } else {
927- CommandSoftEnumRegistry (registry). updateSoftEnum (SoftEnumUpdateType::Remove, name, values);
916+ ll::command::CommandRegistrar::getInstance (). removeSoftEnumValues ( name, values);
928917 }
929918 return true ;
930919}
0 commit comments