Some random stuff
This commit is contained in:
		@@ -1,48 +0,0 @@
 | 
			
		||||
//using Discord.Commands;
 | 
			
		||||
//using NadekoBot.Classes;
 | 
			
		||||
//using NadekoBot.DataModels;
 | 
			
		||||
//using NadekoBot.Modules.Permissions.Classes;
 | 
			
		||||
//using System.IO;
 | 
			
		||||
//using System.Linq;
 | 
			
		||||
 | 
			
		||||
////todo DB
 | 
			
		||||
//namespace NadekoBot.Modules.Administration
 | 
			
		||||
//{
 | 
			
		||||
//    internal class IncidentsCommands : DiscordCommand
 | 
			
		||||
//    {
 | 
			
		||||
//        public IncidentsCommands(DiscordModule module) : base(module) { }
 | 
			
		||||
//        internal override void Init(CommandGroupBuilder cgb)
 | 
			
		||||
//        {
 | 
			
		||||
//            cgb.CreateCommand(Module.Prefix + "listincidents")
 | 
			
		||||
//                .Alias(Prefix + "lin")
 | 
			
		||||
//                .Description($"List all UNREAD incidents and flags them as read. **Needs Manage Server Permissions.**| `{Prefix}lin`")
 | 
			
		||||
//                .AddCheck(SimpleCheckers.ManageServer())
 | 
			
		||||
//                .Do(async e =>
 | 
			
		||||
//                {
 | 
			
		||||
//                    var sid = (long)e.Server.Id;
 | 
			
		||||
//                    var incs = DbHandler.Instance.FindAll<Incident>(i => i.ServerId == sid && i.Read == false);
 | 
			
		||||
//                    DbHandler.Instance.Connection.UpdateAll(incs.Select(i => { i.Read = true; return i; }));
 | 
			
		||||
 | 
			
		||||
//                    await umsg.Author.SendMessageAsync(string.Join("\n----------------------", incs.Select(i => i.Text)));
 | 
			
		||||
//                });
 | 
			
		||||
 | 
			
		||||
//            cgb.CreateCommand(Module.Prefix + "listallincidents")
 | 
			
		||||
//                .Alias(Prefix + "lain")
 | 
			
		||||
//                .Description($"Sends you a file containing all incidents and flags them as read. **Needs Manage Server Permissions.**| `{Prefix}lain`")
 | 
			
		||||
//                .AddCheck(SimpleCheckers.ManageServer())
 | 
			
		||||
//                .Do(async e =>
 | 
			
		||||
//                {
 | 
			
		||||
//                    var sid = (long)e.Server.Id;
 | 
			
		||||
//                    var incs = DbHandler.Instance.FindAll<Incident>(i => i.ServerId == sid);
 | 
			
		||||
//                    DbHandler.Instance.Connection.UpdateAll(incs.Select(i => { i.Read = true; return i; }));
 | 
			
		||||
//                    var data = string.Join("\n----------------------\n", incs.Select(i => i.Text));
 | 
			
		||||
//                    MemoryStream ms = new MemoryStream();
 | 
			
		||||
//                    var sw = new StreamWriter(ms);
 | 
			
		||||
//                    sw.WriteLine(data);
 | 
			
		||||
//                    sw.Flush();
 | 
			
		||||
//                    sw.BaseStream.Position = 0;
 | 
			
		||||
//                    await umsg.Author.SendFile("incidents.txt", sw.BaseStream);
 | 
			
		||||
//                });
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
@@ -1,130 +1,130 @@
 | 
			
		||||
//using Discord;
 | 
			
		||||
//using Discord.Commands;
 | 
			
		||||
//using NadekoBot.Classes;
 | 
			
		||||
//using NadekoBot.Modules.Permissions.Classes;
 | 
			
		||||
//using System;
 | 
			
		||||
//using System.Collections.Concurrent;
 | 
			
		||||
//using System.Threading.Tasks;
 | 
			
		||||
//using System.Timers;
 | 
			
		||||
////todo DB
 | 
			
		||||
////todo persist restarts
 | 
			
		||||
//namespace NadekoBot.Modules.Administration
 | 
			
		||||
//{
 | 
			
		||||
//    class MessageRepeater : DiscordCommand
 | 
			
		||||
//    {
 | 
			
		||||
//        private readonly ConcurrentDictionary<Server, Repeater> repeaters = new ConcurrentDictionary<Server, Repeater>();
 | 
			
		||||
//        private class Repeater
 | 
			
		||||
//        {
 | 
			
		||||
//            [Newtonsoft.Json.JsonIgnore]
 | 
			
		||||
//            public Timer MessageTimer { get; set; }
 | 
			
		||||
//            [Newtonsoft.Json.JsonIgnore]
 | 
			
		||||
//            public Channel RepeatingChannel { get; set; }
 | 
			
		||||
using Discord;
 | 
			
		||||
using Discord.Commands;
 | 
			
		||||
using NadekoBot.Classes;
 | 
			
		||||
using NadekoBot.Modules.Permissions.Classes;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Concurrent;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
 | 
			
		||||
//            public ulong RepeatingServerId { get; set; }
 | 
			
		||||
//            public ulong RepeatingChannelId { get; set; }
 | 
			
		||||
//            public Message lastMessage { get; set; } = null;
 | 
			
		||||
//            public string RepeatingMessage { get; set; }
 | 
			
		||||
//            public int Interval { get; set; }
 | 
			
		||||
//todo DB
 | 
			
		||||
namespace NadekoBot.Modules.Administration
 | 
			
		||||
{
 | 
			
		||||
    class MessageRepeater : DiscordCommand
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ConcurrentDictionary<Server, Repeater> repeaters = new ConcurrentDictionary<Server, Repeater>();
 | 
			
		||||
        private class Repeater
 | 
			
		||||
        {
 | 
			
		||||
            [Newtonsoft.Json.JsonIgnore]
 | 
			
		||||
            public Timer MessageTimer { get; set; }
 | 
			
		||||
            [Newtonsoft.Json.JsonIgnore]
 | 
			
		||||
            public Channel RepeatingChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
//            public Repeater Start()
 | 
			
		||||
//            {
 | 
			
		||||
//                MessageTimer = new Timer { Interval = Interval };
 | 
			
		||||
//                MessageTimer.Elapsed += async (s, e) => await Invoke();
 | 
			
		||||
//                return this;
 | 
			
		||||
//            }
 | 
			
		||||
            public ulong RepeatingServerId { get; set; }
 | 
			
		||||
            public ulong RepeatingChannelId { get; set; }
 | 
			
		||||
            public Message lastMessage { get; set; } = null;
 | 
			
		||||
            public string RepeatingMessage { get; set; }
 | 
			
		||||
            public int Interval { get; set; }
 | 
			
		||||
 | 
			
		||||
//            public async Task Invoke()
 | 
			
		||||
//            {
 | 
			
		||||
//                var ch = RepeatingChannel;
 | 
			
		||||
//                var msg = RepeatingMessage;
 | 
			
		||||
//                if (ch != null && !string.IsNullOrWhiteSpace(msg))
 | 
			
		||||
//                {
 | 
			
		||||
//                    try
 | 
			
		||||
//                    {
 | 
			
		||||
//                        if (lastMessage != null)
 | 
			
		||||
//                            await lastMessage.Delete().ConfigureAwait(false);
 | 
			
		||||
//                    }
 | 
			
		||||
//                    catch { }
 | 
			
		||||
//                    try
 | 
			
		||||
//                    {
 | 
			
		||||
//                        lastMessage = await ch.SendMessageAsync(msg).ConfigureAwait(false);
 | 
			
		||||
//                    }
 | 
			
		||||
//                    catch { }
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//        internal override void Init(CommandGroupBuilder cgb)
 | 
			
		||||
//        {
 | 
			
		||||
            public Repeater Start()
 | 
			
		||||
            {
 | 
			
		||||
                MessageTimer = new Timer { Interval = Interval };
 | 
			
		||||
                MessageTimer.Elapsed += async (s, e) => await Invoke();
 | 
			
		||||
                return this;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
//            cgb.CreateCommand(Module.Prefix + "repeatinvoke")
 | 
			
		||||
//                .Alias(Module.Prefix + "repinv")
 | 
			
		||||
//                .Description($"Immediately shows the repeat message and restarts the timer. **Needs Manage Messages Permissions.**| `{Prefix}repinv`")
 | 
			
		||||
//                .AddCheck(SimpleCheckers.ManageMessages())
 | 
			
		||||
//                .Do(async e =>
 | 
			
		||||
//                {
 | 
			
		||||
//                    Repeater rep;
 | 
			
		||||
//                    if (!repeaters.TryGetValue(e.Server, out rep))
 | 
			
		||||
//                    {
 | 
			
		||||
//                        await channel.SendMessageAsync("`No repeating message found on this server.`");
 | 
			
		||||
//                        return;
 | 
			
		||||
//                    }
 | 
			
		||||
            public async Task Invoke()
 | 
			
		||||
            {
 | 
			
		||||
                var ch = RepeatingChannel;
 | 
			
		||||
                var msg = RepeatingMessage;
 | 
			
		||||
                if (ch != null && !string.IsNullOrWhiteSpace(msg))
 | 
			
		||||
                {
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        if (lastMessage != null)
 | 
			
		||||
                            await lastMessage.Delete().ConfigureAwait(false);
 | 
			
		||||
                    }
 | 
			
		||||
                    catch { }
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        lastMessage = await ch.SendMessageAsync(msg).ConfigureAwait(false);
 | 
			
		||||
                    }
 | 
			
		||||
                    catch { }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        internal override void Init(CommandGroupBuilder cgb)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
//                    await rep.Invoke();
 | 
			
		||||
//                });
 | 
			
		||||
            cgb.CreateCommand(Module.Prefix + "repeatinvoke")
 | 
			
		||||
                .Alias(Module.Prefix + "repinv")
 | 
			
		||||
                .Description($"Immediately shows the repeat message and restarts the timer. **Needs Manage Messages Permissions.**| `{Prefix}repinv`")
 | 
			
		||||
                .AddCheck(SimpleCheckers.ManageMessages())
 | 
			
		||||
                .Do(async e =>
 | 
			
		||||
                {
 | 
			
		||||
                    Repeater rep;
 | 
			
		||||
                    if (!repeaters.TryGetValue(e.Server, out rep))
 | 
			
		||||
                    {
 | 
			
		||||
                        await channel.SendMessageAsync("`No repeating message found on this server.`");
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
//            cgb.CreateCommand(Module.Prefix + "repeat")
 | 
			
		||||
//                .Description("Repeat a message every X minutes. If no parameters are specified, " +
 | 
			
		||||
//                             $"repeat is disabled. **Needs Manage Messages Permissions.** |`{Prefix}repeat 5 Hello there`")
 | 
			
		||||
//                .Parameter("minutes", ParameterType.Optional)
 | 
			
		||||
//                .Parameter("msg", ParameterType.Unparsed)
 | 
			
		||||
//                .AddCheck(SimpleCheckers.ManageMessages())
 | 
			
		||||
//                .Do(async e =>
 | 
			
		||||
//                {
 | 
			
		||||
//                    var minutesStr = minutes;
 | 
			
		||||
//                    var msg = msg;
 | 
			
		||||
                    await rep.Invoke();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
//                    // if both null, disable
 | 
			
		||||
//                    if (string.IsNullOrWhiteSpace(msg) && string.IsNullOrWhiteSpace(minutesStr))
 | 
			
		||||
//                    {
 | 
			
		||||
            cgb.CreateCommand(Module.Prefix + "repeat")
 | 
			
		||||
                .Description("Repeat a message every X minutes. If no parameters are specified, " +
 | 
			
		||||
                             $"repeat is disabled. **Needs Manage Messages Permissions.** |`{Prefix}repeat 5 Hello there`")
 | 
			
		||||
                .Parameter("minutes", ParameterType.Optional)
 | 
			
		||||
                .Parameter("msg", ParameterType.Unparsed)
 | 
			
		||||
                .AddCheck(SimpleCheckers.ManageMessages())
 | 
			
		||||
                .Do(async e =>
 | 
			
		||||
                {
 | 
			
		||||
                    var minutesStr = minutes;
 | 
			
		||||
                    var msg = msg;
 | 
			
		||||
 | 
			
		||||
//                        Repeater rep;
 | 
			
		||||
//                        if (!repeaters.TryRemove(e.Server, out rep))
 | 
			
		||||
//                            return;
 | 
			
		||||
//                        rep.MessageTimer.Stop();
 | 
			
		||||
//                        await channel.SendMessageAsync("Repeating disabled").ConfigureAwait(false);
 | 
			
		||||
//                        return;
 | 
			
		||||
//                    }
 | 
			
		||||
//                    int minutes;
 | 
			
		||||
//                    if (!int.TryParse(minutesStr, out minutes) || minutes < 1 || minutes > 1440)
 | 
			
		||||
//                    {
 | 
			
		||||
//                        await channel.SendMessageAsync("Invalid value").ConfigureAwait(false);
 | 
			
		||||
//                        return;
 | 
			
		||||
//                    }
 | 
			
		||||
                    // if both null, disable
 | 
			
		||||
                    if (string.IsNullOrWhiteSpace(msg) && string.IsNullOrWhiteSpace(minutesStr))
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
//                    var repeater = repeaters.GetOrAdd(
 | 
			
		||||
//                        e.Server,
 | 
			
		||||
//                        s => new Repeater
 | 
			
		||||
//                        {
 | 
			
		||||
//                            Interval = minutes * 60 * 1000,
 | 
			
		||||
//                            RepeatingChannel = e.Channel,
 | 
			
		||||
//                            RepeatingChannelId = e.Channel.Id,
 | 
			
		||||
//                            RepeatingServerId = e.Server.Id,
 | 
			
		||||
//                        }.Start()
 | 
			
		||||
//                    );
 | 
			
		||||
                        Repeater rep;
 | 
			
		||||
                        if (!repeaters.TryRemove(e.Server, out rep))
 | 
			
		||||
                            return;
 | 
			
		||||
                        rep.MessageTimer.Stop();
 | 
			
		||||
                        await channel.SendMessageAsync("Repeating disabled").ConfigureAwait(false);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    int minutes;
 | 
			
		||||
                    if (!int.TryParse(minutesStr, out minutes) || minutes < 1 || minutes > 1440)
 | 
			
		||||
                    {
 | 
			
		||||
                        await channel.SendMessageAsync("Invalid value").ConfigureAwait(false);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
//                    if (!string.IsNullOrWhiteSpace(msg))
 | 
			
		||||
//                        repeater.RepeatingMessage = msg;
 | 
			
		||||
                    var repeater = repeaters.GetOrAdd(
 | 
			
		||||
                        e.Server,
 | 
			
		||||
                        s => new Repeater
 | 
			
		||||
                        {
 | 
			
		||||
                            Interval = minutes * 60 * 1000,
 | 
			
		||||
                            RepeatingChannel = e.Channel,
 | 
			
		||||
                            RepeatingChannelId = e.Channel.Id,
 | 
			
		||||
                            RepeatingServerId = e.Server.Id,
 | 
			
		||||
                        }.Start()
 | 
			
		||||
                    );
 | 
			
		||||
 | 
			
		||||
//                    repeater.MessageTimer.Stop();
 | 
			
		||||
//                    repeater.MessageTimer.Start();
 | 
			
		||||
                    if (!string.IsNullOrWhiteSpace(msg))
 | 
			
		||||
                        repeater.RepeatingMessage = msg;
 | 
			
		||||
 | 
			
		||||
//                    await channel.SendMessageAsync(String.Format("👌 Repeating `{0}` every " +
 | 
			
		||||
//                                                              "**{1}** minutes on {2} channel.",
 | 
			
		||||
//                                                              repeater.RepeatingMessage, minutes, repeater.RepeatingChannel))
 | 
			
		||||
//                                                              .ConfigureAwait(false);
 | 
			
		||||
//                });
 | 
			
		||||
//        }
 | 
			
		||||
                    repeater.MessageTimer.Stop();
 | 
			
		||||
                    repeater.MessageTimer.Start();
 | 
			
		||||
 | 
			
		||||
//        public MessageRepeater(DiscordModule module) : base(module) { }
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
                    await channel.SendMessageAsync(String.Format("👌 Repeating `{0}` every " +
 | 
			
		||||
                                                              "**{1}** minutes on {2} channel.",
 | 
			
		||||
                                                              repeater.RepeatingMessage, minutes, repeater.RepeatingChannel))
 | 
			
		||||
                                                              .ConfigureAwait(false);
 | 
			
		||||
                });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public MessageRepeater(DiscordModule module) : base(module) { }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
            Quote quote;
 | 
			
		||||
            using (var uow = DbHandler.Instance.GetUnitOfWork())
 | 
			
		||||
            {
 | 
			
		||||
                quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(channel.Guild.Id, keyword);
 | 
			
		||||
                quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(channel.Guild.Id, keyword).ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (quote == null)
 | 
			
		||||
@@ -58,8 +58,8 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
                    Keyword = keyword,
 | 
			
		||||
                    Text = text,
 | 
			
		||||
                });
 | 
			
		||||
                await uow.CompleteAsync();
 | 
			
		||||
                await channel.SendMessageAsync("`Quote added.`");
 | 
			
		||||
                await uow.CompleteAsync().ConfigureAwait(false);
 | 
			
		||||
                await channel.SendMessageAsync("`Quote added.`").ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user