[commands] Add role cooldown bucket
This commit is contained in:
		@@ -27,6 +27,8 @@ DEALINGS IN THE SOFTWARE.
 | 
			
		||||
from discord.enums import Enum
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from ...abc import PrivateChannel
 | 
			
		||||
 | 
			
		||||
__all__ = (
 | 
			
		||||
    'BucketType',
 | 
			
		||||
    'Cooldown',
 | 
			
		||||
@@ -40,6 +42,7 @@ class BucketType(Enum):
 | 
			
		||||
    channel  = 3
 | 
			
		||||
    member   = 4
 | 
			
		||||
    category = 5
 | 
			
		||||
    role     = 6
 | 
			
		||||
 | 
			
		||||
class Cooldown:
 | 
			
		||||
    __slots__ = ('rate', 'per', 'type', '_window', '_tokens', '_last')
 | 
			
		||||
@@ -127,6 +130,12 @@ class CooldownMapping:
 | 
			
		||||
            return ((msg.guild and msg.guild.id), msg.author.id)
 | 
			
		||||
        elif bucket_type is BucketType.category:
 | 
			
		||||
            return (msg.channel.category or msg.channel).id
 | 
			
		||||
        elif bucket_type is BucketType.role:
 | 
			
		||||
            # we return the channel id of a private-channel as there are only roles in guilds
 | 
			
		||||
            # and that yields the same result as for a guild with only the @everyone role
 | 
			
		||||
            # NOTE: PrivateChannel doesn't actually have an id attribute but we assume we are
 | 
			
		||||
            # recieving a DMChannel or GroupChannel which inherit from PrivateChannel and do
 | 
			
		||||
            return (msg.channel if isinstance(msg.channel, PrivateChannel) else msg.author.top_role).id
 | 
			
		||||
 | 
			
		||||
    def _verify_cache_integrity(self, current=None):
 | 
			
		||||
        # we want to delete all cache objects that haven't been used
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user