diff --git a/gui.py b/gui.py index 4d736c5..a071442 100644 --- a/gui.py +++ b/gui.py @@ -1,5 +1,6 @@ from __future__ import annotations +import re import sys import ctypes import asyncio @@ -474,7 +475,10 @@ class LoginForm: self._token_entry.get().strip(), ) # basic input data validation - if len(login_data.username) < 3: + if ( + 3 <= len(login_data.username) <= 25 # 3-25 characters in length + and re.match(r'^[a-zA-Z0-9_]+$', login_data.username) # only ascii and underscores + ): self.clear(login=True) continue if len(login_data.password) < 8: diff --git a/twitch.py b/twitch.py index fc21501..0e0c420 100644 --- a/twitch.py +++ b/twitch.py @@ -330,9 +330,12 @@ class _AuthState: logger.info("1000: CAPTCHA is required") use_chrome = True break - elif error_code == 3001: + elif error_code in (2004, 3001): logger.info("3001: Login failed due to incorrect username or password") gui_print(_("login", "incorrect_login_pass")) + if error_code == 2004: + # invalid username + login_form.clear(login=True) login_form.clear(password=True) continue elif error_code in (