Fix first argument
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| using Discord; | ||||
| using Discord.Commands; | ||||
| using Discord.WebSocket; | ||||
| using NadekoBot.Attributes; | ||||
| using NadekoBot.Services; | ||||
| using NadekoBot.Services.Database; | ||||
| @@ -8,6 +9,7 @@ using System; | ||||
| using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| //todo DB | ||||
| @@ -19,43 +21,87 @@ namespace NadekoBot.Modules.Administration | ||||
|         [Group] | ||||
|         public class RepeatCommands | ||||
|         { | ||||
|             public ConcurrentDictionary<ulong, Repeater> repeaters; | ||||
|             public ConcurrentDictionary<ulong, RepeatRunner> repeaters; | ||||
|  | ||||
|             public class RepeatRunner | ||||
|             { | ||||
|                 private CancellationTokenSource source { get; set; } | ||||
|                 private CancellationToken token { get; set; } | ||||
|                 public Repeater Repeater { get; } | ||||
|                 public ITextChannel Channel { get; } | ||||
|  | ||||
|                 public RepeatRunner(Repeater repeater) | ||||
|                 { | ||||
|                     this.Repeater = repeater; | ||||
|                     this.Channel = NadekoBot.Client.GetGuild(repeater.GuildId)?.GetTextChannel(repeater.ChannelId); | ||||
|                     if (Channel == null) | ||||
|                         return; | ||||
|                     Task.Run(Run); | ||||
|                 } | ||||
|  | ||||
|  | ||||
|                 private async Task Run() | ||||
|                 { | ||||
|                     source = new CancellationTokenSource(); | ||||
|                     token = source.Token; | ||||
|                     try | ||||
|                     { | ||||
|                         while (!token.IsCancellationRequested) | ||||
|                         { | ||||
|                             await Task.Delay(Repeater.Interval, token).ConfigureAwait(false); | ||||
|                             await Channel.SendMessageAsync("🔄 " + Repeater.Message).ConfigureAwait(false); | ||||
|                         } | ||||
|                     } | ||||
|                     catch (OperationCanceledException) { } | ||||
|                 } | ||||
|  | ||||
|                 public void Reset() | ||||
|                 { | ||||
|                     source.Cancel(); | ||||
|                     var t = Task.Run(Run); | ||||
|                 } | ||||
|  | ||||
|                 public void Stop() | ||||
|                 { | ||||
|                     source.Cancel(); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             public RepeatCommands() | ||||
|             { | ||||
|                 using (var uow = DbHandler.UnitOfWork()) | ||||
|                 { | ||||
|                     repeaters = new ConcurrentDictionary<ulong, Repeater>(uow.Repeaters.GetAll().ToDictionary(r => r.ChannelId)); | ||||
|                     repeaters = new ConcurrentDictionary<ulong, RepeatRunner>(uow.Repeaters.GetAll().Select(r => new RepeatRunner(r)).Where(r => r != null).ToDictionary(r => r.Repeater.ChannelId)); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|             [RequireContext(ContextType.Guild)] | ||||
|             [RequirePermission(GuildPermission.ManageMessages)] | ||||
|             public async Task RepeatInvoke(IMessage imsg) | ||||
|             public async Task RepeatInvoke(IUserMessage imsg) | ||||
|             { | ||||
|                 var channel = (ITextChannel)imsg.Channel; | ||||
|  | ||||
|                 Repeater rep; | ||||
|                 RepeatRunner rep; | ||||
|                 if (!repeaters.TryGetValue(channel.Id, out rep)) | ||||
|                 { | ||||
|                     await channel.SendMessageAsync("`No repeating message found on this server.`").ConfigureAwait(false); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 await channel.SendMessageAsync("🔄 " + rep.Message); | ||||
|                 rep.Reset(); | ||||
|                 await channel.SendMessageAsync("🔄 " + rep.Repeater.Message); | ||||
|             } | ||||
|  | ||||
|             [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|             [RequireContext(ContextType.Guild)] | ||||
|             public async Task Repeat(IMessage imsg, int minutes, [Remainder] string message = null) | ||||
|             public async Task Repeat(IUserMessage imsg, int minutes, [Remainder] string message = null) | ||||
|             { | ||||
|                 var channel = (ITextChannel)imsg.Channel; | ||||
|  | ||||
|                 if (minutes < 1 || minutes > 1500) | ||||
|                     return; | ||||
|  | ||||
|                 Repeater rep; | ||||
|                 RepeatRunner rep; | ||||
|  | ||||
|                 if (string.IsNullOrWhiteSpace(message)) //turn off | ||||
|                 { | ||||
| @@ -63,9 +109,10 @@ namespace NadekoBot.Modules.Administration | ||||
|                     { | ||||
|                         using (var uow = DbHandler.UnitOfWork()) | ||||
|                         { | ||||
|                             uow.Repeaters.Remove(rep); | ||||
|                             uow.Repeaters.Remove(rep.Repeater); | ||||
|                             await uow.CompleteAsync(); | ||||
|                         } | ||||
|                         rep.Stop(); | ||||
|                         await channel.SendMessageAsync("`Stopped repeating a message.`").ConfigureAwait(false); | ||||
|                     } | ||||
|                     else | ||||
| @@ -86,18 +133,19 @@ namespace NadekoBot.Modules.Administration | ||||
|                         }; | ||||
|                         uow.Repeaters.Add(localRep); | ||||
|                         uow.Complete(); | ||||
|                         return localRep; | ||||
|                         return new RepeatRunner(localRep); | ||||
|                     } | ||||
|                 }, (cid, old) => | ||||
|                 { | ||||
|                     using (var uow = DbHandler.UnitOfWork()) | ||||
|                     { | ||||
|                         old.Message = message; | ||||
|                         old.Interval = TimeSpan.FromMinutes(minutes); | ||||
|                         uow.Repeaters.Update(old); | ||||
|                         old.Repeater.Message = message; | ||||
|                         old.Repeater.Interval = TimeSpan.FromMinutes(minutes); | ||||
|                         uow.Repeaters.Update(old.Repeater); | ||||
|                         uow.Complete(); | ||||
|                         return old; | ||||
|                     } | ||||
|                     old.Reset(); | ||||
|                     return old; | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -338,7 +338,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】 | ||||
|             if (string.IsNullOrWhiteSpace(usrStr)) | ||||
|                 return; | ||||
|  | ||||
|             var usr = (await channel.Guild.GetUsersAsync()).Where(u => u.Username.ToUpperInvariant() == usrStr).FirstOrDefault(); | ||||
|             var usr = channel.Guild.GetUsers().Where(u => u.Username.ToUpperInvariant() == usrStr).FirstOrDefault(); | ||||
|  | ||||
|             if (usr == null || string.IsNullOrWhiteSpace(usr.AvatarUrl)) | ||||
|                 return; | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| using Discord; | ||||
| using Discord.Commands; | ||||
| using Discord.WebSocket; | ||||
| using NadekoBot.Attributes; | ||||
| using NadekoBot.Extensions; | ||||
| using System; | ||||
| @@ -21,7 +22,7 @@ namespace NadekoBot.Modules.Utility | ||||
|             if (guild == null) | ||||
|                 server = channel.Guild; | ||||
|             else | ||||
|                 server = (await _client.GetGuildsAsync()).Where(g => g.Name.ToUpperInvariant() == guild.ToUpperInvariant()).FirstOrDefault(); | ||||
|                 server = _client.GetGuilds().Where(g => g.Name.ToUpperInvariant() == guild.ToUpperInvariant()).FirstOrDefault(); | ||||
|             if (server == null) | ||||
|                 return; | ||||
|  | ||||
|   | ||||
| @@ -67,12 +67,7 @@ namespace NadekoBot.Modules.Utility | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         ch = NadekoBot.Client.GetGuilds() | ||||
|                                 .Where(g => g.Id == r.ServerId) | ||||
|                                 .FirstOrDefault() | ||||
|                                 .GetTextChannels() | ||||
|                                 .Where(c => c.Id == r.ChannelId) | ||||
|                                 .FirstOrDefault(); | ||||
|                         ch = NadekoBot.Client.GetGuild(r.ServerId)?.GetTextChannel(r.ChannelId); | ||||
|                     } | ||||
|                     if (ch == null) | ||||
|                         return; | ||||
|   | ||||
| @@ -34,7 +34,7 @@ namespace NadekoBot.Services.Impl | ||||
|         public Task<string> Print() => Task.FromResult($@"`Author: Kwoth` `Library: Discord.Net` | ||||
| `Bot Version: {BotVersion}` | ||||
| `Bot id: {(client.GetCurrentUser()).Id}` | ||||
| `Owners' Ids:` | ||||
| `Owners' Ids: {string.Join(", ", NadekoBot.Credentials.OwnerIds)}` | ||||
| `Uptime: {GetUptimeString()}` | ||||
| `Servers: {client.GetGuilds().Count} | TextChannels: {client.GetGuilds().SelectMany(g => g.GetChannels().Where(c => c is ITextChannel)).Count()} | VoiceChannels: {client.GetGuilds().SelectMany(g => g.GetChannels().Where(c => c is IVoiceChannel)).Count()}` | ||||
| `Messages: {messageCounter} ({messageCounter / (double)GetUptime().TotalSeconds:F2}/sec)` `Heap: {Heap} MB`"); | ||||
|   | ||||
| @@ -40,7 +40,7 @@ namespace NadekoBot.Extensions | ||||
|             Task.FromResult(NadekoBot.Client.GetCurrentUser().Id == msg.Author.Id); | ||||
|  | ||||
|         public static IEnumerable<IUser> Members(this IRole role) => | ||||
|             NadekoBot.Client.GetGuilds().Where(g => g.Id == role.GuildId).FirstOrDefault()?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty<IUser>(); | ||||
|             NadekoBot.Client.GetGuild(role.GuildId)?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty<IUser>(); | ||||
|  | ||||
|         public static async Task<IUserMessage[]> ReplyLong(this IUserMessage msg, string content, string breakOn = "\n", string addToEnd = "", string addToStart = "") | ||||
|         { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user