diff --git a/discord/__init__.py b/discord/__init__.py index 62166ddfc..bd0eac318 100644 --- a/discord/__init__.py +++ b/discord/__init__.py @@ -34,7 +34,7 @@ from .invite import Invite from .object import Object from . import utils, opus, compat from .voice_client import VoiceClient -from .enums import ChannelType, ServerRegion, Status, MessageType +from .enums import ChannelType, ServerRegion, Status, MessageType, VerificationLevel from collections import namedtuple import logging diff --git a/discord/client.py b/discord/client.py index 93679244a..74a417cd1 100644 --- a/discord/client.py +++ b/discord/client.py @@ -38,7 +38,7 @@ from .errors import * from .state import ConnectionState from .permissions import Permissions, PermissionOverwrite from . import utils, compat -from .enums import ChannelType, ServerRegion +from .enums import ChannelType, ServerRegion, VerificationLevel from .voice_client import VoiceClient from .iterators import LogsFromIterator from .gateway import * @@ -1930,6 +1930,8 @@ class Client: owner : :class:`Member` The new owner of the server to transfer ownership to. Note that you must be owner of the server to do this. + verification_level: :class:`VerificationLevel` + The new verification level for the server. Raises ------- @@ -1968,6 +1970,11 @@ class Client: if 'region' in fields: fields['region'] = str(fields['region']) + level = fields.get('verification_level', server.verification_level) + if not isinstance(level, VerificationLevel): + raise InvalidArgument('verification_level field must of type VerificationLevel') + + fields['verification_level'] = level.value yield from self.http.edit_server(server.id, **fields) @asyncio.coroutine diff --git a/discord/enums.py b/discord/enums.py index c5cdb6f3b..191728ee6 100644 --- a/discord/enums.py +++ b/discord/enums.py @@ -64,6 +64,16 @@ class ServerRegion(Enum): def __str__(self): return self.value +class VerificationLevel(Enum): + none = 0 + low = 1 + medium = 2 + high = 3 + table_flip = 3 + + def __str__(self): + return self.name + class Status(Enum): online = 'online' offline = 'offline' diff --git a/discord/server.py b/discord/server.py index 035b52a10..6703a8fcf 100644 --- a/discord/server.py +++ b/discord/server.py @@ -30,7 +30,7 @@ from .member import Member from .emoji import Emoji from .game import Game from .channel import Channel -from .enums import ServerRegion, Status +from .enums import ServerRegion, Status, try_enum, VerificationLevel from .mixins import Hashable class Server(Hashable): @@ -92,12 +92,15 @@ class Server(Hashable): Indicates the server's two factor authorisation level. If this value is 0 then the server does not require 2FA for their administrative members. If the value is 1 then they do. + verification_level: :class:`VerificationLevel` + The server's verification level. """ __slots__ = ['afk_timeout', 'afk_channel', '_members', '_channels', 'icon', 'name', 'id', 'owner', 'unavailable', 'name', 'region', '_default_role', '_default_channel', 'roles', '_member_count', - 'large', 'owner_id', 'mfa_level', 'emojis'] + 'large', 'owner_id', 'mfa_level', 'emojis', + 'verification_level' ] def __init__(self, **kwargs): self._channels = {} @@ -176,12 +179,8 @@ class Server(Hashable): self._member_count = member_count self.name = guild.get('name') - self.region = guild.get('region') - try: - self.region = ServerRegion(self.region) - except: - pass - + self.region = try_enum(ServerRegion, guild.get('region')) + self.verification_level = try_enum(VerificationLevel, guild.get('verification_level')) self.afk_timeout = guild.get('afk_timeout') self.icon = guild.get('icon') self.unavailable = guild.get('unavailable', False) diff --git a/docs/api.rst b/docs/api.rst index 168a6f194..02572dd2f 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -512,6 +512,30 @@ All enumerations are subclasses of `enum`_. The Amsterdam region for VIP servers. +.. class:: VerificationLevel + + Specifies a :class:`Server`\'s verification level, which is the criteria in + which a member must meet before being able to send messages to the server. + + .. attribute:: none + + No criteria set. + .. attribute:: low + + Member must have a verified email on their Discord account. + .. attribute:: medium + + Member must have a verified email and be registered on Discord for more + than five minutes. + .. attribute:: high + + Member must have a verified email, be registered on Discord for more + than five minutes, and be a member of the server itself for more than + ten minutes. + .. attribute:: table_flip + + An alias for :attr:`high`. + .. class:: Status Specifies a :class:`Member` 's status.