new: /example\ to omit

This commit is contained in:
Rongrong 2022-03-28 05:58:47 +08:00
parent 6aa1109b83
commit 8b5bd69107
No known key found for this signature in database
GPG Key ID: A36C9CDA260CB264

View File

@ -8,9 +8,9 @@ from functools import partial
Filters = filters.Filters Filters = filters.Filters
parser = re.compile(r'^(?P<slash>[\\/]_?)' parser = re.compile(r'^(?P<slash>[\\/]_?)'
r'(?P<predicate>([^\s\\]|\\.)*)' r'(?P<predicate>([^\s\\]|\\.)*((?<=\S)\\)?)'
r'(\s+(?P<complement>.+))?$') r'(\s+(?P<complement>.+))?$')
ESCAPING = ('\\ ', '\\ ', '\\\t') convertEscapes = partial(re.compile(r'\\(\s)').sub, r'\1')
htmlEscape = lambda s: s.replace("<", "&lt;").replace(">", "&gt;").replace("&", "&amp;") htmlEscape = lambda s: s.replace("<", "&lt;").replace(">", "&gt;").replace("&", "&amp;")
mentionParser = re.compile(r'@([a-zA-Z]\w{4,})') mentionParser = re.compile(r'@([a-zA-Z]\w{4,})')
delUsername: Optional[Callable] = None # placeholder delUsername: Optional[Callable] = None # placeholder
@ -76,13 +76,15 @@ def get_users(msg: telegram.Message) -> Tuple[User, User]:
def parse_command(match: re.Match) -> Dict[str, Union[str, bool]]: def parse_command(match: re.Match) -> Dict[str, Union[str, bool]]:
parsed = match.groupdict() parsed = match.groupdict()
predicate = parsed['predicate'] predicate = parsed['predicate']
omit_le = predicate.endswith('\\')
predicate = predicate[:-1] if omit_le else predicate
predicate = convertEscapes(predicate)
predicate = delUsername(predicate) predicate = delUsername(predicate)
for escape in ESCAPING:
predicate = predicate.replace(escape, escape[1:])
result = {'predicate': htmlEscape(predicate), result = {'predicate': htmlEscape(predicate),
'complement': htmlEscape(parsed['complement'] or ''), 'complement': htmlEscape(parsed['complement'] or ''),
'slash': parsed['slash'], 'slash': parsed['slash'],
'swap': parsed['slash'] != '/'} 'swap': parsed['slash'] != '/',
'omit_le': omit_le}
return result return result
@ -90,7 +92,8 @@ def get_text(user_from: User, user_rpl: User, command: dict):
rpl_self = user_from == user_rpl rpl_self = user_from == user_rpl
mention_from = user_from.mention() mention_from = user_from.mention()
mention_rpl = user_rpl.mention(mention_self=rpl_self) mention_rpl = user_rpl.mention(mention_self=rpl_self)
slash, predicate, complement = command['slash'], command['predicate'], command['complement'] slash, predicate, complement, omit_le = \
command['slash'], command['predicate'], command['complement'], command['omit_le']
if predicate == '': if predicate == '':
ret = '!' if slash == '/' else '¡' ret = '!' if slash == '/' else '¡'
@ -105,7 +108,9 @@ def get_text(user_from: User, user_rpl: User, command: dict):
ret = f"{mention_from} {predicate} {mention_rpl} {complement}" ret = f"{mention_from} {predicate} {mention_rpl} {complement}"
halfwidth_mark = complement[-1].isascii() halfwidth_mark = complement[-1].isascii()
else: else:
ret = f"{mention_from} {predicate}{mention_rpl}" ret = f"{mention_from} {predicate} "
ret += '' if not omit_le else ''
ret += mention_rpl
halfwidth_mark = mention_rpl[-1].isascii() halfwidth_mark = mention_rpl[-1].isascii()
ret += '!' if halfwidth_mark else ('' if halfwidth_mark is not None else '') ret += '!' if halfwidth_mark else ('' if halfwidth_mark is not None else '')