Add AutoShardedClient.change_presence.
This commit is contained in:
parent
b5bed9ef33
commit
4bc6625739
@ -1006,13 +1006,24 @@ class Client:
|
|||||||
|
|
||||||
if status is None:
|
if status is None:
|
||||||
status = 'online'
|
status = 'online'
|
||||||
|
status_enum = Status.online
|
||||||
elif status is Status.offline:
|
elif status is Status.offline:
|
||||||
status = 'invisible'
|
status = 'invisible'
|
||||||
|
status_enum = Status.offline
|
||||||
else:
|
else:
|
||||||
|
status_enum = status
|
||||||
status = str(status)
|
status = str(status)
|
||||||
|
|
||||||
yield from self.ws.change_presence(game=game, status=status, afk=afk)
|
yield from self.ws.change_presence(game=game, status=status, afk=afk)
|
||||||
|
|
||||||
|
for guild in self.connection.guilds:
|
||||||
|
me = guild.me
|
||||||
|
if me is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
me.game = game
|
||||||
|
me.status = status_enum
|
||||||
|
|
||||||
# Invite management
|
# Invite management
|
||||||
|
|
||||||
def _fill_invite_data(self, data):
|
def _fill_invite_data(self, data):
|
||||||
|
@ -412,13 +412,10 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
|
|||||||
raise ConnectionClosed(e, shard_id=self.shard_id) from e
|
raise ConnectionClosed(e, shard_id=self.shard_id) from e
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def change_presence(self, *, game=None, status=None, afk=False, since=0.0, idle=None):
|
def change_presence(self, *, game=None, status=None, afk=False, since=0.0):
|
||||||
if game is not None and not isinstance(game, Game):
|
if game is not None and not isinstance(game, Game):
|
||||||
raise InvalidArgument('game must be of type Game or None')
|
raise InvalidArgument('game must be of type Game or None')
|
||||||
|
|
||||||
if idle:
|
|
||||||
status = 'idle'
|
|
||||||
|
|
||||||
if status == 'idle':
|
if status == 'idle':
|
||||||
since = int(time.time() * 1000)
|
since = int(time.time() * 1000)
|
||||||
|
|
||||||
@ -438,18 +435,6 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
|
|||||||
log.debug('Sending "{}" to change status'.format(sent))
|
log.debug('Sending "{}" to change status'.format(sent))
|
||||||
yield from self.send(sent)
|
yield from self.send(sent)
|
||||||
|
|
||||||
status_enum = try_enum(Status, status)
|
|
||||||
if status_enum is Status.invisible:
|
|
||||||
status_enum = Status.offline
|
|
||||||
|
|
||||||
for guild in self._connection.guilds:
|
|
||||||
me = guild.me
|
|
||||||
if me is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
me.game = game
|
|
||||||
me.status = status_enum
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def request_sync(self, guild_ids):
|
def request_sync(self, guild_ids):
|
||||||
payload = {
|
payload = {
|
||||||
|
@ -29,6 +29,7 @@ from .client import Client
|
|||||||
from .gateway import *
|
from .gateway import *
|
||||||
from .errors import ConnectionClosed
|
from .errors import ConnectionClosed
|
||||||
from . import compat
|
from . import compat
|
||||||
|
from .enums import Status
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
@ -224,3 +225,62 @@ class AutoShardedClient(Client):
|
|||||||
yield from self.http.close()
|
yield from self.http.close()
|
||||||
self._closed.set()
|
self._closed.set()
|
||||||
self._is_ready.clear()
|
self._is_ready.clear()
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def change_presence(self, *, game=None, status=None, afk=False, shard_id=None):
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Changes the client's presence.
|
||||||
|
|
||||||
|
The game parameter is a Game object (not a string) that represents
|
||||||
|
a game being played currently.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
game: Optional[:class:`Game`]
|
||||||
|
The game being played. None if no game is being played.
|
||||||
|
status: Optional[:class:`Status`]
|
||||||
|
Indicates what status to change to. If None, then
|
||||||
|
:attr:`Status.online` is used.
|
||||||
|
afk: bool
|
||||||
|
Indicates if you are going AFK. This allows the discord
|
||||||
|
client to know how to handle push notifications better
|
||||||
|
for you in case you are actually idle and not lying.
|
||||||
|
shard_id: Optional[int]
|
||||||
|
The shard_id to change the presence to. If not specified
|
||||||
|
or ``None``, then it will change the presence of every
|
||||||
|
shard the bot can see.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
InvalidArgument
|
||||||
|
If the ``game`` parameter is not :class:`Game` or None.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if status is None:
|
||||||
|
status = 'online'
|
||||||
|
status_enum = Status.online
|
||||||
|
elif status is Status.offline:
|
||||||
|
status = 'invisible'
|
||||||
|
status_enum = Status.offline
|
||||||
|
else:
|
||||||
|
status_enum = status
|
||||||
|
status = str(status)
|
||||||
|
|
||||||
|
if shard_id is None:
|
||||||
|
for shard in self.shards.values():
|
||||||
|
yield from shard.ws.change_presence(game=game, status=status, afk=afk)
|
||||||
|
|
||||||
|
guilds = self.connection.guilds
|
||||||
|
else:
|
||||||
|
shard = self.shards[shard_id]
|
||||||
|
yield from shard.ws.change_presence(game=game, status=status, afk=afk)
|
||||||
|
guilds = [g for g in self.connection.guilds if g.shard_id == shard_id]
|
||||||
|
|
||||||
|
for guild in guilds:
|
||||||
|
me = guild.me
|
||||||
|
if me is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
me.game = game
|
||||||
|
me.status = status_enum
|
||||||
|
Loading…
x
Reference in New Issue
Block a user