Remove deleted roles from their parent server
This commit is contained in:
@@ -338,351 +338,357 @@ namespace Discord
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await base.OnReceivedEvent(e);
|
await base.OnReceivedEvent(e);
|
||||||
|
|
||||||
switch (e.Type)
|
switch (e.Type)
|
||||||
{
|
{
|
||||||
//Global
|
//Global
|
||||||
case "READY": //Resync
|
case "READY": //Resync
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<ReadyEvent>(_serializer);
|
|
||||||
_currentUser = _users.GetOrAdd(data.User.Id);
|
|
||||||
_currentUser.Update(data.User);
|
|
||||||
foreach (var model in data.Guilds)
|
|
||||||
{
|
{
|
||||||
|
var data = e.Payload.ToObject<ReadyEvent>(_serializer);
|
||||||
|
_currentUser = _users.GetOrAdd(data.User.Id);
|
||||||
|
_currentUser.Update(data.User);
|
||||||
|
foreach (var model in data.Guilds)
|
||||||
|
{
|
||||||
|
if (!model.Unavailable)
|
||||||
|
{
|
||||||
|
var server = _servers.GetOrAdd(model.Id);
|
||||||
|
server.Update(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var model in data.PrivateChannels)
|
||||||
|
{
|
||||||
|
var user = _users.GetOrAdd(model.Recipient.Id);
|
||||||
|
user.Update(model.Recipient);
|
||||||
|
var channel = _channels.GetOrAdd(model.Id, null, user.Id);
|
||||||
|
channel.Update(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "RESUMED":
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Servers
|
||||||
|
case "GUILD_CREATE":
|
||||||
|
{
|
||||||
|
var model = e.Payload.ToObject<GuildCreateEvent>(_serializer);
|
||||||
if (!model.Unavailable)
|
if (!model.Unavailable)
|
||||||
{
|
{
|
||||||
var server = _servers.GetOrAdd(model.Id);
|
var server = _servers.GetOrAdd(model.Id);
|
||||||
server.Update(model);
|
server.Update(model);
|
||||||
|
RaiseServerCreated(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var model in data.PrivateChannels)
|
break;
|
||||||
|
case "GUILD_UPDATE":
|
||||||
{
|
{
|
||||||
var user = _users.GetOrAdd(model.Recipient.Id);
|
var model = e.Payload.ToObject<GuildUpdateEvent>(_serializer);
|
||||||
user.Update(model.Recipient);
|
var server = _servers[model.Id];
|
||||||
var channel = _channels.GetOrAdd(model.Id, null, user.Id);
|
if (server != null)
|
||||||
channel.Update(model);
|
{
|
||||||
|
server.Update(model);
|
||||||
|
RaiseServerUpdated(server);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case "GUILD_DELETE":
|
||||||
case "RESUMED":
|
{
|
||||||
break;
|
var data = e.Payload.ToObject<GuildDeleteEvent>(_serializer);
|
||||||
|
var server = _servers.TryRemove(data.Id);
|
||||||
|
if (server != null)
|
||||||
|
RaiseServerDestroyed(server);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
//Servers
|
//Channels
|
||||||
case "GUILD_CREATE":
|
case "CHANNEL_CREATE":
|
||||||
{
|
|
||||||
var model = e.Payload.ToObject<GuildCreateEvent>(_serializer);
|
|
||||||
if (!model.Unavailable)
|
|
||||||
{
|
|
||||||
var server = _servers.GetOrAdd(model.Id);
|
|
||||||
server.Update(model);
|
|
||||||
RaiseServerCreated(server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "GUILD_UPDATE":
|
|
||||||
{
|
|
||||||
var model = e.Payload.ToObject<GuildUpdateEvent>(_serializer);
|
|
||||||
var server = _servers[model.Id];
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
server.Update(model);
|
|
||||||
RaiseServerUpdated(server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "GUILD_DELETE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildDeleteEvent>(_serializer);
|
|
||||||
var server = _servers.TryRemove(data.Id);
|
|
||||||
if (server != null)
|
|
||||||
RaiseServerDestroyed(server);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Channels
|
|
||||||
case "CHANNEL_CREATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<ChannelCreateEvent>(_serializer);
|
|
||||||
Channel channel;
|
|
||||||
if (data.IsPrivate)
|
|
||||||
{
|
|
||||||
var user = _users.GetOrAdd(data.Recipient.Id);
|
|
||||||
user.Update(data.Recipient);
|
|
||||||
channel = _channels.GetOrAdd(data.Id, null, user.Id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
channel = _channels.GetOrAdd(data.Id, data.GuildId, null);
|
|
||||||
channel.Update(data);
|
|
||||||
RaiseChannelCreated(channel);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "CHANNEL_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<ChannelUpdateEvent>(_serializer);
|
|
||||||
var channel = _channels[data.Id];
|
|
||||||
if (channel != null)
|
|
||||||
{
|
{
|
||||||
|
var data = e.Payload.ToObject<ChannelCreateEvent>(_serializer);
|
||||||
|
Channel channel;
|
||||||
|
if (data.IsPrivate)
|
||||||
|
{
|
||||||
|
var user = _users.GetOrAdd(data.Recipient.Id);
|
||||||
|
user.Update(data.Recipient);
|
||||||
|
channel = _channels.GetOrAdd(data.Id, null, user.Id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
channel = _channels.GetOrAdd(data.Id, data.GuildId, null);
|
||||||
channel.Update(data);
|
channel.Update(data);
|
||||||
RaiseChannelUpdated(channel);
|
RaiseChannelCreated(channel);
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case "CHANNEL_UPDATE":
|
||||||
case "CHANNEL_DELETE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<ChannelDeleteEvent>(_serializer);
|
|
||||||
var channel = _channels.TryRemove(data.Id);
|
|
||||||
if (channel != null)
|
|
||||||
RaiseChannelDestroyed(channel);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Members
|
|
||||||
case "GUILD_MEMBER_ADD":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildMemberAddEvent>(_serializer);
|
|
||||||
var user = _users.GetOrAdd(data.User.Id);
|
|
||||||
var member = _members.GetOrAdd(data.User.Id, data.GuildId);
|
|
||||||
user.Update(data.User);
|
|
||||||
member.Update(data);
|
|
||||||
if (_config.TrackActivity)
|
|
||||||
member.UpdateActivity();
|
|
||||||
RaiseUserAdded(member);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "GUILD_MEMBER_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildMemberUpdateEvent>(_serializer);
|
|
||||||
var member = _members[data.User.Id, data.GuildId];
|
|
||||||
if (member != null)
|
|
||||||
{
|
{
|
||||||
|
var data = e.Payload.ToObject<ChannelUpdateEvent>(_serializer);
|
||||||
|
var channel = _channels[data.Id];
|
||||||
|
if (channel != null)
|
||||||
|
{
|
||||||
|
channel.Update(data);
|
||||||
|
RaiseChannelUpdated(channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "CHANNEL_DELETE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<ChannelDeleteEvent>(_serializer);
|
||||||
|
var channel = _channels.TryRemove(data.Id);
|
||||||
|
if (channel != null)
|
||||||
|
RaiseChannelDestroyed(channel);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Members
|
||||||
|
case "GUILD_MEMBER_ADD":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<GuildMemberAddEvent>(_serializer);
|
||||||
|
var user = _users.GetOrAdd(data.User.Id);
|
||||||
|
var member = _members.GetOrAdd(data.User.Id, data.GuildId);
|
||||||
|
user.Update(data.User);
|
||||||
member.Update(data);
|
member.Update(data);
|
||||||
RaiseMemberUpdated(member);
|
if (_config.TrackActivity)
|
||||||
|
member.UpdateActivity();
|
||||||
|
RaiseUserAdded(member);
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case "GUILD_MEMBER_UPDATE":
|
||||||
case "GUILD_MEMBER_REMOVE":
|
{
|
||||||
{
|
var data = e.Payload.ToObject<GuildMemberUpdateEvent>(_serializer);
|
||||||
var data = e.Payload.ToObject<GuildMemberRemoveEvent>(_serializer);
|
var member = _members[data.User.Id, data.GuildId];
|
||||||
var member = _members.TryRemove(data.UserId, data.GuildId);
|
if (member != null)
|
||||||
if (member != null)
|
{
|
||||||
RaiseUserRemoved(member);
|
member.Update(data);
|
||||||
}
|
RaiseMemberUpdated(member);
|
||||||
break;
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "GUILD_MEMBER_REMOVE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<GuildMemberRemoveEvent>(_serializer);
|
||||||
|
var member = _members.TryRemove(data.UserId, data.GuildId);
|
||||||
|
if (member != null)
|
||||||
|
RaiseUserRemoved(member);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
//Roles
|
//Roles
|
||||||
case "GUILD_ROLE_CREATE":
|
case "GUILD_ROLE_CREATE":
|
||||||
{
|
{
|
||||||
var data = e.Payload.ToObject<GuildRoleCreateEvent>(_serializer);
|
var data = e.Payload.ToObject<GuildRoleCreateEvent>(_serializer);
|
||||||
var role = _roles.GetOrAdd(data.Data.Id, data.GuildId, false);
|
var role = _roles.GetOrAdd(data.Data.Id, data.GuildId, false);
|
||||||
role.Update(data.Data);
|
|
||||||
RaiseRoleUpdated(role);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "GUILD_ROLE_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildRoleUpdateEvent>(_serializer);
|
|
||||||
var role = _roles[data.Data.Id];
|
|
||||||
if (role != null)
|
|
||||||
role.Update(data.Data);
|
role.Update(data.Data);
|
||||||
RaiseRoleUpdated(role);
|
var server = _servers[data.GuildId];
|
||||||
}
|
if (server != null)
|
||||||
break;
|
server.AddRole(data.Data.Id);
|
||||||
case "GUILD_ROLE_DELETE":
|
RaiseRoleUpdated(role);
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildRoleDeleteEvent>(_serializer);
|
|
||||||
var role = _roles.TryRemove(data.RoleId);
|
|
||||||
if (role != null)
|
|
||||||
RaiseRoleDeleted(role);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Bans
|
|
||||||
case "GUILD_BAN_ADD":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildBanAddEvent>(_serializer);
|
|
||||||
var server = _servers[data.GuildId];
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
server.AddBan(data.User?.Id);
|
|
||||||
RaiseBanAdded(data.User?.Id, server);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case "GUILD_ROLE_UPDATE":
|
||||||
case "GUILD_BAN_REMOVE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<GuildBanRemoveEvent>(_serializer);
|
|
||||||
var server = _servers[data.GuildId];
|
|
||||||
if (server != null && server.RemoveBan(data.User?.Id))
|
|
||||||
RaiseBanRemoved(data.User?.Id, server);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Messages
|
|
||||||
case "MESSAGE_CREATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<MessageCreateEvent>(_serializer);
|
|
||||||
Message msg = null;
|
|
||||||
|
|
||||||
bool wasLocal = _config.UseMessageQueue && data.Author.Id == CurrentUserId && data.Nonce != null;
|
|
||||||
if (wasLocal)
|
|
||||||
{
|
{
|
||||||
msg = _messages.Remap("nonce" + data.Nonce, data.Id);
|
var data = e.Payload.ToObject<GuildRoleUpdateEvent>(_serializer);
|
||||||
|
var role = _roles[data.Data.Id];
|
||||||
|
if (role != null)
|
||||||
|
role.Update(data.Data);
|
||||||
|
RaiseRoleUpdated(role);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "GUILD_ROLE_DELETE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<GuildRoleDeleteEvent>(_serializer);
|
||||||
|
var server = _servers[data.GuildId];
|
||||||
|
if (server != null)
|
||||||
|
server.RemoveRole(data.RoleId);
|
||||||
|
var role = _roles.TryRemove(data.RoleId);
|
||||||
|
if (role != null)
|
||||||
|
RaiseRoleDeleted(role);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Bans
|
||||||
|
case "GUILD_BAN_ADD":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<GuildBanAddEvent>(_serializer);
|
||||||
|
var server = _servers[data.GuildId];
|
||||||
|
if (server != null)
|
||||||
|
{
|
||||||
|
server.AddBan(data.User?.Id);
|
||||||
|
RaiseBanAdded(data.User?.Id, server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "GUILD_BAN_REMOVE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<GuildBanRemoveEvent>(_serializer);
|
||||||
|
var server = _servers[data.GuildId];
|
||||||
|
if (server != null && server.RemoveBan(data.User?.Id))
|
||||||
|
RaiseBanRemoved(data.User?.Id, server);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Messages
|
||||||
|
case "MESSAGE_CREATE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<MessageCreateEvent>(_serializer);
|
||||||
|
Message msg = null;
|
||||||
|
|
||||||
|
bool wasLocal = _config.UseMessageQueue && data.Author.Id == CurrentUserId && data.Nonce != null;
|
||||||
|
if (wasLocal)
|
||||||
|
{
|
||||||
|
msg = _messages.Remap("nonce" + data.Nonce, data.Id);
|
||||||
|
if (msg != null)
|
||||||
|
{
|
||||||
|
msg.IsQueued = false;
|
||||||
|
msg.Id = data.Id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg == null)
|
||||||
|
msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id);
|
||||||
|
msg.Update(data);
|
||||||
|
if (_config.TrackActivity)
|
||||||
|
{
|
||||||
|
var channel = msg.Channel;
|
||||||
|
if (channel == null || channel.IsPrivate)
|
||||||
|
{
|
||||||
|
var user = msg.User;
|
||||||
|
if (user != null)
|
||||||
|
user.UpdateActivity(data.Timestamp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var member = msg.Member;
|
||||||
|
if (member != null)
|
||||||
|
member.UpdateActivity(data.Timestamp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wasLocal)
|
||||||
|
RaiseMessageSent(msg);
|
||||||
|
RaiseMessageCreated(msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "MESSAGE_UPDATE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer);
|
||||||
|
var msg = _messages[data.Id];
|
||||||
if (msg != null)
|
if (msg != null)
|
||||||
{
|
{
|
||||||
msg.IsQueued = false;
|
msg.Update(data);
|
||||||
msg.Id = data.Id;
|
RaiseMessageUpdated(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
if (msg == null)
|
case "MESSAGE_DELETE":
|
||||||
msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id);
|
|
||||||
msg.Update(data);
|
|
||||||
if (_config.TrackActivity)
|
|
||||||
{
|
{
|
||||||
var channel = msg.Channel;
|
var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer);
|
||||||
if (channel == null || channel.IsPrivate)
|
var msg = _messages.TryRemove(data.Id);
|
||||||
|
if (msg != null)
|
||||||
|
RaiseMessageDeleted(msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "MESSAGE_ACK":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<MessageAckEvent>(_serializer);
|
||||||
|
var msg = GetMessage(data.MessageId);
|
||||||
|
if (msg != null)
|
||||||
|
RaiseMessageReadRemotely(msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Statuses
|
||||||
|
case "PRESENCE_UPDATE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer);
|
||||||
|
var member = _members[data.User.Id, data.GuildId];
|
||||||
|
/*if (_config.TrackActivity)
|
||||||
{
|
{
|
||||||
var user = msg.User;
|
var user = _users[data.User.Id];
|
||||||
if (user != null)
|
if (user != null)
|
||||||
user.UpdateActivity(data.Timestamp);
|
user.UpdateActivity(DateTime.UtcNow);
|
||||||
}
|
}*/
|
||||||
else
|
if (member != null)
|
||||||
{
|
{
|
||||||
var member = msg.Member;
|
member.Update(data);
|
||||||
if (member != null)
|
RaiseUserPresenceUpdated(member);
|
||||||
member.UpdateActivity(data.Timestamp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (wasLocal)
|
break;
|
||||||
RaiseMessageSent(msg);
|
case "TYPING_START":
|
||||||
RaiseMessageCreated(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "MESSAGE_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer);
|
|
||||||
var msg = _messages[data.Id];
|
|
||||||
if (msg != null)
|
|
||||||
{
|
{
|
||||||
msg.Update(data);
|
var data = e.Payload.ToObject<TypingStartEvent>(_serializer);
|
||||||
RaiseMessageUpdated(msg);
|
var channel = _channels[data.ChannelId];
|
||||||
}
|
var user = _users[data.UserId];
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "MESSAGE_DELETE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer);
|
|
||||||
var msg = _messages.TryRemove(data.Id);
|
|
||||||
if (msg != null)
|
|
||||||
RaiseMessageDeleted(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "MESSAGE_ACK":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<MessageAckEvent>(_serializer);
|
|
||||||
var msg = GetMessage(data.MessageId);
|
|
||||||
if (msg != null)
|
|
||||||
RaiseMessageReadRemotely(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Statuses
|
|
||||||
case "PRESENCE_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer);
|
|
||||||
var member = _members[data.User.Id, data.GuildId];
|
|
||||||
/*if (_config.TrackActivity)
|
|
||||||
{
|
|
||||||
var user = _users[data.User.Id];
|
|
||||||
if (user != null)
|
if (user != null)
|
||||||
user.UpdateActivity(DateTime.UtcNow);
|
|
||||||
}*/
|
|
||||||
if (member != null)
|
|
||||||
{
|
|
||||||
member.Update(data);
|
|
||||||
RaiseUserPresenceUpdated(member);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "TYPING_START":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<TypingStartEvent>(_serializer);
|
|
||||||
var channel = _channels[data.ChannelId];
|
|
||||||
var user = _users[data.UserId];
|
|
||||||
|
|
||||||
if (user != null)
|
|
||||||
{
|
|
||||||
if (channel != null)
|
|
||||||
RaiseUserIsTyping(user, channel);
|
|
||||||
}
|
|
||||||
if (_config.TrackActivity)
|
|
||||||
{
|
|
||||||
if (channel.IsPrivate)
|
|
||||||
{
|
{
|
||||||
|
if (channel != null)
|
||||||
|
RaiseUserIsTyping(user, channel);
|
||||||
|
}
|
||||||
|
if (_config.TrackActivity)
|
||||||
|
{
|
||||||
|
if (channel.IsPrivate)
|
||||||
|
{
|
||||||
|
if (user != null)
|
||||||
|
user.UpdateActivity();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var member = _members[data.UserId, channel.ServerId];
|
||||||
|
if (member != null)
|
||||||
|
member.UpdateActivity();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
//Voice
|
||||||
|
case "VOICE_STATE_UPDATE":
|
||||||
|
{
|
||||||
|
var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_serializer);
|
||||||
|
var member = _members[data.UserId, data.GuildId];
|
||||||
|
/*if (_config.TrackActivity)
|
||||||
|
{
|
||||||
|
var user = _users[data.User.Id];
|
||||||
if (user != null)
|
if (user != null)
|
||||||
user.UpdateActivity();
|
user.UpdateActivity(DateTime.UtcNow);
|
||||||
}
|
}*/
|
||||||
else
|
if (member != null)
|
||||||
{
|
{
|
||||||
var member = _members[data.UserId, channel.ServerId];
|
member.Update(data);
|
||||||
if (member != null)
|
if (member.IsSpeaking)
|
||||||
member.UpdateActivity();
|
{
|
||||||
|
member.IsSpeaking = false;
|
||||||
|
RaiseUserIsSpeaking(member, false);
|
||||||
|
}
|
||||||
|
RaiseUserVoiceStateUpdated(member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
//Voice
|
//Settings
|
||||||
case "VOICE_STATE_UPDATE":
|
case "USER_UPDATE":
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_serializer);
|
|
||||||
var member = _members[data.UserId, data.GuildId];
|
|
||||||
/*if (_config.TrackActivity)
|
|
||||||
{
|
{
|
||||||
var user = _users[data.User.Id];
|
var data = e.Payload.ToObject<UserUpdateEvent>(_serializer);
|
||||||
|
var user = _users[data.Id];
|
||||||
if (user != null)
|
if (user != null)
|
||||||
user.UpdateActivity(DateTime.UtcNow);
|
|
||||||
}*/
|
|
||||||
if (member != null)
|
|
||||||
{
|
|
||||||
member.Update(data);
|
|
||||||
if (member.IsSpeaking)
|
|
||||||
{
|
{
|
||||||
member.IsSpeaking = false;
|
user.Update(data);
|
||||||
RaiseUserIsSpeaking(member, false);
|
RaiseUserUpdated(user);
|
||||||
}
|
}
|
||||||
RaiseUserVoiceStateUpdated(member);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case "USER_SETTINGS_UPDATE":
|
||||||
|
|
||||||
//Settings
|
|
||||||
case "USER_UPDATE":
|
|
||||||
{
|
|
||||||
var data = e.Payload.ToObject<UserUpdateEvent>(_serializer);
|
|
||||||
var user = _users[data.Id];
|
|
||||||
if (user != null)
|
|
||||||
{
|
{
|
||||||
user.Update(data);
|
//TODO: Process this
|
||||||
RaiseUserUpdated(user);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
case "USER_SETTINGS_UPDATE":
|
|
||||||
{
|
|
||||||
//TODO: Process this
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
//Internal (handled in DiscordSimpleClient)
|
//Internal (handled in DiscordSimpleClient)
|
||||||
case "VOICE_SERVER_UPDATE":
|
case "VOICE_SERVER_UPDATE":
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//Others
|
//Others
|
||||||
default:
|
default:
|
||||||
RaiseOnLog(LogMessageSeverity.Warning, LogMessageSource.DataWebSocket, $"Unknown message type: {e.Type}");
|
RaiseOnLog(LogMessageSeverity.Warning, LogMessageSource.DataWebSocket, $"Unknown message type: {e.Type}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user