/**
  * @param string $group
  * @param string $language
  * @param array[]|null $stats
  *
  * @return self
  */
 public static function getNew($group, $language, array $stats = null)
 {
     $self = new self();
     $self->group = $group;
     $self->language = $language;
     if (is_array($stats)) {
         $self->stats = $stats;
     } else {
         $self->stats = MessageGroupStats::forItem($group, $language);
     }
     return $self;
 }
 public function run()
 {
     $title = $this->title;
     $handle = new MessageHandle($title);
     $code = $handle->getCode();
     if (!$handle->isValid() && !$code) {
         return true;
     }
     $groups = self::getGroupsWithTransitions($handle);
     foreach ($groups as $id => $transitions) {
         $group = MessageGroups::getGroup($id);
         $stats = MessageGroupStats::forItem($id, $code);
         $state = self::getNewState($stats, $transitions);
         if ($state) {
             ApiGroupReview::changeState($group, $code, $state, FuzzyBot::getUser());
         }
     }
     return true;
 }