public function acceptAction(Invitation $invitation, Player $me)
 {
     if (!$me->isTeamless()) {
         throw new ForbiddenException("You can't join a new team until you leave your current one.");
     }
     if ($invitation->getInvitedPlayer()->getId() != $me->getId()) {
         throw new ForbiddenException("This invitation isn't for you!");
     }
     if ($invitation->getExpiration()->lt(TimeDate::now())) {
         throw new ForbiddenException("This invitation has expired");
     }
     if ($invitation->getTeam()->isDeleted()) {
         $invitation->updateExpiration();
         throw new ForbiddenException("This invitation is for a team which has been deleted.");
     }
     $inviter = $invitation->getSentBy()->getEscapedUsername();
     $team = $invitation->getTeam();
     return $this->showConfirmationForm(function () use($invitation, $team, $me) {
         $team->addMember($me->getId());
         $invitation->updateExpiration();
         Service::getDispatcher()->dispatch(Events::TEAM_JOIN, new TeamJoinEvent($team, $me));
         return new RedirectResponse($team->getUrl());
     }, "Are you sure you want to accept the invitation from {$inviter} to join {$team->getEscapedName()}?", "You are now a member of {$team->getName()}");
 }