<?php
declare(strict_types=1);
namespace App\EventSubscriber\Game;
use App\Event\MailEvent;
use App\Model\DiscordTriggerService;
use App\Model\Game\GameUserService;
use App\Model\GameService;
use App\Model\UserService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MailSubscriber implements EventSubscriberInterface
{
public const MAIL_SENT = 'mail.sent';
/**
* @var UserService
*/
private $userService;
/**
* @var DiscordTriggerService
*/
private $triggerService;
/**
* @var GameService
*/
private $gameService;
public function __construct(GameUserService $userService, DiscordTriggerService $triggerService, GameService $gameService)
{
$this->userService = $userService;
$this->triggerService = $triggerService;
$this->gameService = $gameService;
}
public function discordNotify(MailEvent $event)
{
$this->gameService->setArea($event->getArea());
// Discord notification
$mail = $event->getMail();
$town = $this->gameService->townService->getTownByName($mail->getTo());
if ($town) {
$this->userService->setAreaContext($this->gameService->area());
$user = $this->userService->getUserFromUsername($town->loginname);
if ($user) {
$discordUser = $this->userService->getUserDiscord($user->getId());
if ($discordUser && $discordUser->isVerified() && $discordUser->getSettings() != null && $discordUser->getSettings()->message) {
$this->triggerService->addTrigger($event->getArea(), DiscordTriggerService::TRIGGER_USER_DM, $user->getId(), "Your received an in-game mail from **{$mail->getFrom()}** with the subject **{$mail->getSubject()}**");
}
}
}
}
/**
* {@inheritDoc}
* @codeCoverageIgnore
*/
public static function getSubscribedEvents(): array
{
return [
self::MAIL_SENT => [
['discordNotify', 0],
]
];
}
}