Browse Source
New methods * register steam account * validate email * change password * change emailpull/60/merge
5 changed files with 218 additions and 1 deletions
@ -0,0 +1,130 @@ |
|||||
|
from steam.steamid import SteamID |
||||
|
from steam.enums import EResult |
||||
|
from steam.enums.emsg import EMsg |
||||
|
from steam.core.msg import Msg, MsgProto |
||||
|
|
||||
|
|
||||
|
class Account(object): |
||||
|
def __init__(self, *args, **kwargs): |
||||
|
super(Account, self).__init__(*args, **kwargs) |
||||
|
|
||||
|
def create_account(self, account_name, password, email=''): |
||||
|
"""Create a new Steam account |
||||
|
|
||||
|
:param account_name: desired account name |
||||
|
:type account_name: :class:`str` |
||||
|
:param password: desired password |
||||
|
:type password: :class:`str` |
||||
|
:param email: desired email |
||||
|
:type email: :class:`str` |
||||
|
:return: (EResult, SteamID) |
||||
|
:rtype: :class:`tuple` |
||||
|
""" |
||||
|
message = MsgProto(EMsg.ClientCreateAccountProto) |
||||
|
message.body.account_name = account_name |
||||
|
message.body.password = password |
||||
|
|
||||
|
if email: |
||||
|
message.body.email = email |
||||
|
|
||||
|
resp = self.send_job_and_wait(message, timeout=10) |
||||
|
|
||||
|
if resp is None: |
||||
|
return EResult.Timeout, None |
||||
|
else: |
||||
|
return EResult(resp.eresult), SteamID(resp.steamid) if resp.steamid else None |
||||
|
|
||||
|
def request_validation_mail(self): |
||||
|
"""Request validation email |
||||
|
|
||||
|
:return: result |
||||
|
:rtype: :class:`.EResult` |
||||
|
""" |
||||
|
message = Msg(EMsg.ClientRequestValidationMail, extended=True) |
||||
|
|
||||
|
resp = self.send_job_and_wait(message, timeout=10) |
||||
|
|
||||
|
if resp is None: |
||||
|
return EResult.Timeout |
||||
|
else: |
||||
|
return EResult(resp.eresult) |
||||
|
|
||||
|
def request_password_change_mail(self, password): |
||||
|
"""Request password change mail |
||||
|
|
||||
|
:param password: current account password |
||||
|
:type password: :class:`str` |
||||
|
:return: result |
||||
|
:rtype: :class:`.EResult` |
||||
|
""" |
||||
|
message = Msg(EMsg.ClientRequestChangeMail, extended=True) |
||||
|
message.body.password = password |
||||
|
|
||||
|
resp = self.send_job_and_wait(message, timeout=10) |
||||
|
|
||||
|
if resp is None: |
||||
|
return EResult.Timeout |
||||
|
else: |
||||
|
return EResult(resp.eresult) |
||||
|
|
||||
|
def change_password(self, password, new_password, email_code): |
||||
|
"""Change account's password |
||||
|
|
||||
|
:param password: current account password |
||||
|
:type password: :class:`str` |
||||
|
:param new_password: new account password |
||||
|
:type new_password: :class:`str` |
||||
|
:param email_code: confirmation code from email |
||||
|
:type email_code: :class:`str` |
||||
|
:return: result |
||||
|
:rtype: :class:`.EResult` |
||||
|
|
||||
|
.. note:: |
||||
|
First request change mail via :meth:`request_password_change_mail()` |
||||
|
to get the email code |
||||
|
""" |
||||
|
message = Msg(EMsg.ClientPasswordChange3, extended=True) |
||||
|
message.body.password = password |
||||
|
message.body.new_password = new_password |
||||
|
message.body.code = email_code |
||||
|
|
||||
|
resp = self.send_job_and_wait(message, timeout=10) |
||||
|
|
||||
|
if resp is None: |
||||
|
return EResult.Timeout |
||||
|
else: |
||||
|
return EResult(resp.eresult) |
||||
|
|
||||
|
def change_email(self, password, email, email_code=''): |
||||
|
"""Change account's email address |
||||
|
|
||||
|
:param password: current account password |
||||
|
:type password: :class:`str` |
||||
|
:param new_email: new account email |
||||
|
:type new_email: :class:`str` |
||||
|
:param email_code: email code |
||||
|
:type email_code: :class:`str` |
||||
|
:return: result |
||||
|
:rtype: :class:`.EResult` |
||||
|
|
||||
|
.. note:: |
||||
|
To change email, first call without ``email_code`` |
||||
|
and then with to finalize the change |
||||
|
""" |
||||
|
message = MsgProto(EMsg.ClientEmailChange4) |
||||
|
message.body.password = password |
||||
|
message.body.email = email |
||||
|
|
||||
|
if code: |
||||
|
message.body.code = code |
||||
|
|
||||
|
message.body.final = not not code |
||||
|
message.body.newmethod = True |
||||
|
message.body.client_supports_sms = True |
||||
|
|
||||
|
resp = self.send_job_and_wait(message, timeout=10) |
||||
|
|
||||
|
if resp is None: |
||||
|
return EResult.Timeout |
||||
|
else: |
||||
|
return EResult(resp.eresult) |
Loading…
Reference in new issue