Skip to content

Commit

Permalink
Reorganizing code
Browse files Browse the repository at this point in the history
  • Loading branch information
SubZero0 committed Jan 14, 2019
1 parent bf73ca3 commit dd3f2e4
Show file tree
Hide file tree
Showing 24 changed files with 213 additions and 251 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*.user
*.userosscache
*.sln.docstates
Tokens/

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
Expand All @@ -15,6 +16,7 @@
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
Properties/
x64/
x86/
bld/
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
18 changes: 12 additions & 6 deletions src/DiscordNet/DiscordNet.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -15,12 +16,17 @@ namespace DiscordNet
public class DiscordNet
{
private DiscordSocketClient _client;
private MainHandler _mainHandler;
private MainController _mainController;

private Regex _githubRegex = new Regex("(?<=\\s|^)##(?<number>[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,
Expand Down Expand Up @@ -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);
}
Expand Down
13 changes: 11 additions & 2 deletions src/DiscordNet/DiscordNet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@
<OutputType>Exe</OutputType>
<PackageId>DiscordNet</PackageId>
<PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
<RuntimeFrameworkVersion>2.0.5</RuntimeFrameworkVersion>
<RuntimeFrameworkVersion>2.1</RuntimeFrameworkVersion>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Discord.Addons.Paginator" Version="1.0.27-dev" />
<PackageReference Include="Discord.Net.Commands" Version="2.0.1" />
<PackageReference Include="Discord.Net.Core" Version="2.0.1" />
<PackageReference Include="Discord.Net.Rest" Version="2.0.1" />
Expand All @@ -24,6 +23,16 @@
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="2.6.1" />
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="2.6.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" />
<PackageReference Include="Paginator" Version="1.0.4" />
</ItemGroup>

<ItemGroup>
<None Update="Tokens\Discord.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Tokens\Github.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
39 changes: 16 additions & 23 deletions src/DiscordNet/Handlers/CommandHandler.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
using Discord;
using Discord.Addons.Paginator;
using Discord.Commands;
using Discord.WebSocket;
using DiscordNet.Controllers;
using DiscordNet.EmbedExtension;
using DiscordNet.Modules.Addons;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Paginator;
using System;
using System.Linq;
using System.Reflection;
Expand All @@ -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<DiscordSocketClient>();
Expand Down Expand Up @@ -58,16 +58,15 @@ private Task HandleUpdate(Cacheable<IMessage, ulong> 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;
var reply = await BuildReply(afterSocket, after.Content.Substring(argPos));

if (reply.Item1 == null && reply.Item2 == null && reply.Item3 == null)
return;
var pagination = _services.GetService<PaginationService>();
var pagination = _services.GetService<PaginatorService>();
var isPaginatedMessage = pagination.IsPaginatedMessage(id.Value);
if (reply.Item3 != null)
{
Expand Down Expand Up @@ -110,7 +109,7 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos)
return;
IUserMessage message;
if (reply.Item3 != null)
message = await (_services.GetService<PaginationService>()).SendPaginatedMessageAsync(msg.Channel, reply.Item3);
message = await (_services.GetService<PaginatorService>()).SendPaginatedMessageAsync(msg.Channel, reply.Item3);
else
message = await msg.Channel.SendMessageAsync(reply.Item1, embed: reply.Item2?.Build());
AddCache(msg.Id, message.Id);
Expand All @@ -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
Expand All @@ -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<ulong>(messageId, out ulong id))
return id;
return null;
}
=> _cache.TryGetValue<ulong>(messageId, out ulong id) ? (ulong?)id : null;

public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, string command = null)
{
Expand Down Expand Up @@ -195,7 +188,7 @@ public async Task<EmbedBuilder> 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)}");
}
}
}
Expand Down Expand Up @@ -230,7 +223,7 @@ public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, s
SearchResult sr = _commandService.Search(context, command);
if (sr.IsSuccess)
{
Nullable<CommandMatch> cmd = null;
CommandMatch? cmd = null;
if (sr.Commands.Count == 1)
cmd = sr.Commands.First();
else
Expand All @@ -252,13 +245,13 @@ public async Task<EmbedBuilder> 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
Expand Down
3 changes: 2 additions & 1 deletion src/DiscordNet/Handlers/DocsUrlHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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/"
};
Expand Down
14 changes: 4 additions & 10 deletions src/DiscordNet/Handlers/QueryHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -44,8 +40,6 @@ private async Task<EmbedBuilder> SearchAsync(InterpreterResult interpreterResult
}

public bool IsReady()
{
return Cache.IsReady();
}
=> Cache.IsReady();
}
}
10 changes: 3 additions & 7 deletions src/DiscordNet/Modules/Addons/MyCommandContext.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
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
{
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;
}
}
}
Loading

0 comments on commit dd3f2e4

Please sign in to comment.