diff --git a/src/NadekoBot/Modules/Utility/Commands/MessageRepeater.cs b/src/NadekoBot/Modules/Utility/Commands/MessageRepeater.cs index 4b40b98b..4bc2f2f5 100644 --- a/src/NadekoBot/Modules/Utility/Commands/MessageRepeater.cs +++ b/src/NadekoBot/Modules/Utility/Commands/MessageRepeater.cs @@ -36,6 +36,7 @@ namespace NadekoBot.Modules.Utility public Repeater Repeater { get; } public SocketGuild Guild { get; } public ITextChannel Channel { get; private set; } + private IUserMessage oldMsg = null; public RepeatRunner(Repeater repeater, ITextChannel channel = null) { @@ -52,49 +53,13 @@ namespace NadekoBot.Modules.Utility { source = new CancellationTokenSource(); token = source.Token; - IUserMessage oldMsg = null; try { while (!token.IsCancellationRequested) { - var toSend = "🔄 " + Repeater.Message; await Task.Delay(Repeater.Interval, token).ConfigureAwait(false); - //var lastMsgInChannel = (await Channel.GetMessagesAsync(2)).FirstOrDefault(); - // if (lastMsgInChannel.Id == oldMsg?.Id) //don't send if it's the same message in the channel - // continue; - - if (oldMsg != null) - try - { - await oldMsg.DeleteAsync(); - } - catch - { - // ignored - } - try - { - if (Channel == null) - Channel = Guild.GetTextChannel(Repeater.ChannelId); - - if (Channel != null) - oldMsg = await Channel.SendMessageAsync(toSend).ConfigureAwait(false); - } - catch (HttpException ex) when (ex.HttpCode == System.Net.HttpStatusCode.Forbidden) - { - _log.Warn("Missing permissions. Repeater stopped. ChannelId : {0}", Channel?.Id); - return; - } - catch (HttpException ex) when (ex.HttpCode == System.Net.HttpStatusCode.NotFound) - { - _log.Warn("Channel not found. Repeater stopped. ChannelId : {0}", Channel?.Id); - return; - } - catch (Exception ex) - { - _log.Warn(ex); - } + await Trigger().ConfigureAwait(false); } } catch (OperationCanceledException) @@ -102,6 +67,46 @@ namespace NadekoBot.Modules.Utility } } + public async Task Trigger() + { + var toSend = "🔄 " + Repeater.Message; + //var lastMsgInChannel = (await Channel.GetMessagesAsync(2)).FirstOrDefault(); + // if (lastMsgInChannel.Id == oldMsg?.Id) //don't send if it's the same message in the channel + // continue; + + if (oldMsg != null) + try + { + await oldMsg.DeleteAsync(); + } + catch + { + // ignored + } + try + { + if (Channel == null) + Channel = Guild.GetTextChannel(Repeater.ChannelId); + + if (Channel != null) + oldMsg = await Channel.SendMessageAsync(toSend).ConfigureAwait(false); + } + catch (HttpException ex) when (ex.HttpCode == System.Net.HttpStatusCode.Forbidden) + { + _log.Warn("Missing permissions. Repeater stopped. ChannelId : {0}", Channel?.Id); + return; + } + catch (HttpException ex) when (ex.HttpCode == System.Net.HttpStatusCode.NotFound) + { + _log.Warn("Channel not found. Repeater stopped. ChannelId : {0}", Channel?.Id); + return; + } + catch (Exception ex) + { + _log.Warn(ex); + } + } + public void Reset() { source.Cancel(); @@ -176,9 +181,10 @@ namespace NadekoBot.Modules.Utility return; } var repeater = repList[index].Repeater; - repList[index].Reset(); - await Context.Channel.SendMessageAsync("🔄 " + repeater.Message).ConfigureAwait(false); + await repList[index].Trigger(); + + await Context.Channel.SendMessageAsync("🔄").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases]