diff --git a/.gitignore b/.gitignore index f1e3d20..e86c763 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.user *.userosscache *.sln.docstates +Tokens/ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs @@ -15,6 +16,7 @@ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ +Properties/ x64/ x86/ bld/ diff --git a/src/DiscordNet/Controllers/MainHandler.cs b/src/DiscordNet/Controllers/MainController.cs similarity index 80% rename from src/DiscordNet/Controllers/MainHandler.cs rename to src/DiscordNet/Controllers/MainController.cs index 74743ac..7eba3b3 100644 --- a/src/DiscordNet/Controllers/MainHandler.cs +++ b/src/DiscordNet/Controllers/MainController.cs @@ -1,34 +1,32 @@ -using Discord.WebSocket; -using DiscordNet.Handlers; -using System; -using System.Threading.Tasks; - -namespace DiscordNet.Controllers -{ - public class MainHandler - { - public DiscordSocketClient Client; - public IServiceProvider Services; - - public CommandHandler CommandHandler { get; private set; } - public QueryHandler QueryHandler { get; private set; } - - public readonly string Prefix = "<@274366085011079169> "; - - public MainHandler(DiscordSocketClient client, IServiceProvider services) - { - Client = client; - Services = services; - CommandHandler = new CommandHandler(); - QueryHandler = new QueryHandler(); - } - - public async Task InitializeEarlyAsync() - { - await CommandHandler.InitializeAsync(this, Services); - QueryHandler.Initialize(); - } - - public MainHandler() => new MainHandler(); - } -} +using Discord.WebSocket; +using DiscordNet.Handlers; +using System; +using System.Threading.Tasks; + +namespace DiscordNet.Controllers +{ + public class MainController + { + public DiscordSocketClient Client; + public IServiceProvider Services; + + public CommandHandler CommandHandler { get; private set; } + public QueryHandler QueryHandler { get; private set; } + + public readonly string Prefix = "<@274366085011079169> "; + + public MainController(DiscordSocketClient client, IServiceProvider services) + { + Client = client; + Services = services; + CommandHandler = new CommandHandler(); + QueryHandler = new QueryHandler(); + } + + public async Task InitializeEarlyAsync() + { + await CommandHandler.InitializeAsync(this, Services); + QueryHandler.Initialize(); + } + } +} diff --git a/src/DiscordNet/DiscordNet.cs b/src/DiscordNet/DiscordNet.cs index de9bdec..75b1727 100644 --- a/src/DiscordNet/DiscordNet.cs +++ b/src/DiscordNet/DiscordNet.cs @@ -1,10 +1,11 @@ using Discord; -using Discord.Addons.Paginator; using Discord.WebSocket; using DiscordNet.Controllers; using DiscordNet.Github; using Microsoft.Extensions.DependencyInjection; +using Paginator; using System; +using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Threading; @@ -15,12 +16,17 @@ namespace DiscordNet public class DiscordNet { private DiscordSocketClient _client; - private MainHandler _mainHandler; + private MainController _mainController; private Regex _githubRegex = new Regex("(?<=\\s|^)##(?[0-9]{1,4})(?=\\s|$)", RegexOptions.Compiled | RegexOptions.ECMAScript); public async Task RunAsync() { + string discordToken = await File.ReadAllTextAsync("Tokens/Discord.txt"); + string githubToken = await File.ReadAllTextAsync("Tokens/Github.txt"); + + GithubRest.AuthorizationHeader = githubToken; + _client = new DiscordSocketClient(new DiscordSocketConfig() { LogLevel = LogSeverity.Info, @@ -82,12 +88,12 @@ public async Task RunAsync() var services = new ServiceCollection(); services.AddSingleton(_client); - services.AddPaginator(_client); + services.AddSingleton(new PaginatorService(_client)); - _mainHandler = new MainHandler(_client, services.BuildServiceProvider()); - await _mainHandler.InitializeEarlyAsync(); + _mainController = new MainController(_client, services.BuildServiceProvider()); + await _mainController.InitializeEarlyAsync(); - await _client.LoginAsync(TokenType.Bot, "..."); + await _client.LoginAsync(TokenType.Bot, discordToken); await _client.StartAsync(); await Task.Delay(-1); } diff --git a/src/DiscordNet/DiscordNet.csproj b/src/DiscordNet/DiscordNet.csproj index 70ec68f..d3545d0 100644 --- a/src/DiscordNet/DiscordNet.csproj +++ b/src/DiscordNet/DiscordNet.csproj @@ -7,14 +7,13 @@ Exe DiscordNet $(PackageTargetFallback);dnxcore50 - 2.0.5 + 2.1 false false false - @@ -24,6 +23,16 @@ + + + + + + PreserveNewest + + + PreserveNewest + diff --git a/src/DiscordNet/Handlers/CommandHandler.cs b/src/DiscordNet/Handlers/CommandHandler.cs index 2312d59..ec52452 100644 --- a/src/DiscordNet/Handlers/CommandHandler.cs +++ b/src/DiscordNet/Handlers/CommandHandler.cs @@ -1,5 +1,4 @@ using Discord; -using Discord.Addons.Paginator; using Discord.Commands; using Discord.WebSocket; using DiscordNet.Controllers; @@ -7,6 +6,7 @@ using DiscordNet.Modules.Addons; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; +using Paginator; using System; using System.Linq; using System.Reflection; @@ -20,10 +20,10 @@ public class CommandHandler private CommandService _commandService; private DiscordSocketClient _client; private IServiceProvider _services; - private MainHandler _mainHandler; - private MemoryCache cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(3) }); + private MainController _mainHandler; + private MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(3) }); - public async Task InitializeAsync(MainHandler MainHandler, IServiceProvider services) + public async Task InitializeAsync(MainController MainHandler, IServiceProvider services) { _mainHandler = MainHandler; _client = services.GetService(); @@ -58,8 +58,7 @@ private Task HandleUpdate(Cacheable before, SocketMessage after ulong? id; if ((id = GetOurMessageIdFromCache(before.Id)) != null) { - var botMessage = await channel.GetMessageAsync(id.Value) as IUserMessage; - if (botMessage == null) + if (!(await channel.GetMessageAsync(id.Value) is IUserMessage botMessage)) return; int argPos = 0; if (!afterSocket.HasMentionPrefix(_client.CurrentUser, ref argPos)) return; @@ -67,7 +66,7 @@ private Task HandleUpdate(Cacheable before, SocketMessage after if (reply.Item1 == null && reply.Item2 == null && reply.Item3 == null) return; - var pagination = _services.GetService(); + var pagination = _services.GetService(); var isPaginatedMessage = pagination.IsPaginatedMessage(id.Value); if (reply.Item3 != null) { @@ -110,7 +109,7 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos) return; IUserMessage message; if (reply.Item3 != null) - message = await (_services.GetService()).SendPaginatedMessageAsync(msg.Channel, reply.Item3); + message = await (_services.GetService()).SendPaginatedMessageAsync(msg.Channel, reply.Item3); else message = await msg.Channel.SendMessageAsync(reply.Item1, embed: reply.Item2?.Build()); AddCache(msg.Id, message.Id); @@ -135,7 +134,7 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos) var tuple = await _mainHandler.QueryHandler.RunAsync(message); if (tuple.Item2 is PaginatorBuilder pag) { - var paginated = new PaginatedMessage(pag.Pages, "Results", user: msg.Author, options: new AppearanceOptions { Timeout = TimeSpan.FromMinutes(10) }); + var paginated = new PaginatedMessage(pag.Pages, PaginatedMessageActions.Simplified, "Results", user: msg.Author, options: new AppearanceOptions { TimeoutAfterLastAction = TimeSpan.FromMinutes(3) }); return (null, null, paginated); } else @@ -152,16 +151,10 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos) } public void AddCache(ulong userMessageId, ulong ourMessageId) - { - cache.Set(userMessageId, ourMessageId, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) }); - } + => _cache.Set(userMessageId, ourMessageId, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) }); public ulong? GetOurMessageIdFromCache(ulong messageId) - { - if (cache.TryGetValue(messageId, out ulong id)) - return id; - return null; - } + => _cache.TryGetValue(messageId, out ulong id) ? (ulong?)id : null; public async Task HelpEmbedBuilderAsync(ICommandContext context, string command = null) { @@ -195,7 +188,7 @@ public async Task HelpEmbedBuilderAsync(ICommandContext context, s if (cmds.Count != 0) { var list = cmds.Select(x => $"{((x as CommandInfo)?.Name ?? (x as ModuleInfo)?.Name)}").OrderBy(x => x); - sb.AppendLine($"**{mi.Name}:** {String.Join(", ", list)}"); + sb.AppendLine($"**{mi.Name}:** {string.Join(", ", list)}"); } } } @@ -230,7 +223,7 @@ public async Task HelpEmbedBuilderAsync(ICommandContext context, s SearchResult sr = _commandService.Search(context, command); if (sr.IsSuccess) { - Nullable cmd = null; + CommandMatch? cmd = null; if (sr.Commands.Count == 1) cmd = sr.Commands.First(); else @@ -252,13 +245,13 @@ public async Task HelpEmbedBuilderAsync(ICommandContext context, s eb.Author.Name = $"Help: {cmd.Value.Command.Aliases.First()}"; sb.Append($"Usage: {_mainHandler.Prefix}{cmd.Value.Command.Aliases.First()}"); if (cmd.Value.Command.Parameters.Count != 0) - sb.Append($" [{String.Join("] [", cmd.Value.Command.Parameters.Select(x => x.Name))}]"); - if (!String.IsNullOrEmpty(cmd.Value.Command.Summary)) + sb.Append($" [{string.Join("] [", cmd.Value.Command.Parameters.Select(x => x.Name))}]"); + if (!string.IsNullOrEmpty(cmd.Value.Command.Summary)) sb.Append($"\nSummary: {cmd.Value.Command.Summary}"); - if (!String.IsNullOrEmpty(cmd.Value.Command.Remarks)) + if (!string.IsNullOrEmpty(cmd.Value.Command.Remarks)) sb.Append($"\nRemarks: {cmd.Value.Command.Remarks}"); if (cmd.Value.Command.Aliases.Count != 1) - sb.Append($"\nAliases: {String.Join(", ", cmd.Value.Command.Aliases.Where(x => x != cmd.Value.Command.Aliases.First()))}"); + sb.Append($"\nAliases: {string.Join(", ", cmd.Value.Command.Aliases.Where(x => x != cmd.Value.Command.Aliases.First()))}"); eb.Description = sb.ToString(); } else diff --git a/src/DiscordNet/Handlers/DocsUrlHandler.cs b/src/DiscordNet/Handlers/DocsUrlHandler.cs index 7b0021b..3373849 100644 --- a/src/DiscordNet/Handlers/DocsUrlHandler.cs +++ b/src/DiscordNet/Handlers/DocsUrlHandler.cs @@ -4,10 +4,11 @@ namespace DiscordNet.Handlers { public class DocsUrlHandler { - public static string DocsBaseUrl { get; set; } = "https://discord.foxbot.me/latest/"; + public static string DocsBaseUrl { get; set; } = "https://docs.stillu.cc/"; private string[] _docsUrls = { + "https://docs.stillu.cc/", "https://discord.foxbot.me/latest/", "http://discord.devpaulo.com.br/" }; diff --git a/src/DiscordNet/Handlers/QueryHandler.cs b/src/DiscordNet/Handlers/QueryHandler.cs index f330894..83c4878 100644 --- a/src/DiscordNet/Handlers/QueryHandler.cs +++ b/src/DiscordNet/Handlers/QueryHandler.cs @@ -7,17 +7,13 @@ namespace DiscordNet.Handlers { public class QueryHandler { - public Cache Cache { get; private set; } + public Cache Cache { get; } public QueryHandler() - { - Cache = new Cache(); - } + => Cache = new Cache(); public void Initialize() - { - Cache.Initialize(); - } + => Cache.Initialize(); public async Task<(string, EmbedBuilder)> RunAsync(string text) { @@ -44,8 +40,6 @@ private async Task SearchAsync(InterpreterResult interpreterResult } public bool IsReady() - { - return Cache.IsReady(); - } + => Cache.IsReady(); } } diff --git a/src/DiscordNet/Modules/Addons/MyCommandContext.cs b/src/DiscordNet/Modules/Addons/MyCommandContext.cs index a671ac8..fb79387 100644 --- a/src/DiscordNet/Modules/Addons/MyCommandContext.cs +++ b/src/DiscordNet/Modules/Addons/MyCommandContext.cs @@ -1,10 +1,6 @@ using Discord; using Discord.Commands; using DiscordNet.Controllers; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DiscordNet.Modules.Addons { @@ -12,21 +8,21 @@ public class MyCommandContext : ICommandContext { public IDiscordClient Client { get; } public IGuild Guild { get; } - public MainHandler MainHandler { get; } + public MainController MainController { get; } public IMessageChannel Channel { get; } public IUser User { get; } public IUserMessage Message { get; } public bool IsPrivate => Channel is IPrivateChannel; - public MyCommandContext(IDiscordClient client, MainHandler handler, IUserMessage msg) + public MyCommandContext(IDiscordClient client, MainController controller, IUserMessage msg) { Client = client; Guild = (msg.Channel as IGuildChannel)?.Guild; Channel = msg.Channel; User = msg.Author; Message = msg; - MainHandler = handler; + MainController = controller; } } } diff --git a/src/DiscordNet/Modules/Commands.cs b/src/DiscordNet/Modules/Commands.cs index 36d900c..c89b975 100644 --- a/src/DiscordNet/Modules/Commands.cs +++ b/src/DiscordNet/Modules/Commands.cs @@ -27,8 +27,8 @@ public class GeneralCommands : ModuleBase [Summary("Delete all the messages from this bot within the last X messages")] public async Task Clean(int messages = 30) { - if (messages > 50) - messages = 50; + if (messages > 100) + messages = 100; else if (messages < 2) messages = 2; var msgs = await Context.Channel.GetMessagesAsync(messages).FlattenAsync(); @@ -39,19 +39,15 @@ public async Task Clean(int messages = 30) [Command("docs")] [Summary("Show the docs url")] - public async Task Docs() - { - await ReplyAsync($"Docs: {DocsUrlHandler.DocsBaseUrl}"); - } + public Task Docs() + => ReplyAsync($"Docs: {DocsUrlHandler.DocsBaseUrl}"); [Command("invite")] [Summary("Show the invite url")] - public async Task Invite() - { - await ReplyAsync($"Invite: https://discordapp.com/oauth2/authorize?client_id=274366085011079169&scope=bot"); - } + public Task Invite() + => ReplyAsync($"Invite: https://discordapp.com/oauth2/authorize?client_id=274366085011079169&scope=bot"); - [Command("guides")] + /*[Command("guides")] [Alias("guide")] [Summary("Show the url of a guide")] public async Task Guides([Remainder] string guide = null) @@ -142,7 +138,7 @@ public async Task Guides([Remainder] string guide = null) }; await ReplyAsync("", embed: eb.Build()); } - } + }*/ [Command("info")] [Summary("Show some information")] @@ -173,17 +169,17 @@ public async Task Info() { x.IsInline = true; x.Name = "Docs"; - x.Value = $"- Types: {Context.MainHandler.QueryHandler.Cache.GetTypeCount()}\n" + - $"- Methods: {Context.MainHandler.QueryHandler.Cache.GetMethodCount()}\n" + - $"- Properties: {Context.MainHandler.QueryHandler.Cache.GetPropertyCount()}"; + x.Value = $"- Types: {Context.MainController.QueryHandler.Cache.GetTypeCount()}\n" + + $"- Methods: {Context.MainController.QueryHandler.Cache.GetMethodCount()}\n" + + $"- Properties: {Context.MainController.QueryHandler.Cache.GetPropertyCount()}"; }); eb.AddField(x => { x.IsInline = true; x.Name = "​"; // <- zero-width space here - x.Value = $"- Events: {Context.MainHandler.QueryHandler.Cache.GetEventCount()}\n" + - $"- Extension types: {Context.MainHandler.QueryHandler.Cache.GetExtensionTypesCount()}\n" + - $"- Extension methods: {Context.MainHandler.QueryHandler.Cache.GetExtensioMethodsCount()}"; + x.Value = $"- Events: {Context.MainController.QueryHandler.Cache.GetEventCount()}\n" + + $"- Extension types: {Context.MainController.QueryHandler.Cache.GetExtensionTypesCount()}\n" + + $"- Extension methods: {Context.MainController.QueryHandler.Cache.GetExtensioMethodsCount()}"; }); await ReplyAsync("", false, eb.Build()); } @@ -259,8 +255,6 @@ public class HelpCommand : ModuleBase [Command("help")] [Summary("Shows the help command")] public async Task Help([Remainder] string command = null) - { - await ReplyAsync("", embed: (await Context.MainHandler.CommandHandler.HelpEmbedBuilderAsync(Context, command)).Build()); - } + => await ReplyAsync("", embed: (await Context.MainController.CommandHandler.HelpEmbedBuilderAsync(Context, command)).Build()); } } \ No newline at end of file diff --git a/src/DiscordNet/Program.cs b/src/DiscordNet/Program.cs index e018044..5006242 100644 --- a/src/DiscordNet/Program.cs +++ b/src/DiscordNet/Program.cs @@ -2,6 +2,7 @@ { public class Program { - public static void Main(string[] args) => new DiscordNet().RunAsync().GetAwaiter().GetResult(); + public static void Main(string[] args) + => new DiscordNet().RunAsync().GetAwaiter().GetResult(); } } diff --git a/src/DiscordNet/Query/Cache.cs b/src/DiscordNet/Query/Cache.cs index d036d17..952f40f 100644 --- a/src/DiscordNet/Query/Cache.cs +++ b/src/DiscordNet/Query/Cache.cs @@ -9,93 +9,65 @@ namespace DiscordNet.Query { - public class CacheBag - { - public ConcurrentBag Methods; - public ConcurrentBag Properties; - public ConcurrentBag Events; - public CacheBag() - { - Methods = new ConcurrentBag(); - Properties = new ConcurrentBag(); - Events = new ConcurrentBag(); - } - public CacheBag(CacheBag cb) - { - Methods = new ConcurrentBag(cb.Methods); - Properties = new ConcurrentBag(cb.Properties); - Events = new ConcurrentBag(cb.Events); - } - } public class Cache { - private ConcurrentDictionary allTypes; - private ConcurrentDictionary> extensions; - private int methodCount, propertyCount, extensionMethods, eventCount; - private bool ready; + private ConcurrentDictionary _allTypes; + private ConcurrentDictionary> _extensions; + private int _methodCount, _propertyCount, _extensionMethods, _eventCount; + private bool _ready; + public Cache() { - allTypes = new ConcurrentDictionary(); - extensions = new ConcurrentDictionary>(); - ready = false; - methodCount = propertyCount = extensionMethods = eventCount = 0; + _allTypes = new ConcurrentDictionary(); + _extensions = new ConcurrentDictionary>(); + _ready = false; + _methodCount = _propertyCount = _extensionMethods = _eventCount = 0; } public void Initialize() { - methodCount = propertyCount = 0; - ready = false; + _methodCount = _propertyCount = _extensionMethods = _eventCount = 0; + _ready = false; Populate(); - ready = true; - methodCount = allTypes.Sum(x => x.Value.Methods.Count); - propertyCount = allTypes.Sum(x => x.Value.Properties.Count); - extensionMethods = extensions.Sum(x => x.Value.Count); - eventCount = allTypes.Sum(x => x.Value.Events.Count); + _ready = true; + _methodCount = _allTypes.Sum(x => x.Value.Methods.Count); + _propertyCount = _allTypes.Sum(x => x.Value.Properties.Count); + _extensionMethods = _extensions.Sum(x => x.Value.Count); + _eventCount = _allTypes.Sum(x => x.Value.Events.Count); } public int GetTypeCount() - { - return allTypes.Count; - } + => _allTypes.Count; public int GetMethodCount() - { - return methodCount; - } + => _methodCount; public int GetPropertyCount() - { - return propertyCount; - } + => _propertyCount; public int GetEventCount() - { - return eventCount; - } + => _eventCount; public int GetExtensionTypesCount() - { - return extensions.Count; - } + => _extensions.Count; public int GetExtensioMethodsCount() - { - return extensionMethods; - } + => _extensionMethods; public CacheBag GetCacheBag(TypeInfoWrapper type) { - if (!allTypes.ContainsKey(type)) + if (!_allTypes.ContainsKey(type)) return null; - CacheBag cb = new CacheBag(allTypes[type]); - foreach (ConcurrentBag bag in extensions.Values) + CacheBag cb = new CacheBag(_allTypes[type]); + foreach (ConcurrentBag bag in _extensions.Values) foreach (MethodInfo mi in bag) if (CheckTypeAndInterfaces(type, mi.GetParameters().FirstOrDefault()?.ParameterType.GetTypeInfo())) cb.Methods.Add(mi); return cb; } - private bool CheckTypeAndInterfaces(TypeInfoWrapper toBeChecked, TypeInfo toSearch) => CheckTypeAndInterfaces(toBeChecked.TypeInfo, toSearch); + private bool CheckTypeAndInterfaces(TypeInfoWrapper toBeChecked, TypeInfo toSearch) + => CheckTypeAndInterfaces(toBeChecked.TypeInfo, toSearch); private bool CheckTypeAndInterfaces(TypeInfo toBeChecked, TypeInfo toSearch) { if (toSearch == null || toBeChecked == null) @@ -109,14 +81,12 @@ private bool CheckTypeAndInterfaces(TypeInfo toBeChecked, TypeInfo toSearch) } public List SearchTypes(string name, bool exactName = true) - { - return allTypes.Keys.Where(x => (exactName ? x.DisplayName.ToLower() == name.ToLower() : SearchFunction(name, x.DisplayName.ToLower()))).ToList(); - } + => _allTypes.Keys.Where(x => (exactName ? x.DisplayName.ToLower() == name.ToLower() : SearchFunction(name, x.DisplayName.ToLower()))).ToList(); public List SearchMethods(string name, bool exactName = true) { List result = new List(); - foreach(TypeInfoWrapper type in allTypes.Keys) + foreach(TypeInfoWrapper type in _allTypes.Keys) result.AddRange(GetCacheBag(type).Methods.Where(x => (exactName ? x.Name.ToLower() == name.ToLower() : SearchFunction(name, x.Name.ToLower()))).Select(x => new MethodInfoWrapper(type, x))); return result; } @@ -124,7 +94,7 @@ public List SearchMethods(string name, bool exactName = true) public List SearchProperties(string name, bool exactName = true) { List result = new List(); - foreach (TypeInfoWrapper type in allTypes.Keys) + foreach (TypeInfoWrapper type in _allTypes.Keys) result.AddRange(GetCacheBag(type).Properties.Where(x => (exactName ? x.Name.ToLower() == name.ToLower() : SearchFunction(name, x.Name.ToLower()))).Select(x => new PropertyInfoWrapper(type, x))); return result; } @@ -132,7 +102,7 @@ public List SearchProperties(string name, bool exactName = public List SearchEvents(string name, bool exactName = true) { List result = new List(); - foreach (TypeInfoWrapper type in allTypes.Keys) + foreach (TypeInfoWrapper type in _allTypes.Keys) result.AddRange(GetCacheBag(type).Events.Where(x => (exactName ? x.Name.ToLower() == name.ToLower() : SearchFunction(name, x.Name.ToLower()))).Select(x => new EventInfoWrapper(type, x))); return result; } @@ -146,9 +116,7 @@ private bool SearchFunction(string searchString, string objectName) } private void ForceReference() - { - new DiscordWebhookClient(null); - } + => new DiscordWebhookClient(null); private void Populate() { @@ -164,21 +132,21 @@ private void LoadType(Type type) type = type.GetGenericTypeDefinition(); if (!CheckNamespace(type.Namespace)) return; - if (allTypes.Keys.FirstOrDefault(x => x.TypeInfo == type.GetTypeInfo()) == null) + if (_allTypes.Keys.FirstOrDefault(x => x.TypeInfo == type.GetTypeInfo()) == null) { TypeInfoWrapper tiw = new TypeInfoWrapper(type); CacheBag cb = new CacheBag(); - allTypes[tiw] = cb; + _allTypes[tiw] = cb; foreach (MethodInfo mi in type.GetRuntimeMethods()) { if (CheckNamespace(mi.DeclaringType.Namespace) && (mi.IsPublic || mi.IsFamily) && !mi.IsSpecialName && !cb.Methods.Contains(mi)) cb.Methods.Add(mi); if (mi.IsDefined(typeof(ExtensionAttribute), false) && mi.IsStatic && mi.IsPublic) { - if (extensions.Keys.FirstOrDefault(x => x.TypeInfo == type.GetTypeInfo()) == null) - extensions[tiw] = new ConcurrentBag(new MethodInfo[] { mi }); + if (_extensions.Keys.FirstOrDefault(x => x.TypeInfo == type.GetTypeInfo()) == null) + _extensions[tiw] = new ConcurrentBag(new MethodInfo[] { mi }); else - extensions[tiw].Add(mi); + _extensions[tiw].Add(mi); } } var rt = type.GetRuntimeProperties(); @@ -198,27 +166,23 @@ private void LoadInterface(Type _interface, TypeInfoWrapper parent) if (CheckNamespace(_interface.Namespace)) LoadType(_interface); foreach (MethodInfo mi in _interface.GetRuntimeMethods()) - if (CheckNamespace(mi.DeclaringType.Namespace) && (mi.IsPublic || mi.IsFamily) && !mi.IsSpecialName && !allTypes[parent].Methods.Contains(mi)) - if (!allTypes[parent].Methods.Contains(mi)) - allTypes[parent].Methods.Add(mi); + if (CheckNamespace(mi.DeclaringType.Namespace) && (mi.IsPublic || mi.IsFamily) && !mi.IsSpecialName && !_allTypes[parent].Methods.Contains(mi)) + if (!_allTypes[parent].Methods.Contains(mi)) + _allTypes[parent].Methods.Add(mi); foreach (PropertyInfo pi in _interface.GetRuntimeProperties()) - if (!allTypes[parent].Properties.Contains(pi) && !allTypes[parent].Properties.Any(x => x.Name == pi.Name)) - allTypes[parent].Properties.Add(pi); + if (!_allTypes[parent].Properties.Contains(pi) && !_allTypes[parent].Properties.Any(x => x.Name == pi.Name)) + _allTypes[parent].Properties.Add(pi); foreach (EventInfo ei in _interface.GetRuntimeEvents()) - if (!allTypes[parent].Events.Contains(ei)) - allTypes[parent].Events.Add(ei); + if (!_allTypes[parent].Events.Contains(ei)) + _allTypes[parent].Events.Add(ei); foreach (Type type in _interface.GetInterfaces()) LoadInterface(type, parent); } public bool IsReady() - { - return ready; - } + => _ready; private bool CheckNamespace(string ns) - { - return ns.StartsWith("Discord") && !ns.StartsWith("Discord.Net"); - } + => ns.StartsWith("Discord") && !ns.StartsWith("Discord.Net"); } } diff --git a/src/DiscordNet/Query/Extensions/BaseDisplay.cs b/src/DiscordNet/Query/Extensions/BaseDisplay.cs index d4be1ef..e24ec0c 100644 --- a/src/DiscordNet/Query/Extensions/BaseDisplay.cs +++ b/src/DiscordNet/Query/Extensions/BaseDisplay.cs @@ -89,9 +89,7 @@ private string GetDocsUrlPath(object o) //Generic types will return like Type`1 and the docs change to Type-1 private string SanitizeDocsUrl(string text) - { - return text.Replace('`', '-'); - } + => text.Replace('`', '-'); public bool IsInherited(object o) { @@ -103,9 +101,7 @@ public bool IsInherited(object o) } private List GetPaths(IEnumerable list) - { - return list.Select(x => GetPath(x)).ToList(); - } + => list.Select(x => GetPath(x)).ToList(); public string GetPath(object o, bool withInheritanceMarkup = true) { @@ -202,9 +198,7 @@ private string StripTags(string source) } private string FormatGithubUrl(string url) - { - return $"[{url.Substring(url.LastIndexOf('/') + 1)}]({url})"; - } + => $"[{url.Substring(url.LastIndexOf('/') + 1)}]({url})"; private string FormatDocsUrl(string url) { diff --git a/src/DiscordNet/Query/Extensions/EventDisplay.cs b/src/DiscordNet/Query/Extensions/EventDisplay.cs index 0449aac..2cf4ccd 100644 --- a/src/DiscordNet/Query/Extensions/EventDisplay.cs +++ b/src/DiscordNet/Query/Extensions/EventDisplay.cs @@ -66,9 +66,7 @@ private async Task ShowEventsAsync(EmbedBuilder eb, EmbedAuthorBui } private string EventToDocs(EventInfoWrapper ei) - { - return $"#{ei.Parent.TypeInfo.Namespace.Replace('.', '_')}_{ei.Parent.TypeInfo.Name}_{ei.Event.Name}"; - } + => $"#{ei.Parent.TypeInfo.Namespace.Replace('.', '_')}_{ei.Parent.TypeInfo.Name}_{ei.Event.Name}"; private string BuildEvent(EventInfoWrapper ev) { diff --git a/src/DiscordNet/Query/Extensions/MethodDisplay.cs b/src/DiscordNet/Query/Extensions/MethodDisplay.cs index e60c730..278f565 100644 --- a/src/DiscordNet/Query/Extensions/MethodDisplay.cs +++ b/src/DiscordNet/Query/Extensions/MethodDisplay.cs @@ -114,11 +114,7 @@ private string BuildPreParameter(ParameterInfo pi) } private string GetParameterDefaultValue(ParameterInfo pi) - { - if (pi.HasDefaultValue) - return $" = {GetDefaultValueAsString(pi.DefaultValue)}"; - return ""; - } + => pi.HasDefaultValue ? $" = {GetDefaultValueAsString(pi.DefaultValue)}" : ""; private string GetDefaultValueAsString(object obj) { diff --git a/src/DiscordNet/Query/Extensions/PropertyDisplay.cs b/src/DiscordNet/Query/Extensions/PropertyDisplay.cs index d2aeaf7..a4b8b7d 100644 --- a/src/DiscordNet/Query/Extensions/PropertyDisplay.cs +++ b/src/DiscordNet/Query/Extensions/PropertyDisplay.cs @@ -72,10 +72,6 @@ private async Task ShowPropertiesAsync(EmbedBuilder eb, EmbedAutho } private string PropertyToDocs(PropertyInfoWrapper pi) - { - if (IsInherited(pi)) - return ""; - return $"#{pi.Parent.TypeInfo.Namespace.Replace('.', '_')}_{pi.Parent.TypeInfo.Name}_{pi.Property.Name}"; - } + => IsInherited(pi) ? "" : $"#{pi.Parent.TypeInfo.Namespace.Replace('.', '_')}_{pi.Parent.TypeInfo.Name}_{pi.Property.Name}"; } } diff --git a/src/DiscordNet/Query/ResultDisplay.cs b/src/DiscordNet/Query/ResultDisplay.cs index 7cea2e2..d7a7785 100644 --- a/src/DiscordNet/Query/ResultDisplay.cs +++ b/src/DiscordNet/Query/ResultDisplay.cs @@ -1,5 +1,4 @@ using Discord; -using Discord.Addons.Paginator; using DiscordNet.EmbedExtension; using DiscordNet.Query.Results; using DiscordNet.Query.Wrappers; @@ -66,7 +65,7 @@ private async Task ShowMultipleAsync(IEnumerable { x.Name = (i == 0 ? $"Also found in ({list.Count()}/{singleList.Count() - 1}):" : "​"); - x.Value = String.Join("\n", list.Skip(3 * i).Take(3).Select(y => GetParent(y))); + x.Value = string.Join("\n", list.Skip(3 * i).Take(3).Select(y => GetParent(y))); x.IsInline = true; }); } @@ -100,7 +99,7 @@ private EmbedBuilder ShowList(IEnumerable> obj) private IEnumerable ToPages(IEnumerable list, int pages, int size) { for (int i = 0; i < pages; i++) - yield return String.Join("\n", GetPaths(list.Skip(i * size).Take(size))); + yield return string.Join("\n", GetPaths(list.Skip(i * size).Take(size))); } } } diff --git a/src/DiscordNet/Query/Results/DocsHttpResult.cs b/src/DiscordNet/Query/Results/DocsHttpResult.cs index 67fd42b..3f2f01a 100644 --- a/src/DiscordNet/Query/Results/DocsHttpResult.cs +++ b/src/DiscordNet/Query/Results/DocsHttpResult.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DiscordNet.Query.Results +namespace DiscordNet.Query.Results { public class DocsHttpResult { diff --git a/src/DiscordNet/Query/Search.cs b/src/DiscordNet/Query/Search.cs index f495063..eb324d0 100644 --- a/src/DiscordNet/Query/Search.cs +++ b/src/DiscordNet/Query/Search.cs @@ -11,6 +11,7 @@ public class Search { private InterpreterResult _result; private Cache _cache; + public Search(InterpreterResult result, Cache cache) { _result = result; @@ -50,7 +51,8 @@ private List NamespaceFilter(List oldList, boo return list; } - private bool CompareNamespaces(TypeInfo toCompare) => CompareNamespaces($"{toCompare.Namespace}.{toCompare.Name}"); + private bool CompareNamespaces(TypeInfo toCompare) + => CompareNamespaces($"{toCompare.Namespace}.{toCompare.Name}"); private bool CompareNamespaces(string toCompare) { if (_result.Namespace == null) diff --git a/src/DiscordNet/Query/TextInterpreter.cs b/src/DiscordNet/Query/TextInterpreter.cs index c180671..c0df765 100644 --- a/src/DiscordNet/Query/TextInterpreter.cs +++ b/src/DiscordNet/Query/TextInterpreter.cs @@ -7,8 +7,8 @@ namespace DiscordNet.Query public class TextInterpreter { private static readonly Regex rgx = new Regex("[^0-9a-z_ ]", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ECMAScript); - private string _text; + public TextInterpreter(string text) { _text = $" {text} "; diff --git a/src/DiscordNet/Query/Utils/CacheBag.cs b/src/DiscordNet/Query/Utils/CacheBag.cs new file mode 100644 index 0000000..14ed55b --- /dev/null +++ b/src/DiscordNet/Query/Utils/CacheBag.cs @@ -0,0 +1,24 @@ +using System.Collections.Concurrent; +using System.Reflection; + +namespace DiscordNet.Query +{ + public class CacheBag + { + public ConcurrentBag Methods; + public ConcurrentBag Properties; + public ConcurrentBag Events; + public CacheBag() + { + Methods = new ConcurrentBag(); + Properties = new ConcurrentBag(); + Events = new ConcurrentBag(); + } + public CacheBag(CacheBag cb) + { + Methods = new ConcurrentBag(cb.Methods); + Properties = new ConcurrentBag(cb.Properties); + Events = new ConcurrentBag(cb.Events); + } + } +} diff --git a/src/DiscordNet/Query/Enums.cs b/src/DiscordNet/Query/Utils/SearchType.cs similarity index 93% rename from src/DiscordNet/Query/Enums.cs rename to src/DiscordNet/Query/Utils/SearchType.cs index a3e854a..53da02e 100644 --- a/src/DiscordNet/Query/Enums.cs +++ b/src/DiscordNet/Query/Utils/SearchType.cs @@ -1,10 +1,10 @@ -namespace DiscordNet.Query -{ - public enum SearchType - { - ALL, - JUST_TEXT, - JUST_NAMESPACE, - NONE - } -} +namespace DiscordNet.Query +{ + public enum SearchType + { + ALL, + JUST_TEXT, + JUST_NAMESPACE, + NONE + } +} diff --git a/src/DiscordNet/Rest/Github/GitSearchResult.cs b/src/DiscordNet/Rest/Github/GitSearchResult.cs new file mode 100644 index 0000000..157be88 --- /dev/null +++ b/src/DiscordNet/Rest/Github/GitSearchResult.cs @@ -0,0 +1,13 @@ +namespace DiscordNet.Github +{ + public class GitSearchResult + { + public string Name { get; protected internal set; } + public string HtmlUrl { get; protected internal set; } + + public override string ToString() + { + return $"{Name}: {HtmlUrl}"; + } + } +} diff --git a/src/DiscordNet/Rest/GithubRest.cs b/src/DiscordNet/Rest/Github/GithubRest.cs similarity index 91% rename from src/DiscordNet/Rest/GithubRest.cs rename to src/DiscordNet/Rest/Github/GithubRest.cs index a70207f..0e8324c 100644 --- a/src/DiscordNet/Rest/GithubRest.cs +++ b/src/DiscordNet/Rest/Github/GithubRest.cs @@ -12,18 +12,18 @@ namespace DiscordNet.Github { public class GithubRest { - private const string ApiUrl = "https://api.github.com"; - private const string AcceptHeader = "application/vnd.github.v3+json"; - private const string UserAgentHeader = "Discord.Net Docs Bot/1.0"; - private const string AuthorizationHeader = "token ..."; + private const string _apiUrl = "https://api.github.com"; + private const string _acceptHeader = "application/vnd.github.v3+json"; + private const string _userAgentHeader = "Discord.Net Docs Bot/1.0"; + internal static string AuthorizationHeader; private static async Task SendRequestAsync(HttpMethod method, string endpoint, string extra = null) { using (var http = new HttpClient()) { - var request = new HttpRequestMessage(method, $"{ApiUrl}{endpoint}{extra}"); - request.Headers.Add("Accept", AcceptHeader); - request.Headers.Add("User-Agent", UserAgentHeader); + var request = new HttpRequestMessage(method, $"{_apiUrl}{endpoint}{extra}"); + request.Headers.Add("Accept", _acceptHeader); + request.Headers.Add("User-Agent", _userAgentHeader); request.Headers.Add("Authorization", AuthorizationHeader); var response = await http.SendAsync(request); if (response.IsSuccessStatusCode) @@ -146,15 +146,4 @@ public static async Task GetPropertyUrlAsync(PropertyInfoWrapper propert return await GetTypeUrlAsync(property.Parent); } } - - public class GitSearchResult - { - public string Name { get; protected internal set; } - public string HtmlUrl { get; protected internal set; } - - public override string ToString() - { - return $"{Name}: {HtmlUrl}"; - } - } } diff --git a/src/DiscordNet/Utils.cs b/src/DiscordNet/Utils.cs index 7965b52..9868e54 100644 --- a/src/DiscordNet/Utils.cs +++ b/src/DiscordNet/Utils.cs @@ -7,9 +7,7 @@ namespace DiscordNet public static class Utils { public static IEnumerable RandomShuffle(this IEnumerable source) - { - return source.Select(t => new {Index = Guid.NewGuid(), Value = t}).OrderBy(p => p.Index).Select(p => p.Value); - } + => source.Select(t => new {Index = Guid.NewGuid(), Value = t}).OrderBy(p => p.Index).Select(p => p.Value); public static string BuildType(Type type) {