63 Commits

Author SHA1 Message Date
Rapptz
c7f99afe7e Handle private channel CHANNEL_CREATE better. 2016-07-15 21:34:39 -04:00
Rapptz
a128249b63 Add support for different message types and call message. 2016-07-13 20:11:18 -04:00
Rapptz
69c506d7ae Handle CHANNEL_UPDATE for group direct messages. 2016-07-13 17:23:35 -04:00
Rapptz
ddd3fd0a3d Begin working on gateway v6 changes.
The first batch of changes are related to channel types and group
direct messages. Support these first so READY begins parsing.
2016-07-13 00:10:16 -04:00
Rapptz
d87d11c5a6 Fix voice states being overwritten after a GUILD_SYNC.
This was a two-fold problem. The first of which involved the overwriting
of members during a GUILD_SYNC. Since we are requesting a chunk anyway,
we have all the member references we need without actually chunking. The
second problem came from the order. We were doing a GUILD_SYNC and then
doing the chunking requests. We should do the GUILD_SYNC after the
chunking in order to just update presences.
2016-06-28 19:07:56 -04:00
Rapptz
a1ae8fdb10 Handle MESSAGE_DELETE_BULK. 2016-06-22 06:15:52 -04:00
Rapptz
8b3617111a Support for v5 Gateway. 2016-06-22 05:00:08 -04:00
Rapptz
c97e5a17e6 Update positions when a role is added or removed. 2016-06-01 21:06:04 -04:00
Rapptz
5016f12079 Add Role.server attribute.
This breaks events that expected a server parameter for the role events.
2016-06-01 19:27:48 -04:00
Rapptz
8638ff4414 Update voice client main ws references when reconnecting. 2016-06-01 05:20:22 -04:00
Rapptz
e0a91df32b Add RESUME support. 2016-06-01 05:13:15 -04:00
Rapptz
bf650297a1 Only trigger on_voice_state_update if the member actually exists. 2016-05-20 19:22:22 -04:00
Rapptz
a31188c966 Fix bug where members leaving will stay in Channel.voice_members. 2016-05-20 19:21:06 -04:00
Rapptz
cf2bee5c43 Fix issue with Member.joined_at being None. 2016-05-10 06:04:44 -04:00
Rapptz
d9c780b8a8 Working multi-server voice support. 2016-05-01 20:54:13 -04:00
Rapptz
5e8c79bf76 Attempt to consistently sort of all Member.roles 2016-04-29 22:44:25 -04:00
Rapptz
ebaf74e784 Sort member.roles by ID but keep the default role in index 0.
This should make the events checking if `before` and `after` roles
are equivalent more sane for users.
2016-04-29 22:29:56 -04:00
Rapptz
133e8d3a44 Add support for server specific nicknames. 2016-04-29 06:39:21 -04:00
Rapptz
1c623ccf11 Begin working on gateway v4 support.
Bump websockets requirement to v3.1

Should be squashed...
2016-04-27 18:36:13 -04:00
Rapptz
8d7dd79673 Fix deadlock issue when joining large guilds. 2016-04-15 23:27:23 -04:00
Rapptz
7eb9a7dfdc Handle bot tag updates in GUILD_MEMBER_UPDATE. 2016-04-12 18:19:02 -04:00
Rapptz
7023b353f6 User JSON object has 'username' keys not 'name'. 2016-04-11 14:39:04 -04:00
Rapptz
6076c8c671 Better chunking behaviour and add members on PRESENCE_UPDATE.
This should hopefully cover all cases where members are added.
There was a bug where an array of chunks received would get entirely
processed if only a single chunk was received. This was fixed by
explicitly bailing early if we're requesting for chunks.
2016-04-11 14:24:15 -04:00
Khazhismel
84f1342b85 Fix chunk requests not actually being batched. 2016-04-11 11:53:54 -04:00
Rapptz
0401ab561b Proper chunking for unavailable guilds.
This will also delay on_ready until all chunking is complete.
2016-04-10 00:47:00 -04:00
Zeta
f235dc5ca4 Fix handling of message update in MESSAGE_UPDATE 2016-04-05 18:01:54 -04:00
Rapptz
8b7f15ef8d Skip member_update event when a member is not in a guild. 2016-04-02 23:38:45 -04:00
Rapptz
80587fc1e9 Change parsing of READY to be eager again. 2016-03-06 14:41:31 -05:00
Rapptz
6ac2e07833 Fix bug where large servers in GUILD_CREATE did not get chunked. 2016-03-06 05:52:05 -05:00
Rapptz
425bd2c091 Move chunking logic back into ConnectionState.
This allows for a nicer design when dealing with parsers that could
end up being coroutines.
2016-03-06 05:24:18 -05:00
Rapptz
3802e7f534 Server.me is now a dynamic property to avoid outdated references. 2016-03-01 22:54:28 -05:00
Rapptz
3862b1abcf Do not overwrite members that are already in cache during chunking. 2016-02-17 05:44:00 -05:00
Rapptz
4584c68f0c Remove request_offline option. 2016-02-14 21:49:34 -05:00
Rapptz
841e584ee9 Update owner references when we get a chunk. 2016-02-14 20:00:50 -05:00
Rapptz
4768d950c5 Offline members are now added by default automatically.
This commit adds support for GUILD_MEMBERS_CHUNK which had to be done
due to forced large_threshold requirements in the library.
2016-02-14 19:24:26 -05:00
Rapptz
530fbe78b8 Handle case where PRESENCE_UPDATE adds members to cache.
When we don't request offline members, members that are going from
offline to online in the server will become available via the
PRESENCE_UPDATE event. This should be transparent to the user since
technically the member exists in the server and thus on_member_update
is used instead of on_member_join.
2016-02-13 22:34:38 -05:00
Rapptz
7b135725bc Add Server.member_count property for actual member count.
This will always work regardless of chunking or not.
2016-02-13 22:08:13 -05:00
Rapptz
6682691012 Fix cases where Member.roles would have a string instead of Role.
Fixes #81.
2016-02-01 18:39:39 -05:00
Rapptz
654001ba3e Update the unavailable guild's data when it becomes available. 2016-01-21 07:00:39 -05:00
Khazhismel
bbe6455eb9 Guild member add will include deaf and mute now, do not provide default values 2016-01-12 11:49:22 -05:00
Rapptz
4ea015067f Handle cases where people put False-like values for game presences. 2016-01-11 19:50:13 -05:00
Rapptz
8974dffc4e Change internal update functions to have a leading underscore. 2016-01-11 14:44:13 -05:00
Steven Berler
777b5a09e2 document public get_ methods and make others private 2016-01-08 13:24:56 -05:00
Steven Berler
10b0b62f50 performance improvements
Replaced server member lists, channel lists, and private channel lists
with dicts. This allows O(1) lookups and removes (previously it would be
an O(N) operation to lookup or remove). I did pretty extensive testing
and benchmarking to compare the performance of using lists vs using
dicts. Iterating through lists to find an item is only faster in the
average case for extremely small lists (less than 3 items). For 100
items, using a dict is about 10 times faster on average (and about 100
times faster for 1000 items). The overhead in dicts is in memory usage
and initial creation time. Creating and populating a dict is about 2 to
3 times slower than creating and appending items to a list. However this
cost is still tiny.  For 1000 items this equates to about a 70
microsecond difference (on an i7 CPU) for populating the entire dict.
The memory overhead for a dict (compared to a list) is about 25-60 KB
per 1000 items (can vary depending on dict resizing).

Originally I wanted to use OrderedDicts to presereve order, but in my
testing OrderedDicts have about 6x the memory overhead compared to
normal dicts.
2016-01-08 13:24:55 -05:00
Rapptz
a2b97ae2db Fix handling of embed-only MESSAGE_UPDATE. 2016-01-07 02:54:01 -05:00
Rapptz
0fbb58cde9 Change the way MESSAGE_UPDATE events are handled.
Previously we created a copy of the object and did some strange
iteration over the data and set the attributes that we thought
were valid. This worked back then in v0.1.0 of the library when
it was written, but it no longer works nowadays when we want to
be as future proof as possible.
2016-01-07 01:27:38 -05:00
Rapptz
c1583dd7d6 Unavailable guilds get added to cache. 2016-01-06 12:57:09 -05:00
Rapptz
db4cc791dd Update license of files to 2016. 2016-01-04 22:28:29 -05:00
Rapptz
c11bd9b8f4 ConnectionState is now constructed in Client.__init__.
This should reduce the amount of checks for None if someone doesn't
want a websocket connection. The connection state is instead cleared
rather than reconstructed.
2015-12-29 11:59:18 -05:00
Khazhismel
0aa46e6def Add game data class, replace game_id. 2015-12-23 21:28:18 -05:00