def METHOD_NAME(self, player_mgr):
    # Ritual should have a summoner.
    if not self.ritual_object.summoner:
        Logger.warning(f'Player {player_mgr.get_name()} tried to use Ritual with no summoner set.')
        player_mgr.spell_manager.send_cast_result(self.ritual_summon_spell_id,
                                                  SpellCheckCastResult.SPELL_FAILED_BAD_TARGETS)
        return
    # Grab the ritual summoner.
    summoner = self.ritual_object.summoner
    # Group check for players.
    if summoner.get_type_id() == ObjectTypeIds.ID_PLAYER and self.casters_grouped:
        if not summoner.group_manager or not summoner.group_manager.is_party_member(player_mgr.guid):
            player_mgr.spell_manager.send_cast_result(self.ritual_summon_spell_id,
                                                      SpellCheckCastResult.SPELL_FAILED_TARGET_NOT_IN_PARTY)
            return
    if player_mgr is summoner or player_mgr in self.ritual_participants:
        return  # No action needed for this player.
    # Make the player channel for summoning.
    channel_spell_entry = DbcDatabaseManager.SpellHolder.spell_get_by_id(self.ritual_channel_spell_id)
    spell = player_mgr.spell_manager.try_initialize_spell(channel_spell_entry, self, SpellTargetMask.GAMEOBJECT,
                                                          validate=False)
    # Note: these triggered casts will skip the actual effects of the summoning spell, only starting the channel.
    player_mgr.spell_manager.remove_colliding_casts(spell)
    player_mgr.spell_manager.casting_spells.append(spell)
    player_mgr.spell_manager.handle_channel_start(spell)
    player_mgr.set_channel_object(self.ritual_object.guid)
    self.ritual_participants.append(player_mgr)
    # Check if the ritual can be completed with the current participants.
    if len(self.ritual_participants) >= self.required_participants:
        # Cast the finishing spell.
        spell_entry = DbcDatabaseManager.SpellHolder.spell_get_by_id(self.ritual_summon_spell_id)
        spell_cast = summoner.spell_manager.try_initialize_spell(spell_entry, summoner, SpellTargetMask.SELF,
                                                                 triggered=True, validate=False)
        if spell_cast:
            summoner.spell_manager.start_spell_cast(initialized_spell=spell_cast)
        else:
            # Interrupt ritual channel if summon fails.
            summoner.spell_manager.remove_cast_by_id(self.ritual_channel_spell_id)