[commands] Add commands.clean_content converter.
This commit is contained in:
		@@ -30,10 +30,12 @@ import re
 | 
			
		||||
import inspect
 | 
			
		||||
 | 
			
		||||
from .errors import BadArgument, NoPrivateMessage
 | 
			
		||||
from .view import StringView
 | 
			
		||||
 | 
			
		||||
__all__ = [ 'Converter', 'MemberConverter', 'UserConverter',
 | 
			
		||||
            'TextChannelConverter', 'InviteConverter', 'RoleConverter',
 | 
			
		||||
            'GameConverter', 'ColourConverter', 'VoiceChannelConverter' ]
 | 
			
		||||
            'GameConverter', 'ColourConverter', 'VoiceChannelConverter',
 | 
			
		||||
            'clean_content' ]
 | 
			
		||||
 | 
			
		||||
def _get_from_guilds(bot, getter, argument):
 | 
			
		||||
    result = None
 | 
			
		||||
@@ -258,3 +260,61 @@ class EmojiConverter(IDConverter):
 | 
			
		||||
            raise BadArgument('Emoji "{}" not found.'.format(self.argument))
 | 
			
		||||
 | 
			
		||||
        return result
 | 
			
		||||
 | 
			
		||||
class clean_content(Converter):
 | 
			
		||||
    def __init__(self, *, fix_channel_mentions=False, use_nicknames=True):
 | 
			
		||||
        self.fix_channel_mentions = fix_channel_mentions
 | 
			
		||||
        self.use_nicknames = use_nicknames
 | 
			
		||||
 | 
			
		||||
    def convert(self):
 | 
			
		||||
        message = self.ctx.message
 | 
			
		||||
        transformations = {}
 | 
			
		||||
 | 
			
		||||
        if self.fix_channel_mentions:
 | 
			
		||||
            transformations.update(
 | 
			
		||||
                ('<#%s>' % channel.id, '#' + channel.name)
 | 
			
		||||
                for channel in message.channel_mentions
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        if self.use_nicknames:
 | 
			
		||||
            transformations.update(
 | 
			
		||||
                ('<@%s>' % member.id, '@' + member.display_name)
 | 
			
		||||
                for member in message.mentions
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            transformations.update(
 | 
			
		||||
                ('<@!%s>' % member.id, '@' + member.display_name)
 | 
			
		||||
                for member in message.mentions
 | 
			
		||||
            )
 | 
			
		||||
        else:
 | 
			
		||||
            transformations.update(
 | 
			
		||||
                ('<@%s>' % member.id, '@' + member.name)
 | 
			
		||||
                for member in message.mentions
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            transformations.update(
 | 
			
		||||
                ('<@!%s>' % member.id, '@' + member.name)
 | 
			
		||||
                for member in message.mentions
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        transformations.update(
 | 
			
		||||
            ('<@&%s>' % role.id, '@' + role.name)
 | 
			
		||||
            for role in message.role_mentions
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        def repl(obj):
 | 
			
		||||
            return transformations.get(obj.group(0), '')
 | 
			
		||||
 | 
			
		||||
        pattern = re.compile('|'.join(transformations.keys()))
 | 
			
		||||
        result = pattern.sub(repl, self.argument)
 | 
			
		||||
 | 
			
		||||
        transformations = {
 | 
			
		||||
            '@everyone': '@\u200beveryone',
 | 
			
		||||
            '@here': '@\u200bhere'
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        def repl2(obj):
 | 
			
		||||
            return transformations.get(obj.group(0), '')
 | 
			
		||||
 | 
			
		||||
        pattern = re.compile('|'.join(transformations.keys()))
 | 
			
		||||
        return pattern.sub(repl2, result)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user