X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FDiscordAppCommands%2FAosrPresetCommand.php;h=5ad05e00b0628c87145b467fa16a3c6a52d0e1ef;hb=a6187e9c653f9727b9703d95361374ae31a0d99c;hp=8ec3eb4bf1d4c4bd43d9ac1dd2e0de5f38e150e4;hpb=9aeade5903cf6d08509fe5b1264a6bc4e0eeb60a;p=alttp.git diff --git a/app/DiscordAppCommands/AosrPresetCommand.php b/app/DiscordAppCommands/AosrPresetCommand.php index 8ec3eb4..5ad05e0 100644 --- a/app/DiscordAppCommands/AosrPresetCommand.php +++ b/app/DiscordAppCommands/AosrPresetCommand.php @@ -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', ], ],