aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-06-10 22:28:15 -0400
committerRapptz <[email protected]>2016-06-10 22:28:15 -0400
commita175c86aa1587c43303e8a06e2078c05a7892938 (patch)
tree4dea3eaf0cd5775ba365def9a6721d3845cce88f
parentHandle voice websocket closure if it's a successful close. (diff)
downloaddiscord.py-a175c86aa1587c43303e8a06e2078c05a7892938.tar.xz
discord.py-a175c86aa1587c43303e8a06e2078c05a7892938.zip
Add Client.application_info to retrieve the current app info.
Fixes #241.
-rw-r--r--discord/__init__.py2
-rw-r--r--discord/client.py39
-rw-r--r--discord/endpoints.py1
-rw-r--r--docs/api.rst26
4 files changed, 66 insertions, 2 deletions
diff --git a/discord/__init__.py b/discord/__init__.py
index 555d73ff..1cc4be2c 100644
--- a/discord/__init__.py
+++ b/discord/__init__.py
@@ -17,7 +17,7 @@ __license__ = 'MIT'
__copyright__ = 'Copyright 2015-2016 Rapptz'
__version__ = '0.10.0-alpha'
-from .client import Client
+from .client import Client, AppInfo
from .user import User
from .game import Game
from .channel import Channel, PrivateChannel
diff --git a/discord/client.py b/discord/client.py
index afaa3d9f..e4c9b247 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -53,12 +53,23 @@ import tempfile, os, hashlib
import itertools
import datetime
from random import randint as random_integer
+from collections import namedtuple
PY35 = sys.version_info >= (3, 5)
log = logging.getLogger(__name__)
request_logging_format = '{method} {response.url} has returned {response.status}'
request_success_log = '{response.url} with {json} received {data}'
+AppInfo = namedtuple('AppInfo', 'id name description icon')
+def app_info_icon_url(self):
+ """Retrieves the application's icon_url if it exists. Empty string otherwise."""
+ if not self.icon:
+ return ''
+
+ return 'https://cdn.discordapp.com/app-icons/{0.id}/{0.icon}.jpg'.format(self)
+
+AppInfo.icon_url = property(app_info_icon_url)
+
class Client:
"""Represents a client connection that connects to Discord.
This class is used to interact with the Discord WebSocket and API.
@@ -2787,3 +2798,31 @@ class Client:
The voice client associated with the server.
"""
return self.connection._get_voice_client(server.id)
+
+
+ # Miscellaneous stuff
+
+ @asyncio.coroutine
+ def application_info(self):
+ """|coro|
+
+ Retrieve's the bot's application information.
+
+ Returns
+ --------
+ :class:`AppInfo`
+ A namedtuple representing the application info.
+
+ Raises
+ -------
+ HTTPException
+ Retrieving the information failed somehow.
+ """
+ url = '{}/@me'.format(endpoints.APPLICATIONS)
+ resp = yield from self.session.get(url, headers=self.headers)
+ yield from utils._verify_successful_response(resp)
+ data = yield from resp.json()
+ return AppInfo(id=data['id'], name=data['name'],
+ description=data['description'], icon=data['icon'])
+
+
diff --git a/discord/endpoints.py b/discord/endpoints.py
index 0ef0efa9..50c14704 100644
--- a/discord/endpoints.py
+++ b/discord/endpoints.py
@@ -34,3 +34,4 @@ LOGIN = API_BASE + '/auth/login'
LOGOUT = API_BASE + '/auth/logout'
SERVERS = API_BASE + '/guilds'
CHANNELS = API_BASE + '/channels'
+APPLICATIONS = API_BASE + '/oauth2/applications'
diff --git a/docs/api.rst b/docs/api.rst
index 4700a3ba..21ffabaa 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -31,7 +31,6 @@ There are two main ways to query version information about the library.
A string representation of the version. e.g. ``'0.10.0-alpha0'``.
-
Client
-------
@@ -345,6 +344,31 @@ Utility Functions
.. autofunction:: discord.utils.oauth_url
+Application Info
+------------------
+
+.. class:: AppInfo
+
+ A namedtuple representing the bot's application info.
+
+ .. attribute:: id
+
+ The application's ``client_id``.
+ .. attribute:: name
+
+ The application's name.
+ .. attribute:: description
+
+ The application's description
+ .. attribute:: icon
+
+ The application's icon hash if it exists, ``None`` otherwise.
+ .. attribute:: icon_url
+
+ A property that retrieves the application's icon URL if it exists.
+
+ If it doesn't exist an empty string is returned.
+
.. _discord-api-enums:
Enumerations