namespace App\Models;
+use App\DiscordAppCommands\AosrPresetCommand;
+use Discord\Discord;
+use Discord\Parts\Embed\Embed;
+use Discord\Parts\Embed\Field;
+use Discord\Parts\Embed\Footer;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Str;
+use React\ChildProcess\Process;
class AosSeed extends Model
{
use HasFactory;
+ public static function generateSurge($preset, $settings, $race = false, $mystery = false) {
+ $seed = new static();
+ $seed->hash = Str::random(16);
+ $seed->generator = 'surge';
+ $seed->preset = $preset;
+ $seed->race = $race;
+ $seed->mystery = $mystery;
+ $seed->seed = strval(random_int(-2147483648, 2147483647));
+ $seed->settings = $settings;
+ $seed->status = 'pending';
+ $seed->save();
+ return $seed;
+ }
+
+ public function createProcess() {
+ return new Process('php artisan aos:generate '.intval($this->id), base_path());
+ }
+
+ public function createEmbed(Discord $discord) {
+ $preset = AosrPresetCommand::$presets[$this->preset];
+
+ $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 ]),
+ ];
+
+ if (!$this->race) {
+ $fields[] = new Field($discord, [ 'name' => 'Seed', 'value' => $this->seed, 'inline' => true ]);
+ }
+
+ if (!$this->mystery) {
+ $fields[] = new Field($discord, [ 'name' => 'Logic', 'value' => $this->settings['logic'], 'inline' => true ]);
+ $fields[] = new Field($discord, [ 'name' => 'Area', 'value' => $this->settings['area'], 'inline' => true ]);
+ $fields[] = new Field($discord, [ 'name' => 'Boss', 'value' => $this->settings['boss'], 'inline' => true ]);
+ $fields[] = new Field($discord, [ 'name' => 'Enemy', 'value' => $this->settings['enemy'], 'inline' => true ]);
+ }
+
+ $fields[] = new Field($discord, [ 'name' => 'Permalink', 'value' => $this->permalink ]);
+
+ return new Embed($discord, [
+ 'fields' => $fields,
+ 'footer' => new Footer($discord, [
+ 'text' => 'GrĂ¼n',
+ ]),
+ 'timestamp' => now(),
+ 'title' => 'AoSRando Seed',
+ 'type' => 'rich',
+ 'url' => $this->permalink,
+ ]);
+ }
+
+ public function getPermalinkAttribute() {
+ return config('aos.url').'/h/'.rawurlencode($this->hash);
+ }
+
protected $casts = [
+ 'error_detail' => 'array',
'mystery' => 'boolean',
'race' => 'boolean',
'settings' => 'array',