Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: User name not matching #6

Closed
Xraydylan opened this issue Nov 2, 2022 · 12 comments
Closed

[Bug]: User name not matching #6

Xraydylan opened this issue Nov 2, 2022 · 12 comments
Assignees
Labels
bug Something isn't working

Comments

@Xraydylan
Copy link
Contributor

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.

user = api.user("ashwolves5")

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

@Xraydylan Xraydylan added the bug Something isn't working label Nov 2, 2022
@Xraydylan
Copy link
Contributor Author

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.

@Xraydylan
Copy link
Contributor Author

A similar bug occurs in parse_watchlist too.

@MatteoCampinoti94
Copy link
Collaborator

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.

@MatteoCampinoti94
Copy link
Collaborator

Release 3.9.3 is available :)

@MatteoCampinoti94
Copy link
Collaborator

Aaaaand I forgot about the watchlists x3

@Xraydylan
Copy link
Contributor Author

🤣

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.

@Xraydylan
Copy link
Contributor Author

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.

@MatteoCampinoti94
Copy link
Collaborator

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.

@Xraydylan
Copy link
Contributor Author

Xraydylan commented Nov 2, 2022

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.

@Xraydylan
Copy link
Contributor Author

I will try to make a PR and try to make the code look nice 😅
I hope I am up to your standards.

@MatteoCampinoti94
Copy link
Collaborator

MatteoCampinoti94 commented Nov 2, 2022

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', '-')

@Xraydylan
Copy link
Contributor Author

Hmm then I must have overlooked something there 🤔
But in any case that entire problme has been sovled.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants