From 02b1df6f738c1c220a944d626147d0e2ffb52edd Mon Sep 17 00:00:00 2001 From: bashrc Date: Fri, 21 Aug 2026 10:35:34 +0100 Subject: [PATCH] Allow dashes in nicknames --- src/tests.py | 18 ++++++++++++++++++ src/utils.py | 15 +++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/tests.py b/src/tests.py index 2a52cc899..c6c7944be 100644 --- a/src/tests.py +++ b/src/tests.py @@ -5376,6 +5376,24 @@ def _test_valid_nick(): nickname = 'abc.def' assert valid_nickname(domain, nickname) + nickname = '.abc.def' + assert not valid_nickname(domain, nickname) + + nickname = 'abc..def' + assert not valid_nickname(domain, nickname) + + nickname = 'abc-def' + assert valid_nickname(domain, nickname) + + nickname = 'abc--def' + assert not valid_nickname(domain, nickname) + + nickname = '-abc-def-' + assert not valid_nickname(domain, nickname) + + nickname = 'abc_def' + assert valid_nickname(domain, nickname) + def _test_guess_tag_category() -> None: print('test_guess_hashtag_category') diff --git a/src/utils.py b/src/utils.py index 064324924..a3cdd1acc 100644 --- a/src/utils.py +++ b/src/utils.py @@ -2538,7 +2538,18 @@ def _is_valid_language(text: str) -> bool: } for char in text: # allowed characters - if char.isdigit() or char == '_' or char == '.': + if char.isdigit() or char == '_': + if '__' not in text: + continue + char_allowed = False + for check_char in ('.', '-'): + if char == check_char and \ + not text.startswith(check_char) and \ + not text.endswith(check_char): + if check_char + check_char not in text: + char_allowed = True + break + if char_allowed: continue # character should exist in at least one language char_found = False @@ -3294,7 +3305,7 @@ def valid_hash_tag(hashtag: str) -> bool: if len(hashtag) >= 32: return False # numbers are not permitted to be hashtags - if hashtag.isdigit() or '.' in hashtag: + if hashtag.isdigit() or '.' in hashtag or '-' in hashtag: return False if set(hashtag).issubset(VALID_HASHTAG_CHARS): return True