44from functools import partial
55from io import BytesIO
66from itertools import starmap
7+ from operator import attrgetter
78from traceback import walk_tb
89from types import SimpleNamespace
910from typing import (
4142
4243 _H = TypeVar ("_H" , bound = Hashable )
4344
44- def deduplicate_iterables (* iterables : Iterable [_H ]) -> List [_H ]: # noqa: F811
45- ...
45+ def deduplicate_iterables (* iterables : Iterable [_H ]) -> List [_H ]: ...
4646
4747else :
4848 from .converter import DiscordConverter as Messageable
@@ -57,13 +57,11 @@ def deduplicate_iterables(*iterables: Iterable[_H]) -> List[_H]: # noqa: F811
5757
5858
5959@overload
60- async def can_close (ctx : commands .Context ) -> bool :
61- ...
60+ async def can_close (ctx : commands .Context ) -> bool : ...
6261
6362
6463@overload
65- async def can_close (ctx : discord .Message , bot : Red ) -> bool :
66- ...
64+ async def can_close (ctx : discord .Message , bot : Red ) -> bool : ...
6765
6866
6967async def can_close (ctx : Union [commands .Context , discord .Message ], bot : Red = None ):
@@ -476,6 +474,7 @@ def check(vector):
476474
477475 pages : List [discord .Embed ] = []
478476 for i , (source , destination ) in enumerate (unique_rifts , 1 ):
477+ # TODO (bugfix): swap source and destination if current channel is destination
479478 if source in self .rifts .get (destination , ()):
480479 delim = "⟷"
481480 else :
@@ -485,13 +484,12 @@ def check(vector):
485484 )
486485 if topic := getattr (destination , "topic" , None ):
487486 embed .description = topic
488- try :
489- members = destination .users
490- except AttributeError :
491- members = destination .members
487+ members : list [discord .abc .User ] = getattr (destination , "members" , [ctx .me , ctx .author ])
492488 # TODO: format and sort members
493- member_str = humanize_list (list (map (str , members )))
494- short_member_str = next (pagify (member_str , delims = ["," ]))
489+ member_str = humanize_list (list (map (attrgetter ("display_name" ), members )))
490+ short_member_str = next (
491+ pagify (member_str , delims = ["," ], page_length = 1024 , shorten_by = 2 )
492+ )
495493 if len (member_str ) != len (short_member_str ):
496494 short_member_str += " …"
497495 embed .add_field (name = f"Connected from { destination } " , value = member_str )
@@ -767,12 +765,17 @@ async def process_kwargs(
767765 both_perms = discord .Permissions (author_perms .value & bot_perms .value )
768766 if guild and content and not is_owner and not await self .bot .is_automod_immune (author ):
769767 assert isinstance (channel , discord .TextChannel )
770- filt : Optional ["Filter" ] = self .bot .get_cog ("Filter" ) # type: ignore
771- if filt and await filt .filter_hits (content , channel ):
768+ try :
769+ filt : Optional ["Filter" ] = self .bot .get_cog ("Filter" ) # type: ignore
770+ filtered = filt and await filt .filter_hits (channel , content )
771+ except Exception :
772+ filtered = False
773+ if filtered :
772774 raise RiftError (_ ("Your message was filtered." ))
773775 embed : Optional [List [discord .Embed ]]
774776 if await self .bot .embed_requested (
775- getattr (channel , "recipient" , channel ), command = self .rift # type: ignore
777+ getattr (channel , "recipient" , channel ),
778+ command = self .rift , # type: ignore
776779 ):
777780 embed = [
778781 discord .Embed (
@@ -783,15 +786,17 @@ async def process_kwargs(
783786 if ogg := getattr (oga , "guild" , None ):
784787 assert isinstance (oga , discord .Member )
785788 if oga .top_role != ogg .default_role :
786- embed [ 0 ]. title = filter_invites (f"{ oga .top_role } in { ogg } " )
789+ subheader = filter_invites (f"{ oga .top_role } in { ogg } " )
787790 else :
788- embed [0 ].title = filter_invites (f"in { ogg } " )
791+ subheader = filter_invites (f"in { ogg } " )
792+ # subheader = f"-# [{subheader}]({jump_url})"
793+ embed [0 ].description = subheader
789794 embed [0 ].set_author (
790- name = filter_invites (str ( author ) ),
795+ name = filter_invites (author . display_name ),
791796 icon_url = oga .display_avatar .replace (size = 32 ).url ,
792797 )
793798 else :
794- content = f"{ author } \n { quote (content )} " if content else str ( author )
799+ content = f"{ author } \n { quote (content )} " if content else author . display_name
795800 embed = None
796801 if attachments and author_perms .attach_files :
797802 if embed :
0 commit comments