]> git.localhorst.tv Git - alttp.git/blob - app/Console/Commands/DiscordBotCommand.php
066f5ff51920027f5b0f72b1bb609532d5bb484e
[alttp.git] / app / Console / Commands / DiscordBotCommand.php
1 <?php
2
3 namespace App\Console\Commands;
4
5 use App\Models\DiscordChannel;
6 use App\Models\DiscordGuild;
7 use App\Models\DiscordRole;
8 use Discord\Discord;
9 use Discord\Parts\Channel\Channel;
10 use Discord\Parts\Channel\Message;
11 use Discord\Parts\Guild\Guild;
12 use Discord\Parts\Guild\Role;
13 use Discord\WebSockets\Event;
14 use Illuminate\Console\Command;
15 use Monolog\Handler\StreamHandler;
16 use Monolog\Logger;
17 use React\EventLoop\Loop;
18
19 class DiscordBotCommand extends Command
20 {
21         /**
22          * The name and signature of the console command.
23          *
24          * @var string
25          */
26         protected $signature = 'discord:bot';
27
28         /**
29          * The console command description.
30          *
31          * @var string
32          */
33         protected $description = 'Runs the discord bot';
34
35         /**
36          * Execute the console command.
37          *
38          * @return int
39          */
40         public function handle()
41         {
42                 $logger = new Logger('DiscordBot');
43                 $logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
44                 $discord = new Discord([
45                         'logger' => $logger,
46                         'token' => config('discord.token'),
47                 ]);
48                 $discord->on(Event::GUILD_CREATE, function (Guild $guild, Discord $discord) {
49                         try {
50                                 DiscordGuild::onUpstreamCreate($guild);
51                         } catch (\Exception $e) {
52                                 $this->error('guild create: '.$e->getMessage());
53                         }
54                 });
55                 $discord->on(Event::GUILD_UPDATE, function (Guild $guild, Discord $discord, ?Guild $old) {
56                         try {
57                                 DiscordGuild::onUpstreamUpdate($guild);
58                         } catch (\Exception $e) {
59                                 $this->error('guild update: '.$e->getMessage());
60                         }
61                 });
62                 $discord->on(Event::CHANNEL_CREATE, function (Channel $channel, Discord $discord) {
63                         try {
64                                 DiscordGuild::onUpstreamCreate($channel);
65                         } catch (\Exception $e) {
66                                 $this->error('channel create: '.$e->getMessage());
67                         }
68                 });
69                 $discord->on(Event::CHANNEL_UPDATE, function (Channel $channel, Discord $discord, ?Channel $old) {
70                         try {
71                                 DiscordGuild::onUpstreamUpdate($channel);
72                         } catch (\Exception $e) {
73                                 $this->error('channel update: '.$e->getMessage());
74                         }
75                 });
76                 $discord->on(Event::CHANNEL_DELETE, function ($channel, Discord $discord) {
77                         try {
78                                 DiscordGuild::onUpstreamDelete($channel);
79                         } catch (\Exception $e) {
80                                 $this->error('channel delete: '.$e->getMessage());
81                         }
82                 });
83                 $discord->on(Event::GUILD_ROLE_CREATE, function (Role $role, Discord $discord) {
84                         try {
85                                 DiscordRole::onUpstreamCreate($role);
86                         } catch (\Exception $e) {
87                                 $this->error('guild role create: '.$e->getMessage());
88                         }
89                 });
90                 $discord->on(Event::GUILD_ROLE_UPDATE, function (Role $role, Discord $discord, ?Role $old) {
91                         try {
92                                 DiscordRole::onUpstreamUpdate($role);
93                         } catch (\Exception $e) {
94                                 $this->error('guild role update: '.$e->getMessage());
95                         }
96                 });
97                 $discord->on(Event::GUILD_ROLE_DELETE, function ($role, Discord $discord) {
98                         try {
99                                 DiscordRole::onUpstreamDelete($role);
100                         } catch (\Exception $e) {
101                                 $this->error('guild role delete: '.$e->getMessage());
102                         }
103                 });
104                 $discord->getLoop()->addSignal(SIGINT, function() use ($discord) {
105                         $discord->close();
106                 });
107                 $discord->run();
108                 return 0;
109         }
110 }