Skip to content

Commit dd3f2e4

Browse files
committed
Reorganizing code
1 parent bf73ca3 commit dd3f2e4

24 files changed

+213
-251
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*.user
77
*.userosscache
88
*.sln.docstates
9+
Tokens/
910

1011
# User-specific files (MonoDevelop/Xamarin Studio)
1112
*.userprefs
@@ -15,6 +16,7 @@
1516
[Dd]ebugPublic/
1617
[Rr]elease/
1718
[Rr]eleases/
19+
Properties/
1820
x64/
1921
x86/
2022
bld/
Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
1-
using Discord.WebSocket;
2-
using DiscordNet.Handlers;
3-
using System;
4-
using System.Threading.Tasks;
5-
6-
namespace DiscordNet.Controllers
7-
{
8-
public class MainHandler
9-
{
10-
public DiscordSocketClient Client;
11-
public IServiceProvider Services;
12-
13-
public CommandHandler CommandHandler { get; private set; }
14-
public QueryHandler QueryHandler { get; private set; }
15-
16-
public readonly string Prefix = "<@274366085011079169> ";
17-
18-
public MainHandler(DiscordSocketClient client, IServiceProvider services)
19-
{
20-
Client = client;
21-
Services = services;
22-
CommandHandler = new CommandHandler();
23-
QueryHandler = new QueryHandler();
24-
}
25-
26-
public async Task InitializeEarlyAsync()
27-
{
28-
await CommandHandler.InitializeAsync(this, Services);
29-
QueryHandler.Initialize();
30-
}
31-
32-
public MainHandler() => new MainHandler();
33-
}
34-
}
1+
using Discord.WebSocket;
2+
using DiscordNet.Handlers;
3+
using System;
4+
using System.Threading.Tasks;
5+
6+
namespace DiscordNet.Controllers
7+
{
8+
public class MainController
9+
{
10+
public DiscordSocketClient Client;
11+
public IServiceProvider Services;
12+
13+
public CommandHandler CommandHandler { get; private set; }
14+
public QueryHandler QueryHandler { get; private set; }
15+
16+
public readonly string Prefix = "<@274366085011079169> ";
17+
18+
public MainController(DiscordSocketClient client, IServiceProvider services)
19+
{
20+
Client = client;
21+
Services = services;
22+
CommandHandler = new CommandHandler();
23+
QueryHandler = new QueryHandler();
24+
}
25+
26+
public async Task InitializeEarlyAsync()
27+
{
28+
await CommandHandler.InitializeAsync(this, Services);
29+
QueryHandler.Initialize();
30+
}
31+
}
32+
}

src/DiscordNet/DiscordNet.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using Discord;
2-
using Discord.Addons.Paginator;
32
using Discord.WebSocket;
43
using DiscordNet.Controllers;
54
using DiscordNet.Github;
65
using Microsoft.Extensions.DependencyInjection;
6+
using Paginator;
77
using System;
8+
using System.IO;
89
using System.Linq;
910
using System.Text.RegularExpressions;
1011
using System.Threading;
@@ -15,12 +16,17 @@ namespace DiscordNet
1516
public class DiscordNet
1617
{
1718
private DiscordSocketClient _client;
18-
private MainHandler _mainHandler;
19+
private MainController _mainController;
1920

2021
private Regex _githubRegex = new Regex("(?<=\\s|^)##(?<number>[0-9]{1,4})(?=\\s|$)", RegexOptions.Compiled | RegexOptions.ECMAScript);
2122

2223
public async Task RunAsync()
2324
{
25+
string discordToken = await File.ReadAllTextAsync("Tokens/Discord.txt");
26+
string githubToken = await File.ReadAllTextAsync("Tokens/Github.txt");
27+
28+
GithubRest.AuthorizationHeader = githubToken;
29+
2430
_client = new DiscordSocketClient(new DiscordSocketConfig()
2531
{
2632
LogLevel = LogSeverity.Info,
@@ -82,12 +88,12 @@ public async Task RunAsync()
8288

8389
var services = new ServiceCollection();
8490
services.AddSingleton(_client);
85-
services.AddPaginator(_client);
91+
services.AddSingleton(new PaginatorService(_client));
8692

87-
_mainHandler = new MainHandler(_client, services.BuildServiceProvider());
88-
await _mainHandler.InitializeEarlyAsync();
93+
_mainController = new MainController(_client, services.BuildServiceProvider());
94+
await _mainController.InitializeEarlyAsync();
8995

90-
await _client.LoginAsync(TokenType.Bot, "...");
96+
await _client.LoginAsync(TokenType.Bot, discordToken);
9197
await _client.StartAsync();
9298
await Task.Delay(-1);
9399
}

src/DiscordNet/DiscordNet.csproj

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
<OutputType>Exe</OutputType>
88
<PackageId>DiscordNet</PackageId>
99
<PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
10-
<RuntimeFrameworkVersion>2.0.5</RuntimeFrameworkVersion>
10+
<RuntimeFrameworkVersion>2.1</RuntimeFrameworkVersion>
1111
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
1212
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
1313
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
1414
</PropertyGroup>
1515

1616
<ItemGroup>
17-
<PackageReference Include="Discord.Addons.Paginator" Version="1.0.27-dev" />
1817
<PackageReference Include="Discord.Net.Commands" Version="2.0.1" />
1918
<PackageReference Include="Discord.Net.Core" Version="2.0.1" />
2019
<PackageReference Include="Discord.Net.Rest" Version="2.0.1" />
@@ -24,6 +23,16 @@
2423
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="2.6.1" />
2524
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="2.6.1" />
2625
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" />
26+
<PackageReference Include="Paginator" Version="1.0.4" />
27+
</ItemGroup>
28+
29+
<ItemGroup>
30+
<None Update="Tokens\Discord.txt">
31+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
32+
</None>
33+
<None Update="Tokens\Github.txt">
34+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
35+
</None>
2736
</ItemGroup>
2837

2938
</Project>

src/DiscordNet/Handlers/CommandHandler.cs

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
using Discord;
2-
using Discord.Addons.Paginator;
32
using Discord.Commands;
43
using Discord.WebSocket;
54
using DiscordNet.Controllers;
65
using DiscordNet.EmbedExtension;
76
using DiscordNet.Modules.Addons;
87
using Microsoft.Extensions.Caching.Memory;
98
using Microsoft.Extensions.DependencyInjection;
9+
using Paginator;
1010
using System;
1111
using System.Linq;
1212
using System.Reflection;
@@ -20,10 +20,10 @@ public class CommandHandler
2020
private CommandService _commandService;
2121
private DiscordSocketClient _client;
2222
private IServiceProvider _services;
23-
private MainHandler _mainHandler;
24-
private MemoryCache cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(3) });
23+
private MainController _mainHandler;
24+
private MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(3) });
2525

26-
public async Task InitializeAsync(MainHandler MainHandler, IServiceProvider services)
26+
public async Task InitializeAsync(MainController MainHandler, IServiceProvider services)
2727
{
2828
_mainHandler = MainHandler;
2929
_client = services.GetService<DiscordSocketClient>();
@@ -58,16 +58,15 @@ private Task HandleUpdate(Cacheable<IMessage, ulong> before, SocketMessage after
5858
ulong? id;
5959
if ((id = GetOurMessageIdFromCache(before.Id)) != null)
6060
{
61-
var botMessage = await channel.GetMessageAsync(id.Value) as IUserMessage;
62-
if (botMessage == null)
61+
if (!(await channel.GetMessageAsync(id.Value) is IUserMessage botMessage))
6362
return;
6463
int argPos = 0;
6564
if (!afterSocket.HasMentionPrefix(_client.CurrentUser, ref argPos)) return;
6665
var reply = await BuildReply(afterSocket, after.Content.Substring(argPos));
6766

6867
if (reply.Item1 == null && reply.Item2 == null && reply.Item3 == null)
6968
return;
70-
var pagination = _services.GetService<PaginationService>();
69+
var pagination = _services.GetService<PaginatorService>();
7170
var isPaginatedMessage = pagination.IsPaginatedMessage(id.Value);
7271
if (reply.Item3 != null)
7372
{
@@ -110,7 +109,7 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos)
110109
return;
111110
IUserMessage message;
112111
if (reply.Item3 != null)
113-
message = await (_services.GetService<PaginationService>()).SendPaginatedMessageAsync(msg.Channel, reply.Item3);
112+
message = await (_services.GetService<PaginatorService>()).SendPaginatedMessageAsync(msg.Channel, reply.Item3);
114113
else
115114
message = await msg.Channel.SendMessageAsync(reply.Item1, embed: reply.Item2?.Build());
116115
AddCache(msg.Id, message.Id);
@@ -135,7 +134,7 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos)
135134
var tuple = await _mainHandler.QueryHandler.RunAsync(message);
136135
if (tuple.Item2 is PaginatorBuilder pag)
137136
{
138-
var paginated = new PaginatedMessage(pag.Pages, "Results", user: msg.Author, options: new AppearanceOptions { Timeout = TimeSpan.FromMinutes(10) });
137+
var paginated = new PaginatedMessage(pag.Pages, PaginatedMessageActions.Simplified, "Results", user: msg.Author, options: new AppearanceOptions { TimeoutAfterLastAction = TimeSpan.FromMinutes(3) });
139138
return (null, null, paginated);
140139
}
141140
else
@@ -152,16 +151,10 @@ public async Task HandleCommandAsync(SocketUserMessage msg, int argPos)
152151
}
153152

154153
public void AddCache(ulong userMessageId, ulong ourMessageId)
155-
{
156-
cache.Set(userMessageId, ourMessageId, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) });
157-
}
154+
=> _cache.Set(userMessageId, ourMessageId, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) });
158155

159156
public ulong? GetOurMessageIdFromCache(ulong messageId)
160-
{
161-
if (cache.TryGetValue<ulong>(messageId, out ulong id))
162-
return id;
163-
return null;
164-
}
157+
=> _cache.TryGetValue<ulong>(messageId, out ulong id) ? (ulong?)id : null;
165158

166159
public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, string command = null)
167160
{
@@ -195,7 +188,7 @@ public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, s
195188
if (cmds.Count != 0)
196189
{
197190
var list = cmds.Select(x => $"{((x as CommandInfo)?.Name ?? (x as ModuleInfo)?.Name)}").OrderBy(x => x);
198-
sb.AppendLine($"**{mi.Name}:** {String.Join(", ", list)}");
191+
sb.AppendLine($"**{mi.Name}:** {string.Join(", ", list)}");
199192
}
200193
}
201194
}
@@ -230,7 +223,7 @@ public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, s
230223
SearchResult sr = _commandService.Search(context, command);
231224
if (sr.IsSuccess)
232225
{
233-
Nullable<CommandMatch> cmd = null;
226+
CommandMatch? cmd = null;
234227
if (sr.Commands.Count == 1)
235228
cmd = sr.Commands.First();
236229
else
@@ -252,13 +245,13 @@ public async Task<EmbedBuilder> HelpEmbedBuilderAsync(ICommandContext context, s
252245
eb.Author.Name = $"Help: {cmd.Value.Command.Aliases.First()}";
253246
sb.Append($"Usage: {_mainHandler.Prefix}{cmd.Value.Command.Aliases.First()}");
254247
if (cmd.Value.Command.Parameters.Count != 0)
255-
sb.Append($" [{String.Join("] [", cmd.Value.Command.Parameters.Select(x => x.Name))}]");
256-
if (!String.IsNullOrEmpty(cmd.Value.Command.Summary))
248+
sb.Append($" [{string.Join("] [", cmd.Value.Command.Parameters.Select(x => x.Name))}]");
249+
if (!string.IsNullOrEmpty(cmd.Value.Command.Summary))
257250
sb.Append($"\nSummary: {cmd.Value.Command.Summary}");
258-
if (!String.IsNullOrEmpty(cmd.Value.Command.Remarks))
251+
if (!string.IsNullOrEmpty(cmd.Value.Command.Remarks))
259252
sb.Append($"\nRemarks: {cmd.Value.Command.Remarks}");
260253
if (cmd.Value.Command.Aliases.Count != 1)
261-
sb.Append($"\nAliases: {String.Join(", ", cmd.Value.Command.Aliases.Where(x => x != cmd.Value.Command.Aliases.First()))}");
254+
sb.Append($"\nAliases: {string.Join(", ", cmd.Value.Command.Aliases.Where(x => x != cmd.Value.Command.Aliases.First()))}");
262255
eb.Description = sb.ToString();
263256
}
264257
else

src/DiscordNet/Handlers/DocsUrlHandler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ namespace DiscordNet.Handlers
44
{
55
public class DocsUrlHandler
66
{
7-
public static string DocsBaseUrl { get; set; } = "https://discord.foxbot.me/latest/";
7+
public static string DocsBaseUrl { get; set; } = "https://docs.stillu.cc/";
88

99
private string[] _docsUrls =
1010
{
11+
"https://docs.stillu.cc/",
1112
"https://discord.foxbot.me/latest/",
1213
"http://discord.devpaulo.com.br/"
1314
};

src/DiscordNet/Handlers/QueryHandler.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@ namespace DiscordNet.Handlers
77
{
88
public class QueryHandler
99
{
10-
public Cache Cache { get; private set; }
10+
public Cache Cache { get; }
1111

1212
public QueryHandler()
13-
{
14-
Cache = new Cache();
15-
}
13+
=> Cache = new Cache();
1614

1715
public void Initialize()
18-
{
19-
Cache.Initialize();
20-
}
16+
=> Cache.Initialize();
2117

2218
public async Task<(string, EmbedBuilder)> RunAsync(string text)
2319
{
@@ -44,8 +40,6 @@ private async Task<EmbedBuilder> SearchAsync(InterpreterResult interpreterResult
4440
}
4541

4642
public bool IsReady()
47-
{
48-
return Cache.IsReady();
49-
}
43+
=> Cache.IsReady();
5044
}
5145
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,28 @@
11
using Discord;
22
using Discord.Commands;
33
using DiscordNet.Controllers;
4-
using System;
5-
using System.Collections.Generic;
6-
using System.Linq;
7-
using System.Threading.Tasks;
84

95
namespace DiscordNet.Modules.Addons
106
{
117
public class MyCommandContext : ICommandContext
128
{
139
public IDiscordClient Client { get; }
1410
public IGuild Guild { get; }
15-
public MainHandler MainHandler { get; }
11+
public MainController MainController { get; }
1612
public IMessageChannel Channel { get; }
1713
public IUser User { get; }
1814
public IUserMessage Message { get; }
1915

2016
public bool IsPrivate => Channel is IPrivateChannel;
2117

22-
public MyCommandContext(IDiscordClient client, MainHandler handler, IUserMessage msg)
18+
public MyCommandContext(IDiscordClient client, MainController controller, IUserMessage msg)
2319
{
2420
Client = client;
2521
Guild = (msg.Channel as IGuildChannel)?.Guild;
2622
Channel = msg.Channel;
2723
User = msg.Author;
2824
Message = msg;
29-
MainHandler = handler;
25+
MainController = controller;
3026
}
3127
}
3228
}

0 commit comments

Comments
 (0)