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

Methods for adding, accepting and deleting friends #366

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,30 @@ with SteamClient('MY_API_KEY', 'MY_USERNAME', 'MY_PASSWORD', 'PATH_TO_STEAMGUARD
assert type(on_hold_wallet_balance) == Decimal
```


**add_friend(steam_id: str) -> bool**

**accept_friend(steam_id: str) -> bool**

**remove_friend(steam_id: str) -> bool**

Using `SteamClient.login` method is required before usage.
These methods perform the operations of adding, accepting and deleting friends using the provided `steam_id` of the friend.
If the request was successful, True is returned, otherwise False.
`remove_friend` method returns True even if `steam_id` has never been a friend

Example:
```python
from steampy.client import SteamClient


steam_client = SteamClient('MY_API_KEY')
steam_client.login('MY_USERNAME', 'MY_PASSWORD', 'PATH_TO_STEAMGUARD_FILE')

# if response True - was success
response = steam_client.add_friend("FRIEND_STEAM_ID")
```

market methods
==============

Expand Down
47 changes: 47 additions & 0 deletions steampy/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,3 +416,50 @@ def get_wallet_balance(self, convert_to_decimal: bool = True, on_hold: bool = Fa
return Decimal(balance_dict[balance_dict_key]) / 100
else:
return balance_dict[balance_dict_key]

@login_required
def add_friend(self, steam_id: str) -> bool:
response = self._friend_ajax_request(steam_id)
return True if response else False

@login_required
def accept_friend(self, steam_id: str) -> bool:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the difference between add_friend and accept_friend? seems like the only diffrerence is checking the response

return self._friend_ajax_request(steam_id, accept=1)

_headers = {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why put it here

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}

def _friend_ajax_request(self, steam_id: str, accept: int = 0) -> dict:
url = f'{SteamUrl.COMMUNITY_URL}/actions/AddFriendAjax'
data = {
'sessionID': self._get_session_id(),
'steamid': steam_id,
'accept_invite': accept
}
response = self._session.post(url, data=data, headers=self._headers)

if response.status_code != 200:
raise ApiException(
f'Request failed with status code {response.status_code}')

# returns True or json object if request was succes, otherwise False
return response.json()

@login_required
def remove_friend(self, steam_id: str) -> bool:
url = f'{SteamUrl.COMMUNITY_URL}/actions/RemoveFriendAjax'
data = {
'sessionID': self._get_session_id(),
'steamid': steam_id
}
response = self._session.post(url, data=data, headers=self._headers)

if response.status_code != 200:
raise ApiException(
f'Request failed with status code {response.status_code}')

# returns True if request was succes, otherwise False
# returns True even if `steam_id` has never been a friend
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again if request was not succesed due to error, it should be an exception

return response.json()