]> git.localhorst.tv Git - alttp.git/blob - app/DiscordBotCommands/SyncUserCommand.php
periodically sync avatars
[alttp.git] / app / DiscordBotCommands / SyncUserCommand.php
1 <?php
2
3 namespace App\DiscordBotCommands;
4
5 use App\Models\DiscordBotCommand;
6 use App\Models\User;
7 use Discord\Discord;
8 use Discord\Parts\User\User as DiscordUser;
9 use Illuminate\Support\Facades\Http;
10 use Illuminate\Support\Facades\Storage;
11
12 class SyncUserCommand extends BaseCommand {
13
14         public function __construct(Discord $discord, DiscordBotCommand $cmd) {
15                 parent::__construct($discord, $cmd);
16         }
17
18         public function execute() {
19                 return $this->fetchUser()
20                         ->then(function (DiscordUser $discordUser) {
21                                 $user = User::find($discordUser->id);
22                                 if (!$user) {
23                                         $user = new User();
24                                         $user->id = $discordUser->id;
25                                         $user->username = $discordUser->username;
26                                         $user->discriminator = $discordUser->discriminator;
27                                         $user->locale = $discordUser->locale ?: 'en';
28                                         $user->verified = $discordUser->verified ?: false;
29                                         $user->mfa_enabled = $discordUser->mfaenabled ?: false;
30                                 }
31                                 $user->avatar = $discordUser->avatarhash ?: null;
32
33                                 $media = Storage::disk('media');
34                                 if ($user->avatar && $media->missing('avatar/'.$user->id.'/'.$user->avatar.'.png')) {
35                                         try {
36                                                 $url = $discordUser->getAvatarAttribute('png');
37                                                 $content = Http::get($url)->body();
38                                                 $media->makeDirectory('avatar/'.$user->id);
39                                                 $media->put('avatar/'.$user->id.'/'.$user->avatar.'.png', $content);
40                                                 $user->avatar_cached = now();
41                                         } catch (\Exception $e) {
42                                         }
43                                 } else {
44                                         $user->avatar_cached = now();
45                                 }
46                                 $user->save();
47                         });
48         }
49
50 }