3 namespace App\Console\Commands;
5 use App\Models\DiscordGuild;
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;
13 use React\EventLoop\Loop;
15 class DiscordBotCommand extends Command
18 * The name and signature of the console command.
22 protected $signature = 'discord:bot';
25 * The console command description.
29 protected $description = 'Runs the discord bot';
32 * Execute the console command.
36 public function handle()
38 $logger = new Logger('DiscordBot');
39 $logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
40 $discord = new Discord([
42 'token' => config('discord.token'),
44 $discord->on(Event::GUILD_CREATE, function (Guild $guild, Discord $discord) {
45 DiscordGuild::sync($guild);
47 $discord->on(Event::GUILD_UPDATE, function (Guild $guild, Discord $discord, Guild $old) {
48 DiscordGuild::sync($guild);
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('😄');
60 if (!is_null($message->channel)) {
61 $discord->getLoop()->addTimer(2.0, function() use ($message) {
62 $message->channel->sendMessage('bugger off');
65 $message->delayedReply('bugger off', 2000);
69 $discord->getLoop()->addSignal(SIGINT, function() use ($discord) {