Browse Source

Add support for partnered servers. Fixes #387.

This commit allows you to edit a server's invite splash, query if
something has partnered features, and retrieve the invite splash + URL.
pull/316/merge
Rapptz 8 years ago
parent
commit
6302ef8094
  1. 32
      discord/client.py
  2. 24
      discord/server.py

32
discord/client.py

@ -2290,20 +2290,25 @@ class Client:
Parameters Parameters
---------- ----------
server : :class:`Server` server: :class:`Server`
The server to edit. The server to edit.
name : str name: str
The new name of the server. The new name of the server.
icon : bytes icon: bytes
A *bytes-like* object representing the icon. See :meth:`edit_profile` A *bytes-like* object representing the icon. See :meth:`edit_profile`
for more details. Could be ``None`` to denote for more details. Could be ``None`` to denote no icon.
region : :class:`ServerRegion` splash: bytes
A *bytes-like* object representing the invite splash. See
:meth:`edit_profile` for more details. Could be ``None`` to denote
no invite splash. Only available for partnered servers with
``INVITE_SPLASH`` feature.
region: :class:`ServerRegion`
The new region for the server's voice communication. The new region for the server's voice communication.
afk_channel : :class:`Channel` afk_channel: :class:`Channel`
The new channel that is the AFK channel. Could be ``None`` for no AFK channel. The new channel that is the AFK channel. Could be ``None`` for no AFK channel.
afk_timeout : int afk_timeout: int
The number of seconds until someone is moved to the AFK channel. The number of seconds until someone is moved to the AFK channel.
owner : :class:`Member` owner: :class:`Member`
The new owner of the server to transfer ownership to. Note that you must The new owner of the server to transfer ownership to. Note that you must
be owner of the server to do this. be owner of the server to do this.
verification_level: :class:`VerificationLevel` verification_level: :class:`VerificationLevel`
@ -2333,7 +2338,18 @@ class Client:
else: else:
icon = None icon = None
try:
splash_bytes = fields['splash']
except KeyError:
splash = server.splash
else:
if splash_bytes is not None:
splash = utils._bytes_to_base64_data(splash_bytes)
else:
splash = None
fields['icon'] = icon fields['icon'] = icon
fields['splash'] = splash
if 'afk_channel' in fields: if 'afk_channel' in fields:
fields['afk_channel_id'] = fields['afk_channel'].id fields['afk_channel_id'] = fields['afk_channel'].id

24
discord/server.py

@ -97,13 +97,22 @@ class Server(Hashable):
1 then they do. 1 then they do.
verification_level: :class:`VerificationLevel` verification_level: :class:`VerificationLevel`
The server's verification level. The server's verification level.
features: List[str]
A list of features that the server has. They are currently as follows:
- ``VIP_REGIONS``: Server has VIP voice regions
- ``VANITY_URL``: Server has a vanity invite URL (e.g. discord.gg/discord-api)
- ``INVITE_SPLASH``: Server's invite page has a special splash.
splash: str
The server's invite splash.
""" """
__slots__ = ['afk_timeout', 'afk_channel', '_members', '_channels', 'icon', __slots__ = ['afk_timeout', 'afk_channel', '_members', '_channels', 'icon',
'name', 'id', 'owner', 'unavailable', 'name', 'region', 'name', 'id', 'owner', 'unavailable', 'name', 'region',
'_default_role', '_default_channel', 'roles', '_member_count', '_default_role', '_default_channel', 'roles', '_member_count',
'large', 'owner_id', 'mfa_level', 'emojis', 'large', 'owner_id', 'mfa_level', 'emojis', 'features',
'verification_level' ] 'verification_level', 'splash' ]
def __init__(self, **kwargs): def __init__(self, **kwargs):
self._channels = {} self._channels = {}
@ -191,6 +200,8 @@ class Server(Hashable):
self.roles = [Role(server=self, **r) for r in guild.get('roles', [])] self.roles = [Role(server=self, **r) for r in guild.get('roles', [])]
self.mfa_level = guild.get('mfa_level') self.mfa_level = guild.get('mfa_level')
self.emojis = [Emoji(server=self, **r) for r in guild.get('emojis', [])] self.emojis = [Emoji(server=self, **r) for r in guild.get('emojis', [])]
self.features = guild.get('features', [])
self.splash = guild.get('splash')
for mdata in guild.get('members', []): for mdata in guild.get('members', []):
roles = [self.default_role] roles = [self.default_role]
@ -205,7 +216,7 @@ class Server(Hashable):
self._add_member(member) self._add_member(member)
self._sync(guild) self._sync(guild)
self.large = None if member_count is None else self._member_count > 250 self.large = None if member_count is None else self._member_count >= 250
if 'owner_id' in guild: if 'owner_id' in guild:
self.owner_id = guild['owner_id'] self.owner_id = guild['owner_id']
@ -257,6 +268,13 @@ class Server(Hashable):
return '' return ''
return 'https://discordapp.com/api/guilds/{0.id}/icons/{0.icon}.jpg'.format(self) return 'https://discordapp.com/api/guilds/{0.id}/icons/{0.icon}.jpg'.format(self)
@property
def splash_url(self):
"""Returns the URL version of the server's invite splash. Returns an empty string if it has no splash."""
if self.splash is None:
return ''
return 'https://cdn.discordapp.com/splashes/{0.id}/{0.splash}.jpg?size=2048'.format(self)
@property @property
def member_count(self): def member_count(self):
"""Returns the true member count regardless of it being loaded fully or not.""" """Returns the true member count regardless of it being loaded fully or not."""

Loading…
Cancel
Save