Allow setting a presence upon logging in.

This commit is contained in:
Rapptz 2017-05-20 15:19:47 -04:00
parent 9e24d43c63
commit 3436792614
3 changed files with 29 additions and 1 deletions

View File

@ -92,6 +92,10 @@ class Client:
members from the guilds the bot belongs to. If this is ``False``\, then
no offline members are received and :meth:`request_offline_members`
must be used to fetch the offline members of the guild.
game: Optional[:class:`Game`]
A game to start your presence with upon logging on to Discord.
status: Optional[:class:`Status`]
A status to start your presence with upon logging on to Discord.
Attributes
-----------

View File

@ -275,6 +275,15 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
if self.shard_id is not None and self.shard_count is not None:
payload['d']['shard'] = [self.shard_id, self.shard_count]
state = self._connection
if state._game is not None or state._status is not None:
payload['d']['presence'] = {
'status': state._status,
'game': state._game,
'since': 0,
'afk': False
}
yield from self.send_as_json(payload)
log.info('Shard ID %s has sent the IDENTIFY payload.', self.shard_id)

View File

@ -32,7 +32,7 @@ from .relationship import Relationship
from .channel import *
from .member import Member
from .role import Role
from .enums import ChannelType, try_enum
from .enums import ChannelType, try_enum, Status
from .calls import GroupCall
from . import utils, compat
@ -64,6 +64,21 @@ class ConnectionState:
self._ready_task = None
self._fetch_offline = options.get('fetch_offline_members', True)
self._listeners = []
game = options.get('game', None)
if game:
game = dict(game)
status = options.get('status', None)
if status:
if status is Status.offline:
status = 'invisible'
else:
status = str(status)
self._game = game
self._status = status
self.clear()
def clear(self):