aboutsummaryrefslogtreecommitdiff
path: root/discord/ext/commands
diff options
context:
space:
mode:
authorz03h <[email protected]>2021-07-07 17:15:54 -0700
committerGitHub <[email protected]>2021-07-07 20:15:54 -0400
commit1ca5b7b8b2f2339b561bf9e3cb4788cd8d5bf79a (patch)
tree738af935efd23773934056cb36d228dfcc01aee7 /discord/ext/commands
parent[commands] Document the thread converter (diff)
downloaddiscord.py-1ca5b7b8b2f2339b561bf9e3cb4788cd8d5bf79a.tar.xz
discord.py-1ca5b7b8b2f2339b561bf9e3cb4788cd8d5bf79a.zip
[commands] update clean_content to work when standalone
Diffstat (limited to 'discord/ext/commands')
-rw-r--r--discord/ext/commands/converter.py93
1 files changed, 43 insertions, 50 deletions
diff --git a/discord/ext/commands/converter.py b/discord/ext/commands/converter.py
index c07ad07c..2db267ec 100644
--- a/discord/ext/commands/converter.py
+++ b/discord/ext/commands/converter.py
@@ -818,67 +818,60 @@ class clean_content(Converter[str]):
.. versionadded:: 1.7
"""
- def __init__(self, *, fix_channel_mentions: bool = False, use_nicknames: bool = True, escape_markdown: bool = False, remove_markdown: bool = False) -> None:
+ def __init__(
+ self,
+ *,
+ fix_channel_mentions: bool = False,
+ use_nicknames: bool = True,
+ escape_markdown: bool = False,
+ remove_markdown: bool = False
+ ) -> None:
self.fix_channel_mentions = fix_channel_mentions
self.use_nicknames = use_nicknames
self.escape_markdown = escape_markdown
self.remove_markdown = remove_markdown
async def convert(self, ctx: Context, argument: str) -> str:
- message = ctx.message
- transformations = {}
-
- if self.fix_channel_mentions and ctx.guild:
-
- def resolve_channel(id, *, _get=ctx.guild.get_channel):
- ch = _get(id)
- return f'<#{id}>', ('#' + ch.name if ch else '#deleted-channel')
-
- transformations.update(resolve_channel(channel) for channel in message.raw_channel_mentions)
-
- if self.use_nicknames and ctx.guild:
-
- def resolve_member(id, *, _get=ctx.guild.get_member):
- m = _get(id)
- return '@' + m.display_name if m else '@deleted-user'
-
- else:
-
- def resolve_member(id, *, _get=ctx.bot.get_user):
- m = _get(id)
- return '@' + m.name if m else '@deleted-user'
-
- # fmt: off
- transformations.update(
- (f'<@{member_id}>', resolve_member(member_id))
- for member_id in message.raw_mentions
- )
-
- transformations.update(
- (f'<@!{member_id}>', resolve_member(member_id))
- for member_id in message.raw_mentions
- )
- # fmt: on
+ msg = ctx.message
if ctx.guild:
+ def resolve_member(id: int) -> str:
+ m = _utils_get(msg.mentions, id=id) or ctx.guild.get_member(id)
+ return f'@{m.display_name if self.use_nicknames else m.name}' if m else '@deleted-user'
- def resolve_role(_id, *, _find=ctx.guild.get_role):
- r = _find(_id)
- return '@' + r.name if r else '@deleted-role'
-
- # fmt: off
- transformations.update(
- (f'<@&{role_id}>', resolve_role(role_id))
- for role_id in message.raw_role_mentions
- )
- # fmt: on
-
- def repl(obj):
- return transformations.get(obj.group(0), '')
+ def resolve_role(id: int) -> str:
+ r = _utils_get(msg.role_mentions, id=id) or ctx.guild.get_role(id)
+ return f'@{r.name}' if r else '@deleted-role'
+ else:
+ def resolve_member(id: int) -> str:
+ m = _utils_get(msg.mentions, id=id) or ctx.bot.get_user(id)
+ return f'@{m.name}' if m else '@deleted-user'
- pattern = re.compile('|'.join(transformations.keys()))
- result = pattern.sub(repl, argument)
+ def resolve_role(id: int) -> str:
+ return '@deleted-role'
+ if self.fix_channel_mentions and ctx.guild:
+ def resolve_channel(id: int) -> str:
+ c = ctx.guild.get_channel(id)
+ return f'#{c.name}' if c else '#deleted-channel'
+ else:
+ def resolve_channel(id: int) -> str:
+ return f'<#{id}>'
+
+ transforms = {
+ '@': resolve_member,
+ '@!': resolve_member,
+ '#': resolve_channel,
+ '@&': resolve_role,
+ }
+
+ def repl(match: re.Match) -> str:
+ type = match[1]
+ id = int(match[2])
+ transformed = transforms[type](id)
+ return transformed
+
+ result = re.sub(r'<(@[!&]?|#)([0-9]{15,20})>', repl, argument)
if self.escape_markdown:
result = discord.utils.escape_markdown(result)
elif self.remove_markdown: