[BUG] user state is always EPersonaState.Offline
The0nix opened this issue · 5 comments
Description
I login to a client using cli_login
and when I try to get any user from my friendlist, his state is always EPersonaState.Offline
even if he is currently playing. rich_presence
is also empty. If I access the user via client.get_user(steam_id)
, the state is also EPersonaState.Offline
.
Steps to Reproduce the behavior
e.g.
>>> from steam.client import SteamClient
>>> client = SteamClient()
>>> client.cli_login()
*login*
>>> for user in client.friends:
>>> print(user)
<SteamUser(76561197988455464, EFriendRelationship.Friend, EPersonaState.Offline)>
<SteamUser(76561197988741908, EFriendRelationship.Friend, EPersonaState.Offline)>
<SteamUser(76561197997584155, EFriendRelationship.Friend, EPersonaState.Offline)>
<SteamUser(76561198006010809, EFriendRelationship.Friend, EPersonaState.Offline)>
... (everyone is EPersonaState.Offline)
Expected behavior
State depicts the real state, rich_presence
contains necessary information
Screenshots
If applicable, add screenshots to help explain your problem.
Versions Report
python -m steam.versions_report
`python -m steam.versions_report` says No module named steam.versions_reportpip list says steam
is 1.2.0
I installed with pip install -U 'steam[client]'
I installed version 1.1.1 and everything works there.
UPD: Nope, it only works every other time
Most likely there is enough time for presence data to be requested and arrive before you try listing the users.
Try waiting with client.friends.wait_event(client.friends.EVENT_READY)
before the loop
Thank you for a swift reply!
That does not seem to work, however:
Code
from steam.client import SteamClient
client = SteamClient()
@client.friends.on(client.friends.EVENT_READY)
def print_friends_info():
for user in client.friends:
try:
print(user.state)
except AttributeError as e:
print(e)
client.cli_login()
try:
client.run_forever()
except KeyboardInterrupt:
client.logout()
raise SystemExit
Output
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
'NoneType' object has no attribute 'persona_state'
...
(If I use client.friends.wait_event(client.friends.EVENT_READY)
, the event seems to happen before this code.so the wait hangs)
Yeah, that can happen you can check if it already ready before waiting:
if not client.friends.ready:
client.friends.wait_event(client.friends.EVENT_READY)
In your example where you register a callback, you will have to define it earlier. Ideally before logging in.
Considering this as resolved