Closed Xraydylan closed 1 year ago
After a bit of digging I may have found the issue.
In parser.py
in the functing parse_user_page
,
after stripping most user names contain the character "~" (or "!", i don't know if there are different specialcharacters) as first letter.
However, this user doesn't.
So the operation name: str = u[1:]
cuts off the first character.
A similar bug occurs in parse_watchlist
too.
Thank you for opening the issue!
The error occurs because apparently FA admins do not have a status character in front of their username (~, !, ∞, etc.). Unfortunately, the status character is contained in the same tag as the username (why they didn't use a child span
or ::before
with attr()
is beyond me), so I'll have to add some code to detect admins specifically.
Release 3.9.3 is available :)
Aaaaand I forgot about the watchlists x3
🤣
Well, I have been working on a little fix in my project as well. Although I have to do a little more than just correcting this but also repair my database if a user has been wrongly saved...
My idea revolves around getting the user name from the URL. Or rather at least the first character of the username. (Since some people have doule of tipple "-" at the start of their username. That gets relevant because I found a slingle "-" to be a status as well...)
So I am getting the URL from the content
of the meta tag with property="og:url
.
And I have noticed that for the watchlists there is alway a separating space between the status and the username. So I will also edit this in my solution.
But anyways. I will test your solution for the problem and modify if neccessary.
If I find more issues or other bugs... Well, I will be coming again.
I like the property:url solution! You should submit a PR so we can integrate it with FAAPI :)
As for watchlists: my solution detects the admin logo, but you’re right, there is a space and it would work much better by simply parsing the link URL and then looking for the status separately.
Oh! And just found another error XD User "marioea".
As I have mentioned they have "-" as status- This gets not detected as well.
user = api.user("marioea")
if user.name
gets called it returns only "-marioea", which causes and error if used to create the user object again.
As I have mentioned simply removing any leading "-" would be problemantc since some usernames have "-" amd "--" included at the beginning.
I will try to make a PR and try to make the code look nice 😅 I hope I am up to your standards.
I have checked "marioea" but there is no issue with them. The User object correctly parses their name as "marioea" and "-" as status.
api = faapi.FAAPI(cookies)
u = api.user("marioea")
print((u.name, u.status)) # ('marioea', '-')
Hmm then I must have overlooked something there 🤔 But in any case that entire problme has been sovled.
Version
3.9.2
What happened?
I have encountered a strange bug.
A username is not properly returned by the api.
For the username "ashwolves5" a user object can be created with.
However, the returned user name from the user object is not matching.
user.name
returns only "shwolves5", which obviously causes and error when this name string is uses to creae another user object with the api.How to reproduce the bug?
(As described)
Relevant log output
No response