code: async def invoke(self, ctx):
          
          if ctx.command is not None:
              self.dispatch('command', ctx)
              try:
                  if await self.can_run(ctx, call_once=True):
                      await ctx.command.invoke(ctx)
              except errors.CommandError as exc:
                  await ctx.command.dispatch_error(ctx, exc)
              else:
                  self.dispatch('command_completion', ctx)
          elif ctx.invoked_with:
              exc = errors.CommandNotFound('Command "{}" is not found'.format(ctx.invoked_with))
              self.dispatch('command_error', ctx, exc)
docs: |coro|
  
          Invokes the command given under the invocation context and
          handles all the internal event dispatch mechanisms.
  
          Parameters
          -----------
          ctx: :class:`.Context`
              The invocation context to invoke.