mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-21 08:17:47 +00:00
Add Guild.create_text_channel and Guild.create_voice_channel.
This commit is contained in:
parent
9224d9b9d3
commit
3780943d0a
@ -32,6 +32,8 @@ from .role import Role
|
||||
from .member import Member, VoiceState
|
||||
from .emoji import Emoji
|
||||
from .game import Game
|
||||
from .permissions import PermissionOverwrite
|
||||
from .errors import InvalidArgument
|
||||
from .channel import *
|
||||
from .enums import GuildRegion, Status, ChannelType, try_enum, VerificationLevel
|
||||
from .mixins import Hashable
|
||||
@ -389,6 +391,101 @@ class Guild(Hashable):
|
||||
|
||||
return utils.find(pred, members)
|
||||
|
||||
def _create_channel(self, name, overwrites, type):
|
||||
if overwrites is None:
|
||||
overwrites = {}
|
||||
elif not isinstance(overwrites, dict):
|
||||
raise InvalidArgument('overwrites parameter expects a dict.')
|
||||
|
||||
perms = []
|
||||
for target, perm in overwrites.items():
|
||||
if not isinstance(perm, PermissionOverwrite):
|
||||
raise InvalidArgument('Expected PermissionOverwrite received {0.__name__}'.format(type(perm)))
|
||||
|
||||
allow, deny = perm.pair()
|
||||
payload = {
|
||||
'allow': allow.value,
|
||||
'deny': deny.value,
|
||||
'id': target.id
|
||||
}
|
||||
|
||||
if isinstance(target, Role):
|
||||
payload['type'] = 'role'
|
||||
else:
|
||||
payload['type'] = 'member'
|
||||
|
||||
perms.append(payload)
|
||||
|
||||
return self._state.http.create_channel(self.id, name, str(type), permission_overwrites=perms)
|
||||
|
||||
@asyncio.coroutine
|
||||
def create_text_channel(self, name, *, overwrites=None):
|
||||
"""|coro|
|
||||
|
||||
Creates a :class:`TextChannel` for the guild.
|
||||
|
||||
Note that you need the proper permissions to create the channel.
|
||||
|
||||
The ``overwrites`` parameter can be used to create a 'secret'
|
||||
channel upon creation. This parameter expects a `dict` of
|
||||
overwrites with the target (either a :class:`Member` or a :class:`Role`)
|
||||
as the key and a :class:`PermissionOverwrite` as the value.
|
||||
|
||||
Examples
|
||||
----------
|
||||
|
||||
Creating a basic channel:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
channel = await guild.create_text_channel('cool-channel')
|
||||
|
||||
Creating a "secret" channel:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
overwrites = {
|
||||
guild.default_role: discord.PermissionOverwrite(read_messages=False),
|
||||
guild.me: discord.PermissionOverwrite(read_messages=True)
|
||||
}
|
||||
|
||||
channel = await guild.create_text_channel('secret', overwrites=overwrites)
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
name: str
|
||||
The channel's name.
|
||||
overwrites
|
||||
A `dict` of target (either a role or a member) to
|
||||
:class:`PermissionOverwrite` to apply upon creation of a channel.
|
||||
Useful for creating secret channels.
|
||||
|
||||
Raises
|
||||
-------
|
||||
Forbidden
|
||||
You do not have the proper permissions to create this channel.
|
||||
HTTPException
|
||||
Creating the channel failed.
|
||||
InvalidArgument
|
||||
The permission overwrite information is not in proper form.
|
||||
|
||||
Returns
|
||||
-------
|
||||
:class:`TextChannel`
|
||||
The channel that was just created.
|
||||
"""
|
||||
data = yield from self._create_channel(name, overwrites, ChannelType.text)
|
||||
return TextChannel(state=self._state, guild=self, data=data)
|
||||
|
||||
@asyncio.coroutine
|
||||
def create_voice_channel(self, name, *, overwrites=None):
|
||||
"""|coro|
|
||||
|
||||
Same as :meth:`create_text_channel` except makes a
|
||||
:class:`VoiceChannel` instead.
|
||||
"""
|
||||
data = yield from self._create_channel(name, overwrites, ChannelType.voice)
|
||||
return VoiceChannel(state=self._state, guild=self, data=data)
|
||||
|
||||
@asyncio.coroutine
|
||||
def leave(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user