Added system for backing up images
This commit is contained in:
parent
1cb3f981d5
commit
9606d90752
|
@ -1,2 +1,3 @@
|
||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TTS/@EntryIndexedValue">TTS</s:String></wpf:ResourceDictionary>
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TTS/@EntryIndexedValue">TTS</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=URL/@EntryIndexedValue">URL</s:String></wpf:ResourceDictionary>
|
|
@ -63,6 +63,7 @@ namespace DeukBot4.MessageHandlers.CommandHandler
|
||||||
|
|
||||||
[Command("whatdoyouthinkdeukbot", PermissionLevel.Everyone)]
|
[Command("whatdoyouthinkdeukbot", PermissionLevel.Everyone)]
|
||||||
[Command("whatdoyouthink", PermissionLevel.Everyone)]
|
[Command("whatdoyouthink", PermissionLevel.Everyone)]
|
||||||
|
[CommandHelp("Gives the bots opinion about something", "Gives the bots opinion about something\nusage:\n``whatdoyouthink {about something}``")]
|
||||||
[CommandParameters(ParameterMatcher.ParameterType.Remainder)]
|
[CommandParameters(ParameterMatcher.ParameterType.Remainder)]
|
||||||
public async Task BotOpinion(CommandRequest request)
|
public async Task BotOpinion(CommandRequest request)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers
|
||||||
|
{
|
||||||
|
// ReSharper disable once ClassNeverInstantiated.Global
|
||||||
|
public class ServerChannelIDs
|
||||||
|
{
|
||||||
|
public ulong ServerId { get; set; }
|
||||||
|
public ulong ChannelId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ImageBackupHandler
|
||||||
|
{
|
||||||
|
// ReSharper disable once ClassNeverInstantiated.Global
|
||||||
|
public class NextCloudSettings
|
||||||
|
{
|
||||||
|
public string URL { get; set; }
|
||||||
|
public string Username { get; set; }
|
||||||
|
public string Password { internal get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<ServerChannelIDs> _backupChannels = new List<ServerChannelIDs>();
|
||||||
|
public static NextCloudSettings Settings { private get; set; }
|
||||||
|
|
||||||
|
public static async Task Backup(SocketMessage message)
|
||||||
|
{
|
||||||
|
if (!(message.Channel is IGuildChannel serverChannel))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var images = message.Attachments.Where(x => x.Height.HasValue).ToArray();
|
||||||
|
if (!images.Any())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var found = false;
|
||||||
|
foreach (var backupChannel in _backupChannels)
|
||||||
|
{
|
||||||
|
if (serverChannel.GuildId == backupChannel.ServerId && serverChannel.Id == backupChannel.ChannelId)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var attachment in images)
|
||||||
|
{
|
||||||
|
using (var client = new WebClient())
|
||||||
|
{
|
||||||
|
var content = client.DownloadData(attachment.Url);
|
||||||
|
var uri = new Uri($"{Settings.URL}/{attachment.Filename}");
|
||||||
|
client.Credentials = new NetworkCredential(Settings.Username, Settings.Password);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.UploadData(uri, "PUT", content);
|
||||||
|
var eb = new EmbedBuilder()
|
||||||
|
{
|
||||||
|
Title = "Image Backed Up",
|
||||||
|
Description = $"Image with the name {attachment.Filename} was backed up",
|
||||||
|
ThumbnailUrl = attachment.Url,
|
||||||
|
Timestamp = DateTime.UtcNow
|
||||||
|
};
|
||||||
|
await message.Channel.SendMessageAsync("", embed: eb.Build());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
await Logger.LogError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetBackupChannels(List<ServerChannelIDs> ls)
|
||||||
|
{
|
||||||
|
_backupChannels = ls;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ namespace DeukBot4.MessageHandlers
|
||||||
#pragma warning disable 4014
|
#pragma warning disable 4014
|
||||||
CommandHandler.CommandHandler.HandleMessage(message);
|
CommandHandler.CommandHandler.HandleMessage(message);
|
||||||
HandlePrivateMessage(message);
|
HandlePrivateMessage(message);
|
||||||
|
ImageBackupHandler.Backup(message);
|
||||||
#pragma warning restore 4014
|
#pragma warning restore 4014
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -29,6 +29,9 @@ namespace DeukBot4
|
||||||
DatabaseInitializer.Initialize();
|
DatabaseInitializer.Initialize();
|
||||||
ServerSettingHandler.OnBotStartUp();
|
ServerSettingHandler.OnBotStartUp();
|
||||||
CommandHandler.Build();
|
CommandHandler.Build();
|
||||||
|
ImageBackupHandler.SetBackupChannels(Settings.BackupChannels);
|
||||||
|
ImageBackupHandler.Settings = Settings.NextcloudSettings;
|
||||||
|
|
||||||
Client = new DiscordSocketClient();
|
Client = new DiscordSocketClient();
|
||||||
|
|
||||||
Client.Log += Logger.LogDiscord;
|
Client.Log += Logger.LogDiscord;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
using System.IO;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using DeukBot4.MessageHandlers;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DeukBot4
|
namespace DeukBot4
|
||||||
|
@ -13,6 +16,10 @@ namespace DeukBot4
|
||||||
public ulong OwnerId { get; private set; }
|
public ulong OwnerId { get; private set; }
|
||||||
[JsonProperty]
|
[JsonProperty]
|
||||||
public string DatabaseConnectionString { get; private set; }
|
public string DatabaseConnectionString { get; private set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public List<ServerChannelIDs> BackupChannels { get; private set; }
|
||||||
|
[JsonProperty]
|
||||||
|
public ImageBackupHandler.NextCloudSettings NextcloudSettings { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public static Settings FromJsonFile(string filepath)
|
public static Settings FromJsonFile(string filepath)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace DeukBot4.Utilities
|
namespace DeukBot4.Utilities
|
||||||
{
|
{
|
||||||
public class Lehvenstein
|
public static class Lehvenstein
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Calculates the Levenshtein distance between two strings--the number of changes that need to be made for the first string to become the second.
|
/// Calculates the Levenshtein distance between two strings--the number of changes that need to be made for the first string to become the second.
|
||||||
|
@ -19,32 +19,32 @@ namespace DeukBot4.Utilities
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(first));
|
throw new ArgumentNullException(nameof(first));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (second == null)
|
if (second == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(second));
|
throw new ArgumentNullException(nameof(second));
|
||||||
}
|
}
|
||||||
|
|
||||||
int n = first.Length;
|
var n = first.Length;
|
||||||
int m = second.Length;
|
var m = second.Length;
|
||||||
var d = new int[n + 1, m + 1]; // matrix
|
var d = new int[n + 1, m + 1]; // matrix
|
||||||
|
|
||||||
if (n == 0) return m;
|
if (n == 0) return m;
|
||||||
if (m == 0) return n;
|
if (m == 0) return n;
|
||||||
|
|
||||||
for (int i = 0; i <= n; d[i, 0] = i++)
|
for (var i = 0; i <= n; d[i, 0] = i++)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j <= m; d[0, j] = j++)
|
for (var j = 0; j <= m; d[0, j] = j++)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 1; i <= n; i++)
|
for (var i = 1; i <= n; i++)
|
||||||
{
|
{
|
||||||
|
for (var j = 1; j <= m; j++)
|
||||||
for (int j = 1; j <= m; j++)
|
|
||||||
{
|
{
|
||||||
int cost = (second.Substring(j - 1, 1) == first.Substring(i - 1, 1) ? 0 : 1); // cost
|
var cost = (second.Substring(j - 1, 1) == first.Substring(i - 1, 1) ? 0 : 1); // cost
|
||||||
d[i, j] = Math.Min(
|
d[i, j] = Math.Min(
|
||||||
Math.Min(
|
Math.Min(
|
||||||
d[i - 1, j] + 1,
|
d[i - 1, j] + 1,
|
||||||
|
|
Loading…
Reference in New Issue