code: def cooldown(rate, per, type=BucketType.default):
      
  
      def decorator(func):
          if isinstance(func, Command):
              func._buckets = CooldownMapping(Cooldown(rate, per, type))
          else:
              func.__commands_cooldown__ = Cooldown(rate, per, type)
          return func
      return decorator
docs: A decorator that adds a cooldown to a :class:`.Command`
      or its subclasses.
  
      A cooldown allows a command to only be used a specific amount
      of times in a specific time frame. These cooldowns can be based
      either on a per-guild, per-channel, per-user, or global basis.
      Denoted by the third argument of ``type`` which must be of enum
      type ``BucketType`` which could be either:
  
      - ``BucketType.default`` for a global basis.
      - ``BucketType.user`` for a per-user basis.
      - ``BucketType.guild`` for a per-guild basis.
      - ``BucketType.channel`` for a per-channel basis.
      - ``BucketType.member`` for a per-member basis.
      - ``BucketType.category`` for a per-category basis.
  
      If a cooldown is triggered, then :exc:`.CommandOnCooldown` is triggered in
      :func:`.on_command_error` and the local error handler.
  
      A command can only have a single cooldown.
  
      Parameters
      ------------
      rate: :class:`int`
          The number of times a command can be used before triggering a cooldown.
      per: :class:`float`
          The amount of seconds to wait for a cooldown when it's been triggered.
      type: ``BucketType``
          The type of cooldown to have.