mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 20:28:38 +00:00
Move server parsing code from Client to Server.
This commit is contained in:
parent
d440e52a00
commit
e10b6c767b
@ -146,50 +146,8 @@ class ConnectionState(object):
|
|||||||
def _get_server(self, guild_id):
|
def _get_server(self, guild_id):
|
||||||
return utils.find(lambda g: g.id == guild_id, self.servers)
|
return utils.find(lambda g: g.id == guild_id, self.servers)
|
||||||
|
|
||||||
def _update_voice_state(self, server, data):
|
|
||||||
user_id = data.get('user_id')
|
|
||||||
member = utils.find(lambda m: m.id == user_id, server.members)
|
|
||||||
if member is not None:
|
|
||||||
ch_id = data.get('channel_id')
|
|
||||||
channel = utils.find(lambda c: c.id == ch_id, server.channels)
|
|
||||||
member.update_voice_state(voice_channel=channel, **data)
|
|
||||||
return member
|
|
||||||
|
|
||||||
def _add_server(self, guild):
|
def _add_server(self, guild):
|
||||||
guild['roles'] = [Role(everyone=(guild['id'] == role['id']), **role) for role in guild['roles']]
|
server = Server(**guild)
|
||||||
members = guild['members']
|
|
||||||
owner = guild['owner_id']
|
|
||||||
for i, member in enumerate(members):
|
|
||||||
roles = member['roles']
|
|
||||||
for j, roleid in enumerate(roles):
|
|
||||||
role = utils.find(lambda r: r.id == roleid, guild['roles'])
|
|
||||||
if role is not None:
|
|
||||||
roles[j] = role
|
|
||||||
members[i] = Member(**member)
|
|
||||||
|
|
||||||
# found the member that owns the server
|
|
||||||
if members[i].id == owner:
|
|
||||||
owner = members[i]
|
|
||||||
|
|
||||||
for presence in guild['presences']:
|
|
||||||
user_id = presence['user']['id']
|
|
||||||
member = utils.find(lambda m: m.id == user_id, members)
|
|
||||||
if member is not None:
|
|
||||||
member.status = presence['status']
|
|
||||||
member.game_id = presence['game_id']
|
|
||||||
|
|
||||||
|
|
||||||
server = Server(owner=owner, **guild)
|
|
||||||
|
|
||||||
# give all the members their proper server
|
|
||||||
for member in server.members:
|
|
||||||
member.server = server
|
|
||||||
|
|
||||||
channels = [Channel(server=server, **channel)
|
|
||||||
for channel in guild['channels']]
|
|
||||||
server.channels = channels
|
|
||||||
for obj in guild.get('voice_states', []):
|
|
||||||
self._update_voice_state(server, obj)
|
|
||||||
self.servers.append(server)
|
self.servers.append(server)
|
||||||
|
|
||||||
def handle_ready(self, data):
|
def handle_ready(self, data):
|
||||||
@ -393,7 +351,7 @@ class ConnectionState(object):
|
|||||||
def handle_voice_state_update(self, data):
|
def handle_voice_state_update(self, data):
|
||||||
server = self._get_server(data.get('guild_id'))
|
server = self._get_server(data.get('guild_id'))
|
||||||
if server is not None:
|
if server is not None:
|
||||||
updated_member = self._update_voice_state(server, data)
|
updated_member = server._update_voice_state(data)
|
||||||
self.dispatch('voice_state_update', updated_member)
|
self.dispatch('voice_state_update', updated_member)
|
||||||
|
|
||||||
def handle_typing_start(self, data):
|
def handle_typing_start(self, data):
|
||||||
|
@ -25,6 +25,9 @@ DEALINGS IN THE SOFTWARE.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from . import utils
|
from . import utils
|
||||||
|
from .role import Role
|
||||||
|
from .member import Member
|
||||||
|
from .channel import Channel
|
||||||
|
|
||||||
class Server(object):
|
class Server(object):
|
||||||
"""Represents a Discord server.
|
"""Represents a Discord server.
|
||||||
@ -71,16 +74,57 @@ class Server(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.name = kwargs.get('name')
|
self._from_data(kwargs)
|
||||||
self.roles = kwargs.get('roles')
|
|
||||||
self.region = kwargs.get('region')
|
def _update_voice_state(self, data):
|
||||||
self.afk_timeout = kwargs.get('afk_timeout')
|
user_id = data.get('user_id')
|
||||||
self.afk_channel_id = kwargs.get('afk_channel_id')
|
member = utils.find(lambda m: m.id == user_id, self.members)
|
||||||
self.members = kwargs.get('members')
|
if member is not None:
|
||||||
self.icon = kwargs.get('icon')
|
ch_id = data.get('channel_id')
|
||||||
self.id = kwargs.get('id')
|
channel = utils.find(lambda c: c.id == ch_id, self.channels)
|
||||||
self.owner = kwargs.get('owner')
|
member.update_voice_state(voice_channel=channel, **data)
|
||||||
self.unavailable = kwargs.get('unavailable', False)
|
return member
|
||||||
|
|
||||||
|
def _from_data(self, guild):
|
||||||
|
self.name = guild.get('name')
|
||||||
|
self.region = guild.get('region')
|
||||||
|
self.afk_timeout = guild.get('afk_timeout')
|
||||||
|
self.afk_channel_id = guild.get('afk_channel_id')
|
||||||
|
self.icon = guild.get('icon')
|
||||||
|
self.unavailable = guild.get('unavailable', False)
|
||||||
|
self.id = guild['id']
|
||||||
|
self.roles = [Role(everyone=(self.id == r['id']), **r) for r in guild['roles']]
|
||||||
|
|
||||||
|
self.members = []
|
||||||
|
self.owner = guild['owner_id']
|
||||||
|
|
||||||
|
for data in guild['members']:
|
||||||
|
roles = []
|
||||||
|
for role_id in data['roles']:
|
||||||
|
role = utils.find(lambda r: r.id == role_id, self.roles)
|
||||||
|
if role is not None:
|
||||||
|
roles.append(role)
|
||||||
|
|
||||||
|
data['roles'] = roles
|
||||||
|
member = Member(**data)
|
||||||
|
member.server = self
|
||||||
|
|
||||||
|
if member.id == self.owner:
|
||||||
|
self.owner = member
|
||||||
|
|
||||||
|
self.members.append(member)
|
||||||
|
|
||||||
|
for presence in guild.get('presences', []):
|
||||||
|
user_id = presence['user']['id']
|
||||||
|
member = utils.find(lambda m: m.id == user_id, self.members)
|
||||||
|
if member is not None:
|
||||||
|
member.status = presence['status']
|
||||||
|
member.game_id = presence['game_id']
|
||||||
|
|
||||||
|
self.channels = [Channel(server=self, **c) for c in guild['channels']]
|
||||||
|
|
||||||
|
for obj in guild.get('voice_states', []):
|
||||||
|
self._update_voice_state(obj)
|
||||||
|
|
||||||
def get_default_role(self):
|
def get_default_role(self):
|
||||||
"""Gets the @everyone role that all members have by default."""
|
"""Gets the @everyone role that all members have by default."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user