]> git.localhorst.tv Git - alttp.git/blobdiff - app/DiscordAppCommands/AosrPresetCommand.php
new aosr settings
[alttp.git] / app / DiscordAppCommands / AosrPresetCommand.php
index 8ec3eb4bf1d4c4bd43d9ac1dd2e0de5f38e150e4..5ad05e00b0628c87145b467fa16a3c6a52d0e1ef 100644 (file)
@@ -2,11 +2,9 @@
 
 namespace App\DiscordAppCommands;
 
+use App\Models\AosSeed;
 use Discord\Builders\MessageBuilder;
 use Discord\Discord;
-use Discord\Parts\Embed\Embed;
-use Discord\Parts\Embed\Field;
-use Discord\Parts\Embed\Footer;
 use Discord\Parts\Interactions\Interaction;
 
 class AosrPresetCommand {
@@ -22,15 +20,15 @@ class AosrPresetCommand {
                $cmd = $discord->application->commands->create([
                        'name' => 'aosr',
                        'type' => 1,
-                       'description' => '(testing) Generate an AoSRando seed.',
+                       'description' => 'Generate an AoSRando seed.',
                        'description_localizations' => [
-                               'de' => '(test) Generiert einen AoSRando Seed.',
+                               'de' => 'Generiert einen AoSRando Seed.',
                        ],
                        'options' => [[
                                'name' => 'preset',
-                               'description' => '(testing) Generate an AoSRando seed from preset.',
+                               'description' => 'Generate an AoSRando seed from preset.',
                                'description_localizations' => [
-                                       'de' => '(test) Generiert einen AoSRando Seed anhand eines Presets.',
+                                       'de' => 'Generiert einen AoSRando Seed anhand eines Presets.',
                                ],
                                'type' => 1,
                                'options' => [[
@@ -42,6 +40,14 @@ class AosrPresetCommand {
                                        'type' => 3,
                                        'required' => true,
                                        'choices' => $choices,
+                               ], [
+                                       'name' => 'race',
+                                       'description' => 'Generate race ROM, seed will be hidden',
+                                       'description_localizations' => [
+                                               'de' => 'Race ROM generieren, Seed wird versteckt.',
+                                       ],
+                                       'type' => 5,
+                                       'required' => false,
                                ]],
                        ]],
                ]);
@@ -50,41 +56,39 @@ class AosrPresetCommand {
 
        public static function listen(Discord $discord) {
                $discord->listenCommand(['aosr', 'preset'], function(Interaction $interaction) use ($discord) {
-                       $presetName = $interaction->data->options['preset']->options['preset']->value;
-                       $message = MessageBuilder::new();
-                       if (isset(static::$presets[$presetName])) {
-                               $preset = static::$presets[$presetName];
-                               $seed = strval(random_int(-2147483648, 2147483647));
-                               $params = array_merge(['seed' => $seed], $preset['settings']);
-                               $url = 'https://aosrando.surge.sh/?'.http_build_query($params, '', '&');
-                               $embed = new Embed($discord, [
-                                       'fields' => [
-                                               new Field($discord, [ 'name' => 'Preset', 'value' => $preset['name'], 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Seed', 'value' => $seed, 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Logic', 'value' => $preset['settings']['logic'], 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Area', 'value' => $preset['settings']['area'], 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Boss', 'value' => $preset['settings']['boss'], 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Enemy', 'value' => $preset['settings']['enemy'], 'inline' => true ]),
-                                               new Field($discord, [ 'name' => 'Link', 'value' => $url ]),
-                                       ],
-                                       'footer' => new Footer($discord, [
-                                               'text' => 'GrĂ¼n',
-                                       ]),
-                                       'timestamp' => now(),
-                                       'title' => 'AoSRando Seed',
-                                       'type' => 'rich',
-                                       'url' => $url,
-                               ]);
-                               $message->addEmbed($embed);
-                       } else {
-                               $message->setContent('unknown preset '.$presetName);
-                       }
-                       $interaction->respondWithMessage($message);
+                       $interaction
+                               ->acknowledgeWithResponse()
+                               ->done(function() use($discord, $interaction) {
+                               $presetName = $interaction->data->options['preset']->options['preset']->value;
+                               $race =  isset($interaction->data->options['preset']->options['race'])
+                                       ? $interaction->data->options['preset']->options['race']->value : false;
+                               if (isset(static::$presets[$presetName])) {
+                                       $preset = static::$presets[$presetName];
+                                       $seed = AosSeed::generateSurge($presetName, $preset['settings'], $race);
+
+                                       $process = $seed->createProcess();
+                                       $process->on('exit', function() use ($discord, $interaction, $seed) {
+                                               $seed = $seed->fresh();
+
+                                               $embed = $seed->createEmbed($discord);
+                                               $message = MessageBuilder::new();
+                                               $message->addEmbed($embed);
+
+                                               $interaction->updateOriginalResponse($message);
+                                       });
+
+                                       $process->start($discord->getLoop());
+                               } else {
+                                       $message = MessageBuilder::new();
+                                       $message->setContent('unknown preset '.$presetName);
+                                       $interaction->updateOriginalResponse($message);
+                               }
+                       });
                        return true;
                });
        }
 
-       private static $presets = [
+       public static $presets = [
                'Normal' => [
                        'name' => 'Normal',
                        'value' => 'Normal',
@@ -106,6 +110,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -130,6 +136,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'true',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -154,6 +162,8 @@ class AosrPresetCommand {
                                'telestart' => 'true',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -178,6 +188,8 @@ class AosrPresetCommand {
                                'telestart' => 'true',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -202,6 +214,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -226,6 +240,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'true',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -250,6 +266,8 @@ class AosrPresetCommand {
                                'telestart' => 'true',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -274,6 +292,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -298,6 +318,8 @@ class AosrPresetCommand {
                                'telestart' => 'true',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -322,6 +344,34 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'true',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
+                               'palette' => 'Vanilla',
+                       ],
+               ],
+               'AreaRequireAllSouls' => [
+                       'name' => 'Area require all souls',
+                       'value' => 'AreaRequireAllSouls',
+                       'settings' => [
+                               'logic' => 'AreaTechTiers',
+                               'nodupes' => 'true',
+                               'panther' => 'NeverExists',
+                               'area' => 'AreaRandom',
+                               'boss' => 'Dead-endShuffle',
+                               'enemy' => 'RandomNoLimit',
+                               'itempool' => 'Standard',
+                               'weight' => '2.5',
+                               'grahm' => 'BookSouls',
+                               'kicker' => 'true',
+                               'startshop' => 'Vanilla',
+                               'shopprice' => 'Vanilla',
+                               'shopSouls' => 'Half',
+                               'levelexp' => 'Lvl1',
+                               'telestart' => 'false',
+                               'mapassist' => 'false',
+                               'doublechaos' => 'true',
+                               'reqallsouls' => 'true',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -346,6 +396,8 @@ class AosrPresetCommand {
                                'telestart' => 'true',
                                'mapassist' => 'true',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -370,6 +422,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -394,16 +448,18 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
-               'SGLive2021' => [
-                       'name' => 'SGLive 2021',
-                       'value' => 'SGLive2021',
+               'Tournament2021' => [
+                       'name' => 'Tournament 2021',
+                       'value' => 'Tournament2021',
                        'settings' => [
                                'logic' => 'AreaTechTiers',
                                'nodupes' => 'false',
-                               'panther' => 'FirstAlways',
+                               'panther' => 'Rand70Dup',
                                'area' => 'AreaRandom',
                                'boss' => 'Dead-endShuffle',
                                'enemy' => 'Vanilla',
@@ -418,16 +474,18 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
-               'Tournament2021' => [
-                       'name' => 'Tournament 2021',
-                       'value' => 'Tournament2021',
+               'SGLive2021' => [
+                       'name' => 'SGLive 2021',
+                       'value' => 'SGLive2021',
                        'settings' => [
                                'logic' => 'AreaTechTiers',
                                'nodupes' => 'false',
-                               'panther' => 'Rand70Dup',
+                               'panther' => 'FirstAlways',
                                'area' => 'AreaRandom',
                                'boss' => 'Dead-endShuffle',
                                'enemy' => 'Vanilla',
@@ -442,6 +500,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],
@@ -466,6 +526,8 @@ class AosrPresetCommand {
                                'telestart' => 'false',
                                'mapassist' => 'false',
                                'doublechaos' => 'false',
+                               'reqallsouls' => 'false',
+                               'noww' => 'false',
                                'palette' => 'Vanilla',
                        ],
                ],