It is working
This commit is contained in:
parent
ecec55ec07
commit
5c45aad049
15
DML.Client/DML.Client.csproj
Normal file
15
DML.Client/DML.Client.csproj
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard1.4</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Discord.Net" Version="1.0.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\SweetLib\SweetLib\SweetLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
28
DML.Client/DMLClient.cs
Normal file
28
DML.Client/DMLClient.cs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DML.Client
|
||||||
|
{
|
||||||
|
public static class DMLClient
|
||||||
|
{
|
||||||
|
public static DiscordSocketClient Client { get; set; } = new DiscordSocketClient(new DiscordSocketConfig(){DefaultRetryMode = RetryMode.RetryRatelimit|RetryMode.RetryTimeouts});
|
||||||
|
|
||||||
|
public static async Task<bool> Login(string token)
|
||||||
|
{
|
||||||
|
await Client.LoginAsync(TokenType.User, token);
|
||||||
|
await Client.StartAsync();
|
||||||
|
await Task.Delay(1000);
|
||||||
|
|
||||||
|
while (Client.LoginState == LoginState.LoggingIn || Client.ConnectionState == ConnectionState.Connecting)
|
||||||
|
{
|
||||||
|
// wait
|
||||||
|
}
|
||||||
|
|
||||||
|
return Client.LoginState == LoginState.LoggedIn && Client.ConnectionState == ConnectionState.Connected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ using Discord.Net;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using DML.AppCore.Classes;
|
using DML.AppCore.Classes;
|
||||||
using DML.Application.Dialogs;
|
using DML.Application.Dialogs;
|
||||||
|
using DML.Client;
|
||||||
using LiteDB;
|
using LiteDB;
|
||||||
using SweetLib.Utils;
|
using SweetLib.Utils;
|
||||||
using SweetLib.Utils.Logger;
|
using SweetLib.Utils.Logger;
|
||||||
|
@ -20,7 +21,7 @@ namespace DML.Application.Classes
|
||||||
{
|
{
|
||||||
public static class Core
|
public static class Core
|
||||||
{
|
{
|
||||||
internal static DiscordSocketClient Client { get; set; }
|
//internal static DiscordSocketClient Client { get; set; }
|
||||||
internal static LiteDatabase Database { get; set; }
|
internal static LiteDatabase Database { get; set; }
|
||||||
internal static Settings Settings { get; set; }
|
internal static Settings Settings { get; set; }
|
||||||
internal static JobScheduler Scheduler { get; } = new JobScheduler();
|
internal static JobScheduler Scheduler { get; } = new JobScheduler();
|
||||||
|
@ -133,8 +134,8 @@ namespace DML.Application.Classes
|
||||||
DefaultRetryMode = RetryMode.AlwaysRetry,
|
DefaultRetryMode = RetryMode.AlwaysRetry,
|
||||||
};
|
};
|
||||||
|
|
||||||
Client = new DiscordSocketClient(config);
|
//Client = new DiscordSocketClient(config);
|
||||||
Client.Log += (arg) =>
|
DMLClient.Client.Log += (arg) =>
|
||||||
{
|
{
|
||||||
var logMessage = $"DiscordClient: {arg.Message}";
|
var logMessage = $"DiscordClient: {arg.Message}";
|
||||||
switch (arg.Severity)
|
switch (arg.Severity)
|
||||||
|
@ -163,9 +164,27 @@ namespace DML.Application.Classes
|
||||||
Logger.Info("Trying to log into discord...");
|
Logger.Info("Trying to log into discord...");
|
||||||
var abort = false;
|
var abort = false;
|
||||||
|
|
||||||
Client.Connected += Client_Connected;
|
DMLClient.Client.Connected += Client_Connected;
|
||||||
|
|
||||||
while ((Client.LoginState != LoginState.LoggedIn || Client.ConnectionState!=ConnectionState.Connected) && !abort)
|
var loggedIn = false;
|
||||||
|
|
||||||
|
while (!loggedIn)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(Settings.LoginToken))
|
||||||
|
{
|
||||||
|
Logger.Debug("Trying to login with last known token...");
|
||||||
|
loggedIn= await DMLClient.Login(Settings.LoginToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!loggedIn)
|
||||||
|
{
|
||||||
|
Logger.Debug("Showing dialog for username and password...");
|
||||||
|
var loginDlg = new LoginDialog();
|
||||||
|
loginDlg.ShowDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*while ((Client.LoginState != LoginState.LoggedIn || Client.ConnectionState!=ConnectionState.Connected) && !abort)
|
||||||
{
|
{
|
||||||
Logger.Debug(Client.ConnectionState.ToString());
|
Logger.Debug(Client.ConnectionState.ToString());
|
||||||
Logger.Debug(Client.LoginState.ToString());
|
Logger.Debug(Client.LoginState.ToString());
|
||||||
|
@ -199,13 +218,13 @@ namespace DML.Application.Classes
|
||||||
loginDlg.ShowDialog();
|
loginDlg.ShowDialog();
|
||||||
Logger.Trace("Dialog closed.");
|
Logger.Trace("Dialog closed.");
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
Logger.Debug("Start checking for invalid jobs...");
|
Logger.Debug("Start checking for invalid jobs...");
|
||||||
|
|
||||||
//Client
|
//Client
|
||||||
|
|
||||||
while (Client.Guilds.Count == 0)
|
while (DMLClient.Client.Guilds.Count == 0)
|
||||||
{
|
{
|
||||||
// wait until guilds are loaded
|
// wait until guilds are loaded
|
||||||
}
|
}
|
||||||
|
@ -262,7 +281,7 @@ namespace DML.Application.Classes
|
||||||
private static SocketGuild FindServerById(ulong id)
|
private static SocketGuild FindServerById(ulong id)
|
||||||
{
|
{
|
||||||
Logger.Trace($"Trying to find server by Id: {id}");
|
Logger.Trace($"Trying to find server by Id: {id}");
|
||||||
return (from s in Core.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
private static SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
||||||
|
|
|
@ -5,6 +5,7 @@ using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using DML.Application.Classes;
|
using DML.Application.Classes;
|
||||||
|
using DML.Client;
|
||||||
using SweetLib.Utils;
|
using SweetLib.Utils;
|
||||||
using static SweetLib.Utils.Logger.Logger;
|
using static SweetLib.Utils.Logger.Logger;
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ namespace DML.AppCore.Classes
|
||||||
private SocketGuild FindServerById(ulong id)
|
private SocketGuild FindServerById(ulong id)
|
||||||
{
|
{
|
||||||
Trace($"Trying to find server by Id: {id}");
|
Trace($"Trying to find server by Id: {id}");
|
||||||
return (from s in Core.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
||||||
|
@ -59,10 +60,10 @@ namespace DML.AppCore.Classes
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task<List<SocketMessage>> Scan()
|
internal async Task<List<IMessage>> Scan()
|
||||||
{
|
{
|
||||||
Debug($"Starting scan of guild {GuildId} channel {ChannelId}...");
|
Debug($"Starting scan of guild {GuildId} channel {ChannelId}...");
|
||||||
var result = new List<SocketMessage>();
|
var result = new List<IMessage>();
|
||||||
|
|
||||||
var limit = 100;
|
var limit = 100;
|
||||||
var lastId = ulong.MaxValue;
|
var lastId = ulong.MaxValue;
|
||||||
|
@ -72,6 +73,13 @@ namespace DML.AppCore.Classes
|
||||||
var guild = FindServerById(GuildId);
|
var guild = FindServerById(GuildId);
|
||||||
var channel = FindChannelById(guild, ChannelId);
|
var channel = FindChannelById(guild, ChannelId);
|
||||||
|
|
||||||
|
Debug("Checking channel access");
|
||||||
|
if (!channel.Users.Contains(channel.Guild.CurrentUser))
|
||||||
|
{
|
||||||
|
Info("Skipping channel without access");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (Math.Abs(StopTimestamp) < 0.4)
|
if (Math.Abs(StopTimestamp) < 0.4)
|
||||||
StopTimestamp = KnownTimestamp;
|
StopTimestamp = KnownTimestamp;
|
||||||
Trace("Initialized scanning parameters.");
|
Trace("Initialized scanning parameters.");
|
||||||
|
@ -79,18 +87,37 @@ namespace DML.AppCore.Classes
|
||||||
while (!finished)
|
while (!finished)
|
||||||
{
|
{
|
||||||
Trace("Entering scanning loop...");
|
Trace("Entering scanning loop...");
|
||||||
SocketMessage[] messages;
|
var messages = new List<IMessage>();
|
||||||
|
|
||||||
Trace($"Downloading next {limit} messages...");
|
Trace($"Downloading next {limit} messages...");
|
||||||
if (isFirst)
|
if (isFirst)
|
||||||
{
|
{
|
||||||
messages = await channel.GetMessagesAsync(limit).ToArray() as SocketMessage[];
|
//messages = await channel.GetMessagesAsync(limit).ToArray() as SocketMessage[];
|
||||||
|
var realMessages = await channel.GetMessagesAsync(limit).ToArray();
|
||||||
|
|
||||||
|
foreach (var realMessageArray in realMessages)
|
||||||
|
{
|
||||||
|
foreach (var realMessage in realMessageArray)
|
||||||
|
{
|
||||||
|
messages.Add(realMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
messages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray() as SocketMessage[];
|
var realMessages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray();
|
||||||
|
|
||||||
|
foreach (var realMessageArray in realMessages)
|
||||||
|
{
|
||||||
|
foreach (var realMessage in realMessageArray)
|
||||||
|
{
|
||||||
|
messages.Add(realMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//messages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray() as SocketMessage[];
|
||||||
}
|
}
|
||||||
Trace($"Downloaded {messages.Length} messages.");
|
Trace($"Downloaded {messages.Count} messages.");
|
||||||
|
|
||||||
isFirst = false;
|
isFirst = false;
|
||||||
|
|
||||||
|
@ -125,7 +152,7 @@ namespace DML.AppCore.Classes
|
||||||
Core.Scheduler.MessagesScanned++;
|
Core.Scheduler.MessagesScanned++;
|
||||||
}
|
}
|
||||||
|
|
||||||
finished = finished || messages.Length < limit;
|
finished = finished || messages.Count < limit;
|
||||||
}
|
}
|
||||||
Trace($"Downloaded all messages for guild {GuildId} channel {ChannelId}.");
|
Trace($"Downloaded all messages for guild {GuildId} channel {ChannelId}.");
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using DML.Application.Classes;
|
using DML.Application.Classes;
|
||||||
using SweetLib.Utils;
|
using SweetLib.Utils;
|
||||||
|
@ -20,7 +21,7 @@ namespace DML.AppCore.Classes
|
||||||
|
|
||||||
private bool Run { get; set; } = false;
|
private bool Run { get; set; } = false;
|
||||||
public List<Job> JobList { get; set; } = new List<Job>();
|
public List<Job> JobList { get; set; } = new List<Job>();
|
||||||
public Dictionary<int, Queue<SocketMessage>> RunningJobs = new Dictionary<int, Queue<SocketMessage>>();
|
public Dictionary<int, Queue<IMessage>> RunningJobs = new Dictionary<int, Queue<IMessage>>();
|
||||||
internal int RunningThreads { get; set; } = 0;
|
internal int RunningThreads { get; set; } = 0;
|
||||||
|
|
||||||
internal ulong MessagesScanned
|
internal ulong MessagesScanned
|
||||||
|
@ -112,7 +113,7 @@ namespace DML.AppCore.Classes
|
||||||
if (!hasJob)
|
if (!hasJob)
|
||||||
{
|
{
|
||||||
Logger.Debug("Job is not performed yet...Performing job...");
|
Logger.Debug("Job is not performed yet...Performing job...");
|
||||||
var queue = new Queue<SocketMessage>();
|
var queue = new Queue<IMessage>();
|
||||||
|
|
||||||
Logger.Trace("Locking scheduler...");
|
Logger.Trace("Locking scheduler...");
|
||||||
lock (this)
|
lock (this)
|
||||||
|
@ -179,7 +180,7 @@ namespace DML.AppCore.Classes
|
||||||
}
|
}
|
||||||
Logger.Trace("Found job.");
|
Logger.Trace("Found job.");
|
||||||
|
|
||||||
Queue<SocketMessage> queue;
|
Queue<IMessage> queue;
|
||||||
Logger.Trace("Locking scheduler...");
|
Logger.Trace("Locking scheduler...");
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
|
@ -229,7 +230,7 @@ namespace DML.AppCore.Classes
|
||||||
if (socketTextChannel != null)
|
if (socketTextChannel != null)
|
||||||
{
|
{
|
||||||
serverName = socketTextChannel.Guild.Name.Replace(":", "").Replace("/", "")
|
serverName = socketTextChannel.Guild.Name.Replace(":", "").Replace("/", "")
|
||||||
.Replace("\\", "");
|
.Replace("\\", "").Replace("|", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName =
|
fileName =
|
||||||
|
|
|
@ -208,6 +208,10 @@
|
||||||
<Project>{02c1f8ef-32f2-4e77-a36d-79129402af37}</Project>
|
<Project>{02c1f8ef-32f2-4e77-a36d-79129402af37}</Project>
|
||||||
<Name>SweetLib</Name>
|
<Name>SweetLib</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\DML.Client\DML.Client.csproj">
|
||||||
|
<Project>{045eb4a1-34e7-47e0-867e-e10c40505095}</Project>
|
||||||
|
<Name>DML.Client</Name>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\Serraniel-Logo4-NO-BG.png" />
|
<None Include="Resources\Serraniel-Logo4-NO-BG.png" />
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Discord.WebSocket;
|
||||||
using DML.AppCore;
|
using DML.AppCore;
|
||||||
using DML.AppCore.Classes;
|
using DML.AppCore.Classes;
|
||||||
using DML.Application.Classes;
|
using DML.Application.Classes;
|
||||||
|
using DML.Client;
|
||||||
using static SweetLib.Utils.Logger.Logger;
|
using static SweetLib.Utils.Logger.Logger;
|
||||||
|
|
||||||
namespace DML.Application
|
namespace DML.Application
|
||||||
|
@ -49,7 +50,7 @@ namespace DML.Application
|
||||||
if (cbGuild.Items.Count == 0)
|
if (cbGuild.Items.Count == 0)
|
||||||
{
|
{
|
||||||
Trace("Adding guilds to component...");
|
Trace("Adding guilds to component...");
|
||||||
cbGuild.Items.AddRange(Core.Client.Guilds.OrderBy(g => g.Name).Select(g => g.Name).ToArray());
|
cbGuild.Items.AddRange(DMLClient.Client.Guilds.OrderBy(g => g.Name).Select(g => g.Name).ToArray());
|
||||||
cbGuild.SelectedIndex = 0;
|
cbGuild.SelectedIndex = 0;
|
||||||
Trace("Guild component initialized.");
|
Trace("Guild component initialized.");
|
||||||
}
|
}
|
||||||
|
@ -114,7 +115,7 @@ namespace DML.Application
|
||||||
private SocketGuild FindServerByName(string name)
|
private SocketGuild FindServerByName(string name)
|
||||||
{
|
{
|
||||||
Trace($"Trying to find server by name: {name}");
|
Trace($"Trying to find server by name: {name}");
|
||||||
return (from s in Core.Client.Guilds where s.Name == name select s).FirstOrDefault();
|
return (from s in DMLClient.Client.Guilds where s.Name == name select s).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private SocketTextChannel FindChannelByName(SocketGuild server, string name)
|
private SocketTextChannel FindChannelByName(SocketGuild server, string name)
|
||||||
|
@ -126,7 +127,7 @@ namespace DML.Application
|
||||||
private SocketGuild FindServerById(ulong id)
|
private SocketGuild FindServerById(ulong id)
|
||||||
{
|
{
|
||||||
Trace($"Trying to find server by Id: {id}");
|
Trace($"Trying to find server by Id: {id}");
|
||||||
return (from s in Core.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
||||||
|
|
|
@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DML.Application", "Discord
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SweetLib", "..\SweetLib\SweetLib\SweetLib.csproj", "{02C1F8EF-32F2-4E77-A36D-79129402AF37}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SweetLib", "..\SweetLib\SweetLib\SweetLib.csproj", "{02C1F8EF-32F2-4E77-A36D-79129402AF37}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DML.Client", "DML.Client\DML.Client.csproj", "{045EB4A1-34E7-47E0-867E-E10C40505095}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -27,6 +29,10 @@ Global
|
||||||
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Release|Any CPU.Build.0 = Release|Any CPU
|
{02C1F8EF-32F2-4E77-A36D-79129402AF37}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{045EB4A1-34E7-47E0-867E-E10C40505095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{045EB4A1-34E7-47E0-867E-E10C40505095}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{045EB4A1-34E7-47E0-867E-E10C40505095}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{045EB4A1-34E7-47E0-867E-E10C40505095}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
Loading…
Reference in a new issue