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 {
'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,
]],
]],
]);
$discord->application->commands->save($cmd);
}
+ public static function presetByName($name) {
+ if (isset(static::$presets[$name])) {
+ return static::$presets[$name];
+ }
+ foreach (static::$presets as $presetName => $preset) {
+ if (strcasecmp($name, $presetName) === 0) {
+ return $preset;
+ }
+ }
+ return null;
+ }
+
public static function listen(Discord $discord) {
$discord->listenCommand(['aosr', 'preset'], function(Interaction $interaction) use ($discord) {
$interaction
->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);
- $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 = $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);
}
- $interaction->updateOriginalResponse($message);
});
return true;
});
}
- private static $presets = [
+ public static $presets = [
'Normal' => [
'name' => 'Normal',
'value' => 'Normal',
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'true',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'true',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'true',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'true',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'true',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'true',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'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',
],
],
'telestart' => 'true',
'mapassist' => 'true',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'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',
'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',
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],
'telestart' => 'false',
'mapassist' => 'false',
'doublechaos' => 'false',
+ 'reqallsouls' => 'false',
+ 'noww' => 'false',
'palette' => 'Vanilla',
],
],