]> git.localhorst.tv Git - alttp.git/blob - app/Console/Commands/DiscordBotCommand.php
sync discord guilds
[alttp.git] / app / Console / Commands / DiscordBotCommand.php
1 <?php
2
3 namespace App\Console\Commands;
4
5 use App\Models\DiscordGuild;
6 use Discord\Discord;
7 use Discord\Parts\Channel\Message;
8 use Discord\Parts\Guild\Guild;
9 use Discord\WebSockets\Event;
10 use Illuminate\Console\Command;
11 use Monolog\Handler\StreamHandler;
12 use Monolog\Logger;
13 use React\EventLoop\Loop;
14
15 class DiscordBotCommand extends Command
16 {
17         /**
18          * The name and signature of the console command.
19          *
20          * @var string
21          */
22         protected $signature = 'discord:bot';
23
24         /**
25          * The console command description.
26          *
27          * @var string
28          */
29         protected $description = 'Runs the discord bot';
30
31         /**
32          * Execute the console command.
33          *
34          * @return int
35          */
36         public function handle()
37         {
38                 $logger = new Logger('DiscordBot');
39                 $logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
40                 $discord = new Discord([
41                         'logger' => $logger,
42                         'token' => config('discord.token'),
43                 ]);
44                 $discord->on(Event::GUILD_CREATE, function (Guild $guild, Discord $discord) {
45                         DiscordGuild::sync($guild);
46                 });
47                 $discord->on(Event::GUILD_UPDATE, function (Guild $guild, Discord $discord, Guild $old) {
48                         DiscordGuild::sync($guild);
49                 });
50                 $discord->on('ready', function (Discord $discord) {
51                         $discord->on(Event::MESSAGE_CREATE, function (Message $message, Discord $discord) {
52                                 if (!empty($message->guild_id)) return;
53                                 if (!empty($message->webhook_id)) return;
54                                 if (!empty($message->application_id)) return;
55                                 if (is_null($message->author)) return;
56                                 if ($message->author->bot) return;
57                                 $discord->getLoop()->addTimer(0.6, function() use ($message) {
58                                         $message->react('😄');
59                                 });
60                                 if (!is_null($message->channel)) {
61                                         $discord->getLoop()->addTimer(2.0, function() use ($message) {
62                                                 $message->channel->sendMessage('bugger off');
63                                         });
64                                 } else {
65                                         $message->delayedReply('bugger off', 2000);
66                                 }
67                         });
68                 });
69                 $discord->getLoop()->addSignal(SIGINT, function() use ($discord) {
70                         $discord->close();
71                 });
72                 $discord->run();
73                 return 0;
74         }
75 }