Added search commands and avatarurl

This commit is contained in:
Brandon Smith
2015-08-13 15:05:57 -03:00
parent 214ca84ca7
commit 031a79aa7e
4 changed files with 76 additions and 24 deletions

View File

@@ -38,7 +38,8 @@
// /api/users // /api/users
public static readonly string Users = $"{BaseApi}/users"; public static readonly string Users = $"{BaseApi}/users";
public static string UserChannels(string id) => $"{Users}/{id}/channels"; public static string UserChannels(string userId) => $"{Users}/{userId}/channels";
public static string UserAvatar(string userId, string avatarId) => $"{Users}/{userId}/avatars/{avatarId}.jpg";
// /api/voice // /api/voice
public static readonly string Voice = $"{BaseApi}/voice"; public static readonly string Voice = $"{BaseApi}/voice";

View File

@@ -25,30 +25,25 @@ namespace Discord
public IEnumerable<User> Users { get { return _users; } } public IEnumerable<User> Users { get { return _users; } }
private AsyncCache<User, API.Models.UserReference> _users; private AsyncCache<User, API.Models.UserReference> _users;
public User GetUser(string id) => _users[id];
public IEnumerable<Server> Servers { get { return _servers; } } public IEnumerable<Server> Servers { get { return _servers; } }
private AsyncCache<Server, API.Models.ServerReference> _servers; private AsyncCache<Server, API.Models.ServerReference> _servers;
public Server GetServer(string id) => _servers[id];
public IEnumerable<Channel> Channels { get { return _channels; } } public IEnumerable<Channel> Channels { get { return _channels; } }
private AsyncCache<Channel, API.Models.ChannelReference> _channels; private AsyncCache<Channel, API.Models.ChannelReference> _channels;
public Channel GetChannel(string id) => _channels[id];
public IEnumerable<Message> Messages { get { return _messages; } } public IEnumerable<Message> Messages { get { return _messages; } }
private AsyncCache<Message, API.Models.MessageReference> _messages; private AsyncCache<Message, API.Models.MessageReference> _messages;
public Message GetMessage(string id) => _messages[id];
public IEnumerable<Role> Roles { get { return _roles; } } public IEnumerable<Role> Roles { get { return _roles; } }
private AsyncCache<Role, API.Models.Role> _roles; private AsyncCache<Role, API.Models.Role> _roles;
public Role GetRole(string id) => _roles[id];
public bool IsConnected { get { return _isReady; } } public bool IsConnected { get { return _isReady; } }
public DiscordClient() public DiscordClient()
{ {
string version = typeof(DiscordClient).GetTypeInfo().Assembly.GetName().Version.ToString(2); string version = typeof(DiscordClient).GetTypeInfo().Assembly.GetName().Version.ToString(2);
_httpOptions = new HttpOptions { UserAgent = $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)" }; _httpOptions = new HttpOptions($"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)");
_servers = new AsyncCache<Server, API.Models.ServerReference>( _servers = new AsyncCache<Server, API.Models.ServerReference>(
(key, parentKey) => new Server(key, this), (key, parentKey) => new Server(key, this),
@@ -60,7 +55,7 @@ namespace Discord
var defaultChannel = new ChannelReference() { Id = server.DefaultChannelId, GuildId = server.Id }; var defaultChannel = new ChannelReference() { Id = server.DefaultChannelId, GuildId = server.Id };
_channels.Update(defaultChannel.Id, defaultChannel.GuildId, defaultChannel); _channels.Update(defaultChannel.Id, defaultChannel.GuildId, defaultChannel);
} }
if (model is ExtendedServerInfo) if (model is ExtendedServerInfo)
{ {
var extendedModel = model as ExtendedServerInfo; var extendedModel = model as ExtendedServerInfo;
server.AFKChannelId = extendedModel.AFKChannelId; server.AFKChannelId = extendedModel.AFKChannelId;
@@ -81,7 +76,7 @@ namespace Discord
try try
{ {
var messages = DiscordAPI.GetMessages(channel.Id, _httpOptions).Result.OrderBy(x => x.Timestamp); var messages = DiscordAPI.GetMessages(channel.Id, _httpOptions).Result.OrderBy(x => x.Timestamp);
foreach (var message in messages) foreach (var message in messages)
{ {
var msg = _messages.Update(message.Id, message.ChannelId, message); var msg = _messages.Update(message.Id, message.ChannelId, message);
if (msg.User != null) if (msg.User != null)
@@ -122,14 +117,14 @@ namespace Discord
if (model is API.Models.Message) if (model is API.Models.Message)
{ {
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.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.UserId = extendedModel.Author.Id;
message.Timestamp = extendedModel.Timestamp; message.Timestamp = extendedModel.Timestamp;
} }
if (model is WebSocketEvents.MessageUpdate) if (model is WebSocketEvents.MessageUpdate)
{ {
var extendedModel = model as WebSocketEvents.MessageUpdate; var extendedModel = model as WebSocketEvents.MessageUpdate;
@@ -140,7 +135,7 @@ namespace Discord
); );
_roles = new AsyncCache<Role, API.Models.Role>( _roles = new AsyncCache<Role, API.Models.Role>(
(key, parentKey) => new Role(key, parentKey, this), (key, parentKey) => new Role(key, parentKey, this),
(role, model) => (role, model) =>
{ {
role.Permissions = model.Permissions; role.Permissions = model.Permissions;
}, },
@@ -150,7 +145,7 @@ namespace Discord
(key, parentKey) => new User(key, this), (key, parentKey) => new User(key, this),
(user, model) => (user, model) =>
{ {
user.Avatar = model.Avatar; user.AvatarId = model.Avatar;
user.Discriminator = model.Discriminator; user.Discriminator = model.Discriminator;
user.Name = model.Username; user.Name = model.Username;
if (model is SelfUserInfo) if (model is SelfUserInfo)
@@ -170,8 +165,8 @@ namespace Discord
); );
_webSocket = new DiscordWebSocket(); _webSocket = new DiscordWebSocket();
_webSocket.Connected += (s,e) => RaiseConnected(); _webSocket.Connected += (s, e) => RaiseConnected();
_webSocket.Disconnected += async (s,e) => _webSocket.Disconnected += async (s, e) =>
{ {
//Reconnect if we didn't cause the disconnect //Reconnect if we didn't cause the disconnect
RaiseDisconnected(); RaiseDisconnected();
@@ -282,7 +277,7 @@ 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)) if (server != null && server.RemoveMember(user.Id))
RaiseMemberRemoved(user, server); RaiseMemberRemoved(user, server);
} }
@@ -405,6 +400,62 @@ namespace Discord
_webSocket.OnDebugMessage += (s, e) => RaiseOnDebugMessage(e.Message); _webSocket.OnDebugMessage += (s, e) => RaiseOnDebugMessage(e.Message);
} }
//Collections
public User GetUser(string id) => _users[id];
public User FindUser(string name)
{
return _users
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();
}
public User FindUser(string name, string discriminator)
{
return _users
.Where(x =>
string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase) &&
x.Discriminator == discriminator
)
.FirstOrDefault();
}
public User FindChannelUser(Channel channel, string name)
=> FindChannelUser(channel, name);
public User FindChannelUser(string channelId, string name)
{
return _users
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();
}
public Server GetServer(string id) => _servers[id];
public Server FindServer(string name)
{
return _servers
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();
}
public Channel GetChannel(string id) => _channels[id];
public Channel FindChannel(string name)
{
return _channels
.Where(x => string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();
}
public Channel FindChannel(Server server, string name)
=> FindChannel(server.Id, name);
public Channel FindChannel(string serverId, string name)
{
return _channels
.Where(x =>
string.Equals(x.Name, name, StringComparison.InvariantCultureIgnoreCase) &&
x.ServerId == serverId
)
.FirstOrDefault();
}
public Message GetMessage(string id) => _messages[id];
public Role GetRole(string id) => _roles[id];
//Auth //Auth
public async Task Connect(string email, string password) public async Task Connect(string email, string password)
{ {
@@ -514,7 +565,6 @@ namespace Discord
catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { }
} }
//Invites //Invites
public Task<Invite> CreateInvite(Server server, int maxAge, int maxUses, bool isTemporary, bool hasXkcdPass) public Task<Invite> CreateInvite(Server server, int maxAge, int maxUses, bool isTemporary, bool hasXkcdPass)
{ {

View File

@@ -11,12 +11,13 @@ namespace Discord.Helpers
{ {
internal class HttpOptions internal class HttpOptions
{ {
public string UserAgent, Token; public readonly string UserAgent;
public string Token;
public CookieContainer Cookies; public CookieContainer Cookies;
public HttpOptions(string userAgent = null) public HttpOptions(string userAgent)
{ {
UserAgent = userAgent ?? "DiscordAPI"; UserAgent = userAgent;
Cookies = new CookieContainer(1); Cookies = new CookieContainer(1);
} }
} }
@@ -103,8 +104,6 @@ namespace Discord.Helpers
private static async Task<string> SendRequest(string method, string path, string data, HttpOptions options, bool hasResponse) private static async Task<string> SendRequest(string method, string path, string data, HttpOptions options, bool hasResponse)
{ {
options = options ?? new HttpOptions();
//Create Request //Create Request
HttpWebRequest request = WebRequest.CreateHttp(path); HttpWebRequest request = WebRequest.CreateHttp(path);
request.Accept = "*/*"; request.Accept = "*/*";

View File

@@ -1,4 +1,5 @@
using System; using Discord.API;
using System;
namespace Discord namespace Discord
{ {
@@ -9,7 +10,8 @@ namespace Discord
public string Id { get; } public string Id { get; }
public string Name { get; internal set; } public string Name { get; internal set; }
public string Avatar { get; internal set; } public string AvatarId { get; internal set; }
public string AvatarUrl { get { return Endpoints.UserAvatar(Id, AvatarId); } }
public string Discriminator { get; internal set; } public string Discriminator { get; internal set; }
public string Email { get; internal set; } public string Email { get; internal set; }
public bool IsVerified { get; internal set; } = true; public bool IsVerified { get; internal set; } = true;