]> git.localhorst.tv Git - alttp.git/blobdiff - app/DiscordAppCommands/AosrPresetCommand.php
wait for seed generation before posting message
[alttp.git] / app / DiscordAppCommands / AosrPresetCommand.php
index a023fcbd45752ff704f223cf1a789260bbb33960..9a537db8006452ed349a99cc7a1fec099746d856 100644 (file)
@@ -5,9 +5,6 @@ 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 {
@@ -43,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,
                                ]],
                        ]],
                ]);
@@ -55,41 +60,35 @@ class AosrPresetCommand {
                                ->acknowledgeWithResponse()
                                ->done(function() use($discord, $interaction) {
                                $presetName = $interaction->data->options['preset']->options['preset']->value;
-                               $message = MessageBuilder::new();
+                               $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']);
+                                       $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);
+                                       });
 
-                                       $embed = new Embed($discord, [
-                                               'fields' => [
-                                                       new Field($discord, [ 'name' => 'Generator', 'value' => 'This seed has been generated with fusecv\'s randomizer on aosrando.surge.sh.' ]),
-                                                       new Field($discord, [ 'name' => 'Preset', 'value' => $preset['name'], 'inline' => true ]),
-                                                       new Field($discord, [ 'name' => 'Seed', 'value' => $seed->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' => 'Permalink', 'value' => $seed->permalink ]),
-                                               ],
-                                               'footer' => new Footer($discord, [
-                                                       'text' => 'GrĂ¼n',
-                                               ]),
-                                               'timestamp' => now(),
-                                               'title' => 'AoSRando Seed',
-                                               'type' => 'rich',
-                                               'url' => $seed->permalink,
-                                       ]);
-                                       $message->addEmbed($embed);
+                                       $process->start($discord->getLoop());
                                } else {
+                                       $message = MessageBuilder::new();
                                        $message->setContent('unknown preset '.$presetName);
+                                       $interaction->updateOriginalResponse($message);
                                }
-                               $interaction->updateOriginalResponse($message);
                        });
                        return true;
                });
        }
 
-       private static $presets = [
+       public static $presets = [
                'Normal' => [
                        'name' => 'Normal',
                        'value' => 'Normal',