]> git.localhorst.tv Git - alttp.git/blob - app/Models/AosSeed.php
wait for seed generation before posting message
[alttp.git] / app / Models / AosSeed.php
1 <?php
2
3 namespace App\Models;
4
5 use App\DiscordAppCommands\AosrPresetCommand;
6 use Discord\Discord;
7 use Discord\Parts\Embed\Embed;
8 use Discord\Parts\Embed\Field;
9 use Discord\Parts\Embed\Footer;
10 use Illuminate\Database\Eloquent\Factories\HasFactory;
11 use Illuminate\Database\Eloquent\Model;
12 use Illuminate\Support\Str;
13 use React\ChildProcess\Process;
14
15 class AosSeed extends Model
16 {
17         use HasFactory;
18
19         public static function generateSurge($preset, $settings, $race = false, $mystery = false) {
20                 $seed = new static();
21                 $seed->hash = Str::random(16);
22                 $seed->generator = 'surge';
23                 $seed->preset = $preset;
24                 $seed->race = $race;
25                 $seed->mystery = $mystery;
26                 $seed->seed = strval(random_int(-2147483648, 2147483647));
27                 $seed->settings = $settings;
28                 $seed->status = 'pending';
29                 $seed->save();
30                 return $seed;
31         }
32
33         public function createProcess() {
34                 return new Process('php artisan aos:generate '.intval($this->id), base_path());
35         }
36
37         public function createEmbed(Discord $discord) {
38                 $preset = AosrPresetCommand::$presets[$this->preset];
39
40                 $fields = [
41                         new Field($discord, [ 'name' => 'Generator', 'value' => 'This seed has been generated with fusecv\'s randomizer on aosrando.surge.sh.' ]),
42                         new Field($discord, [ 'name' => 'Preset', 'value' => $preset['name'], 'inline' => true ]),
43                 ];
44
45                 if (!$this->race) {
46                         $fields[] = new Field($discord, [ 'name' => 'Seed', 'value' => $this->seed, 'inline' => true ]);
47                 }
48
49                 if (!$this->mystery) {
50                         $fields[] = new Field($discord, [ 'name' => 'Logic', 'value' => $this->settings['logic'], 'inline' => true ]);
51                         $fields[] = new Field($discord, [ 'name' => 'Area', 'value' => $this->settings['area'], 'inline' => true ]);
52                         $fields[] = new Field($discord, [ 'name' => 'Boss', 'value' => $this->settings['boss'], 'inline' => true ]);
53                         $fields[] = new Field($discord, [ 'name' => 'Enemy', 'value' => $this->settings['enemy'], 'inline' => true ]);
54                 }
55
56                 $fields[] = new Field($discord, [ 'name' => 'Permalink', 'value' => $this->permalink ]);
57
58                 return new Embed($discord, [
59                         'fields' => $fields,
60                         'footer' => new Footer($discord, [
61                                 'text' => 'GrĂ¼n',
62                         ]),
63                         'timestamp' => now(),
64                         'title' => 'AoSRando Seed',
65                         'type' => 'rich',
66                         'url' => $this->permalink,
67                 ]);
68         }
69
70         public function getPermalinkAttribute() {
71                 return config('aos.url').'/h/'.rawurlencode($this->hash);
72         }
73
74         protected $casts = [
75                 'error_detail' => 'array',
76                 'mystery' => 'boolean',
77                 'race' => 'boolean',
78                 'settings' => 'array',
79         ];
80
81 }