@@ -71,7 +71,7 @@ namespace Discord
foreach (var channel in extendedModel.Channels)
foreach (var channel in extendedModel.Channels)
{
{
_channels.Update(channel.Id, model.Id, channel);
_channels.Update(channel.Id, model.Id, channel);
if (channel.Type == ChannelTypes.Text)
/* if (channel.Type == ChannelTypes.Text)
{
{
try
try
{
{
@@ -84,12 +84,12 @@ namespace Discord
}
}
}
}
catch { } //Bad Permissions?
catch { } //Bad Permissions?
}
}*/
}
}
foreach (var membership in extendedModel.Members)
foreach (var membership in extendedModel.Members)
{
{
_users.Update(membership.User.Id, membership.User);
_users.Update(membership.User.Id, membership.User);
server.AddMember(membership.User.Id);
server.AddMember(new Membership(server.Id, membership.User.Id, membership.JoinedAt, this) { RoleIds = membership.Roles, IsMuted = membership.IsMuted, IsDeafened = membership.IsDeaf } );
}
}
}
}
},
},
@@ -118,12 +118,13 @@ namespace Discord
{
{
var extendedModel = model as API.Models.Message;
var extendedModel = model as API.Models.Message;
message.Attachments = extendedModel.Attachments;
message.Attachments = extendedModel.Attachments;
message.Text = extendedModel.Content;
message.Embeds = extendedModel.Embeds;
message.Embeds = extendedModel.Embeds;
message.IsMentioningEveryone = extendedModel.IsMentioningEveryone;
message.IsMentioningEveryone = extendedModel.IsMentioningEveryone;
message.IsTTS = extendedModel.IsTextToSpeech;
message.IsTTS = extendedModel.IsTextToSpeech;
message.UserId = extendedModel.Author.Id;
message.MentionIds = extendedModel.Mentions.Select(x => x.Id).ToArray();
message.UserId = extendedModel.Author.Id;
message.Timestamp = extendedModel.Timestamp;
message.Timestamp = extendedModel.Timestamp;
message.Text = extendedModel.Content;
}
}
if (model is WebSocketEvents.MessageUpdate)
if (model is WebSocketEvents.MessageUpdate)
{
{
@@ -137,8 +138,9 @@ namespace Discord
(key, parentKey) => new Role(key, parentKey, this),
(key, parentKey) => new Role(key, parentKey, this),
(role, model) =>
(role, model) =>
{
{
role.Name = model.Name;
role.Permissions = model.Permissions;
role.Permissions = model.Permissions;
},
},
role => { }
role => { }
);
);
_users = new AsyncCache<User, API.Models.UserReference>(
_users = new AsyncCache<User, API.Models.UserReference>(
@@ -153,13 +155,13 @@ namespace Discord
var extendedModel = model as SelfUserInfo;
var extendedModel = model as SelfUserInfo;
user.Email = extendedModel.Email;
user.Email = extendedModel.Email;
user.IsVerified = extendedModel.IsVerified;
user.IsVerified = extendedModel.IsVerified;
}
}
if (model is PresenceUserInfo)
if (model is PresenceUserInfo)
{
{
var extendedModel = model as PresenceUserInfo;
var extendedModel = model as PresenceUserInfo;
user.GameId = extendedModel.GameId;
user.GameId = extendedModel.GameId;
user.Status = extendedModel.Status;
user.Status = extendedModel.Status;
}
}
},
},
user => { }
user => { }
);
);
@@ -261,8 +263,9 @@ namespace Discord
var data = e.Event.ToObject<WebSocketEvents.GuildMemberAdd>();
var data = e.Event.ToObject<WebSocketEvents.GuildMemberAdd>();
var user = _users.Update(data.User.Id, data.User);
var user = _users.Update(data.User.Id, data.User);
var server = _servers[data.GuildId];
var server = _servers[data.GuildId];
server._members[user.Id] = true;
RaiseMemberAdded(user, server);
var membership = new Membership(server.Id, data.User.Id, data.JoinedAt, this) { RoleIds = data.Roles };
server.AddMember(membership);
RaiseMemberAdded(membership, server);
}
}
break;
break;
case "GUILD_MEMBER_UPDATE":
case "GUILD_MEMBER_UPDATE":
@@ -270,7 +273,10 @@ namespace Discord
var data = e.Event.ToObject<WebSocketEvents.GuildMemberUpdate>();
var data = e.Event.ToObject<WebSocketEvents.GuildMemberUpdate>();
var user = _users.Update(data.User.Id, data.User);
var user = _users.Update(data.User.Id, data.User);
var server = _servers[data.GuildId];
var server = _servers[data.GuildId];
RaiseMemberUpdated(user, server);
var membership = server.GetMembership(data.User.Id);
if (membership != null)
membership.RoleIds = data.Roles;
RaiseMemberUpdated(membership, server);
}
}
break;
break;
case "GUILD_MEMBER_REMOVE":
case "GUILD_MEMBER_REMOVE":
@@ -278,8 +284,12 @@ namespace Discord
var data = e.Event.ToObject<WebSocketEvents.GuildMemberRemove>();
var data = e.Event.ToObject<WebSocketEvents.GuildMemberRemove>();
var user = _users.Update(data.User.Id, data.User);
var user = _users.Update(data.User.Id, data.User);
var server = _servers[data.GuildId];
var server = _servers[data.GuildId];
if (server != null && server.RemoveMember(user.Id))
RaiseMemberRemoved(user, server);
if (server != null)
{
var membership = server.RemoveMember(user.Id);
if (membership != null)
RaiseMemberRemoved(membership, server);
}
}
}
break;
break;
@@ -287,14 +297,14 @@ namespace Discord
case "GUILD_ROLE_CREATE":
case "GUILD_ROLE_CREATE":
{
{
var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>();
var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>();
var role = _roles.Update(data.Role.Id, data.Role);
var role = _roles.Update(data.Role.Id, data.GuildId, data. Role);
RaiseRoleCreated(role);
RaiseRoleCreated(role);
}
}
break;
break;
case "GUILD_ROLE_UPDATE":
case "GUILD_ROLE_UPDATE":
{
{
var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>();
var data = e.Event.ToObject<WebSocketEvents.GuildRoleCreateUpdate>();
var role = _roles.Update(data.Role.Id, data.Role);
var role = _roles.Update(data.Role.Id, data.GuildId, data. Role);
RaiseRoleUpdated(role);
RaiseRoleUpdated(role);
}
}
break;
break;
@@ -454,7 +464,9 @@ namespace Discord
}
}
public Role GetRole(string id) => _roles[id];
public Role GetRole(string id) => _roles[id];
public Role FindRole(string name)
public Role FindRole(Server server, string name)
=> FindRole(server.Id, name);
public Role FindRole(string serverId, string name)
{
{
return _roles
return _roles
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
@@ -515,13 +527,13 @@ namespace Discord
}
}
//Channels
//Channels
public Task<Channel> CreateChannel(Server server, string name, string region )
=> CreateChannel(server.Id, name, region );
public async Task<Channel> CreateChannel(string serverId, string name, string region )
public Task<Channel> CreateChannel(Server server, string name, string type )
=> CreateChannel(server.Id, name, type );
public async Task<Channel> CreateChannel(string serverId, string name, string type )
{
{
CheckReady();
CheckReady();
var response = await DiscordAPI.CreateChannel(serverId, name, region , _httpOptions);
return _channels.Update(response.Id, response);
var response = await DiscordAPI.CreateChannel(serverId, name, type , _httpOptions);
return _channels.Update(response.Id, serverId, response);
}
}
public Task<Channel> CreatePMChannel(User user)
public Task<Channel> CreatePMChannel(User user)
=> CreatePMChannel(user.Id);
=> CreatePMChannel(user.Id);