3 namespace App\Console\Commands;
5 use App\Models\DiscordGuild;
6 use App\Models\DiscordRole;
8 use Discord\Parts\Channel\Message;
9 use Discord\Parts\Guild\Guild;
10 use Discord\Parts\Guild\Role;
11 use Discord\WebSockets\Event;
12 use Illuminate\Console\Command;
13 use Monolog\Handler\StreamHandler;
15 use React\EventLoop\Loop;
17 class DiscordBotCommand extends Command
20 * The name and signature of the console command.
24 protected $signature = 'discord:bot';
27 * The console command description.
31 protected $description = 'Runs the discord bot';
34 * Execute the console command.
38 public function handle()
40 $logger = new Logger('DiscordBot');
41 $logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
42 $discord = new Discord([
44 'token' => config('discord.token'),
46 $discord->on(Event::GUILD_CREATE, function (Guild $guild, Discord $discord) {
48 DiscordGuild::onUpstreamCreate($guild);
49 } catch (\Exception $e) {
50 $this->error('guild create: '.$e->getMessage());
53 $discord->on(Event::GUILD_UPDATE, function (Guild $guild, Discord $discord, ?Guild $old) {
55 DiscordGuild::onUpstreamUpdate($guild);
56 } catch (\Exception $e) {
57 $this->error('guild update: '.$e->getMessage());
60 $discord->on(Event::GUILD_ROLE_CREATE, function (Role $role, Discord $discord) {
62 DiscordRole::onUpstreamCreate($role);
63 } catch (\Exception $e) {
64 $this->error('guild role create: '.$e->getMessage());
67 $discord->on(Event::GUILD_ROLE_UPDATE, function (Role $role, Discord $discordi, ?Role $old) {
69 DiscordRole::onUpstreamUpdate($role);
70 } catch (\Exception $e) {
71 $this->error('guild role update: '.$e->getMessage());
74 $discord->on(Event::GUILD_ROLE_DELETE, function ($role, Discord $discord) {
76 DiscordRole::onUpstreamDelete($role);
77 } catch (\Exception $e) {
78 $this->error('guild role delete: '.$e->getMessage());
81 $discord->on('ready', function (Discord $discord) {
82 $discord->on(Event::MESSAGE_CREATE, function (Message $message, Discord $discord) {
83 if (!empty($message->guild_id)) return;
84 if (!empty($message->webhook_id)) return;
85 if (!empty($message->application_id)) return;
86 if (is_null($message->author)) return;
87 if ($message->author->bot) return;
88 $discord->getLoop()->addTimer(0.6, function() use ($message) {
89 $message->react('😄');
91 if (!is_null($message->channel)) {
92 $discord->getLoop()->addTimer(2.0, function() use ($message) {
93 $message->channel->sendMessage('bugger off');
96 $message->delayedReply('bugger off', 2000);
100 $discord->getLoop()->addSignal(SIGINT, function() use ($discord) {