From ac476214763b5458090c46d8785aae5ffdbeb725 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Fri, 16 Dec 2016 19:43:57 +0100 Subject: [PATCH] A lot of work on moving to b2 --- src/NadekoBot/Attributes/NadekoModule.cs | 4 +- .../Attributes/OwnerOnlyAttribute.cs | 5 +- .../Modules/Administration/Administration.cs | 337 ++++++++---------- .../Commands/AntiRaidCommands.cs | 20 +- .../Commands/AutoAssignRoleCommands.cs | 4 +- .../Commands/CrossServerTextChannel.cs | 26 +- .../Commands/DMForwardCommands.cs | 14 +- .../Administration/Commands/LogCommand.cs | 38 +- .../Commands/MessageRepeater.cs | 16 +- .../Administration/Commands/Migration.cs | 8 +- .../Administration/Commands/MuteCommands.cs | 34 +- .../Commands/PlayingRotateCommands.cs | 16 +- .../Commands/RatelimitCommand.cs | 14 +- .../Commands/SelfAssignedRolesCommand.cs | 32 +- .../Administration/Commands/SelfCommands.cs | 4 +- .../Commands/ServerGreetCommands.cs | 38 +- .../Commands/VoicePlusTextCommands.cs | 16 +- .../Modules/ClashOfClans/ClashOfClans.cs | 34 +- .../CustomReactions/CustomReactions.cs | 62 ++-- .../Modules/CustomReactions/Extensions.cs | 2 +- src/NadekoBot/Modules/DiscordModule.cs | 2 +- .../Modules/Gambling/Commands/AnimalRacing.cs | 10 +- .../Gambling/Commands/DiceRollCommand.cs | 26 +- .../Modules/Gambling/Commands/DrawCommand.cs | 10 +- .../Gambling/Commands/FlipCoinCommand.cs | 20 +- src/NadekoBot/Modules/Gambling/Gambling.cs | 56 +-- .../Games/Commands/CleverBotCommands.cs | 22 +- .../Games/Commands/Hangman/HangmanGame.cs | 14 +- .../Modules/Games/Commands/HangmanCommands.cs | 12 +- .../Modules/Games/Commands/LeetCommands.cs | 2 +- .../Games/Commands/PlantAndPickCommands.cs | 26 +- .../Modules/Games/Commands/PollCommands.cs | 32 +- .../Games/Commands/SpeedTypingCommands.cs | 28 +- .../Games/Commands/Trivia/TriviaGame.cs | 12 +- .../Modules/Games/Commands/TriviaCommands.cs | 12 +- src/NadekoBot/Modules/Games/Games.cs | 14 +- src/NadekoBot/Modules/Help/Help.cs | 28 +- src/NadekoBot/Modules/Music/Music.cs | 128 +++---- src/NadekoBot/Modules/NSFW/NSFW.cs | 28 +- .../Permissions/Commands/BlacklistCommands.cs | 2 +- .../Permissions/Commands/CmdCdsCommands.cs | 14 +- .../Permissions/Commands/FilterCommands.cs | 22 +- .../Permissions/PermissionExtensions.cs | 4 +- .../Modules/Permissions/Permissions.cs | 76 ++-- src/NadekoBot/Modules/Pokemon/Pokemon.cs | 25 +- .../Searches/Commands/AnimeSearchCommands.cs | 82 ++--- .../Modules/Searches/Commands/JokeCommands.cs | 26 +- .../Modules/Searches/Commands/LoLCommands.cs | 10 +- .../Searches/Commands/MemegenCommands.cs | 9 +- .../Searches/Commands/OMDB/OmdbProvider.cs | 5 +- .../Modules/Searches/Commands/OsuCommands.cs | 14 +- .../Searches/Commands/OverwatchCommands.cs | 49 ++- .../Searches/Commands/PlaceCommands.cs | 12 +- .../Commands/PokemonSearchCommands.cs | 22 +- .../Commands/StreamNotificationCommands.cs | 63 ++-- .../Modules/Searches/Commands/Translator.cs | 37 +- .../Modules/Searches/Commands/XkcdCommands.cs | 22 +- src/NadekoBot/Modules/Searches/Searches.cs | 104 +++--- src/NadekoBot/Modules/Trello/Trello.cs | 8 +- .../Modules/Utility/Commands/CalcCommand.cs | 10 +- .../Modules/Utility/Commands/InfoCommands.cs | 28 +- .../Modules/Utility/Commands/QuoteCommands.cs | 54 ++- .../Modules/Utility/Commands/Remind.cs | 24 +- .../Utility/Commands/UnitConversion.cs | 14 +- src/NadekoBot/Modules/Utility/Utility.cs | 149 +++----- src/NadekoBot/NadekoBot.cs | 12 +- src/NadekoBot/Services/CommandHandler.cs | 62 ++-- src/NadekoBot/Services/Impl/BotCredentials.cs | 2 +- src/NadekoBot/Services/Impl/StatsService.cs | 2 +- src/NadekoBot/ShardedDiscordClient.cs | 57 ++- .../TypeReaders/BotCommandTypeReader.cs | 5 +- src/NadekoBot/TypeReaders/GuildTypeReader.cs | 2 +- src/NadekoBot/TypeReaders/ModuleTypeReader.cs | 2 +- .../TypeReaders/PermissionActionTypeReader.cs | 2 +- src/NadekoBot/_Extensions/Extensions.cs | 32 +- src/NadekoBot/project.json | 10 +- 76 files changed, 1049 insertions(+), 1230 deletions(-) diff --git a/src/NadekoBot/Attributes/NadekoModule.cs b/src/NadekoBot/Attributes/NadekoModule.cs index a4aba6c6..832d7ad4 100644 --- a/src/NadekoBot/Attributes/NadekoModule.cs +++ b/src/NadekoBot/Attributes/NadekoModule.cs @@ -7,7 +7,7 @@ using System.Linq; namespace NadekoBot.Attributes { [System.AttributeUsage(AttributeTargets.Class)] - sealed class NadekoModuleAttribute : ModuleAttribute + sealed class NadekoModuleAttribute : GroupAttribute { //modulename / prefix private static Dictionary modulePrefixes = null; @@ -28,7 +28,7 @@ namespace NadekoBot.Attributes public NadekoModuleAttribute(string moduleName, string defaultPrefix) : base(GetModulePrefix(moduleName, defaultPrefix)) { - AppendSpace = false; + //AppendSpace = false; } private static string GetModulePrefix(string moduleName, string defaultPrefix) diff --git a/src/NadekoBot/Attributes/OwnerOnlyAttribute.cs b/src/NadekoBot/Attributes/OwnerOnlyAttribute.cs index f04b6ef2..ecb5c552 100644 --- a/src/NadekoBot/Attributes/OwnerOnlyAttribute.cs +++ b/src/NadekoBot/Attributes/OwnerOnlyAttribute.cs @@ -1,12 +1,13 @@ ο»Ώusing System.Threading.Tasks; using Discord.Commands; using Discord; +using System; namespace NadekoBot.Attributes { public class OwnerOnlyAttribute : PreconditionAttribute { - public override Task CheckPermissions(IUserMessage context, Command executingCommand, object moduleInstance) => - Task.FromResult((NadekoBot.Credentials.IsOwner(context.Author) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner"))); + public override Task CheckPermissions(CommandContext context, CommandInfo executingCommand,IDependencyMap depMap) => + Task.FromResult((NadekoBot.Credentials.IsOwner(context.User) ? PreconditionResult.FromSuccess() : PreconditionResult.FromError("Not owner"))); } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Administration/Administration.cs b/src/NadekoBot/Modules/Administration/Administration.cs index 196aaea5..bacb683d 100644 --- a/src/NadekoBot/Modules/Administration/Administration.cs +++ b/src/NadekoBot/Modules/Administration/Administration.cs @@ -41,11 +41,11 @@ namespace NadekoBot.Modules.Administration } - private static async Task DelMsgOnCmd_Handler(IUserMessage msg, Command cmd) + private static async Task DelMsgOnCmd_Handler(SocketUserMessage msg, CommandInfo cmd) { try { - var channel = msg.Channel as ITextChannel; + var channel = Context.Channel as SocketTextChannel; if (channel == null) return; @@ -67,14 +67,12 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] - public async Task ResetPermissions(IUserMessage imsg) + [RequireUserPermission(GuildPermission.Administrator)] + public async Task ResetPermissions() { - var channel = (ITextChannel)imsg.Channel; - using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.PermissionsFor(channel.Guild.Id); + var config = uow.GuildConfigs.PermissionsFor(Context.Guild.Id); config.RootPermission = Permission.GetDefaultRoot(); var toAdd = new PermissionCache() { @@ -82,148 +80,136 @@ namespace NadekoBot.Modules.Administration PermRole = config.PermissionRole, Verbose = config.VerbosePermissions, }; - Permissions.Permissions.Cache.AddOrUpdate(channel.Guild.Id, - toAdd, (id, old) => toAdd); + Permissions.Permissions.Cache.AddOrUpdate(Context.Guild.Id, toAdd, (id, old) => toAdd); await uow.CompleteAsync(); } - await channel.SendConfirmAsync($"{imsg.Author.Mention} πŸ†— **Permissions for this server are reset.**"); + await Context.Channel.SendConfirmAsync($"{Context.Message.Author.Mention} πŸ†— **Permissions for this server are reset.**"); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] - public async Task Delmsgoncmd(IUserMessage umsg) + [RequireUserPermission(GuildPermission.Administrator)] + public async Task Delmsgoncmd() { - var channel = (ITextChannel)umsg.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) { - var conf = uow.GuildConfigs.For(channel.Guild.Id, set => set); + var conf = uow.GuildConfigs.For(Context.Guild.Id, set => set); enabled = conf.DeleteMessageOnCommand = !conf.DeleteMessageOnCommand; await uow.CompleteAsync(); } if (enabled) - await channel.SendConfirmAsync("βœ… **Now automatically deleting successful command invokations.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("βœ… **Now automatically deleting successful command invokations.**").ConfigureAwait(false); else - await channel.SendConfirmAsync("❗**Stopped automatic deletion of successful command invokations.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("❗**Stopped automatic deletion of successful command invokations.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task Setrole(IUserMessage umsg, IGuildUser usr, [Remainder] IRole role) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task Setrole(IGuildUser usr, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; try { await usr.AddRolesAsync(role).ConfigureAwait(false); - await channel.SendConfirmAsync($"ℹ️ Successfully added role **{role.Name}** to user **{usr.Username}**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"ℹ️ Successfully added role **{role.Name}** to user **{usr.Username}**").ConfigureAwait(false); } catch (Exception ex) { - await channel.SendErrorAsync("⚠️ Failed to add role. **Bot has insufficient permissions.**\n").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Failed to add role. **Bot has insufficient permissions.**\n").ConfigureAwait(false); Console.WriteLine(ex.ToString()); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task Removerole(IUserMessage umsg, IGuildUser usr, [Remainder] IRole role) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task Removerole(IGuildUser usr, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; try { await usr.RemoveRolesAsync(role).ConfigureAwait(false); - await channel.SendConfirmAsync($"ℹ️ Successfully removed role **{role.Name}** from user **{usr.Username}**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"ℹ️ Successfully removed role **{role.Name}** from user **{usr.Username}**").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ Failed to remove role. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Failed to remove role. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task RenameRole(IUserMessage umsg, IRole roleToEdit, string newname) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task RenameRole(IRole roleToEdit, string newname) { - var channel = (ITextChannel)umsg.Channel; try { - if (roleToEdit.Position > (await channel.Guild.GetCurrentUserAsync().ConfigureAwait(false)).Roles.Max(r => r.Position)) + if (roleToEdit.Position > (await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false)).Roles.Max(r => r.Position)) { - await channel.SendErrorAsync("🚫 You can't edit roles higher than your highest role.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("🚫 You can't edit roles higher than your highest role.").ConfigureAwait(false); return; } await roleToEdit.ModifyAsync(g => g.Name = newname).ConfigureAwait(false); - await channel.SendConfirmAsync("βœ… Role renamed.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("βœ… Role renamed.").ConfigureAwait(false); } catch (Exception) { - await channel.SendErrorAsync("⚠️ Failed to rename role. Probably **insufficient permissions.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Failed to rename role. Probably **insufficient permissions.**").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task RemoveAllRoles(IUserMessage umsg, [Remainder] IGuildUser user) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task RemoveAllRoles([Remainder] IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; - try { await user.RemoveRolesAsync(user.Roles).ConfigureAwait(false); - await channel.SendConfirmAsync($"πŸ—‘ Successfully removed **all** roles from user **{user.Username}**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ—‘ Successfully removed **all** roles from user **{user.Username}**").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ Failed to remove roles. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Failed to remove roles. Most likely reason: **Insufficient permissions.**").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task CreateRole(IUserMessage umsg, [Remainder] string roleName = null) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task CreateRole([Remainder] string roleName = null) { - var channel = (ITextChannel)umsg.Channel; - - if (string.IsNullOrWhiteSpace(roleName)) return; try { - var r = await channel.Guild.CreateRoleAsync(roleName).ConfigureAwait(false); - await channel.SendConfirmAsync($"βœ… Successfully created role **{r.Name}**.").ConfigureAwait(false); + var r = await Context.Guild.CreateRoleAsync(roleName).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"βœ… Successfully created role **{r.Name}**.").ConfigureAwait(false); } catch (Exception) { - await channel.SendErrorAsync("⚠️ Unspecified error.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Unspecified error.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task RoleColor(IUserMessage umsg, params string[] args) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task RoleColor(params string[] args) { - var channel = (ITextChannel)umsg.Channel; - if (args.Count() != 2 && args.Count() != 4) { - await channel.SendErrorAsync("❌ The parameters specified are **invalid.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("❌ The parameters specified are **invalid.**").ConfigureAwait(false); return; } var roleName = args[0].ToUpperInvariant(); - var role = channel.Guild.Roles.Where(r=>r.Name.ToUpperInvariant() == roleName).FirstOrDefault(); + var role = Context.Guild.Roles.Where(r=>r.Name.ToUpperInvariant() == roleName).FirstOrDefault(); if (role == null) { - await channel.SendErrorAsync("🚫 That role **does not exist.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("🚫 That role **does not exist.**").ConfigureAwait(false); return; } try @@ -236,108 +222,104 @@ namespace NadekoBot.Modules.Administration var blue = Convert.ToByte(rgb ? int.Parse(args[3]) : Convert.ToInt32(arg1.Substring(4, 2), 16)); await role.ModifyAsync(r => r.Color = new Discord.Color(red, green, blue).RawValue).ConfigureAwait(false); - await channel.SendConfirmAsync($"β˜‘οΈ Role **{role.Name}'s** color has been changed.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"β˜‘οΈ Role **{role.Name}'s** color has been changed.").ConfigureAwait(false); } catch (Exception) { - await channel.SendErrorAsync("⚠️ Error occured, most likely **invalid parameters** or **insufficient permissions.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Error occured, most likely **invalid parameters** or **insufficient permissions.**").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.BanMembers)] - public async Task Ban(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null) + [RequireUserPermission(GuildPermission.BanMembers)] + public async Task Ban(IGuildUser user, [Remainder] string msg = null) { - var channel = (ITextChannel)umsg.Channel; if (string.IsNullOrWhiteSpace(msg)) { msg = "❗️No reason provided."; } - if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r=>r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max()) + if (Context.User.Id != user.Guild.OwnerId && Context.User.Roles.Select(r=>r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max()) { - await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); + await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy.").ConfigureAwait(false); return; } try { - await (await user.CreateDMChannelAsync()).SendErrorAsync($"⛔️ **You have been BANNED from `{channel.Guild.Name}` server.**\n" + + await (await user.CreateDMChannelAsync()).SendErrorAsync($"⛔️ **You have been BANNED from `{Context.Guild.Name}` server.**\n" + $"βš– *Reason:* {msg}").ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false); } catch { } try { - await channel.Guild.AddBanAsync(user, 7).ConfigureAwait(false); + await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false); - await channel.SendConfirmAsync("⛔️ **Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("⛔️ **Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ **Error.** Most likely I don't have sufficient permissions.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ **Error.** Most likely I don't have sufficient permissions.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.KickMembers)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Softban(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null) + [RequireUserPermission(GuildPermission.KickMembers)] + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Softban(IGuildUser user, [Remainder] string msg = null) { - var channel = (ITextChannel)umsg.Channel; if (string.IsNullOrWhiteSpace(msg)) { msg = "❗️No reason provided."; } - if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max()) + if (Context.User.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max()) { - await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); + await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); return; } try { - await user.SendErrorAsync($"☣ **You have been SOFT-BANNED from `{channel.Guild.Name}` server.**\n" + + await user.SendErrorAsync($"☣ **You have been SOFT-BANNED from `{Context.Guild.Name}` server.**\n" + $"βš– *Reason:* {msg}").ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false); } catch { } try { - await channel.Guild.AddBanAsync(user, 7).ConfigureAwait(false); - try { await channel.Guild.RemoveBanAsync(user).ConfigureAwait(false); } - catch { await channel.Guild.RemoveBanAsync(user).ConfigureAwait(false); } + await Context.Guild.AddBanAsync(user, 7).ConfigureAwait(false); + try { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); } + catch { await Context.Guild.RemoveBanAsync(user).ConfigureAwait(false); } - await channel.SendConfirmAsync("☣ **Soft-Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("☣ **Soft-Banned** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.KickMembers)] - public async Task Kick(IUserMessage umsg, IGuildUser user, [Remainder] string msg = null) + [RequireUserPermission(GuildPermission.KickMembers)] + public async Task Kick(IGuildUser user, [Remainder] string msg = null) { - var channel = (ITextChannel)umsg.Channel; - if (user == null) { - await channel.SendErrorAsync("❗️User not found.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("❗️User not found.").ConfigureAwait(false); return; } - if (umsg.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)umsg.Author).Roles.Select(r => r.Position).Max()) + if (Context.Message.Author.Id != user.Guild.OwnerId && user.Roles.Select(r => r.Position).Max() >= ((IGuildUser)Context.User).Roles.Select(r => r.Position).Max()) { - await channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); + await Context.Channel.SendErrorAsync("⚠️ You can't use this command on users with a role higher or equal to yours in the role hierarchy."); return; } if (!string.IsNullOrWhiteSpace(msg)) { try { - await user.SendErrorAsync($"‼️**You have been KICKED from `{channel.Guild.Name}` server.**\n" + + await user.SendErrorAsync($"‼️**You have been KICKED from `{Context.Guild.Name}` server.**\n" + $"βš– *Reason:* {msg}").ConfigureAwait(false); await Task.Delay(2000).ConfigureAwait(false); } @@ -346,21 +328,19 @@ namespace NadekoBot.Modules.Administration try { await user.KickAsync().ConfigureAwait(false); - await channel.SendConfirmAsync("‼️**Kicked** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("‼️**Kicked** user **" + user.Username + "** ID: `" + user.Id + "`").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.DeafenMembers)] - public async Task Deafen(IUserMessage umsg, params IGuildUser[] users) + [RequireUserPermission(GuildPermission.DeafenMembers)] + public async Task Deafen(params IGuildUser[] users) { - var channel = (ITextChannel)umsg.Channel; - if (!users.Any()) return; try @@ -369,21 +349,19 @@ namespace NadekoBot.Modules.Administration { await u.ModifyAsync(usr=>usr.Deaf = true).ConfigureAwait(false); } - await channel.SendConfirmAsync("πŸ”‡ **Deafen** successful.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ”‡ **Deafen** successful.").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.DeafenMembers)] - public async Task UnDeafen(IUserMessage umsg, params IGuildUser[] users) + [RequireUserPermission(GuildPermission.DeafenMembers)] + public async Task UnDeafen(params IGuildUser[] users) { - var channel = (ITextChannel)umsg.Channel; - if (!users.Any()) return; try @@ -392,138 +370,131 @@ namespace NadekoBot.Modules.Administration { await u.ModifyAsync(usr=> usr.Deaf = false).ConfigureAwait(false); } - await channel.SendConfirmAsync("πŸ”Š **Undeafen** successful.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ”Š **Undeafen** successful.").ConfigureAwait(false); } catch { - await channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ I most likely don't have the permission necessary for that.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task DelVoiChanl(IUserMessage umsg, [Remainder] IVoiceChannel voiceChannel) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task DelVoiChanl([Remainder] IVoiceChannel voiceChannel) { await voiceChannel.DeleteAsync().ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync($"πŸ—‘ Removed voice channel **{voiceChannel.Name}** successfully.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ—‘ Removed voice channel **{voiceChannel.Name}** successfully.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task CreatVoiChanl(IUserMessage umsg, [Remainder] string channelName) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task CreatVoiChanl([Remainder] string channelName) { - var channel = (ITextChannel)umsg.Channel; - var ch = await channel.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false); - await channel.SendConfirmAsync($"βœ… Created voice channel **{ch.Name}**. ID: `{ch.Id}`").ConfigureAwait(false); + var ch = await Context.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"βœ… Created voice channel **{ch.Name}**. ID: `{ch.Id}`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task DelTxtChanl(IUserMessage umsg, [Remainder] ITextChannel toDelete) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task DelTxtChanl([Remainder] ITextChannel toDelete) { await toDelete.DeleteAsync().ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync($"πŸ—‘ Removed text channel **{toDelete.Name}**. ID: `{toDelete.Id}`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ—‘ Removed text channel **{toDelete.Name}**. ID: `{toDelete.Id}`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task CreaTxtChanl(IUserMessage umsg, [Remainder] string channelName) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task CreaTxtChanl([Remainder] string channelName) { - var channel = (ITextChannel)umsg.Channel; - var txtCh = await channel.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false); - await channel.SendConfirmAsync($"βœ… Added text channel **{txtCh.Name}**. ID: `{txtCh.Id}`").ConfigureAwait(false); + var txtCh = await Context.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"βœ… Added text channel **{txtCh.Name}**. ID: `{txtCh.Id}`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task SetTopic(IUserMessage umsg, [Remainder] string topic = null) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task SetTopic([Remainder] string topic = null) { - var channel = (ITextChannel)umsg.Channel; topic = topic ?? ""; - await channel.ModifyAsync(c => c.Topic = topic); - await channel.SendConfirmAsync("πŸ†— **New channel topic set.**").ConfigureAwait(false); + await Context.Channel.ModifyAsync(c => c.Topic = topic); + await Context.Channel.SendConfirmAsync("πŸ†— **New channel topic set.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task SetChanlName(IUserMessage umsg, [Remainder] string name) + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task SetChanlName([Remainder] string name) { - var channel = (ITextChannel)umsg.Channel; - - await channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false); - await channel.SendConfirmAsync("πŸ†— **New channel name set.**").ConfigureAwait(false); + await Context.Channel.ModifyAsync(c => c.Name = name).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ†— **New channel name set.**").ConfigureAwait(false); } //delets her own messages, no perm required [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Prune(IUserMessage umsg) - { - var channel = (ITextChannel)umsg.Channel; + public async Task Prune() + { + var user = await Context.Guild.GetCurrentUserAsync().ConfigureAwait(false); - var user = channel.Guild.GetCurrentUser(); - - var enumerable = (await umsg.Channel.GetMessagesAsync()).AsEnumerable(); + var enumerable = (await Context.Channel.GetMessagesAsync().Flatten()).AsEnumerable(); enumerable = enumerable.Where(x => x.Author.Id == user.Id); - await umsg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); + await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); } // prune x [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(ChannelPermission.ManageMessages)] - public async Task Prune(IUserMessage msg, int count) + [RequireUserPermission(ChannelPermission.ManageMessages)] + public async Task Prune(int count) { - var channel = (ITextChannel)msg.Channel; - await (msg as IUserMessage).DeleteAsync(); + + await (Context.Message as IUserMessage).DeleteAsync(); int limit = (count < 100) ? count : 100; - var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit)); - await msg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); + var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten().ConfigureAwait(false)); + await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); } //prune @user [x] [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(ChannelPermission.ManageMessages)] - public async Task Prune(IUserMessage msg, IGuildUser user, int count = 100) + [RequireUserPermission(ChannelPermission.ManageMessages)] + public async Task Prune(IGuildUser user, int count = 100) { - var channel = (ITextChannel)msg.Channel; + int limit = (count < 100) ? count : 100; - var enumerable = (await msg.Channel.GetMessagesAsync(limit: limit)).Where(m => m.Author == user); - await msg.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); + var enumerable = (await Context.Channel.GetMessagesAsync(limit: limit).Flatten()).Where(m => m.Author == user); + await Context.Channel.DeleteMessagesAsync(enumerable).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task Die(IUserMessage umsg) + public async Task Die() { - try { await umsg.Channel.SendConfirmAsync("ℹ️ **Shutting down.**").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); } + try { await Context.Channel.SendConfirmAsync("ℹ️ **Shutting down.**").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); } await Task.Delay(2000).ConfigureAwait(false); Environment.Exit(0); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task SetName(IUserMessage umsg, [Remainder] string newName) + public async Task SetName([Remainder] string newName) { if (string.IsNullOrWhiteSpace(newName)) return; - await (await NadekoBot.Client.GetCurrentUserAsync()).ModifyAsync(u => u.Username = newName).ConfigureAwait(false); + await NadekoBot.Client.CurrentUser().ModifyAsync(u => u.Username = newName).ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync($"ℹ️ Successfully changed name to **{newName}**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"ℹ️ Successfully changed name to **{newName}**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task SetAvatar(IUserMessage umsg, [Remainder] string img = null) + public async Task SetAvatar([Remainder] string img = null) { if (string.IsNullOrWhiteSpace(img)) return; @@ -536,38 +507,38 @@ namespace NadekoBot.Modules.Administration await sr.CopyToAsync(imgStream); imgStream.Position = 0; - await (await NadekoBot.Client.GetCurrentUserAsync().ConfigureAwait(false)).ModifyAsync(u => u.Avatar = imgStream).ConfigureAwait(false); + await NadekoBot.Client.CurrentUser().ModifyAsync(u => u.Avatar = imgStream).ConfigureAwait(false); } } - await umsg.Channel.SendConfirmAsync("πŸ†’ **New avatar set.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ†’ **New avatar set.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task SetGame(IUserMessage umsg, [Remainder] string game = null) + public async Task SetGame([Remainder] string game = null) { game = game ?? ""; await NadekoBot.Client.SetGame(game).ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync("πŸ‘Ύ **New game set.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ‘Ύ **New game set.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task SetStream(IUserMessage umsg, string url, [Remainder] string name = null) + public async Task SetStream(string url, [Remainder] string name = null) { name = name ?? ""; await NadekoBot.Client.SetStream(name, url).ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync("ℹ️ **New stream set.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("ℹ️ **New stream set.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task Send(IUserMessage umsg, string where, [Remainder] string msg = null) + public async Task Send(string where, [Remainder] string msg = null) { if (string.IsNullOrWhiteSpace(msg)) return; @@ -584,7 +555,7 @@ namespace NadekoBot.Modules.Administration if (ids[1].ToUpperInvariant().StartsWith("C:")) { var cid = ulong.Parse(ids[1].Substring(2)); - var ch = server.GetTextChannels().Where(c => c.Id == cid).FirstOrDefault(); + var ch = (await server.GetTextChannelsAsync()).Where(c => c.Id == cid).FirstOrDefault(); if (ch == null) { return; @@ -594,7 +565,7 @@ namespace NadekoBot.Modules.Administration else if (ids[1].ToUpperInvariant().StartsWith("U:")) { var uid = ulong.Parse(ids[1].Substring(2)); - var user = server.GetUsers().Where(u => u.Id == uid).FirstOrDefault(); + var user = (await server.GetUsersAsync()).Where(u => u.Id == uid).FirstOrDefault(); if (user == null) { return; @@ -603,42 +574,40 @@ namespace NadekoBot.Modules.Administration } else { - await umsg.Channel.SendErrorAsync("⚠️ Invalid format.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("⚠️ Invalid format.").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task Announce(IUserMessage umsg, [Remainder] string message) + public async Task Announce([Remainder] string message) { var channels = await Task.WhenAll(NadekoBot.Client.GetGuilds().Select(g => g.GetDefaultChannelAsync() )).ConfigureAwait(false); - await Task.WhenAll(channels.Select(c => c.SendConfirmAsync($"πŸ†• Message from {umsg.Author} `[Bot Owner]`:", message))) + await Task.WhenAll(channels.Select(c => c.SendConfirmAsync($"πŸ†• Message from {Context.User} `[Bot Owner]`:", message))) .ConfigureAwait(false); - await umsg.Channel.SendConfirmAsync("πŸ†—").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ†—").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] [OwnerOnly] - public async Task SaveChat(IUserMessage umsg, int cnt) + public async Task SaveChat(int cnt) { - var channel = (ITextChannel)umsg.Channel; - ulong? lastmsgId = null; var sb = new StringBuilder(); var msgs = new List(cnt); while (cnt > 0) { var dlcnt = cnt < 100 ? cnt : 100; - IReadOnlyCollection dledMsgs; + IEnumerable dledMsgs; if (lastmsgId == null) - dledMsgs = await umsg.Channel.GetMessagesAsync(cnt).ConfigureAwait(false); + dledMsgs = await Context.Channel.GetMessagesAsync(cnt).Flatten().ConfigureAwait(false); else - dledMsgs = await umsg.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt); + dledMsgs = await Context.Channel.GetMessagesAsync(lastmsgId.Value, Direction.Before, dlcnt).Flatten().ConfigureAwait(false); if (!dledMsgs.Any()) break; @@ -647,8 +616,8 @@ namespace NadekoBot.Modules.Administration lastmsgId = msgs[msgs.Count - 1].Id; cnt -= 100; } - var title = $"Chatlog-{channel.Guild.Name}/#{channel.Name}-{DateTime.Now}.txt"; - await (umsg.Author as IGuildUser).SendFileAsync( + var title = $"Chatlog-{Context.Guild.Name}/#{Context.Channel.Name}-{DateTime.Now}.txt"; + await (Context.User as IGuildUser).SendFileAsync( await JsonConvert.SerializeObject(new { Messages = msgs.Select(s => $"【{s.Timestamp:HH:mm:ss}】{s.Author}:" + s.ToString()) }, Formatting.Indented).ToStream().ConfigureAwait(false), title, title).ConfigureAwait(false); } @@ -656,32 +625,30 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.MentionEveryone)] - public async Task MentionRole(IUserMessage umsg, params IRole[] roles) + [RequireUserPermission(GuildPermission.MentionEveryone)] + public async Task MentionRole(params IRole[] roles) { - var channel = (ITextChannel)umsg.Channel; - - string send = $"❕{umsg.Author.Mention} has invoked a mention on the following roles ❕"; + string send = $"❕{Context.User.Mention} has invoked a mention on the following roles ❕"; foreach (var role in roles) { send += $"\n**{role.Name}**\n"; - send += string.Join(", ", (await channel.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Distinct().Select(u=>u.Mention)); + send += string.Join(", ", (await Context.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Distinct().Select(u=>u.Mention)); } while (send.Length > 2000) { var curstr = send.Substring(0, 2000); - await channel.SendMessageAsync(curstr.Substring(0, + await Context.Channel.SendMessageAsync(curstr.Substring(0, curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false); send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) + send.Substring(2000); } - await channel.SendMessageAsync(send).ConfigureAwait(false); + await Context.Channel.SendMessageAsync(send).ConfigureAwait(false); } IGuild nadekoSupportServer; [NadekoCommand, Usage, Description, Aliases] - public async Task Donators(IUserMessage umsg) + public async Task Donators() { IEnumerable donatorsOrdered; @@ -689,7 +656,7 @@ namespace NadekoBot.Modules.Administration { donatorsOrdered = uow.Donators.GetDonatorsOrdered(); } - await umsg.Channel.SendConfirmAsync("Thanks to the people listed below for making this project happen!", string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("Thanks to the people listed below for making this project happen!", string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false); nadekoSupportServer = nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850); @@ -700,14 +667,14 @@ namespace NadekoBot.Modules.Administration if (patreonRole == null) return; - var usrs = nadekoSupportServer.GetUsers().Where(u => u.Roles.Contains(patreonRole)); - await umsg.Channel.SendConfirmAsync("Patreon supporters", string.Join("⭐", usrs.Select(d => d.Username))).ConfigureAwait(false); + var usrs = (await nadekoSupportServer.GetUsersAsync()).Where(u => u.RoleIds.Contains(236667642088259585u)); + await Context.Channel.SendConfirmAsync("Patreon supporters", string.Join("⭐", usrs.Select(d => d.Username))).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task Donadd(IUserMessage umsg, IUser donator, int amount) + public async Task Donadd(IUser donator, int amount) { Donator don; using (var uow = DbHandler.UnitOfWork()) @@ -716,7 +683,7 @@ namespace NadekoBot.Modules.Administration await uow.CompleteAsync(); } - await umsg.Channel.SendConfirmAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} πŸ‘‘").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"Successfuly added a new donator. Total donated amount from this user: {don.Amount} πŸ‘‘").ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Administration/Commands/AntiRaidCommands.cs b/src/NadekoBot/Modules/Administration/Commands/AntiRaidCommands.cs index 29f465df..14fd957a 100644 --- a/src/NadekoBot/Modules/Administration/Commands/AntiRaidCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/AntiRaidCommands.cs @@ -84,10 +84,10 @@ namespace NadekoBot.Modules.Administration NadekoBot.Client.MessageReceived += (imsg) => { var msg = imsg as IUserMessage; - if (msg == null || msg.Author.IsBot) + if (msg == null || Context.User.IsBot) return Task.CompletedTask; - var channel = msg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (channel == null) return Task.CompletedTask; @@ -99,14 +99,14 @@ namespace NadekoBot.Modules.Administration if (!antiSpamGuilds.TryGetValue(channel.Guild.Id, out spamSettings)) return; - var stats = spamSettings.UserStats.AddOrUpdate(msg.Author.Id, new UserSpamStats(msg.Content), + var stats = spamSettings.UserStats.AddOrUpdate(Context.User.Id, new UserSpamStats(msg.Content), (id, old) => { old.ApplyNextMessage(msg.Content); return old; }); if (stats.Count >= spamSettings.MessageThreshold) { - if (spamSettings.UserStats.TryRemove(msg.Author.Id, out stats)) + if (spamSettings.UserStats.TryRemove(Context.User.Id, out stats)) { - await PunishUsers(spamSettings.Action, ProtectionType.Spamming, (IGuildUser)msg.Author) + await PunishUsers(spamSettings.Action, ProtectionType.Spamming, (IGuildUser)Context.User) .ConfigureAwait(false); } } @@ -196,10 +196,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] + [RequireUserPermission(GuildPermission.Administrator)] public async Task AntiRaid(IUserMessage imsg, int userThreshold, int seconds, PunishmentAction action) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (userThreshold < 2 || userThreshold > 30) { @@ -234,16 +234,16 @@ namespace NadekoBot.Modules.Administration }; antiRaidGuilds.AddOrUpdate(channel.Guild.Id, setting, (id, old) => setting); - await channel.SendConfirmAsync($"ℹ️ {imsg.Author.Mention} If **{userThreshold}** or more users join within **{seconds}** seconds, I will **{action}** them.") + await channel.SendConfirmAsync($"ℹ️ {Context.User.Mention} If **{userThreshold}** or more users join within **{seconds}** seconds, I will **{action}** them.") .ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] + [RequireUserPermission(GuildPermission.Administrator)] public async Task AntiSpam(IUserMessage imsg, int messageCount=3, PunishmentAction action = PunishmentAction.Mute) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (messageCount < 2 || messageCount > 10) return; diff --git a/src/NadekoBot/Modules/Administration/Commands/AutoAssignRoleCommands.cs b/src/NadekoBot/Modules/Administration/Commands/AutoAssignRoleCommands.cs index e834e80b..1009936c 100644 --- a/src/NadekoBot/Modules/Administration/Commands/AutoAssignRoleCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/AutoAssignRoleCommands.cs @@ -45,10 +45,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] public async Task AutoAssignRole(IUserMessage umsg, [Remainder] IRole role = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; GuildConfig conf; using (var uow = DbHandler.UnitOfWork()) diff --git a/src/NadekoBot/Modules/Administration/Commands/CrossServerTextChannel.cs b/src/NadekoBot/Modules/Administration/Commands/CrossServerTextChannel.cs index 7867a078..d7f517b5 100644 --- a/src/NadekoBot/Modules/Administration/Commands/CrossServerTextChannel.cs +++ b/src/NadekoBot/Modules/Administration/Commands/CrossServerTextChannel.cs @@ -21,28 +21,28 @@ namespace NadekoBot.Modules.Administration _log = LogManager.GetCurrentClassLogger(); NadekoBot.Client.MessageReceived += (imsg) => { - if (imsg.Author.IsBot) + if (Context.User.IsBot) return Task.CompletedTask; var msg = imsg as IUserMessage; if (msg == null) return Task.CompletedTask; - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (channel == null) return Task.CompletedTask; Task.Run(async () => { - if (msg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return; + if (Context.User.Id == NadekoBot.Client.CurrentUser().Id) return; foreach (var subscriber in Subscribers) { var set = subscriber.Value; - if (!set.Contains(msg.Channel)) + if (!set.Contains(Context.Channel)) continue; foreach (var chan in set.Except(new[] { channel })) { - try { await chan.SendMessageAsync(GetText(channel.Guild, channel, (IGuildUser)msg.Author, msg)).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); } + try { await chan.SendMessageAsync(GetText(channel.Guild, channel, (IGuildUser)Context.User, msg)).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); } } } }); @@ -59,24 +59,24 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] [OwnerOnly] - public async Task Scsc(IUserMessage msg) + public async Task Scsc() { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var token = new NadekoRandom().Next(); var set = new ConcurrentHashSet(); if (Subscribers.TryAdd(token, set)) { set.Add(channel); - await ((IGuildUser)msg.Author).SendConfirmAsync("This is your CSC token", token.ToString()).ConfigureAwait(false); + await ((IGuildUser)Context.User).SendConfirmAsync("This is your CSC token", token.ToString()).ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task Jcsc(IUserMessage imsg, int token) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; ConcurrentHashSet set; if (!Subscribers.TryGetValue(token, out set)) @@ -87,10 +87,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] - public async Task Lcsc(IUserMessage imsg) + [RequireUserPermission(GuildPermission.ManageGuild)] + public async Task Lcsc() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; foreach (var subscriber in Subscribers) { diff --git a/src/NadekoBot/Modules/Administration/Commands/DMForwardCommands.cs b/src/NadekoBot/Modules/Administration/Commands/DMForwardCommands.cs index fac9949e..cc304cf8 100644 --- a/src/NadekoBot/Modules/Administration/Commands/DMForwardCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/DMForwardCommands.cs @@ -29,9 +29,9 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task ForwardMessages(IUserMessage imsg) + public async Task ForwardMessages() { - var channel = imsg.Channel; + var channel = Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -47,9 +47,9 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task ForwardToAll(IUserMessage imsg) + public async Task ForwardToAll() { - var channel = imsg.Channel; + var channel = Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -68,16 +68,16 @@ namespace NadekoBot.Modules.Administration { if (ForwardDMs && ownerChannels.Any()) { - var title = $"DM from [{msg.Author}]({msg.Author.Id})"; + var title = $"DM from [{Context.User}]({Context.User.Id})"; if (ForwardDMsToAllOwners) { - var msgs = await Task.WhenAll(ownerChannels.Where(ch => ch.Recipient.Id != msg.Author.Id) + var msgs = await Task.WhenAll(ownerChannels.Where(ch => ch.Recipient.Id != Context.User.Id) .Select(ch => ch.SendConfirmAsync(title, msg.Content))).ConfigureAwait(false); } else { var firstOwnerChannel = ownerChannels.First(); - if (firstOwnerChannel.Recipient.Id != msg.Author.Id) + if (firstOwnerChannel.Recipient.Id != Context.User.Id) try { await firstOwnerChannel.SendConfirmAsync(title, msg.Content).ConfigureAwait(false); } catch { } } } diff --git a/src/NadekoBot/Modules/Administration/Commands/LogCommand.cs b/src/NadekoBot/Modules/Administration/Commands/LogCommand.cs index 06ebe4e8..2113d064 100644 --- a/src/NadekoBot/Modules/Administration/Commands/LogCommand.cs +++ b/src/NadekoBot/Modules/Administration/Commands/LogCommand.cs @@ -469,7 +469,7 @@ namespace NadekoBot.Modules.Administration if (msg == null || msg.IsAuthor()) return Task.CompletedTask; - var channel = msg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (channel == null) return Task.CompletedTask; @@ -488,7 +488,7 @@ namespace NadekoBot.Modules.Administration { try { - var str = $@"πŸ•”`{prettyCurrentTime}`πŸ‘€__**{msg.Author.Username}#{msg.Author.Discriminator}**__ **| Deleted Message |** πŸ†” `{msg.Author.Id}` #⃣ `{channel.Name}` + var str = $@"πŸ•”`{prettyCurrentTime}`πŸ‘€__**{Context.User.Username}#{Context.User.Discriminator}**__ **| Deleted Message |** πŸ†” `{Context.User.Id}` #⃣ `{channel.Name}` πŸ—‘ {msg.Resolve(userHandling: UserMentionHandling.NameAndDiscriminator)}"; if (msg.Attachments.Any()) str += $"{Environment.NewLine}πŸ“Ž {string.Join(", ", msg.Attachments.Select(a => a.ProxyUrl))}"; @@ -581,11 +581,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] + [RequireUserPermission(GuildPermission.Administrator)] [OwnerOnly] - public async Task LogServer(IUserMessage msg) + public async Task LogServer() { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; LogSetting logSetting; using (var uow = DbHandler.UnitOfWork()) { @@ -605,11 +605,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] + [RequireUserPermission(GuildPermission.Administrator)] [OwnerOnly] - public async Task LogIgnore(IUserMessage imsg) + public async Task LogIgnore() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; int removed; using (var uow = DbHandler.UnitOfWork()) { @@ -635,9 +635,9 @@ namespace NadekoBot.Modules.Administration //[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias] //[RequireContext(ContextType.Guild)] //[OwnerOnly] - //public async Task LogAdd(IUserMessage msg, [Remainder] string eventName) + //public async Task LogAdd([Remainder] string eventName) //{ - // var channel = (ITextChannel)msg.Channel; + // var channel = (ITextChannel)Context.Channel; // //eventName = eventName?.Replace(" ","").ToLowerInvariant(); // switch (eventName.ToLowerInvariant()) @@ -669,9 +669,9 @@ namespace NadekoBot.Modules.Administration //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias] //[RequireContext(ContextType.Guild)] - //public async Task LogRemove(IUserMessage msg, string eventName) + //public async Task LogRemove(string eventName) //{ - // var channel = (ITextChannel)msg.Channel; + // var channel = (ITextChannel)Context.Channel; // eventName = eventName.ToLowerInvariant(); // switch (eventName) @@ -704,10 +704,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] - public async Task UserPresence(IUserMessage imsg) + [RequireUserPermission(GuildPermission.Administrator)] + public async Task UserPresence() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) { @@ -727,10 +727,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] - public async Task VoicePresence(IUserMessage imsg) + [RequireUserPermission(GuildPermission.Administrator)] + public async Task VoicePresence() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) { @@ -754,7 +754,7 @@ namespace NadekoBot.Modules.Administration //[RequireContext(ContextType.Guild)] //public async Task VoiPresIgnore(IUserMessage imsg, IVoiceChannel voiceChannel) //{ - // var channel = (ITextChannel)imsg.Channel; + // var channel = (ITextChannel)Context.Channel; // int removed; // using (var uow = DbHandler.UnitOfWork()) // { diff --git a/src/NadekoBot/Modules/Administration/Commands/MessageRepeater.cs b/src/NadekoBot/Modules/Administration/Commands/MessageRepeater.cs index 583f0f05..9e0975af 100644 --- a/src/NadekoBot/Modules/Administration/Commands/MessageRepeater.cs +++ b/src/NadekoBot/Modules/Administration/Commands/MessageRepeater.cs @@ -81,10 +81,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task RepeatInvoke(IUserMessage imsg) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task RepeatInvoke() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; RepeatRunner rep; if (!repeaters.TryGetValue(channel.Id, out rep)) @@ -98,10 +98,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Repeat(IUserMessage imsg) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Repeat() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; RepeatRunner rep; if (repeaters.TryRemove(channel.Id, out rep)) { @@ -119,10 +119,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] + [RequireUserPermission(GuildPermission.ManageMessages)] public async Task Repeat(IUserMessage imsg, int minutes, [Remainder] string message) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (minutes < 1 || minutes > 10080) return; diff --git a/src/NadekoBot/Modules/Administration/Commands/Migration.cs b/src/NadekoBot/Modules/Administration/Commands/Migration.cs index 7027488a..a16dad79 100644 --- a/src/NadekoBot/Modules/Administration/Commands/Migration.cs +++ b/src/NadekoBot/Modules/Administration/Commands/Migration.cs @@ -34,9 +34,9 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task MigrateData(IUserMessage umsg) + public async Task MigrateData() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var version = 0; using (var uow = DbHandler.UnitOfWork()) @@ -54,12 +54,12 @@ namespace NadekoBot.Modules.Administration break; } } - await umsg.Channel.SendMessageAsync("πŸ†™ **Migration done.**").ConfigureAwait(false); + await Context.Channel.SendMessageAsync("πŸ†™ **Migration done.**").ConfigureAwait(false); } catch (Exception ex) { _log.Error(ex); - await umsg.Channel.SendMessageAsync("⚠️ **Error while migrating, check `logs` for more informations.**").ConfigureAwait(false); + await Context.Channel.SendMessageAsync("⚠️ **Error while migrating, check `logs` for more informations.**").ConfigureAwait(false); } } diff --git a/src/NadekoBot/Modules/Administration/Commands/MuteCommands.cs b/src/NadekoBot/Modules/Administration/Commands/MuteCommands.cs index b4ce345a..1efe2e90 100644 --- a/src/NadekoBot/Modules/Administration/Commands/MuteCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/MuteCommands.cs @@ -137,11 +137,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] [Priority(1)] public async Task SetMuteRole(IUserMessage imsg, [Remainder] string name) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; name = name.Trim(); if (string.IsNullOrWhiteSpace(name)) return; @@ -158,18 +158,18 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] [Priority(0)] public Task SetMuteRole(IUserMessage imsg, [Remainder] IRole role) => SetMuteRole(imsg, role.Name); [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - [RequirePermission(GuildPermission.MuteMembers)] + [RequireUserPermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.MuteMembers)] public async Task Mute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -184,11 +184,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - [RequirePermission(GuildPermission.MuteMembers)] + [RequireUserPermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.MuteMembers)] public async Task Unmute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -203,10 +203,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] public async Task ChatMute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -222,10 +222,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] public async Task ChatUnmute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -241,10 +241,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.MuteMembers)] + [RequireUserPermission(GuildPermission.MuteMembers)] public async Task VoiceMute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -260,10 +260,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.MuteMembers)] + [RequireUserPermission(GuildPermission.MuteMembers)] public async Task VoiceUnmute(IUserMessage umsg, IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { await user.ModifyAsync(usr => usr.Mute = false).ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Administration/Commands/PlayingRotateCommands.cs b/src/NadekoBot/Modules/Administration/Commands/PlayingRotateCommands.cs index 2d8e7921..15d11e3f 100644 --- a/src/NadekoBot/Modules/Administration/Commands/PlayingRotateCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/PlayingRotateCommands.cs @@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task RotatePlaying(IUserMessage umsg) + public async Task RotatePlaying() { using (var uow = DbHandler.UnitOfWork()) { @@ -98,9 +98,9 @@ namespace NadekoBot.Modules.Administration await uow.CompleteAsync(); } if (RotatingStatuses) - await umsg.Channel.SendConfirmAsync("πŸ†— **Rotating playing status enabled.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("πŸ†— **Rotating playing status enabled.**").ConfigureAwait(false); else - await umsg.Channel.SendConfirmAsync("ℹ️ **Rotating playing status disabled.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("ℹ️ **Rotating playing status disabled.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -116,19 +116,19 @@ namespace NadekoBot.Modules.Administration await uow.CompleteAsync(); } - await umsg.Channel.SendConfirmAsync("βœ… **Added.**").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("βœ… **Added.**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [OwnerOnly] - public async Task ListPlaying(IUserMessage umsg) + public async Task ListPlaying() { if (!RotatingStatusMessages.Any()) - await umsg.Channel.SendErrorAsync("❎ **No rotating playing statuses set.**"); + await Context.Channel.SendErrorAsync("❎ **No rotating playing statuses set.**"); else { var i = 1; - await umsg.Channel.SendConfirmAsync($"ℹ️ {umsg.Author.Mention} `Here is a list of rotating statuses:`\n\n\t" + string.Join("\n\t", RotatingStatusMessages.Select(rs => $"`{i++}.` {rs.Status}"))); + await Context.Channel.SendConfirmAsync($"ℹ️ {Context.User.Mention} `Here is a list of rotating statuses:`\n\n\t" + string.Join("\n\t", RotatingStatusMessages.Select(rs => $"`{i++}.` {rs.Status}"))); } } @@ -151,7 +151,7 @@ namespace NadekoBot.Modules.Administration RotatingStatusMessages.RemoveAt(index); await uow.CompleteAsync(); } - await umsg.Channel.SendConfirmAsync($"πŸ—‘ **Removed the the playing message:** {msg}").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ—‘ **Removed the the playing message:** {msg}").ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Administration/Commands/RatelimitCommand.cs b/src/NadekoBot/Modules/Administration/Commands/RatelimitCommand.cs index d4e74299..610b3bb7 100644 --- a/src/NadekoBot/Modules/Administration/Commands/RatelimitCommand.cs +++ b/src/NadekoBot/Modules/Administration/Commands/RatelimitCommand.cs @@ -68,7 +68,7 @@ namespace NadekoBot.Modules.Administration var t = Task.Run(async () => { var usrMsg = umsg as IUserMessage; - var channel = usrMsg.Channel as ITextChannel; + var channel = usrContext.Channel as ITextChannel; if (channel == null || usrMsg.IsAuthor()) return; @@ -76,7 +76,7 @@ namespace NadekoBot.Modules.Administration if (!RatelimitingChannels.TryGetValue(channel.Id, out limiter)) return; - if (limiter.CheckUserRatelimit(usrMsg.Author.Id)) + if (limiter.CheckUserRatelimit(usrContext.User.Id)) try { await usrMsg.DeleteAsync(); } catch (Exception ex) { _log.Warn(ex); } }); return Task.CompletedTask; @@ -85,10 +85,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Slowmode(IUserMessage umsg) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Slowmode() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; Ratelimiter throwaway; if (RatelimitingChannels.TryRemove(channel.Id, out throwaway)) @@ -101,11 +101,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] + [RequireUserPermission(GuildPermission.ManageMessages)] public async Task Slowmode(IUserMessage umsg, int msg, int perSec) { await Slowmode(umsg).ConfigureAwait(false); // disable if exists - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (msg < 1 || perSec < 1 || msg > 100 || perSec > 3600) { diff --git a/src/NadekoBot/Modules/Administration/Commands/SelfAssignedRolesCommand.cs b/src/NadekoBot/Modules/Administration/Commands/SelfAssignedRolesCommand.cs index dfd8b0a7..e05a7a09 100644 --- a/src/NadekoBot/Modules/Administration/Commands/SelfAssignedRolesCommand.cs +++ b/src/NadekoBot/Modules/Administration/Commands/SelfAssignedRolesCommand.cs @@ -21,10 +21,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task AdSarm(IUserMessage imsg) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task AdSarm() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool newval; using (var uow = DbHandler.UnitOfWork()) { @@ -39,10 +39,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] public async Task Asar(IUserMessage umsg, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; IEnumerable roles; @@ -70,10 +70,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageRoles)] public async Task Rsar(IUserMessage umsg, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; bool success; using (var uow = DbHandler.UnitOfWork()) @@ -91,9 +91,9 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Lsar(IUserMessage umsg) + public async Task Lsar() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var toRemove = new ConcurrentHashSet(); var removeMsg = new StringBuilder(); @@ -128,10 +128,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task Tesar(IUserMessage umsg) + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task Tesar() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; bool areExclusive; using (var uow = DbHandler.UnitOfWork()) @@ -149,8 +149,8 @@ namespace NadekoBot.Modules.Administration [RequireContext(ContextType.Guild)] public async Task Iam(IUserMessage umsg, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; - var guildUser = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + var guildUser = (IGuildUser)Context.User; var usrMsg = (IUserMessage)umsg; GuildConfig conf; @@ -208,8 +208,8 @@ namespace NadekoBot.Modules.Administration [RequireContext(ContextType.Guild)] public async Task Iamnot(IUserMessage umsg, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; - var guildUser = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + var guildUser = (IGuildUser)Context.User; bool autoDeleteSelfAssignedRoleMessages; IEnumerable roles; diff --git a/src/NadekoBot/Modules/Administration/Commands/SelfCommands.cs b/src/NadekoBot/Modules/Administration/Commands/SelfCommands.cs index b750a26c..9b888321 100644 --- a/src/NadekoBot/Modules/Administration/Commands/SelfCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/SelfCommands.cs @@ -24,7 +24,7 @@ namespace NadekoBot.Modules.Administration [OwnerOnly] public async Task Leave(IUserMessage umsg, [Remainder] string guildStr) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; guildStr = guildStr.Trim().ToUpperInvariant(); var server = _client.GetGuilds().FirstOrDefault(g => g.Id.ToString().Trim().ToUpperInvariant() == guildStr) ?? @@ -35,7 +35,7 @@ namespace NadekoBot.Modules.Administration await channel.SendErrorAsync("⚠️ Cannot find that server").ConfigureAwait(false); return; } - if (server.OwnerId != _client.GetCurrentUser().Id) + if (server.OwnerId != _client.CurrentUser().Id) { await server.LeaveAsync().ConfigureAwait(false); await channel.SendConfirmAsync("βœ… Left server " + server.Name).ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Administration/Commands/ServerGreetCommands.cs b/src/NadekoBot/Modules/Administration/Commands/ServerGreetCommands.cs index 1a42e613..96dcf125 100644 --- a/src/NadekoBot/Modules/Administration/Commands/ServerGreetCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/ServerGreetCommands.cs @@ -124,10 +124,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task GreetDel(IUserMessage umsg, int timer = 30) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (timer < 0 || timer > 600) return; @@ -155,10 +155,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] - public async Task Greet(IUserMessage umsg) + [RequireUserPermission(GuildPermission.ManageGuild)] + public async Task Greet() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var enabled = await ServerGreetCommands.SetGreet(channel.Guild.Id, channel.Id).ConfigureAwait(false); @@ -184,10 +184,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task GreetMsg(IUserMessage umsg, [Remainder] string text = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(text)) { @@ -228,10 +228,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] - public async Task GreetDm(IUserMessage umsg) + [RequireUserPermission(GuildPermission.ManageGuild)] + public async Task GreetDm() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var enabled = await ServerGreetCommands.SetGreetDm(channel.Guild.Id).ConfigureAwait(false); @@ -256,10 +256,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task GreetDmMsg(IUserMessage umsg, [Remainder] string text = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(text)) { @@ -300,10 +300,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] - public async Task Bye(IUserMessage umsg) + [RequireUserPermission(GuildPermission.ManageGuild)] + public async Task Bye() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var enabled = await ServerGreetCommands.SetBye(channel.Guild.Id, channel.Id).ConfigureAwait(false); @@ -329,10 +329,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task ByeMsg(IUserMessage umsg, [Remainder] string text = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(text)) { @@ -373,10 +373,10 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageGuild)] + [RequireUserPermission(GuildPermission.ManageGuild)] public async Task ByeDel(IUserMessage umsg, int timer = 30) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await ServerGreetCommands.SetByeDel(channel.Guild.Id, timer).ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Administration/Commands/VoicePlusTextCommands.cs b/src/NadekoBot/Modules/Administration/Commands/VoicePlusTextCommands.cs index 4ffff33a..0abb0527 100644 --- a/src/NadekoBot/Modules/Administration/Commands/VoicePlusTextCommands.cs +++ b/src/NadekoBot/Modules/Administration/Commands/VoicePlusTextCommands.cs @@ -106,11 +106,11 @@ namespace NadekoBot.Modules.Administration [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageRoles)] - [RequirePermission(GuildPermission.ManageChannels)] - public async Task VoicePlusText(IUserMessage msg) + [RequireUserPermission(GuildPermission.ManageRoles)] + [RequireUserPermission(GuildPermission.ManageChannels)] + public async Task VoicePlusText() { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var guild = channel.Guild; var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false); @@ -159,11 +159,11 @@ namespace NadekoBot.Modules.Administration } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageChannels)] - [RequirePermission(GuildPermission.ManageRoles)] - public async Task CleanVPlusT(IUserMessage msg) + [RequireUserPermission(GuildPermission.ManageChannels)] + [RequireUserPermission(GuildPermission.ManageRoles)] + public async Task CleanVPlusT() { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var guild = channel.Guild; var botUser = await guild.GetCurrentUserAsync().ConfigureAwait(false); if (!botUser.GuildPermissions.Administrator) diff --git a/src/NadekoBot/Modules/ClashOfClans/ClashOfClans.cs b/src/NadekoBot/Modules/ClashOfClans/ClashOfClans.cs index 81be7144..253e751e 100644 --- a/src/NadekoBot/Modules/ClashOfClans/ClashOfClans.cs +++ b/src/NadekoBot/Modules/ClashOfClans/ClashOfClans.cs @@ -59,9 +59,9 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task CreateWar(IUserMessage umsg, int size, [Remainder] string enemyClan = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; - if (!(umsg.Author as IGuildUser).GuildPermissions.ManageChannels) + if (!(Context.User as IGuildUser).GuildPermissions.ManageChannels) return; if (string.IsNullOrWhiteSpace(enemyClan)) @@ -81,7 +81,7 @@ namespace NadekoBot.Modules.ClashOfClans } - var cw = await CreateWar(enemyClan, size, channel.Guild.Id, umsg.Channel.Id); + var cw = await CreateWar(enemyClan, size, channel.Guild.Id, Context.Channel.Id); wars.Add(cw); await channel.SendConfirmAsync($"β—πŸ”°**CREATED CLAN WAR AGAINST {cw.ShortPrint()}**").ConfigureAwait(false); @@ -91,7 +91,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task StartWar(IUserMessage umsg, [Remainder] string number = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; int num = 0; int.TryParse(number, out num); @@ -119,7 +119,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task ListWar(IUserMessage umsg, [Remainder] string number = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; // if number is null, print all wars in a short way if (string.IsNullOrWhiteSpace(number)) @@ -162,7 +162,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task Claim(IUserMessage umsg, int number, int baseNumber, [Remainder] string other_name = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var warsInfo = GetWarInfo(umsg, number); if (warsInfo == null || warsInfo.Item1.Count == 0) { @@ -171,7 +171,7 @@ namespace NadekoBot.Modules.ClashOfClans } var usr = string.IsNullOrWhiteSpace(other_name) ? - umsg.Author.Username : + Context.User.Username : other_name; try { @@ -190,7 +190,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task ClaimFinish1(IUserMessage umsg, int number, int baseNumber = 0) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await FinishClaim(umsg, number, baseNumber - 1, 1); } @@ -198,7 +198,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task ClaimFinish2(IUserMessage umsg, int number, int baseNumber = 0) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await FinishClaim(umsg, number, baseNumber - 1, 2); } @@ -206,7 +206,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task ClaimFinish(IUserMessage umsg, int number, int baseNumber = 0) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await FinishClaim(umsg, number, baseNumber - 1); } @@ -214,7 +214,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task EndWar(IUserMessage umsg, int number) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var warsInfo = GetWarInfo(umsg,number); if (warsInfo == null) @@ -235,7 +235,7 @@ namespace NadekoBot.Modules.ClashOfClans [RequireContext(ContextType.Guild)] public async Task Unclaim(IUserMessage umsg, int number, [Remainder] string otherName = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var warsInfo = GetWarInfo(umsg, number); if (warsInfo == null || warsInfo.Item1.Count == 0) @@ -245,7 +245,7 @@ namespace NadekoBot.Modules.ClashOfClans } var usr = string.IsNullOrWhiteSpace(otherName) ? - umsg.Author.Username : + Context.User.Username : otherName; try { @@ -262,7 +262,7 @@ namespace NadekoBot.Modules.ClashOfClans private async Task FinishClaim(IUserMessage umsg, int number, int baseNumber, int stars = 3) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var warInfo = GetWarInfo(umsg, number); if (warInfo == null || warInfo.Item1.Count == 0) { @@ -274,14 +274,14 @@ namespace NadekoBot.Modules.ClashOfClans { if (baseNumber == -1) { - baseNumber = war.FinishClaim(umsg.Author.Username, stars); + baseNumber = war.FinishClaim(Context.User.Username, stars); SaveWar(war); } else { war.FinishClaim(baseNumber, stars); } - await channel.SendConfirmAsync($"β—πŸ”°{umsg.Author.Mention} **DESTROYED** a base #{baseNumber + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false); + await channel.SendConfirmAsync($"β—πŸ”°{Context.User.Mention} **DESTROYED** a base #{baseNumber + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false); } catch (Exception ex) { @@ -291,7 +291,7 @@ namespace NadekoBot.Modules.ClashOfClans private static Tuple, int> GetWarInfo(IUserMessage umsg, int num) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; //check if there are any wars List wars = null; ClashWars.TryGetValue(channel.Guild.Id, out wars); diff --git a/src/NadekoBot/Modules/CustomReactions/CustomReactions.cs b/src/NadekoBot/Modules/CustomReactions/CustomReactions.cs index d7c28f91..71bb62bc 100644 --- a/src/NadekoBot/Modules/CustomReactions/CustomReactions.cs +++ b/src/NadekoBot/Modules/CustomReactions/CustomReactions.cs @@ -33,9 +33,9 @@ namespace NadekoBot.Modules.CustomReactions public void ClearStats() => ReactionStats.Clear(); - public static async Task TryExecuteCustomReaction(IUserMessage umsg) + public static async Task TryExecuteCustomReaction() { - var channel = umsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (channel == null) return false; @@ -78,15 +78,15 @@ namespace NadekoBot.Modules.CustomReactions [NadekoCommand, Usage, Description, Aliases] public async Task AddCustReact(IUserMessage imsg, string key, [Remainder] string message) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (string.IsNullOrWhiteSpace(message) || string.IsNullOrWhiteSpace(key)) return; key = key.ToLowerInvariant(); - if ((channel == null && !NadekoBot.Credentials.IsOwner(imsg.Author)) || (channel != null && !((IGuildUser)imsg.Author).GuildPermissions.Administrator)) + if ((channel == null && !NadekoBot.Credentials.IsOwner(Context.User)) || (channel != null && !((IGuildUser)Context.User).GuildPermissions.Administrator)) { - try { await imsg.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { } + try { await Context.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { } return; } @@ -115,19 +115,19 @@ namespace NadekoBot.Modules.CustomReactions reactions.Add(cr); } - await imsg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) + await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle("New Custom Reaction") .WithDescription($"#{cr.Id}") .AddField(efb => efb.WithName("Trigger").WithValue(key)) .AddField(efb => efb.WithName("Response").WithValue(message)) - .Build()).ConfigureAwait(false); + ).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [Priority(0)] public async Task ListCustReact(IUserMessage imsg, int page = 1) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (page < 1 || page > 1000) return; @@ -138,9 +138,9 @@ namespace NadekoBot.Modules.CustomReactions customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet()); if (customReactions == null || !customReactions.Any()) - await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); else - await imsg.Channel.SendConfirmAsync( + await Context.Channel.SendConfirmAsync( $"Page {page} of custom reactions:", string.Join("\n", customReactions.OrderBy(cr => cr.Trigger) .Skip((page - 1) * 20) @@ -158,7 +158,7 @@ namespace NadekoBot.Modules.CustomReactions [Priority(1)] public async Task ListCustReact(IUserMessage imsg, All x) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; ConcurrentHashSet customReactions; if (channel == null) @@ -167,7 +167,7 @@ namespace NadekoBot.Modules.CustomReactions customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet()); if (customReactions == null || !customReactions.Any()) - await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); else { var txtStream = await customReactions.GroupBy(cr => cr.Trigger) @@ -177,16 +177,16 @@ namespace NadekoBot.Modules.CustomReactions .ToStream() .ConfigureAwait(false); if (channel == null) // its a private one, just send back - await imsg.Channel.SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false); + await Context.Channel.SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false); else - await ((IGuildUser)imsg.Author).SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false); + await ((IGuildUser)Context.User).SendFileAsync(txtStream, "customreactions.txt", "List of all custom reactions").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] public async Task ListCustReactG(IUserMessage imsg, int page = 1) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (page < 1 || page > 10000) return; ConcurrentHashSet customReactions; @@ -196,9 +196,9 @@ namespace NadekoBot.Modules.CustomReactions customReactions = GuildReactions.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet()); if (customReactions == null || !customReactions.Any()) - await imsg.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No custom reactions found").ConfigureAwait(false); else - await imsg.Channel.SendConfirmAsync($"Page {page} of custom reactions (grouped):", + await Context.Channel.SendConfirmAsync($"Page {page} of custom reactions (grouped):", string.Join("\r\n", customReactions .GroupBy(cr => cr.Trigger) .OrderBy(cr => cr.Key) @@ -211,7 +211,7 @@ namespace NadekoBot.Modules.CustomReactions [NadekoCommand, Usage, Description, Aliases] public async Task ShowCustReact(IUserMessage imsg, int id) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; ConcurrentHashSet customReactions; if (channel == null) @@ -222,25 +222,25 @@ namespace NadekoBot.Modules.CustomReactions var found = customReactions.FirstOrDefault(cr => cr.Id == id); if (found == null) - await imsg.Channel.SendErrorAsync("No custom reaction found with that id.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No custom reaction found with that id.").ConfigureAwait(false); else { - await imsg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) + await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithDescription($"#{id}") .AddField(efb => efb.WithName("Trigger").WithValue(found.Trigger)) .AddField(efb => efb.WithName("Response").WithValue(found.Response + "\n```css\n" + found.Response + "```")) - .Build()).ConfigureAwait(false); + ).ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] public async Task DelCustReact(IUserMessage imsg, int id) { - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; - if ((channel == null && !NadekoBot.Credentials.IsOwner(imsg.Author)) || (channel != null && !((IGuildUser)imsg.Author).GuildPermissions.Administrator)) + if ((channel == null && !NadekoBot.Credentials.IsOwner(Context.User)) || (channel != null && !((IGuildUser)Context.User).GuildPermissions.Administrator)) { - try { await imsg.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { } + try { await Context.Channel.SendErrorAsync("Insufficient permissions. Requires Bot ownership for global custom reactions, and Administrator for guild custom reactions."); } catch { } return; } @@ -269,9 +269,9 @@ namespace NadekoBot.Modules.CustomReactions } if (success) - await imsg.Channel.SendConfirmAsync("Deleted custom reaction", toDelete.ToString()).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("Deleted custom reaction", toDelete.ToString()).ConfigureAwait(false); else - await imsg.Channel.SendErrorAsync("Failed to find that custom reaction.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Failed to find that custom reaction.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -280,18 +280,18 @@ namespace NadekoBot.Modules.CustomReactions if (string.IsNullOrWhiteSpace(trigger)) { ClearStats(); - await imsg.Channel.SendConfirmAsync($"Custom reaction stats cleared.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"Custom reaction stats cleared.").ConfigureAwait(false); } else { uint throwaway; if (ReactionStats.TryRemove(trigger, out throwaway)) { - await imsg.Channel.SendConfirmAsync($"Stats cleared for `{trigger}` custom reaction.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"Stats cleared for `{trigger}` custom reaction.").ConfigureAwait(false); } else { - await imsg.Channel.SendErrorAsync("No stats for that trigger found, no action taken.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No stats for that trigger found, no action taken.").ConfigureAwait(false); } } } @@ -301,12 +301,12 @@ namespace NadekoBot.Modules.CustomReactions { if (page < 1) return; - await imsg.Channel.EmbedAsync(ReactionStats.OrderByDescending(x => x.Value) + await Context.Channel.EmbedAsync(ReactionStats.OrderByDescending(x => x.Value) .Skip((page - 1)*9) .Take(9) .Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor).WithTitle($"Custom Reaction stats page #{page}"), (agg, cur) => agg.AddField(efb => efb.WithName(cur.Key).WithValue(cur.Value.ToString()).WithIsInline(true))) - .Build()) + ) .ConfigureAwait(false); } } diff --git a/src/NadekoBot/Modules/CustomReactions/Extensions.cs b/src/NadekoBot/Modules/CustomReactions/Extensions.cs index 49b2909f..c6fe16c7 100644 --- a/src/NadekoBot/Modules/CustomReactions/Extensions.cs +++ b/src/NadekoBot/Modules/CustomReactions/Extensions.cs @@ -18,7 +18,7 @@ namespace NadekoBot.Modules.CustomReactions public static Dictionary> placeholders = new Dictionary>() { - {"%mention%", (ctx) => { return $"<@{NadekoBot.Client.GetCurrentUser().Id}>"; } }, + {"%mention%", (ctx) => { return $"<@{NadekoBot.Client.CurrentUser().Id}>"; } }, {"%user%", (ctx) => { return ctx.Author.Mention; } }, {"%rnduser%", (ctx) => { var ch = ctx.Channel as ITextChannel; diff --git a/src/NadekoBot/Modules/DiscordModule.cs b/src/NadekoBot/Modules/DiscordModule.cs index c5b129dc..cd72023d 100644 --- a/src/NadekoBot/Modules/DiscordModule.cs +++ b/src/NadekoBot/Modules/DiscordModule.cs @@ -4,7 +4,7 @@ using NLog; namespace NadekoBot.Modules { - public class DiscordModule + public class DiscordModule : ModuleBase { protected Logger _log { get; } protected string _prefix { get; } diff --git a/src/NadekoBot/Modules/Gambling/Commands/AnimalRacing.cs b/src/NadekoBot/Modules/Gambling/Commands/AnimalRacing.cs index d462d572..926903f8 100644 --- a/src/NadekoBot/Modules/Gambling/Commands/AnimalRacing.cs +++ b/src/NadekoBot/Modules/Gambling/Commands/AnimalRacing.cs @@ -22,9 +22,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Race(IUserMessage umsg) + public async Task Race() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var ar = new AnimalRace(channel.Guild.Id, channel); @@ -36,7 +36,7 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task JoinRace(IUserMessage umsg, int amount = 0) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (amount < 0) amount = 0; @@ -48,7 +48,7 @@ namespace NadekoBot.Modules.Gambling await channel.SendErrorAsync("No race exists on this server"); return; } - await ar.JoinRace(umsg.Author as IGuildUser, amount); + await ar.JoinRace(Context.User as IGuildUser, amount); } public class AnimalRace @@ -199,7 +199,7 @@ namespace NadekoBot.Modules.Gambling var msg = imsg as IUserMessage; if (msg == null) return Task.CompletedTask; - if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel) + if (msg.IsAuthor() || !(Context.Channel is ITextChannel) || Context.Channel != raceChannel) return Task.CompletedTask; messagesSinceGameStarted++; return Task.CompletedTask; diff --git a/src/NadekoBot/Modules/Gambling/Commands/DiceRollCommand.cs b/src/NadekoBot/Modules/Gambling/Commands/DiceRollCommand.cs index 22d58035..06571677 100644 --- a/src/NadekoBot/Modules/Gambling/Commands/DiceRollCommand.cs +++ b/src/NadekoBot/Modules/Gambling/Commands/DiceRollCommand.cs @@ -22,9 +22,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Roll(IUserMessage umsg) + public async Task Roll() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (channel == null) return; var rng = new NadekoRandom(); @@ -44,7 +44,7 @@ namespace NadekoBot.Modules.Gambling catch { return new MemoryStream(); } }); - await channel.SendFileAsync(imageStream, "dice.png", $"{umsg.Author.Mention} rolled " + Format.Code(gen.ToString())).ConfigureAwait(false); + await channel.SendFileAsync(imageStream, "dice.png", $"{Context.User.Mention} rolled " + Format.Code(gen.ToString())).ConfigureAwait(false); } //todo merge into internallDndRoll and internalRoll [NadekoCommand, Usage, Description, Aliases] @@ -52,7 +52,7 @@ namespace NadekoBot.Modules.Gambling [Priority(1)] public async Task Roll(IUserMessage umsg, string arg) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (channel == null) return; @@ -78,7 +78,7 @@ namespace NadekoBot.Modules.Gambling arr[i] = rng.Next(1, n2 + 1) + add - sub; } var elemCnt = 0; - await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); } } } @@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Gambling [Priority(0)] public async Task Roll(IUserMessage umsg, int num) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (channel == null) return; @@ -134,14 +134,14 @@ namespace NadekoBot.Modules.Gambling var ms = new MemoryStream(); bitmap.SaveAsPng(ms); ms.Position = 0; - await channel.SendFileAsync(ms, "dice.png", $"{umsg.Author.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false); + await channel.SendFileAsync(ms, "dice.png", $"{Context.User.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task Rolluo(IUserMessage umsg, string arg) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (channel == null) return; @@ -167,7 +167,7 @@ namespace NadekoBot.Modules.Gambling arr[i] = rng.Next(1, n2 + 1) + add - sub; } var elemCnt = 0; - await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} rolled {n1} {(n1 == 1 ? "die" : "dice")} `1 to {n2}` +`{add}` -`{sub}`.\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); } } } @@ -176,7 +176,7 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task Rolluo(IUserMessage umsg, int num) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (channel == null) return; @@ -222,14 +222,14 @@ namespace NadekoBot.Modules.Gambling var ms = new MemoryStream(); bitmap.SaveAsPng(ms); ms.Position = 0; - await channel.SendFileAsync(ms, "dice.png", $"{umsg.Author.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false); + await channel.SendFileAsync(ms, "dice.png", $"{Context.User.Mention} rolled {values.Count} {(values.Count == 1 ? "die" : "dice")}. Total: **{values.Sum()}** Average: **{(values.Sum() / (1.0f * values.Count)).ToString("N2")}**").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task NRoll(IUserMessage umsg, [Remainder] string range) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { @@ -249,7 +249,7 @@ namespace NadekoBot.Modules.Gambling rolled = new NadekoRandom().Next(0, int.Parse(range) + 1); } - await channel.SendConfirmAsync($"{umsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} rolled **{rolled}**.").ConfigureAwait(false); } catch (Exception ex) { diff --git a/src/NadekoBot/Modules/Gambling/Commands/DrawCommand.cs b/src/NadekoBot/Modules/Gambling/Commands/DrawCommand.cs index 58785882..53571526 100644 --- a/src/NadekoBot/Modules/Gambling/Commands/DrawCommand.cs +++ b/src/NadekoBot/Modules/Gambling/Commands/DrawCommand.cs @@ -31,9 +31,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Draw(IUserMessage msg, int num = 1) + public async Task Draw(int num = 1) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var cards = AllDecks.GetOrAdd(channel.Guild, (s) => new Cards()); var images = new List(); var cardObjects = new List(); @@ -54,7 +54,7 @@ namespace NadekoBot.Modules.Gambling images.Merge().SaveAsPng(bitmapStream); bitmapStream.Position = 0; //todo CARD NAMES? - var toSend = $"{msg.Author.Mention}"; + var toSend = $"{Context.User.Mention}"; if (cardObjects.Count == 5) toSend += $" drew `{Cards.GetHandValue(cardObjects)}`"; @@ -63,9 +63,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ShuffleDeck(IUserMessage imsg) + public async Task ShuffleDeck() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; AllDecks.AddOrUpdate(channel.Guild, (g) => new Cards(), diff --git a/src/NadekoBot/Modules/Gambling/Commands/FlipCoinCommand.cs b/src/NadekoBot/Modules/Gambling/Commands/FlipCoinCommand.cs index 867db68e..66fb228e 100644 --- a/src/NadekoBot/Modules/Gambling/Commands/FlipCoinCommand.cs +++ b/src/NadekoBot/Modules/Gambling/Commands/FlipCoinCommand.cs @@ -23,13 +23,13 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task Flip(IUserMessage imsg, int count = 1) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (count == 1) { if (rng.Next(0, 2) == 1) - await channel.SendFileAsync(headsPath, $"{imsg.Author.Mention} flipped " + Format.Code("Heads") + ".").ConfigureAwait(false); + await channel.SendFileAsync(headsPath, $"{Context.User.Mention} flipped " + Format.Code("Heads") + ".").ConfigureAwait(false); else - await channel.SendFileAsync(tailsPath, $"{imsg.Author.Mention} flipped " + Format.Code("Tails") + ".").ConfigureAwait(false); + await channel.SendFileAsync(tailsPath, $"{Context.User.Mention} flipped " + Format.Code("Tails") + ".").ConfigureAwait(false); return; } if (count > 10 || count < 1) @@ -51,8 +51,8 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task Betflip(IUserMessage umsg, int amount, string guess) { - var channel = (ITextChannel)umsg.Channel; - var guildUser = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + var guildUser = (IGuildUser)Context.User; var guessStr = guess.Trim().ToUpperInvariant(); if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS") return; @@ -67,12 +67,12 @@ namespace NadekoBot.Modules.Gambling long userFlowers; using (var uow = DbHandler.UnitOfWork()) { - userFlowers = uow.Currency.GetOrCreate(umsg.Author.Id).Amount; + userFlowers = uow.Currency.GetOrCreate(Context.User.Id).Amount; } if (userFlowers < amount) { - await channel.SendErrorAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyPluralName}. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} You don't have enough {Gambling.CurrencyPluralName}. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false); return; } @@ -97,12 +97,12 @@ namespace NadekoBot.Modules.Gambling if (isHeads == result) { var toWin = (int)Math.Round(amount * 1.8); - str = $"{umsg.Author.Mention}`You guessed it!` You won {toWin}{Gambling.CurrencySign}"; - await CurrencyHandler.AddCurrencyAsync((IGuildUser)umsg.Author, "Betflip Gamble", toWin, false).ConfigureAwait(false); + str = $"{Context.User.Mention}`You guessed it!` You won {toWin}{Gambling.CurrencySign}"; + await CurrencyHandler.AddCurrencyAsync((IGuildUser)Context.User, "Betflip Gamble", toWin, false).ConfigureAwait(false); } else { - str = $"{umsg.Author.Mention}`Better luck next time.`"; + str = $"{Context.User.Mention}`Better luck next time.`"; } await channel.SendFileAsync(imgPathToSend, str).ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Gambling/Gambling.cs b/src/NadekoBot/Modules/Gambling/Gambling.cs index efd0f1fa..066d4fd1 100644 --- a/src/NadekoBot/Modules/Gambling/Gambling.cs +++ b/src/NadekoBot/Modules/Gambling/Gambling.cs @@ -44,7 +44,7 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task Raffle(IUserMessage umsg, [Remainder] IRole role = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; role = role ?? channel.Guild.EveryoneRole; @@ -58,9 +58,9 @@ namespace NadekoBot.Modules.Gambling [Priority(0)] public async Task Cash(IUserMessage umsg, [Remainder] IUser user = null) { - var channel = umsg.Channel; + var channel = Context.Channel; - user = user ?? umsg.Author; + user = user ?? Context.User; await channel.SendConfirmAsync($"{user.Username} has {GetCurrency(user.Id)} {CurrencySign}").ConfigureAwait(false); } @@ -69,7 +69,7 @@ namespace NadekoBot.Modules.Gambling [Priority(1)] public async Task Cash(IUserMessage umsg, ulong userId) { - var channel = umsg.Channel; + var channel = Context.Channel; await channel.SendConfirmAsync($"`{userId}` has {GetCurrency(userId)} {CurrencySign}").ConfigureAwait(false); } @@ -78,17 +78,17 @@ namespace NadekoBot.Modules.Gambling [RequireContext(ContextType.Guild)] public async Task Give(IUserMessage umsg, long amount, [Remainder] IGuildUser receiver) { - var channel = (ITextChannel)umsg.Channel; - if (amount <= 0 || umsg.Author.Id == receiver.Id) + var channel = (ITextChannel)Context.Channel; + if (amount <= 0 || Context.User.Id == receiver.Id) return; - var success = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)umsg.Author, $"Gift to {receiver.Username} ({receiver.Id}).", amount, true).ConfigureAwait(false); + var success = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, $"Gift to {receiver.Username} ({receiver.Id}).", amount, true).ConfigureAwait(false); if (!success) { - await channel.SendErrorAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyPluralName}.").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} You don't have enough {Gambling.CurrencyPluralName}.").ConfigureAwait(false); return; } - await CurrencyHandler.AddCurrencyAsync(receiver, $"Gift from {umsg.Author.Username} ({umsg.Author.Id}).", amount, true).ConfigureAwait(false); - await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully sent {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to {receiver.Mention}!").ConfigureAwait(false); + await CurrencyHandler.AddCurrencyAsync(receiver, $"Gift from {Context.User.Username} ({Context.User.Id}).", amount, true).ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} successfully sent {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to {receiver.Mention}!").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -104,14 +104,14 @@ namespace NadekoBot.Modules.Gambling [Priority(1)] public async Task Award(IUserMessage umsg, int amount, ulong usrId) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (amount <= 0) return; - await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({umsg.Author.Username}/{umsg.Author.Id})", amount).ConfigureAwait(false); + await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false); - await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully awarded {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to <@{usrId}>!").ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} successfully awarded {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} to <@{usrId}>!").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -120,12 +120,12 @@ namespace NadekoBot.Modules.Gambling [Priority(0)] public async Task Award(IUserMessage umsg, int amount, [Remainder] IRole role) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var users = channel.Guild.GetUsers() .Where(u => u.Roles.Contains(role)) .ToList(); await Task.WhenAll(users.Select(u => CurrencyHandler.AddCurrencyAsync(u.Id, - $"Awarded by bot owner to **{role.Name}** role. ({umsg.Author.Username}/{umsg.Author.Id})", + $"Awarded by bot owner to **{role.Name}** role. ({Context.User.Username}/{Context.User.Id})", amount))) .ConfigureAwait(false); @@ -139,14 +139,14 @@ namespace NadekoBot.Modules.Gambling [OwnerOnly] public async Task Take(IUserMessage umsg, long amount, [Remainder] IGuildUser user) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (amount <= 0) return; - if(await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount, true).ConfigureAwait(false)) - await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully took {amount} {(amount == 1? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user}!").ConfigureAwait(false); + if(await CurrencyHandler.RemoveCurrencyAsync(user, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount, true).ConfigureAwait(false)) + await channel.SendConfirmAsync($"{Context.User.Mention} successfully took {amount} {(amount == 1? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user}!").ConfigureAwait(false); else - await channel.SendErrorAsync($"{umsg.Author.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user} because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from {user} because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false); } @@ -155,31 +155,31 @@ namespace NadekoBot.Modules.Gambling [OwnerOnly] public async Task Take(IUserMessage umsg, long amount, [Remainder] ulong usrId) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (amount <= 0) return; - if(await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({umsg.Author.Username}/{umsg.Author.Id})", amount).ConfigureAwait(false)) - await channel.SendConfirmAsync($"{umsg.Author.Mention} successfully took {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from <@{usrId}>!").ConfigureAwait(false); + if(await CurrencyHandler.RemoveCurrencyAsync(usrId, $"Taken by bot owner.({Context.User.Username}/{Context.User.Id})", amount).ConfigureAwait(false)) + await channel.SendConfirmAsync($"{Context.User.Mention} successfully took {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from <@{usrId}>!").ConfigureAwait(false); else - await channel.SendErrorAsync($"{umsg.Author.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from `{usrId}` because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} was unable to take {amount} {(amount == 1 ? Gambling.CurrencyName : Gambling.CurrencyPluralName)} from `{usrId}` because the user doesn't have that much {Gambling.CurrencyPluralName}!").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task BetRoll(IUserMessage umsg, long amount) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (amount < 1) return; - var guildUser = (IGuildUser)umsg.Author; + var guildUser = (IGuildUser)Context.User; long userFlowers; using (var uow = DbHandler.UnitOfWork()) { - userFlowers = uow.Currency.GetOrCreate(umsg.Author.Id).Amount; + userFlowers = uow.Currency.GetOrCreate(Context.User.Id).Amount; } if (userFlowers < amount) @@ -217,9 +217,9 @@ namespace NadekoBot.Modules.Gambling [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Leaderboard(IUserMessage umsg) + public async Task Leaderboard() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; IEnumerable richest = new List(); using (var uow = DbHandler.UnitOfWork()) diff --git a/src/NadekoBot/Modules/Games/Commands/CleverBotCommands.cs b/src/NadekoBot/Modules/Games/Commands/CleverBotCommands.cs index f3b148cd..5062b251 100644 --- a/src/NadekoBot/Modules/Games/Commands/CleverBotCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/CleverBotCommands.cs @@ -41,8 +41,8 @@ namespace NadekoBot.Modules.Games } } - public static async Task TryAsk(IUserMessage msg) { - var channel = msg.Channel as ITextChannel; + public static async Task TryAsk() { + var channel = Context.Channel as ITextChannel; if (channel == null) return false; @@ -51,7 +51,7 @@ namespace NadekoBot.Modules.Games if (!CleverbotGuilds.TryGetValue(channel.Guild.Id, out cleverbot)) return false; - var nadekoId = NadekoBot.Client.GetCurrentUser().Id; + var nadekoId = NadekoBot.Client.CurrentUser().Id; var normalMention = $"<@{nadekoId}> "; var nickMention = $"<@!{nadekoId}> "; string message; @@ -68,26 +68,26 @@ namespace NadekoBot.Modules.Games return false; } - await msg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); var response = await cleverbot.Think(message).ConfigureAwait(false); try { - await msg.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); } catch { - await msg.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); // try twice :\ + await Context.Channel.SendConfirmAsync(response.SanitizeMentions()).ConfigureAwait(false); // try twice :\ } return true; } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(ChannelPermission.ManageMessages)] - public async Task Cleverbot(IUserMessage imsg) + [RequireUserPermission(ChannelPermission.ManageMessages)] + public async Task Cleverbot() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; ChatterBotSession throwaway; if (CleverbotGuilds.TryRemove(channel.Guild.Id, out throwaway)) @@ -97,7 +97,7 @@ namespace NadekoBot.Modules.Games uow.GuildConfigs.SetCleverbotEnabled(channel.Guild.Id, false); await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync($"{imsg.Author.Mention} Disabled cleverbot on this server.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} Disabled cleverbot on this server.").ConfigureAwait(false); return; } @@ -112,7 +112,7 @@ namespace NadekoBot.Modules.Games await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync($"{imsg.Author.Mention} Enabled cleverbot on this server.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{Context.User.Mention} Enabled cleverbot on this server.").ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Games/Commands/Hangman/HangmanGame.cs b/src/NadekoBot/Modules/Games/Commands/Hangman/HangmanGame.cs index 575e8edf..4e8c699e 100644 --- a/src/NadekoBot/Modules/Games/Commands/Hangman/HangmanGame.cs +++ b/src/NadekoBot/Modules/Games/Commands/Hangman/HangmanGame.cs @@ -118,14 +118,14 @@ namespace NadekoBot.Modules.Games.Commands.Hangman .AddField(efb => efb.WithName("It was").WithValue(Term.Word)) .WithImage(eib => eib.WithUrl(Term.ImageUrl)); if (Errors >= MaxErrors) - await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.ErrorColor).Build()).ConfigureAwait(false); + await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.ErrorColor)).ConfigureAwait(false); else - await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.OkColor).Build()).ConfigureAwait(false); + await GameChannel.EmbedAsync(embed.WithColor(NadekoBot.OkColor)).ConfigureAwait(false); } private Task PotentialGuess(IMessage msg) { - if (msg.Channel != GameChannel) + if (Context.Channel != GameChannel) return Task.CompletedTask; // message's channel has to be the same as game's if (msg.Content.Length != 1) // message must be 1 char long { @@ -155,7 +155,7 @@ namespace NadekoBot.Modules.Games.Commands.Hangman { ++Errors; if (Errors < MaxErrors) - await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); + await GameChannel.SendErrorAsync("Hangman Game", $"{Context.User.Mention} Letter `{guess}` has already been used.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); else await End().ConfigureAwait(false); return; @@ -167,19 +167,19 @@ namespace NadekoBot.Modules.Games.Commands.Hangman { if (GuessedAll) { - try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { } + try { await GameChannel.SendConfirmAsync("Hangman Game", $"{Context.User.Mention} guessed a letter `{guess}`!").ConfigureAwait(false); } catch { } await End().ConfigureAwait(false); return; } - try { await GameChannel.SendConfirmAsync("Hangman Game", $"{msg.Author.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { } + try { await GameChannel.SendConfirmAsync("Hangman Game", $"{Context.User.Mention} guessed a letter `{guess}`!\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); } catch { } } else { ++Errors; if (Errors < MaxErrors) - await GameChannel.SendErrorAsync("Hangman Game", $"{msg.Author.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); + await GameChannel.SendErrorAsync("Hangman Game", $"{Context.User.Mention} Letter `{guess}` does not exist.\n" + ScrambledWord + "\n" + GetHangman()).ConfigureAwait(false); else await End().ConfigureAwait(false); } diff --git a/src/NadekoBot/Modules/Games/Commands/HangmanCommands.cs b/src/NadekoBot/Modules/Games/Commands/HangmanCommands.cs index b3041d31..388e5a4d 100644 --- a/src/NadekoBot/Modules/Games/Commands/HangmanCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/HangmanCommands.cs @@ -36,19 +36,19 @@ namespace NadekoBot.Modules.Games } [NadekoCommand, Usage, Description, Aliases] - public async Task Hangmanlist(IUserMessage imsg) + public async Task Hangmanlist() { - await imsg.Channel.SendConfirmAsync(typesStr); + await Context.Channel.SendConfirmAsync(typesStr); } [NadekoCommand, Usage, Description, Aliases] public async Task Hangman(IUserMessage imsg, HangmanTermPool.HangmanTermType type = HangmanTermPool.HangmanTermType.All) { - var hm = new HangmanGame(imsg.Channel, type); + var hm = new HangmanGame(Context.Channel, type); - if (!HangmanGames.TryAdd(imsg.Channel.Id, hm)) + if (!HangmanGames.TryAdd(Context.Channel.Id, hm)) { - await imsg.Channel.SendErrorAsync("Hangman game already running on this channel.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Hangman game already running on this channel.").ConfigureAwait(false); return; } @@ -59,7 +59,7 @@ namespace NadekoBot.Modules.Games }; hm.Start(); - await imsg.Channel.SendConfirmAsync("Hangman game started", hm.ScrambledWord + "\n" + hm.GetHangman() + "\n" + hm.ScrambledWord); + await Context.Channel.SendConfirmAsync("Hangman game started", hm.ScrambledWord + "\n" + hm.GetHangman() + "\n" + hm.ScrambledWord); } } } diff --git a/src/NadekoBot/Modules/Games/Commands/LeetCommands.cs b/src/NadekoBot/Modules/Games/Commands/LeetCommands.cs index f877ebe7..d883a3d5 100644 --- a/src/NadekoBot/Modules/Games/Commands/LeetCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/LeetCommands.cs @@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task Leet(IUserMessage umsg, int level, [Remainder] string text = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; text = text.Trim(); if (string.IsNullOrWhiteSpace(text)) diff --git a/src/NadekoBot/Modules/Games/Commands/PlantAndPickCommands.cs b/src/NadekoBot/Modules/Games/Commands/PlantAndPickCommands.cs index 61a9a10d..42b6055f 100644 --- a/src/NadekoBot/Modules/Games/Commands/PlantAndPickCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/PlantAndPickCommands.cs @@ -60,10 +60,10 @@ namespace NadekoBot.Modules.Games private static Task PotentialFlowerGeneration(IMessage imsg) { var msg = imsg as IUserMessage; - if (msg == null || msg.IsAuthor() || msg.Author.IsBot) + if (msg == null || msg.IsAuthor() || Context.User.IsBot) return Task.CompletedTask; - var channel = imsg.Channel as ITextChannel; + var channel = Context.Channel as ITextChannel; if (channel == null) return Task.CompletedTask; @@ -99,9 +99,9 @@ namespace NadekoBot.Modules.Games } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Pick(IUserMessage imsg) + public async Task Pick() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (!channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages) { @@ -117,8 +117,8 @@ namespace NadekoBot.Modules.Games await Task.WhenAll(msgs.Select(toDelete => toDelete.DeleteAsync())).ConfigureAwait(false); - await CurrencyHandler.AddCurrencyAsync((IGuildUser)imsg.Author, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false); - var msg = await channel.SendConfirmAsync($"**{imsg.Author}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false); + await CurrencyHandler.AddCurrencyAsync((IGuildUser)Context.User, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false); + var msg = await channel.SendConfirmAsync($"**{Context.User}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false); var t = Task.Run(async () => { await Task.Delay(10000).ConfigureAwait(false); @@ -128,11 +128,11 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Plant(IUserMessage imsg) + public async Task Plant() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; - var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)imsg.Author, "Planted a flower.", 1, false).ConfigureAwait(false); + var removed = await CurrencyHandler.RemoveCurrencyAsync((IGuildUser)Context.User, "Planted a flower.", 1, false).ConfigureAwait(false); if (!removed) { await channel.SendErrorAsync($"You don't have any {Gambling.Gambling.CurrencyPluralName}.").ConfigureAwait(false); @@ -143,7 +143,7 @@ namespace NadekoBot.Modules.Games IUserMessage msg; var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(Gambling.Gambling.CurrencyName[0]); - var msgToSend = $"Oh how Nice! **{imsg.Author.Username}** planted {(vowelFirst ? "an" : "a")} {Gambling.Gambling.CurrencyName}. Pick it using {NadekoBot.ModulePrefixes[typeof(Games).Name]}pick"; + var msgToSend = $"Oh how Nice! **{Context.User.Username}** planted {(vowelFirst ? "an" : "a")} {Gambling.Gambling.CurrencyName}. Pick it using {NadekoBot.ModulePrefixes[typeof(Games).Name]}pick"; if (file == null) { msg = await channel.SendConfirmAsync(Gambling.Gambling.CurrencySign).ConfigureAwait(false); @@ -157,10 +157,10 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task GenCurrency(IUserMessage imsg) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task GenCurrency() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) diff --git a/src/NadekoBot/Modules/Games/Commands/PollCommands.cs b/src/NadekoBot/Modules/Games/Commands/PollCommands.cs index 840abdf1..b5da738e 100644 --- a/src/NadekoBot/Modules/Games/Commands/PollCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/PollCommands.cs @@ -16,22 +16,22 @@ namespace NadekoBot.Modules.Games public static ConcurrentDictionary ActivePolls = new ConcurrentDictionary(); [NadekoCommand, Usage, Description, Aliases] - [RequirePermission(GuildPermission.ManageMessages)] + [RequireUserPermission(GuildPermission.ManageMessages)] [RequireContext(ContextType.Guild)] public Task Poll(IUserMessage umsg, [Remainder] string arg = null) => InternalStartPoll(umsg, arg, isPublic: false); [NadekoCommand, Usage, Description, Aliases] - [RequirePermission(GuildPermission.ManageMessages)] + [RequireUserPermission(GuildPermission.ManageMessages)] [RequireContext(ContextType.Guild)] public Task PublicPoll(IUserMessage umsg, [Remainder] string arg = null) => InternalStartPoll(umsg, arg, isPublic: true); private async Task InternalStartPoll(IUserMessage umsg, string arg, bool isPublic = false) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; - if (!(umsg.Author as IGuildUser).GuildPermissions.ManageChannels) + if (!(Context.User as IGuildUser).GuildPermissions.ManageChannels) return; if (string.IsNullOrWhiteSpace(arg) || !arg.Contains(";")) return; @@ -49,11 +49,11 @@ namespace NadekoBot.Modules.Games } [NadekoCommand, Usage, Description, Aliases] - [RequirePermission(GuildPermission.ManageMessages)] + [RequireUserPermission(GuildPermission.ManageMessages)] [RequireContext(ContextType.Guild)] - public async Task Pollend(IUserMessage umsg) + public async Task Pollend() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; Poll poll; ActivePolls.TryRemove(channel.Guild, out poll); @@ -75,7 +75,7 @@ namespace NadekoBot.Modules.Games public Poll(IUserMessage umsg, string question, IEnumerable enumerable, bool isPublic = false) { this.originalMessage = umsg; - this.guild = ((ITextChannel)umsg.Channel).Guild; + this.guild = ((ITextChannel)Context.Channel).Guild; this.question = question; this.answers = enumerable as string[] ?? enumerable.ToArray(); this.isPublic = isPublic; @@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Games { // has to be a user message var msg = imsg as IUserMessage; - if (msg == null || msg.Author.IsBot) + if (msg == null || Context.User.IsBot) return Task.CompletedTask; // has to be an integer @@ -146,32 +146,32 @@ namespace NadekoBot.Modules.Games if (isPublic) { //if public, channel must be the same the poll started in - if (originalMessage.Channel.Id != imsg.Channel.Id) + if (originalMessage.Channel.Id != Context.Channel.Id) return; - ch = imsg.Channel; + ch = Context.Channel; } else { //if private, channel must be dm channel - if ((ch = msg.Channel as IDMChannel) == null) + if ((ch = Context.Channel as IDMChannel) == null) return; // user must be a member of the guild this poll is in var guildUsers = await guild.GetUsersAsync().ConfigureAwait(false); - if (!guildUsers.Any(u => u.Id == imsg.Author.Id)) + if (!guildUsers.Any(u => u.Id == Context.User.Id)) return; } //user can vote only once - if (participants.TryAdd(msg.Author.Id, vote)) + if (participants.TryAdd(Context.User.Id, vote)) { if (!isPublic) { - await ch.SendConfirmAsync($"Thanks for voting **{msg.Author.Username}**.").ConfigureAwait(false); + await ch.SendConfirmAsync($"Thanks for voting **{Context.User.Username}**.").ConfigureAwait(false); } else { - var toDelete = await ch.SendConfirmAsync($"{msg.Author.Mention} cast their vote.").ConfigureAwait(false); + var toDelete = await ch.SendConfirmAsync($"{Context.User.Mention} cast their vote.").ConfigureAwait(false); await Task.Delay(5000); await toDelete.DeleteAsync().ConfigureAwait(false); } diff --git a/src/NadekoBot/Modules/Games/Commands/SpeedTypingCommands.cs b/src/NadekoBot/Modules/Games/Commands/SpeedTypingCommands.cs index 8ea17e2c..e2a33802 100644 --- a/src/NadekoBot/Modules/Games/Commands/SpeedTypingCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/SpeedTypingCommands.cs @@ -107,7 +107,7 @@ namespace NadekoBot.Modules.Games private Task AnswerReceived(IMessage imsg) { - if (imsg.Author.IsBot) + if (Context.User.IsBot) return Task.CompletedTask; var msg = imsg as IUserMessage; if (msg == null) @@ -122,16 +122,16 @@ namespace NadekoBot.Modules.Games var distance = CurrentSentence.LevenshteinDistance(guess); var decision = Judge(distance, guess.Length); - if (decision && !finishedUserIds.Contains(msg.Author.Id)) + if (decision && !finishedUserIds.Contains(Context.User.Id)) { var wpm = CurrentSentence.Length / WORD_VALUE / sw.Elapsed.Seconds * 60; - finishedUserIds.Add(msg.Author.Id); + finishedUserIds.Add(Context.User.Id); await Extensions.Extensions.EmbedAsync(this.Channel, (Discord.API.Embed)new EmbedBuilder().WithColor((uint)NadekoBot.OkColor) - .WithTitle((string)$"{msg.Author} finished the race!") + .WithTitle((string)$"{Context.User} finished the race!") .AddField(efb => efb.WithName("Place").WithValue($"#{finishedUserIds.Count}").WithIsInline(true)) .AddField(efb => efb.WithName("WPM").WithValue($"{wpm:F2} *[{sw.Elapsed.Seconds.ToString()}sec]*").WithIsInline(true)) .AddField(efb => efb.WithName((string)"Errors").WithValue((string)distance.ToString()).WithIsInline((bool)true)) - .Build()).ConfigureAwait(false); + ).ConfigureAwait(false); if (finishedUserIds.Count % 4 == 0) { await Extensions.Extensions.SendConfirmAsync(this.Channel, (string)$":exclamation: A lot of people finished, here is the text for those still typing:\n\n**{Format.Sanitize((string)CurrentSentence.Replace((string)" ", (string)" \x200B")).SanitizeMentions()}**").ConfigureAwait(false); @@ -168,9 +168,9 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task TypeStart(IUserMessage msg) + public async Task TypeStart() { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var game = RunningContests.GetOrAdd(channel.Guild.Id, id => new TypingGame(channel)); @@ -189,9 +189,9 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task TypeStop(IUserMessage imsg) + public async Task TypeStop() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; TypingGame game; if (RunningContests.TryRemove(channel.Guild.Id, out game)) { @@ -207,11 +207,11 @@ namespace NadekoBot.Modules.Games [OwnerOnly] public async Task Typeadd(IUserMessage imsg, [Remainder] string text) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; TypingArticles.Add(new TypingArticle { - Title = $"Text added on {DateTime.UtcNow} by {imsg.Author}", + Title = $"Text added on {DateTime.UtcNow} by {Context.User}", Text = text.SanitizeMentions(), }); @@ -224,7 +224,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task Typelist(IUserMessage imsg, int page = 1) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (page < 1) return; @@ -233,7 +233,7 @@ namespace NadekoBot.Modules.Games if (!articles.Any()) { - await channel.SendErrorAsync($"{imsg.Author.Mention} `No articles found on that page.`").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} `No articles found on that page.`").ConfigureAwait(false); return; } var i = (page - 1) * 15; @@ -246,7 +246,7 @@ namespace NadekoBot.Modules.Games [OwnerOnly] public async Task Typedel(IUserMessage imsg, int index) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; index -= 1; if (index < 0 || index >= TypingArticles.Count) diff --git a/src/NadekoBot/Modules/Games/Commands/Trivia/TriviaGame.cs b/src/NadekoBot/Modules/Games/Commands/Trivia/TriviaGame.cs index 534c5040..2ecfa08c 100644 --- a/src/NadekoBot/Modules/Games/Commands/Trivia/TriviaGame.cs +++ b/src/NadekoBot/Modules/Games/Commands/Trivia/TriviaGame.cs @@ -114,7 +114,7 @@ namespace NadekoBot.Modules.Games.Trivia await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle("Leaderboard") .WithDescription(GetLeaderboard()) - .Build(), "Trivia game ended.").ConfigureAwait(false); + , "Trivia game ended.").ConfigureAwait(false); } catch { } } @@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Games.Trivia private Task PotentialGuess(IMessage imsg) { - if (imsg.Author.IsBot) + if (Context.User.IsBot) return Task.CompletedTask; var umsg = imsg as IUserMessage; if (umsg == null) @@ -137,11 +137,11 @@ namespace NadekoBot.Modules.Games.Trivia { try { - if (!(umsg.Channel is IGuildChannel && umsg.Channel is ITextChannel)) return; - if ((umsg.Channel as ITextChannel).Guild != guild) return; - if (umsg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return; + if (!(Context.Channel is IGuildChannel && Context.Channel is ITextChannel)) return; + if ((Context.Channel as ITextChannel).Guild != guild) return; + if (Context.User.Id == NadekoBot.Client.CurrentUser().Id) return; - var guildUser = umsg.Author as IGuildUser; + var guildUser = Context.User as IGuildUser; var guess = false; await _guessLock.WaitAsync().ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Games/Commands/TriviaCommands.cs b/src/NadekoBot/Modules/Games/Commands/TriviaCommands.cs index 25051444..27504087 100644 --- a/src/NadekoBot/Modules/Games/Commands/TriviaCommands.cs +++ b/src/NadekoBot/Modules/Games/Commands/TriviaCommands.cs @@ -22,7 +22,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task Trivia(IUserMessage umsg, params string[] args) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; TriviaGame trivia; if (!RunningTrivias.TryGetValue(channel.Guild.Id, out trivia)) @@ -35,7 +35,7 @@ namespace NadekoBot.Modules.Games }).Where(t => t.Item1).Select(t => t.Item2).FirstOrDefault(); if (number < 0) return; - var triviaGame = new TriviaGame(channel.Guild, (ITextChannel)umsg.Channel, showHints, number == 0 ? 10 : number); + var triviaGame = new TriviaGame(channel.Guild, (ITextChannel)Context.Channel, showHints, number == 0 ? 10 : number); if (RunningTrivias.TryAdd(channel.Guild.Id, triviaGame)) await channel.SendConfirmAsync($"**Trivia game started! {triviaGame.WinRequirement} points needed to win.**").ConfigureAwait(false); else @@ -47,9 +47,9 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Tl(IUserMessage umsg) + public async Task Tl() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; TriviaGame trivia; if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia)) @@ -60,9 +60,9 @@ namespace NadekoBot.Modules.Games [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Tq(IUserMessage umsg) + public async Task Tq() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; TriviaGame trivia; if (RunningTrivias.TryGetValue(channel.Guild.Id, out trivia)) diff --git a/src/NadekoBot/Modules/Games/Games.cs b/src/NadekoBot/Modules/Games/Games.cs index 592881d1..bdf96a88 100644 --- a/src/NadekoBot/Modules/Games/Games.cs +++ b/src/NadekoBot/Modules/Games/Games.cs @@ -29,7 +29,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task Choose(IUserMessage umsg, [Remainder] string list = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(list)) return; var listArr = list.Split(';'); @@ -43,7 +43,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task _8Ball(IUserMessage umsg, [Remainder] string question = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(question)) return; @@ -52,14 +52,14 @@ namespace NadekoBot.Modules.Games await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .AddField(efb => efb.WithName("❓ Question").WithValue(question).WithIsInline(false)) .AddField(efb => efb.WithName("🎱 8Ball").WithValue(_8BallResponses.Shuffle().FirstOrDefault()).WithIsInline(false)) - .Build()); + ); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task Rps(IUserMessage umsg, string input) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; Func GetRPSPick = (p) => { @@ -98,9 +98,9 @@ namespace NadekoBot.Modules.Games else if ((pick == 0 && nadekoPick == 1) || (pick == 1 && nadekoPick == 2) || (pick == 2 && nadekoPick == 0)) - msg = $"{NadekoBot.Client.GetCurrentUser().Mention} won! {GetRPSPick(nadekoPick)} beats {GetRPSPick(pick)}"; + msg = $"{NadekoBot.Client.CurrentUser().Mention} won! {GetRPSPick(nadekoPick)} beats {GetRPSPick(pick)}"; else - msg = $"{umsg.Author.Mention} won! {GetRPSPick(pick)} beats {GetRPSPick(nadekoPick)}"; + msg = $"{Context.User.Mention} won! {GetRPSPick(pick)} beats {GetRPSPick(nadekoPick)}"; await channel.SendConfirmAsync(msg).ConfigureAwait(false); } @@ -109,7 +109,7 @@ namespace NadekoBot.Modules.Games [RequireContext(ContextType.Guild)] public async Task Linux(IUserMessage umsg, string guhnoo, string loonix) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await channel.SendConfirmAsync( $@"I'd just like to interject for moment. What you're refering to as {loonix}, is in fact, {guhnoo}/{loonix}, or as I've recently taken to calling it, {guhnoo} plus {loonix}. {loonix} is not an operating system unto itself, but rather another free component of a fully functioning {guhnoo} system made useful by the {guhnoo} corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX. diff --git a/src/NadekoBot/Modules/Help/Help.cs b/src/NadekoBot/Modules/Help/Help.cs index 2b824111..b2a8b9b0 100644 --- a/src/NadekoBot/Modules/Help/Help.cs +++ b/src/NadekoBot/Modules/Help/Help.cs @@ -35,17 +35,17 @@ namespace NadekoBot.Modules.Help } [NadekoCommand, Usage, Description, Aliases] - public async Task Modules(IUserMessage umsg) + public async Task Modules() { - await umsg.Channel.SendMessageAsync("πŸ“œ **List of modules:** ```css\nβ€’ " + string.Join("\nβ€’ ", NadekoBot.CommandService.Modules.Select(m => m.Name)) + $"\n``` ℹ️ **Type** `-commands module_name` **to get a list of commands in that module.** ***e.g.*** `-commands games`") + await Context.Channel.SendMessageAsync("πŸ“œ **List of modules:** ```css\nβ€’ " + string.Join("\nβ€’ ", NadekoBot.CommandService.Modules.Select(m => m.Name)) + $"\n``` ℹ️ **Type** `-commands module_name` **to get a list of commands in that module.** ***e.g.*** `-commands games`") .ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] public async Task Commands(IUserMessage umsg, [Remainder] string module = null) { - var channel = umsg.Channel; + var channel = Context.Channel; module = module?.Trim().ToUpperInvariant(); if (string.IsNullOrWhiteSpace(module)) @@ -75,12 +75,12 @@ namespace NadekoBot.Modules.Help [NadekoCommand, Usage, Description, Aliases] public async Task H(IUserMessage umsg, [Remainder] string comToFind = null) { - var channel = umsg.Channel; + var channel = Context.Channel; comToFind = comToFind?.ToLowerInvariant(); if (string.IsNullOrWhiteSpace(comToFind)) { - IMessageChannel ch = channel is ITextChannel ? await ((IGuildUser)umsg.Author).CreateDMChannelAsync() : channel; + IMessageChannel ch = channel is ITextChannel ? await ((IGuildUser)Context.User).CreateDMChannelAsync() : channel; await ch.SendMessageAsync(HelpString).ConfigureAwait(false); return; } @@ -99,18 +99,18 @@ namespace NadekoBot.Modules.Help .AddField(fb => fb.WithIndex(1).WithName(str).WithValue($"{ string.Format(com.Summary, com.Module.Prefix)} { GetCommandRequirements(com)}").WithIsInline(true)) .AddField(fb => fb.WithIndex(2).WithName("**Usage**").WithValue($"{string.Format(com.Remarks, com.Module.Prefix)}").WithIsInline(false)) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } private string GetCommandRequirements(Command cmd) { return String.Join(" ", cmd.Source.CustomAttributes - .Where(ca => ca.AttributeType == typeof(OwnerOnlyAttribute) || ca.AttributeType == typeof(RequirePermissionAttribute)) + .Where(ca => ca.AttributeType == typeof(OwnerOnlyAttribute) || ca.AttributeType == typeof(RequireUserPermissionAttribute)) .Select(ca => { if (ca.AttributeType == typeof(OwnerOnlyAttribute)) return "**Bot Owner only.**"; - else if (ca.AttributeType == typeof(RequirePermissionAttribute)) + else if (ca.AttributeType == typeof(RequireUserPermissionAttribute)) return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} server permission.**".Replace("Guild", "Server"); else return $"**Requires {(GuildPermission)ca.ConstructorArguments.FirstOrDefault().Value} channel permission.**".Replace("Guild", "Server"); @@ -120,7 +120,7 @@ namespace NadekoBot.Modules.Help [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] [OwnerOnly] - public Task Hgit(IUserMessage umsg) + public Task Hgit() { var helpstr = new StringBuilder(); helpstr.AppendLine("You can support the project on patreon: or paypal: \n"); @@ -145,16 +145,16 @@ namespace NadekoBot.Modules.Help } helpstr.AppendLine($"`{com.Text}` {string.Join(" ", com.Aliases.Skip(1).Select(a=>"`"+a+"`"))} | {string.Format(com.Summary, com.Module.Prefix)} {GetCommandRequirements(com)} | {string.Format(com.Remarks, com.Module.Prefix)}"); } - helpstr = helpstr.Replace(NadekoBot.Client.GetCurrentUser().Username , "@BotName"); + helpstr = helpstr.Replace(NadekoBot.Client.CurrentUser().Username , "@BotName"); File.WriteAllText("../../docs/Commands List.md", helpstr.ToString()); return Task.CompletedTask; } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Guide(IUserMessage umsg) + public async Task Guide() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await channel.SendConfirmAsync( @"**LIST OF COMMANDS**: @@ -163,9 +163,9 @@ namespace NadekoBot.Modules.Help [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Donate(IUserMessage umsg) + public async Task Donate() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await channel.SendConfirmAsync( $@"You can support the NadekoBot project on patreon. or diff --git a/src/NadekoBot/Modules/Music/Music.cs b/src/NadekoBot/Modules/Music/Music.cs index 81e5c95d..d0a4dff5 100644 --- a/src/NadekoBot/Modules/Music/Music.cs +++ b/src/NadekoBot/Modules/Music/Music.cs @@ -62,14 +62,14 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public Task Next(IUserMessage umsg, int skipCount = 1) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (skipCount < 1) return Task.CompletedTask; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask; - if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)umsg.Author).VoiceChannel) + if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)Context.User).VoiceChannel) { while (--skipCount > 0) { @@ -82,13 +82,13 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public Task Stop(IUserMessage umsg) + public Task Stop() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask; - if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel == musicPlayer.PlaybackVoiceChannel) { musicPlayer.Autoplay = false; musicPlayer.Stop(); @@ -98,13 +98,13 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public Task Destroy(IUserMessage umsg) + public Task Destroy() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask; - if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel == musicPlayer.PlaybackVoiceChannel) if(MusicPlayers.TryRemove(channel.Guild.Id, out musicPlayer)) musicPlayer.Destroy(); return Task.CompletedTask; @@ -112,13 +112,13 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public Task Pause(IUserMessage umsg) + public Task Pause() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask; - if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel) return Task.CompletedTask; musicPlayer.TogglePause(); return Task.CompletedTask; @@ -128,9 +128,9 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Queue(IUserMessage umsg, [Remainder] string query) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, query).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, query).ConfigureAwait(false); if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages) { await Task.Delay(10000).ConfigureAwait(false); @@ -142,9 +142,9 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task SoundCloudQueue(IUserMessage umsg, [Remainder] string query) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, query, musicType: MusicType.Soundcloud).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, query, musicType: MusicType.Soundcloud).ConfigureAwait(false); if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages) { await Task.Delay(10000).ConfigureAwait(false); @@ -156,7 +156,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task ListQueue(IUserMessage umsg, int page = 1) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) { @@ -194,9 +194,9 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task NowPlaying(IUserMessage umsg) + public async Task NowPlaying() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) @@ -225,18 +225,18 @@ namespace NadekoBot.Modules.Music { embed.WithThumbnail(tn => tn.Url = $"{currentSong.SongInfo.AlbumArt}"); } - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task Volume(IUserMessage umsg, int val) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; - if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel) return; if (val < 0) return; @@ -248,7 +248,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Defvol(IUserMessage umsg, [Remainder] int val) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (val < 0 || val > 100) { @@ -265,13 +265,13 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ShufflePlaylist(IUserMessage umsg) + public async Task ShufflePlaylist() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; - if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel) return; if (musicPlayer.Playlist.Count < 2) { @@ -287,11 +287,11 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Playlist(IUserMessage umsg, [Remainder] string playlist) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = playlist; if (string.IsNullOrWhiteSpace(arg)) return; - if (((IGuildUser)umsg.Author).VoiceChannel?.Guild != channel.Guild) + if (((IGuildUser)Context.User).VoiceChannel?.Guild != channel.Guild) { await channel.SendErrorAsync("πŸ’’ You need to be in a **voice channel** on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false); return; @@ -316,7 +316,7 @@ namespace NadekoBot.Modules.Music { try { - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, id, true).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, id, true).ConfigureAwait(false); } catch (SongNotFoundException) { } catch { break; } @@ -328,7 +328,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task SoundCloudPl(IUserMessage umsg, [Remainder] string pl) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; pl = pl?.Trim(); if (string.IsNullOrWhiteSpace(pl)) @@ -337,7 +337,7 @@ namespace NadekoBot.Modules.Music using (var http = new HttpClient()) { var scvids = JObject.Parse(await http.GetStringAsync($"http://api.soundcloud.com/resolve?url={pl}&client_id={NadekoBot.Credentials.SoundCloudClientId}").ConfigureAwait(false))["tracks"].ToObject(); - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, scvids[0].TrackLink).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, scvids[0].TrackLink).ConfigureAwait(false); MusicPlayer mp; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out mp)) @@ -354,7 +354,7 @@ namespace NadekoBot.Modules.Music Uri = svideo.StreamLink, ProviderType = MusicType.Normal, Query = svideo.TrackLink, - }), ((IGuildUser)umsg.Author).Username); + }), ((IGuildUser)Context.User).Username); } catch (PlaylistFullException) { break; } } @@ -366,7 +366,7 @@ namespace NadekoBot.Modules.Music [OwnerOnly] public async Task LocalPl(IUserMessage umsg, [Remainder] string directory) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = directory; if (string.IsNullOrWhiteSpace(arg)) return; @@ -379,7 +379,7 @@ namespace NadekoBot.Modules.Music { try { - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false); } catch (PlaylistFullException) { @@ -396,13 +396,13 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Radio(IUserMessage umsg, string radio_link) { - var channel = (ITextChannel)umsg.Channel; - if (((IGuildUser)umsg.Author).VoiceChannel?.Guild != channel.Guild) + var channel = (ITextChannel)Context.Channel; + if (((IGuildUser)Context.User).VoiceChannel?.Guild != channel.Guild) { await channel.SendErrorAsync("πŸ’’ You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false); return; } - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, radio_link, musicType: MusicType.Radio).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, radio_link, musicType: MusicType.Radio).ConfigureAwait(false); if (channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages) { await Task.Delay(10000).ConfigureAwait(false); @@ -415,21 +415,21 @@ namespace NadekoBot.Modules.Music [OwnerOnly] public async Task Local(IUserMessage umsg, [Remainder] string path) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = path; if (string.IsNullOrWhiteSpace(arg)) return; - await QueueSong(((IGuildUser)umsg.Author), channel, ((IGuildUser)umsg.Author).VoiceChannel, path, musicType: MusicType.Local).ConfigureAwait(false); + await QueueSong(((IGuildUser)Context.User), channel, ((IGuildUser)Context.User).VoiceChannel, path, musicType: MusicType.Local).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Move(IUserMessage umsg) + public async Task Move() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; - var voiceChannel = ((IGuildUser)umsg.Author).VoiceChannel; + var voiceChannel = ((IGuildUser)Context.User).VoiceChannel; if (voiceChannel == null || voiceChannel.Guild != channel.Guild || !MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; await musicPlayer.MoveToVoiceChannel(voiceChannel); @@ -440,14 +440,14 @@ namespace NadekoBot.Modules.Music [Priority(0)] public async Task Remove(IUserMessage umsg, int num) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) { return; } - if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel) return; if (num <= 0 || num > musicPlayer.Playlist.Count) return; @@ -461,7 +461,7 @@ namespace NadekoBot.Modules.Music [Priority(1)] public async Task Remove(IUserMessage umsg, string all) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (all.Trim().ToUpperInvariant() != "ALL") return; @@ -476,7 +476,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task MoveSong(IUserMessage umsg, [Remainder] string fromto) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) { @@ -510,7 +510,7 @@ namespace NadekoBot.Modules.Music .AddField(fb => fb.WithName("**From Position**").WithValue($"#{n1}").WithIsInline(true)) .AddField(fb => fb.WithName("**To Position**").WithValue($"#{n2}").WithIsInline(true)) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); //await channel.SendConfirmAsync($"🎡Moved {s.PrettyName} `from #{n1} to #{n2}`").ConfigureAwait(false); @@ -521,7 +521,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task SetMaxQueue(IUserMessage umsg, uint size) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) { @@ -533,9 +533,9 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ReptCurSong(IUserMessage umsg) + public async Task ReptCurSong() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; @@ -551,9 +551,9 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task RepeatPl(IUserMessage umsg) + public async Task RepeatPl() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; @@ -565,7 +565,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Save(IUserMessage umsg, [Remainder] string name) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; @@ -586,8 +586,8 @@ namespace NadekoBot.Modules.Music playlist = new MusicPlaylist { Name = name, - Author = umsg.Author.Username, - AuthorId = umsg.Author.Id, + Author = Context.User.Username, + AuthorId = Context.User.Id, Songs = songs, }; uow.MusicPlaylists.Add(playlist); @@ -601,7 +601,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Load(IUserMessage umsg, [Remainder] int id) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlaylist mpl; using (var uow = DbHandler.UnitOfWork()) @@ -618,7 +618,7 @@ namespace NadekoBot.Modules.Music try { msg = await channel.SendMessageAsync($"🎢 Attempting to load **{mpl.Songs.Count}** songs...").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); } foreach (var item in mpl.Songs) { - var usr = (IGuildUser)umsg.Author; + var usr = (IGuildUser)Context.User; try { await QueueSong(usr, channel, usr.VoiceChannel, item.Query, true, item.ProviderType).ConfigureAwait(false); @@ -634,7 +634,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Playlists(IUserMessage umsg, [Remainder] int num = 1) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (num <= 0) return; @@ -656,7 +656,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task DeletePlaylist(IUserMessage umsg, [Remainder] int id) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; bool success = false; MusicPlaylist pl = null; @@ -668,7 +668,7 @@ namespace NadekoBot.Modules.Music if (pl != null) { - if (NadekoBot.Credentials.IsOwner(umsg.Author) || pl.AuthorId == umsg.Author.Id) + if (NadekoBot.Credentials.IsOwner(Context.User) || pl.AuthorId == Context.User.Id) { uow.MusicPlaylists.Remove(pl); await uow.CompleteAsync().ConfigureAwait(false); @@ -694,12 +694,12 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task Goto(IUserMessage umsg, int time) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; - if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel) + if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel) return; if (time < 0) @@ -731,7 +731,7 @@ namespace NadekoBot.Modules.Music [RequireContext(ContextType.Guild)] public async Task GetLink(IUserMessage umsg, int index = 0) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; @@ -764,9 +764,9 @@ namespace NadekoBot.Modules.Music [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Autoplay(IUserMessage umsg) + public async Task Autoplay() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; MusicPlayer musicPlayer; if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return; diff --git a/src/NadekoBot/Modules/NSFW/NSFW.cs b/src/NadekoBot/Modules/NSFW/NSFW.cs index 0fba9e0e..8b856b1b 100644 --- a/src/NadekoBot/Modules/NSFW/NSFW.cs +++ b/src/NadekoBot/Modules/NSFW/NSFW.cs @@ -24,7 +24,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Hentai(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; @@ -60,7 +60,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task HentaiBomb(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; tag = "rating%3Aexplicit+" + tag; @@ -102,7 +102,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Yandere(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetYandereImageLink(tag).ConfigureAwait(false); @@ -116,7 +116,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Danbooru(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetDanbooruImageLink(tag).ConfigureAwait(false); @@ -130,7 +130,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Konachan(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetKonachanImageLink(tag).ConfigureAwait(false); @@ -144,7 +144,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Gelbooru(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetGelbooruImageLink(tag).ConfigureAwait(false); @@ -158,7 +158,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task Rule34(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetRule34ImageLink(tag).ConfigureAwait(false); @@ -172,7 +172,7 @@ namespace NadekoBot.Modules.NSFW [RequireContext(ContextType.Guild)] public async Task E621(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetE621ImageLink(tag).ConfigureAwait(false); @@ -184,18 +184,18 @@ namespace NadekoBot.Modules.NSFW [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Cp(IUserMessage umsg) + public async Task Cp() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; await channel.SendMessageAsync("http://i.imgur.com/MZkY1md.jpg").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Boobs(IUserMessage umsg) + public async Task Boobs() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { JToken obj; @@ -213,9 +213,9 @@ namespace NadekoBot.Modules.NSFW [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Butts(IUserMessage umsg) + public async Task Butts() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { diff --git a/src/NadekoBot/Modules/Permissions/Commands/BlacklistCommands.cs b/src/NadekoBot/Modules/Permissions/Commands/BlacklistCommands.cs index 2d90a2e7..b4a0932e 100644 --- a/src/NadekoBot/Modules/Permissions/Commands/BlacklistCommands.cs +++ b/src/NadekoBot/Modules/Permissions/Commands/BlacklistCommands.cs @@ -60,7 +60,7 @@ namespace NadekoBot.Modules.Permissions private async Task Blacklist(IUserMessage imsg, AddRemove action, ulong id, BlacklistType type) { - var channel = imsg.Channel; + var channel = Context.Channel; using (var uow = DbHandler.UnitOfWork()) { diff --git a/src/NadekoBot/Modules/Permissions/Commands/CmdCdsCommands.cs b/src/NadekoBot/Modules/Permissions/Commands/CmdCdsCommands.cs index c18bf8ed..b9b32b56 100644 --- a/src/NadekoBot/Modules/Permissions/Commands/CmdCdsCommands.cs +++ b/src/NadekoBot/Modules/Permissions/Commands/CmdCdsCommands.cs @@ -21,7 +21,7 @@ namespace NadekoBot.Modules.Permissions } [Group] - public class CmdCdsCommands + public class CmdCdsCommands : ModuleBase { public static ConcurrentDictionary> commandCooldowns { get; } private static ConcurrentDictionary> activeCooldowns { get; } = new ConcurrentDictionary>(); @@ -36,9 +36,9 @@ namespace NadekoBot.Modules.Permissions } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task CmdCooldown(IUserMessage imsg, Command command, int secs) + public async Task CmdCooldown(IUserMessage imsg, CommandInfo command, int secs) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (secs < 0 || secs > 3600) { await channel.SendErrorAsync("Invalid second parameter. (Must be a number between 0 and 3600)").ConfigureAwait(false); @@ -50,8 +50,8 @@ namespace NadekoBot.Modules.Permissions var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.CommandCooldowns)); var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet()); - config.CommandCooldowns.RemoveWhere(cc => cc.CommandName == command.Text.ToLowerInvariant()); - localSet.RemoveWhere(cc => cc.CommandName == command.Text.ToLowerInvariant()); + config.CommandCooldowns.RemoveWhere(cc => cc.CommandName == command.Aliases.First().ToLowerInvariant()); + localSet.RemoveWhere(cc => cc.CommandName == command.Aliases.First().ToLowerInvariant()); if (secs != 0) { var cc = new CommandCooldown() @@ -80,9 +80,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task AllCmdCooldowns(IUserMessage imsg) + public async Task AllCmdCooldowns() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; var localSet = commandCooldowns.GetOrAdd(channel.Guild.Id, new ConcurrentHashSet()); if (!localSet.Any()) diff --git a/src/NadekoBot/Modules/Permissions/Commands/FilterCommands.cs b/src/NadekoBot/Modules/Permissions/Commands/FilterCommands.cs index d6f22fb5..cc92b01a 100644 --- a/src/NadekoBot/Modules/Permissions/Commands/FilterCommands.cs +++ b/src/NadekoBot/Modules/Permissions/Commands/FilterCommands.cs @@ -62,9 +62,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task SrvrFilterInv(IUserMessage imsg) + public async Task SrvrFilterInv() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) @@ -88,9 +88,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChnlFilterInv(IUserMessage imsg) + public async Task ChnlFilterInv() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; int removed; using (var uow = DbHandler.UnitOfWork()) @@ -121,9 +121,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task SrvrFilterWords(IUserMessage imsg) + public async Task SrvrFilterWords() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; bool enabled; using (var uow = DbHandler.UnitOfWork()) @@ -147,9 +147,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChnlFilterWords(IUserMessage imsg) + public async Task ChnlFilterWords() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; int removed; using (var uow = DbHandler.UnitOfWork()) @@ -182,7 +182,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task FilterWord(IUserMessage imsg, [Remainder] string word) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; word = word?.Trim().ToLowerInvariant(); @@ -220,9 +220,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task LstFilterWords(IUserMessage imsg) + public async Task LstFilterWords() { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; ConcurrentHashSet filteredWords; ServerFilteredWords.TryGetValue(channel.Guild.Id, out filteredWords); diff --git a/src/NadekoBot/Modules/Permissions/PermissionExtensions.cs b/src/NadekoBot/Modules/Permissions/PermissionExtensions.cs index 8340b2f5..9a1489e7 100644 --- a/src/NadekoBot/Modules/Permissions/PermissionExtensions.cs +++ b/src/NadekoBot/Modules/Permissions/PermissionExtensions.cs @@ -10,7 +10,7 @@ namespace NadekoBot.Modules.Permissions { public static class PermissionExtensions { - public static bool CheckPermissions(this IEnumerable permsEnumerable, IUserMessage message, Command command) + public static bool CheckPermissions(this IEnumerable permsEnumerable, IUserMessage message, CommandInfo command) { var perms = permsEnumerable as List ?? permsEnumerable.ToList(); int throwaway; @@ -75,7 +75,7 @@ namespace NadekoBot.Modules.Permissions case PrimaryPermissionType.Role: if (guildUser == null) break; - if (guildUser.Roles.Any(r => r.Id == perm.PrimaryTargetId)) + if (guildUser.RoleIds.Contains(perm.PrimaryTargetId)) return perm.State; break; case PrimaryPermissionType.Server: diff --git a/src/NadekoBot/Modules/Permissions/Permissions.cs b/src/NadekoBot/Modules/Permissions/Permissions.cs index d3de046c..d71a991f 100644 --- a/src/NadekoBot/Modules/Permissions/Permissions.cs +++ b/src/NadekoBot/Modules/Permissions/Permissions.cs @@ -46,9 +46,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Verbose(IUserMessage msg, PermissionAction action) + public async Task Verbose(PermissionAction action) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -68,9 +68,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task PermRole(IUserMessage msg, [Remainder] IRole role = null) + public async Task PermRole([Remainder] IRole role = null) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { var config = uow.GuildConfigs.For(channel.Guild.Id, set => set); @@ -96,9 +96,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ListPerms(IUserMessage msg, int page = 1) + public async Task ListPerms(int page = 1) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; if (page < 1 || page > 4) return; @@ -117,7 +117,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task RemovePerm(IUserMessage imsg, int index) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; index -= 1; try { @@ -154,7 +154,7 @@ namespace NadekoBot.Modules.Permissions uow2._context.SaveChanges(); } - await channel.SendConfirmAsync($"βœ… {imsg.Author.Mention} removed permission **{p.GetCommand(channel.Guild)}** from position #{index + 1}.").ConfigureAwait(false); + await channel.SendConfirmAsync($"βœ… {Context.User.Mention} removed permission **{p.GetCommand(channel.Guild)}** from position #{index + 1}.").ConfigureAwait(false); } catch (ArgumentOutOfRangeException) { @@ -168,7 +168,7 @@ namespace NadekoBot.Modules.Permissions { from -= 1; to -= 1; - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; if (!(from == to || from < 0 || to < 0)) { try @@ -274,9 +274,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task SrvrCmd(IUserMessage imsg, Command command, PermissionAction action) + public async Task SrvrCmd(IUserMessage imsg, CommandInfo command, PermissionAction action) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -285,7 +285,7 @@ namespace NadekoBot.Modules.Permissions PrimaryTarget = PrimaryPermissionType.Server, PrimaryTargetId = 0, SecondaryTarget = SecondaryPermissionType.Command, - SecondaryTargetName = command.Text.ToLowerInvariant(), + SecondaryTargetName = command.Aliases.First().ToLowerInvariant(), State = action.Value, }; var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm); @@ -298,14 +298,14 @@ namespace NadekoBot.Modules.Permissions await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Text}` command on this server.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Aliases.First()}` command on this server.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task SrvrMdl(IUserMessage imsg, Module module, PermissionAction action) + public async Task SrvrMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -331,9 +331,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task UsrCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IGuildUser user) + public async Task UsrCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] IGuildUser user) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -342,7 +342,7 @@ namespace NadekoBot.Modules.Permissions PrimaryTarget = PrimaryPermissionType.User, PrimaryTargetId = user.Id, SecondaryTarget = SecondaryPermissionType.Command, - SecondaryTargetName = command.Text.ToLowerInvariant(), + SecondaryTargetName = command.Aliases.First().ToLowerInvariant(), State = action.Value, }; var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm); @@ -354,14 +354,14 @@ namespace NadekoBot.Modules.Permissions }, (id, old) => { old.RootPermission = config.RootPermission; return old; }); await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Text}` command for `{user}` user.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Aliases.First()}` command for `{user}` user.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task UsrMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IGuildUser user) + public async Task UsrMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] IGuildUser user) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -387,9 +387,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task RoleCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] IRole role) + public async Task RoleCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] IRole role) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -398,7 +398,7 @@ namespace NadekoBot.Modules.Permissions PrimaryTarget = PrimaryPermissionType.Role, PrimaryTargetId = role.Id, SecondaryTarget = SecondaryPermissionType.Command, - SecondaryTargetName = command.Text.ToLowerInvariant(), + SecondaryTargetName = command.Aliases.First().ToLowerInvariant(), State = action.Value, }; var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm); @@ -410,14 +410,14 @@ namespace NadekoBot.Modules.Permissions }, (id, old) => { old.RootPermission = config.RootPermission; return old; }); await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Text}` command for `{role}` role.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Aliases.First()}` command for `{role}` role.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task RoleMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] IRole role) + public async Task RoleMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] IRole role) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -443,9 +443,9 @@ namespace NadekoBot.Modules.Permissions [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChnlCmd(IUserMessage imsg, Command command, PermissionAction action, [Remainder] ITextChannel chnl) + public async Task ChnlCmd(IUserMessage imsg, CommandInfo command, PermissionAction action, [Remainder] ITextChannel chnl) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; try { using (var uow = DbHandler.UnitOfWork()) @@ -455,7 +455,7 @@ namespace NadekoBot.Modules.Permissions PrimaryTarget = PrimaryPermissionType.Channel, PrimaryTargetId = chnl.Id, SecondaryTarget = SecondaryPermissionType.Command, - SecondaryTargetName = command.Text.ToLowerInvariant(), + SecondaryTargetName = command.Aliases.First().ToLowerInvariant(), State = action.Value, }; var config = uow.GuildConfigs.SetNewRootPermission(channel.Guild.Id, newPerm); @@ -471,14 +471,14 @@ namespace NadekoBot.Modules.Permissions catch (Exception ex) { _log.Error(ex); } - await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Text}` command for `{chnl}` channel.").ConfigureAwait(false); + await channel.SendConfirmAsync($"{(action.Value ? "βœ… Allowed" : "πŸ†— Denied")} usage of `{command.Aliases.First()}` command for `{chnl}` channel.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChnlMdl(IUserMessage imsg, Module module, PermissionAction action, [Remainder] ITextChannel chnl) + public async Task ChnlMdl(IUserMessage imsg, ModuleInfo module, PermissionAction action, [Remainder] ITextChannel chnl) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -506,7 +506,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task AllChnlMdls(IUserMessage imsg, PermissionAction action, [Remainder] ITextChannel chnl) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -534,7 +534,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task AllRoleMdls(IUserMessage imsg, PermissionAction action, [Remainder] IRole role) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -562,7 +562,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task AllUsrMdls(IUserMessage imsg, PermissionAction action, [Remainder] IUser user) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -590,7 +590,7 @@ namespace NadekoBot.Modules.Permissions [RequireContext(ContextType.Guild)] public async Task AllSrvrMdls(IUserMessage imsg, PermissionAction action) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var uow = DbHandler.UnitOfWork()) { @@ -607,7 +607,7 @@ namespace NadekoBot.Modules.Permissions var allowUser = new Permission { PrimaryTarget = PrimaryPermissionType.User, - PrimaryTargetId = imsg.Author.Id, + PrimaryTargetId = Context.User.Id, SecondaryTarget = SecondaryPermissionType.AllModules, SecondaryTargetName = "*", State = true, diff --git a/src/NadekoBot/Modules/Pokemon/Pokemon.cs b/src/NadekoBot/Modules/Pokemon/Pokemon.cs index 31dbf2cb..5000dcb9 100644 --- a/src/NadekoBot/Modules/Pokemon/Pokemon.cs +++ b/src/NadekoBot/Modules/Pokemon/Pokemon.cs @@ -16,7 +16,6 @@ using static NadekoBot.Modules.Gambling.Gambling; namespace NadekoBot.Modules.Pokemon { - [NadekoModule("Pokemon", ">")] public partial class Pokemon : DiscordModule { @@ -99,8 +98,8 @@ namespace NadekoBot.Modules.Pokemon [RequireContext(ContextType.Guild)] public async Task Attack(IUserMessage umsg, string move, IGuildUser targetUser = null) { - var channel = (ITextChannel)umsg.Channel; - IGuildUser user = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + IGuildUser user = (IGuildUser)Context.User; if (string.IsNullOrWhiteSpace(move)) { return; @@ -215,10 +214,10 @@ namespace NadekoBot.Modules.Pokemon [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Movelist(IUserMessage umsg) + public async Task Movelist() { - var channel = (ITextChannel)umsg.Channel; - IGuildUser user = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + IGuildUser user = (IGuildUser)Context.User; var userType = GetPokeType(user.Id); var movesList = userType.Moves; @@ -234,8 +233,8 @@ namespace NadekoBot.Modules.Pokemon [RequireContext(ContextType.Guild)] public async Task Heal(IUserMessage umsg, IGuildUser targetUser = null) { - var channel = (ITextChannel)umsg.Channel; - IGuildUser user = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + IGuildUser user = (IGuildUser)Context.User; if (targetUser == null) { await channel.SendMessageAsync("No such person.").ConfigureAwait(false); @@ -293,8 +292,8 @@ namespace NadekoBot.Modules.Pokemon [RequireContext(ContextType.Guild)] public async Task Type(IUserMessage umsg, IGuildUser targetUser = null) { - var channel = (ITextChannel)umsg.Channel; - IGuildUser user = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + IGuildUser user = (IGuildUser)Context.User; if (targetUser == null) { @@ -310,13 +309,13 @@ namespace NadekoBot.Modules.Pokemon [RequireContext(ContextType.Guild)] public async Task Settype(IUserMessage umsg, [Remainder] string typeTargeted = null) { - var channel = (ITextChannel)umsg.Channel; - IGuildUser user = (IGuildUser)umsg.Author; + var channel = (ITextChannel)Context.Channel; + IGuildUser user = (IGuildUser)Context.User; var targetType = StringToPokemonType(typeTargeted); if (targetType == null) { - await channel.EmbedAsync(PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name).WithValue(pt.Icon).WithIsInline(true))).WithColor(NadekoBot.OkColor).Build()).ConfigureAwait(false); + await channel.EmbedAsync(PokemonTypes.Aggregate(new EmbedBuilder().WithDescription("List of the available types:"), (eb, pt) => eb.AddField(efb => efb.WithName(pt.Name).WithValue(pt.Icon).WithIsInline(true))).WithColor(NadekoBot.OkColor)).ConfigureAwait(false); return; } if (targetType == GetPokeType(user.Id)) diff --git a/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs b/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs index a21ea1f5..d3444687 100644 --- a/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs @@ -18,7 +18,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class AnimeSearchCommands + public class AnimeSearchCommands : ModuleBase { private static Timer anilistTokenRefresher { get; } private static Logger _log { get; } @@ -56,7 +56,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Anime(IUserMessage umsg, [Remainder] string query) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(query)) return; @@ -65,37 +65,17 @@ namespace NadekoBot.Modules.Searches if (animeData == null) { - await umsg.Channel.SendErrorAsync("Failed finding that animu.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Failed finding that animu.").ConfigureAwait(false); return; } - - var embed = new Discord.API.Embed() - { - Description = animeData.Synopsis, - Title = animeData.title_english, - Url = animeData.Link, - Image = new Discord.API.EmbedImage() { - Url = animeData.image_url_lge - }, - Fields = new[] { - new Discord.API.EmbedField() { - Inline = true, - Name = "Episodes", - Value = animeData.total_episodes.ToString() - }, - new Discord.API.EmbedField() { - Inline = true, - Name = "Status", - Value = animeData.AiringStatus.ToString() - }, - new Discord.API.EmbedField() { - Inline = true, - Name = "Genres", - Value = String.Join(", ", animeData.Genres) - } - }, - Color = NadekoBot.OkColor - }; + var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor) + .WithDescription(animeData.Synopsis) + .WithTitle(animeData.title_english) + .WithUrl(animeData.Link) + .WithImageUrl(animeData.image_url_lge) + .AddField(efb => efb.WithName("Episodes").WithValue(animeData.total_episodes.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName("Status").WithValue(animeData.AiringStatus.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName("Genres").WithValue(String.Join(", ", animeData.Genres)).WithIsInline(true)); await channel.EmbedAsync(embed).ConfigureAwait(false); } @@ -103,7 +83,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Manga(IUserMessage umsg, [Remainder] string query) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(query)) return; @@ -112,38 +92,18 @@ namespace NadekoBot.Modules.Searches if (mangaData == null) { - await umsg.Channel.SendErrorAsync("Failed finding that mango.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Failed finding that mango.").ConfigureAwait(false); return; } - var embed = new Discord.API.Embed() - { - Description = mangaData.Synopsis, - Title = mangaData.title_english, - Url = mangaData.Link, - Image = new Discord.API.EmbedImage() - { - Url = mangaData.image_url_lge - }, - Fields = new[] { - new Discord.API.EmbedField() { - Inline = true, - Name = "Chapters", - Value = mangaData.total_chapters.ToString() - }, - new Discord.API.EmbedField() { - Inline = true, - Name = "Status", - Value = mangaData.publishing_status.ToString() - }, - new Discord.API.EmbedField() { - Inline = true, - Name = "Genres", - Value = String.Join(", ", mangaData.Genres) - } - }, - Color = NadekoBot.OkColor - }; + var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor) + .WithDescription(mangaData.Synopsis) + .WithTitle(mangaData.title_english) + .WithUrl(mangaData.Link) + .WithImageUrl(mangaData.image_url_lge) + .AddField(efb => efb.WithName("Episodes").WithValue(mangaData.total_chapters.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName("Status").WithValue(mangaData.publishing_status.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName("Genres").WithValue(String.Join(", ", mangaData.Genres)).WithIsInline(true)); await channel.EmbedAsync(embed).ConfigureAwait(false); } diff --git a/src/NadekoBot/Modules/Searches/Commands/JokeCommands.cs b/src/NadekoBot/Modules/Searches/Commands/JokeCommands.cs index b5327810..f84f9469 100644 --- a/src/NadekoBot/Modules/Searches/Commands/JokeCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/JokeCommands.cs @@ -18,7 +18,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class JokeCommands + public class JokeCommands : ModuleBase { private static List wowJokes { get; } = new List(); private static List magicItems { get; } = new List(); @@ -44,62 +44,62 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Yomama(IUserMessage msg) + public async Task Yomama() { using (var http = new HttpClient()) { var response = await http.GetStringAsync("http://api.yomomma.info/").ConfigureAwait(false); - await msg.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Randjoke(IUserMessage msg) + public async Task Randjoke() { using (var http = new HttpClient()) { var response = await http.GetStringAsync("http://tambal.azurewebsites.net/joke/random").ConfigureAwait(false); - await msg.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(JObject.Parse(response)["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChuckNorris(IUserMessage msg) + public async Task ChuckNorris() { using (var http = new HttpClient()) { var response = await http.GetStringAsync("http://api.icndb.com/jokes/random/").ConfigureAwait(false); - await msg.Channel.SendConfirmAsync(JObject.Parse(response)["value"]["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(JObject.Parse(response)["value"]["joke"].ToString() + " πŸ˜†").ConfigureAwait(false); } } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task WowJoke(IUserMessage msg) + public async Task WowJoke() { if (!wowJokes.Any()) { - await msg.Channel.SendErrorAsync("Jokes not loaded.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Jokes not loaded.").ConfigureAwait(false); return; } var joke = wowJokes[new NadekoRandom().Next(0, wowJokes.Count)]; - await msg.Channel.SendConfirmAsync(joke.Question, joke.Answer).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(joke.Question, joke.Answer).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task MagicItem(IUserMessage msg) + public async Task MagicItem() { if (!wowJokes.Any()) { - await msg.Channel.SendErrorAsync("MagicItems not loaded.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("MagicItems not loaded.").ConfigureAwait(false); return; } var item = magicItems[new NadekoRandom().Next(0, magicItems.Count)]; - await msg.Channel.SendConfirmAsync("✨" + item.Name, item.Description).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("✨" + item.Name, item.Description).ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/LoLCommands.cs b/src/NadekoBot/Modules/Searches/Commands/LoLCommands.cs index e50f2060..991fec8f 100644 --- a/src/NadekoBot/Modules/Searches/Commands/LoLCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/LoLCommands.cs @@ -34,12 +34,8 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Lolban(IUserMessage umsg) + public async Task Lolban() { - var channel = (ITextChannel)umsg.Channel; - - - var showCount = 8; //http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2 try @@ -58,12 +54,12 @@ namespace NadekoBot.Modules.Searches eb.AddField(efb => efb.WithName(champ["name"].ToString()).WithValue(champ["general"]["banRate"] + "%").WithIsInline(true)); } - await channel.EmbedAsync(eb.Build(), Format.Italics(trashTalk[new NadekoRandom().Next(0, trashTalk.Length)])).ConfigureAwait(false); + await Context.Channel.EmbedAsync(eb, Format.Italics(trashTalk[new NadekoRandom().Next(0, trashTalk.Length)])).ConfigureAwait(false); } } catch (Exception) { - await channel.SendMessageAsync("Something went wrong.").ConfigureAwait(false); + await Context.Channel.SendMessageAsync("Something went wrong.").ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/MemegenCommands.cs b/src/NadekoBot/Modules/Searches/Commands/MemegenCommands.cs index 3c48eab0..f4e1d317 100644 --- a/src/NadekoBot/Modules/Searches/Commands/MemegenCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/MemegenCommands.cs @@ -16,9 +16,8 @@ namespace NadekoBot.Modules.Searches { [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Memelist(IUserMessage umsg) + public async Task Memelist() { - var channel = (ITextChannel)umsg.Channel; HttpClientHandler handler = new HttpClientHandler(); handler.AllowAutoRedirect = false; @@ -29,7 +28,7 @@ namespace NadekoBot.Modules.Searches var data = JsonConvert.DeserializeObject>(rawJson) .Select(kvp => Path.GetFileName(kvp.Value)); - await channel.SendTableAsync(data, x => $"{x,-17}", 3).ConfigureAwait(false); + await Context.Channel.SendTableAsync(data, x => $"{x,-17}", 3).ConfigureAwait(false); } } @@ -37,11 +36,9 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Memegen(IUserMessage umsg, string meme, string topText, string botText) { - var channel = (ITextChannel)umsg.Channel; - var top = Uri.EscapeDataString(topText.Replace(' ', '-')); var bot = Uri.EscapeDataString(botText.Replace(' ', '-')); - await channel.SendMessageAsync($"http://memegen.link/{meme}/{top}/{bot}.jpg") + await Context.Channel.SendMessageAsync($"http://memegen.link/{meme}/{top}/{bot}.jpg") .ConfigureAwait(false); } } diff --git a/src/NadekoBot/Modules/Searches/Commands/OMDB/OmdbProvider.cs b/src/NadekoBot/Modules/Searches/Commands/OMDB/OmdbProvider.cs index 02373bb3..9b4c0c1b 100644 --- a/src/NadekoBot/Modules/Searches/Commands/OMDB/OmdbProvider.cs +++ b/src/NadekoBot/Modules/Searches/Commands/OMDB/OmdbProvider.cs @@ -34,7 +34,7 @@ namespace NadekoBot.Modules.Searches.Commands.OMDB public string Plot { get; set; } public string Poster { get; set; } - public Embed GetEmbed() => + public EmbedBuilder GetEmbed() => new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle(Title) .WithUrl($"http://www.imdb.com/title/{ImdbId}/") @@ -42,8 +42,7 @@ namespace NadekoBot.Modules.Searches.Commands.OMDB .AddField(efb => efb.WithName("Rating").WithValue(ImdbRating).WithIsInline(true)) .AddField(efb => efb.WithName("Genre").WithValue(Genre).WithIsInline(true)) .AddField(efb => efb.WithName("Year").WithValue(Year).WithIsInline(true)) - .WithImage(eib => eib.WithUrl(Poster)) - .Build(); + .WithImageUrl(Poster); public override string ToString() => $@"`Title:` {Title} diff --git a/src/NadekoBot/Modules/Searches/Commands/OsuCommands.cs b/src/NadekoBot/Modules/Searches/Commands/OsuCommands.cs index 58d7dfdc..fa665d5b 100644 --- a/src/NadekoBot/Modules/Searches/Commands/OsuCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/OsuCommands.cs @@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class OsuCommands + public class OsuCommands : ModuleBase { private static Logger _log { get; } @@ -26,10 +26,8 @@ namespace NadekoBot.Modules.Searches } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Osu(IUserMessage umsg, string usr, [Remainder] string mode = null) + public async Task Osu(string usr, [Remainder] string mode = null) { - var channel = (ITextChannel)umsg.Channel; - if (string.IsNullOrWhiteSpace(usr)) return; @@ -48,11 +46,11 @@ namespace NadekoBot.Modules.Searches MemoryStream ms = new MemoryStream(); res.CopyTo(ms); ms.Position = 0; - await channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **Profile Link: **https://osu.ppy.sh/u/{Uri.EscapeDataString(usr)}\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false); + await Context.Channel.SendFileAsync(ms, $"{usr}.png", $"🎧 **Profile Link: **https://osu.ppy.sh/u/{Uri.EscapeDataString(usr)}\n`Image provided by https://lemmmy.pw/osusig`").ConfigureAwait(false); } catch (Exception ex) { - await channel.SendErrorAsync("Failed retrieving osu signature.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Failed retrieving osu signature.").ConfigureAwait(false); _log.Warn(ex, "Osu command failed"); } } @@ -62,7 +60,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Osub(IUserMessage umsg, [Remainder] string map) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey)) { @@ -99,7 +97,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Osu5(IUserMessage umsg, string user, [Remainder] string mode = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.OsuApiKey)) { await channel.SendErrorAsync("An osu! API key is required.").ConfigureAwait(false); diff --git a/src/NadekoBot/Modules/Searches/Commands/OverwatchCommands.cs b/src/NadekoBot/Modules/Searches/Commands/OverwatchCommands.cs index ec3ddfb1..ca1d1a7d 100644 --- a/src/NadekoBot/Modules/Searches/Commands/OverwatchCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/OverwatchCommands.cs @@ -16,7 +16,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class OverwatchCommands + public class OverwatchCommands : ModuleBase { private Logger _log; public OverwatchCommands() @@ -27,7 +27,6 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Overwatch(IUserMessage umsg, string region, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; if (string.IsNullOrWhiteSpace(query)) return; var battletag = Regex.Replace(query, "#", "-", RegexOptions.IgnoreCase); @@ -43,7 +42,7 @@ namespace NadekoBot.Modules.Searches .WithAuthor(eau => eau.WithName($"{model.username}") .WithUrl($"https://www.overbuff.com/players/pc/{battletag}") .WithIconUrl($"{model.avatar}")) - .WithThumbnail(th => th.WithUrl("https://cdn.discordapp.com/attachments/155726317222887425/255653487512256512/YZ4w2ey.png")) + .WithThumbnailUrl("https://cdn.discordapp.com/attachments/155726317222887425/255653487512256512/YZ4w2ey.png") .AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true)) .AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true)) .AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true)) @@ -53,7 +52,7 @@ namespace NadekoBot.Modules.Searches .AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true)) .AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true)) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } else { @@ -61,7 +60,7 @@ namespace NadekoBot.Modules.Searches .WithAuthor(eau => eau.WithName($"{model.username}") .WithUrl($"https://www.overbuff.com/players/pc/{battletag}") .WithIconUrl($"{model.avatar}")) - .WithThumbnail(th => th.WithUrl(rankimg)) + .WithThumbnailUrl(rankimg) .AddField(fb => fb.WithName("**Level**").WithValue($"{model.level}").WithIsInline(true)) .AddField(fb => fb.WithName("**Quick Wins**").WithValue($"{model.Games.Quick.wins}").WithIsInline(true)) .AddField(fb => fb.WithName("**Current Competitive Wins**").WithValue($"{model.Games.Competitive.wins}").WithIsInline(true)) @@ -71,32 +70,32 @@ namespace NadekoBot.Modules.Searches .AddField(fb => fb.WithName("**Competitive Playtime**").WithValue($"{model.Playtime.competitive}").WithIsInline(true)) .AddField(fb => fb.WithName("**Quick Playtime**").WithValue($"{model.Playtime.quick}").WithIsInline(true)) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); return; } } catch { - await channel.SendErrorAsync("Found no user! Please check the **Region** and **BattleTag** before trying again."); + await Context.Channel.SendErrorAsync("Found no user! Please check the **Region** and **BattleTag** before trying again."); } } - public async Task GetProfile(string region, string battletag) - { - try - { - using (var http = new HttpClient()) - { - var Url = await http.GetStringAsync($"https://api.lootbox.eu/pc/{region.ToLower()}/{battletag}/profile"); - var model = JsonConvert.DeserializeObject(Url); - return model.data; - } - } - catch - { - return null; - } - } - - } + public async Task GetProfile(string region, string battletag) + { + try + { + using (var http = new HttpClient()) + { + var Url = await http.GetStringAsync($"https://api.lootbox.eu/pc/{region.ToLower()}/{battletag}/profile"); + var model = JsonConvert.DeserializeObject(Url); + return model.data; + } + } + catch + { + return null; + } + } + + } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs b/src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs index 2be2d88a..513a4e80 100644 --- a/src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs @@ -11,7 +11,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class PlaceCommands + public class PlaceCommands : ModuleBase { string typesStr { get; } = ""; public PlaceCommands() @@ -33,11 +33,9 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Placelist(IUserMessage imsg) + public async Task Placelist() { - var channel = (ITextChannel)imsg.Channel; - - await channel.SendConfirmAsync(typesStr) + await Context.Channel.SendConfirmAsync(typesStr) .ConfigureAwait(false); } @@ -45,8 +43,6 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Place(IUserMessage imsg, PlaceType placeType, uint width = 0, uint height = 0) { - var channel = (ITextChannel)imsg.Channel; - string url = ""; switch (placeType) { @@ -84,7 +80,7 @@ namespace NadekoBot.Modules.Searches url += $"/{width}/{height}"; - await channel.SendMessageAsync(url).ConfigureAwait(false); + await Context.Channel.SendMessageAsync(url).ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/PokemonSearchCommands.cs b/src/NadekoBot/Modules/Searches/Commands/PokemonSearchCommands.cs index 60b9c27e..31269b00 100644 --- a/src/NadekoBot/Modules/Searches/Commands/PokemonSearchCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/PokemonSearchCommands.cs @@ -15,7 +15,7 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class PokemonSearchCommands + public class PokemonSearchCommands : ModuleBase { private static Dictionary pokemons { get; } = new Dictionary(); private static Dictionary pokemonAbilities { get; } = new Dictionary(); @@ -42,10 +42,8 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Pokemon(IUserMessage umsg, [Remainder] string pokemon = null) + public async Task Pokemon([Remainder] string pokemon = null) { - var channel = (ITextChannel)umsg.Channel; - pokemon = pokemon?.Trim().ToUpperInvariant(); if (string.IsNullOrWhiteSpace(pokemon)) return; @@ -55,25 +53,23 @@ namespace NadekoBot.Modules.Searches if (kvp.Key.ToUpperInvariant() == pokemon.ToUpperInvariant()) { var p = kvp.Value; - await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) + await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle(kvp.Key.ToTitleCase()) .WithDescription(p.BaseStats.ToString()) .AddField(efb => efb.WithName("Types").WithValue(string.Join(",\n", p.Types)).WithIsInline(true)) .AddField(efb => efb.WithName("Height/Weight").WithValue($"{p.HeightM}m/{p.WeightKg}kg").WithIsInline(true)) .AddField(efb => efb.WithName("Abilitities").WithValue(string.Join(",\n", p.Abilities.Select(a => a.Value))).WithIsInline(true)) - .Build()); + ); return; } } - await channel.SendErrorAsync("No pokemon found."); + await Context.Channel.SendErrorAsync("No pokemon found."); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task PokemonAbility(IUserMessage umsg, [Remainder] string ability = null) + public async Task PokemonAbility([Remainder] string ability = null) { - var channel = (ITextChannel)umsg.Channel; - ability = ability?.Trim().ToUpperInvariant().Replace(" ", ""); if (string.IsNullOrWhiteSpace(ability)) return; @@ -81,15 +77,15 @@ namespace NadekoBot.Modules.Searches { if (kvp.Key.ToUpperInvariant() == ability) { - await channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) + await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle(kvp.Value.Name) .WithDescription(kvp.Value.Desc) .AddField(efb => efb.WithName("Rating").WithValue(kvp.Value.Rating.ToString()).WithIsInline(true)) - .Build()).ConfigureAwait(false); + ).ConfigureAwait(false); return; } } - await channel.SendErrorAsync("No ability found."); + await Context.Channel.SendErrorAsync("No ability found."); } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/StreamNotificationCommands.cs b/src/NadekoBot/Modules/Searches/Commands/StreamNotificationCommands.cs index b81626f2..99d2fd03 100644 --- a/src/NadekoBot/Modules/Searches/Commands/StreamNotificationCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/StreamNotificationCommands.cs @@ -1,4 +1,5 @@ ο»Ώusing Discord.Commands; +using Discord; using Newtonsoft.Json.Linq; using System; using System.Collections.Concurrent; @@ -67,7 +68,7 @@ namespace NadekoBot.Modules.Searches } [Group] - public class StreamNotificationCommands + public class StreamNotificationCommands : ModuleBase { private static Timer checkTimer { get; } private static ConcurrentDictionary oldCachedStatuses = new ConcurrentDictionary(); @@ -105,10 +106,10 @@ namespace NadekoBot.Modules.Searches oldStatus.IsLive != newStatus.IsLive) { var server = NadekoBot.Client.GetGuild(fs.GuildId); - var channel = server?.GetTextChannel(fs.ChannelId); + var channel = server?.GetTextChannelAsync(fs.ChannelId); if (channel == null) return; - try { await channel.EmbedAsync(fs.GetEmbed(newStatus).Build()).ConfigureAwait(false); } catch { } + try { await (await channel).EmbedAsync(fs.GetEmbed(newStatus)).ConfigureAwait(false); } catch { } } } catch { } @@ -192,66 +193,62 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Hitbox(IUserMessage msg, [Remainder] string username) => - await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Hitbox) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Hitbox([Remainder] string username) => + await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Hitbox) .ConfigureAwait(false); [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Twitch(IUserMessage msg, [Remainder] string username) => - await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Twitch) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Twitch([Remainder] string username) => + await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Twitch) .ConfigureAwait(false); [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task Beam(IUserMessage msg, [Remainder] string username) => - await TrackStream((ITextChannel)msg.Channel, username, FollowedStream.FollowedStreamType.Beam) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task Beam([Remainder] string username) => + await TrackStream((ITextChannel)Context.Channel, username, FollowedStream.FollowedStreamType.Beam) .ConfigureAwait(false); [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ListStreams(IUserMessage imsg) + public async Task ListStreams() { - var channel = (ITextChannel)imsg.Channel; - IEnumerable streams; using (var uow = DbHandler.UnitOfWork()) { streams = uow.GuildConfigs - .For(channel.Guild.Id, + .For(Context.Guild.Id, set => set.Include(gc => gc.FollowedStreams)) .FollowedStreams; } if (!streams.Any()) { - await channel.SendConfirmAsync("You are not following any streams on this server.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("You are not following any streams on this server.").ConfigureAwait(false); return; } var text = string.Join("\n", streams.Select(snc => { - return $"`{snc.Username}`'s stream on **{channel.Guild.GetTextChannel(snc.ChannelId)?.Name}** channel. 【`{snc.Type.ToString()}`】"; + return $"`{snc.Username}`'s stream on **{Context.Guild.GetTextChannel(snc.ChannelId)?.Name}** channel. 【`{snc.Type.ToString()}`】"; })); - await channel.SendConfirmAsync($"You are following **{streams.Count()}** streams on this server.\n\n" + text).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"You are following **{streams.Count()}** streams on this server.\n\n" + text).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.ManageMessages)] - public async Task RemoveStream(IUserMessage msg, FollowedStream.FollowedStreamType type, [Remainder] string username) + [RequireUserPermission(GuildPermission.ManageMessages)] + public async Task RemoveStream(FollowedStream.FollowedStreamType type, [Remainder] string username) { - var channel = (ITextChannel)msg.Channel; - username = username.ToLowerInvariant().Trim(); var fs = new FollowedStream() { - ChannelId = channel.Id, + ChannelId = Context.Channel.Id, Username = username, Type = type }; @@ -259,25 +256,23 @@ namespace NadekoBot.Modules.Searches bool removed; using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(channel.Guild.Id, set => set.Include(gc => gc.FollowedStreams)); + var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(gc => gc.FollowedStreams)); removed = config.FollowedStreams.Remove(fs); if (removed) await uow.CompleteAsync().ConfigureAwait(false); } if (!removed) { - await channel.SendErrorAsync("No such stream.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No such stream.").ConfigureAwait(false); return; } - await channel.SendConfirmAsync($"Removed `{username}`'s stream ({type}) from notifications.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"Removed `{username}`'s stream ({type}) from notifications.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task CheckStream(IUserMessage imsg, FollowedStream.FollowedStreamType platform, [Remainder] string username) { - var channel = (ITextChannel)imsg.Channel; - var stream = username?.Trim(); if (string.IsNullOrWhiteSpace(stream)) return; @@ -290,20 +285,20 @@ namespace NadekoBot.Modules.Searches })); if (streamStatus.IsLive) { - await channel.SendConfirmAsync($"Streamer {username} is online with {streamStatus.Views} viewers."); + await Context.Channel.SendConfirmAsync($"Streamer {username} is online with {streamStatus.Views} viewers."); } else { - await channel.SendConfirmAsync($"Streamer {username} is offline."); + await Context.Channel.SendConfirmAsync($"Streamer {username} is offline."); } } catch { - await channel.SendErrorAsync("No channel found."); + await Context.Channel.SendErrorAsync("No channel found."); } } - private async Task TrackStream(ITextChannel channel, string username, FollowedStream.FollowedStreamType type) + private static async Task TrackStream(ITextChannel channel, string username, FollowedStream.FollowedStreamType type) { username = username.ToLowerInvariant().Trim(); var fs = new FollowedStream @@ -332,7 +327,7 @@ namespace NadekoBot.Modules.Searches .Add(fs); await uow.CompleteAsync().ConfigureAwait(false); } - await channel.EmbedAsync(fs.GetEmbed(status).Build(), $"πŸ†— I will notify this channel when status changes.").ConfigureAwait(false); + await channel.EmbedAsync(fs.GetEmbed(status), $"πŸ†— I will notify this channel when status changes.").ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Searches/Commands/Translator.cs b/src/NadekoBot/Modules/Searches/Commands/Translator.cs index 31aaf147..113eca2f 100644 --- a/src/NadekoBot/Modules/Searches/Commands/Translator.cs +++ b/src/NadekoBot/Modules/Searches/Commands/Translator.cs @@ -6,6 +6,7 @@ using System; using System.Threading.Tasks; using System.Collections.Concurrent; using System.Linq; +using Discord.WebSocket; namespace NadekoBot.Modules.Searches { @@ -18,7 +19,7 @@ namespace NadekoBot.Modules.Searches } [Group] - public class TranslateCommands + public class TranslateCommands : ModuleBase { private static ConcurrentDictionary TranslatedChannels { get; } private static ConcurrentDictionary UserLanguages { get; } @@ -30,7 +31,7 @@ namespace NadekoBot.Modules.Searches NadekoBot.Client.MessageReceived += (msg) => { - var umsg = msg as IUserMessage; + var umsg = msg as SocketUserMessage; if(umsg == null) return Task.CompletedTask; @@ -52,7 +53,7 @@ namespace NadekoBot.Modules.Searches try { - var text = await TranslateInternal(umsg, langs, umsg.Resolve(UserMentionHandling.Ignore), true) + var text = await TranslateInternal(umsg, langs, umsg.Resolve(userHandling: TagHandling.Ignore), true) .ConfigureAwait(false); if (autoDelete) try { await umsg.DeleteAsync().ConfigureAwait(false); } catch { } @@ -69,11 +70,11 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Translate(IUserMessage umsg, string langs, [Remainder] string text = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); var translation = await TranslateInternal(umsg, langs, text); await channel.SendConfirmAsync("Translation " + langs, translation).ConfigureAwait(false); } @@ -104,11 +105,11 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] + [RequireUserPermission(GuildPermission.Administrator)] [OwnerOnly] - public async Task AutoTranslate(IUserMessage msg, AutoDeleteAutoTranslate autoDelete = AutoDeleteAutoTranslate.Nodel) + public async Task AutoTranslate(AutoDeleteAutoTranslate autoDelete = AutoDeleteAutoTranslate.Nodel) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; if (autoDelete == AutoDeleteAutoTranslate.Del) { @@ -131,20 +132,18 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task AutoTransLang(IUserMessage msg, [Remainder] string langs = null) + public async Task AutoTransLang([Remainder] string langs = null) { - var channel = (ITextChannel)msg.Channel; - var ucp = new UserChannelPair { - UserId = msg.Author.Id, - ChannelId = msg.Channel.Id, + UserId = Context.User.Id, + ChannelId = Context.Channel.Id, }; if (string.IsNullOrWhiteSpace(langs)) { if (UserLanguages.TryRemove(ucp, out langs)) - await channel.SendConfirmAsync($"{msg.Author.Mention}'s auto-translate language has been removed.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"{Context.User.Mention}'s auto-translate language has been removed.").ConfigureAwait(false); return; } @@ -156,22 +155,20 @@ namespace NadekoBot.Modules.Searches if (!GoogleTranslator.Instance.Languages.Contains(from) || !GoogleTranslator.Instance.Languages.Contains(to)) { - try { await channel.SendErrorAsync("Invalid source and/or target language.").ConfigureAwait(false); } catch { } + try { await Context.Channel.SendErrorAsync("Invalid source and/or target language.").ConfigureAwait(false); } catch { } return; } UserLanguages.AddOrUpdate(ucp, langs, (key, val) => langs); - await channel.SendConfirmAsync($"Your auto-translate language has been set to {from}>{to}").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"Your auto-translate language has been set to {from}>{to}").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Translangs(IUserMessage umsg) + public async Task Translangs() { - var channel = (ITextChannel)umsg.Channel; - - await channel.SendTableAsync(GoogleTranslator.Instance.Languages, str => $"{str,-15}", columns: 3); + await Context.Channel.SendTableAsync(GoogleTranslator.Instance.Languages, str => $"{str,-15}", columns: 3); } } diff --git a/src/NadekoBot/Modules/Searches/Commands/XkcdCommands.cs b/src/NadekoBot/Modules/Searches/Commands/XkcdCommands.cs index f5700698..f6b0ad98 100644 --- a/src/NadekoBot/Modules/Searches/Commands/XkcdCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/XkcdCommands.cs @@ -12,24 +12,21 @@ namespace NadekoBot.Modules.Searches public partial class Searches { [Group] - public class XkcdCommands + public class XkcdCommands : ModuleBase { private const string xkcdUrl = "https://xkcd.com"; [NadekoCommand, Usage, Description, Aliases] - [RequireContext(ContextType.Guild)] [Priority(1)] - public async Task Xkcd(IUserMessage msg, string arg = null) + public async Task Xkcd(string arg = null) { - var channel = (ITextChannel)msg.Channel; - if (arg?.ToLowerInvariant().Trim() == "latest") { using (var http = new HttpClient()) { var res = await http.GetStringAsync($"{xkcdUrl}/info.0.json").ConfigureAwait(false); var comic = JsonConvert.DeserializeObject(res); - var sent = await channel.SendMessageAsync($"{msg.Author.Mention} " + comic.ToString()) + var sent = await Context.Channel.SendMessageAsync($"{Context.User.Mention} " + comic.ToString()) .ConfigureAwait(false); await Task.Delay(10000).ConfigureAwait(false); @@ -38,16 +35,13 @@ namespace NadekoBot.Modules.Searches } return; } - await Xkcd(msg, new NadekoRandom().Next(1, 1750)).ConfigureAwait(false); + await Xkcd(new NadekoRandom().Next(1, 1750)).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] - [RequireContext(ContextType.Guild)] [Priority(0)] - public async Task Xkcd(IUserMessage msg, int num) + public async Task Xkcd(int num) { - var channel = (ITextChannel)msg.Channel; - if (num < 1) return; @@ -57,16 +51,16 @@ namespace NadekoBot.Modules.Searches var comic = JsonConvert.DeserializeObject(res); var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor) - .WithImage(eib => eib.WithUrl(comic.ImageLink)) + .WithImageUrl(comic.ImageLink) .WithAuthor(eab => eab.WithName(comic.Title).WithUrl($"{xkcdUrl}/{num}").WithIconUrl("http://xkcd.com/s/919f27.ico")) .AddField(efb => efb.WithName("Comic#").WithValue(comic.Num.ToString()).WithIsInline(true)) .AddField(efb => efb.WithName("Date").WithValue($"{comic.Month}/{comic.Year}").WithIsInline(true)); - var sent = await channel.EmbedAsync(embed.Build()) + var sent = await Context.Channel.EmbedAsync(embed) .ConfigureAwait(false); await Task.Delay(10000).ConfigureAwait(false); - await sent.ModifyAsync(m => m.Embed = embed.AddField(efb => efb.WithName("Alt").WithValue(comic.Alt.ToString()).WithIsInline(false)).Build()); + await sent.ModifyAsync(m => m.Embed = embed.AddField(efb => efb.WithName("Alt").WithValue(comic.Alt.ToString()).WithIsInline(false))); } } } diff --git a/src/NadekoBot/Modules/Searches/Searches.cs b/src/NadekoBot/Modules/Searches/Searches.cs index a3f5eb0e..98ce1f78 100644 --- a/src/NadekoBot/Modules/Searches/Searches.cs +++ b/src/NadekoBot/Modules/Searches/Searches.cs @@ -27,7 +27,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Weather(IUserMessage umsg, string city, string country) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; city = city.Replace(" ", ""); country = city.Replace(" ", ""); string response; @@ -47,14 +47,14 @@ namespace NadekoBot.Modules.Searches .AddField(fb => fb.WithName("πŸŒ„ **Sunrise**").WithValue($"{obj["sunrise"]}").WithIsInline(true)) .AddField(fb => fb.WithName("πŸŒ‡ **Sunset**").WithValue($"{obj["sunset"]}").WithIsInline(true)) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] public async Task Youtube(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return; var result = (await NadekoBot.Google.GetVideosByKeywordsAsync(query, 1)).FirstOrDefault(); if (string.IsNullOrWhiteSpace(result)) @@ -72,10 +72,10 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Imdb(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (!(await ValidateQuery(channel, query).ConfigureAwait(false))) return; - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); var movie = await OmdbProvider.FindMovie(query); if (movie == null) @@ -88,9 +88,9 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task RandomCat(IUserMessage umsg) + public async Task RandomCat() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var http = new HttpClient()) { var res = JObject.Parse(await http.GetStringAsync("http://www.random.cat/meow").ConfigureAwait(false)); @@ -100,9 +100,9 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task RandomDog(IUserMessage umsg) + public async Task RandomDog() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var http = new HttpClient()) { await channel.SendMessageAsync("http://random.dog/" + await http.GetStringAsync("http://random.dog/woof") @@ -114,7 +114,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task I(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(query)) return; @@ -145,7 +145,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Ir(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(query)) return; @@ -178,7 +178,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Lmgtfy(IUserMessage umsg, [Remainder] string ffs = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(ffs)) @@ -190,7 +190,7 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Shorten(IUserMessage msg, [Remainder] string arg) + public async Task Shorten([Remainder] string arg) { if (string.IsNullOrWhiteSpace(arg)) return; @@ -199,15 +199,14 @@ namespace NadekoBot.Modules.Searches if (shortened == arg) { - await msg.Channel.SendErrorAsync("Failed to shorten that url.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Failed to shorten that url.").ConfigureAwait(false); } - await msg.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) + await Context.Channel.EmbedAsync(new EmbedBuilder().WithColor(NadekoBot.OkColor) .AddField(efb => efb.WithName("Original Url") .WithValue($"<{arg}>")) .AddField(efb => efb.WithName("Short Url") - .WithValue($"<{shortened}>")) - .Build()) + .WithValue($"<{shortened}>"))) .ConfigureAwait(false); } @@ -215,7 +214,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Google(IUserMessage umsg, [Remainder] string terms = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; terms = terms?.Trim(); if (string.IsNullOrWhiteSpace(terms)) @@ -229,7 +228,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task MagicTheGathering(IUserMessage umsg, [Remainder] string name = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = name; if (string.IsNullOrWhiteSpace(arg)) { @@ -237,7 +236,7 @@ namespace NadekoBot.Modules.Searches return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); string response = ""; using (var http = new HttpClient()) { @@ -258,13 +257,13 @@ namespace NadekoBot.Modules.Searches var embed = new EmbedBuilder().WithColor(NadekoBot.OkColor) .WithTitle(item["name"].ToString()) .WithDescription(desc) - .WithImage(eib => eib.WithUrl(img)) + .WithImageUrl(img) .AddField(efb => efb.WithName("Store Url").WithValue(storeUrl).WithIsInline(true)) .AddField(efb => efb.WithName("Cost").WithValue(cost).WithIsInline(true)) .AddField(efb => efb.WithName("Types").WithValue(types).WithIsInline(true)); //.AddField(efb => efb.WithName("Store Url").WithValue(await NadekoBot.Google.ShortenUrl(items[0]["store_url"].ToString())).WithIsInline(true)); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } catch { @@ -277,7 +276,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Hearthstone(IUserMessage umsg, [Remainder] string name = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = name; if (string.IsNullOrWhiteSpace(arg)) { @@ -291,7 +290,7 @@ namespace NadekoBot.Modules.Searches return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); string response = ""; using (var http = new HttpClient()) { @@ -321,7 +320,7 @@ namespace NadekoBot.Modules.Searches msg = "⚠ Found over 4 images. Showing random 4."; } var ms = new MemoryStream(); - images.Merge().SaveAsPng(ms); + images.AsEnumerable().Merge().SaveAsPng(ms); ms.Position = 0; await channel.SendFileAsync(ms, arg + ".png", msg).ConfigureAwait(false); } @@ -337,7 +336,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Yodify(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey)) { @@ -351,7 +350,7 @@ namespace NadekoBot.Modules.Searches await channel.SendErrorAsync("Please enter a sentence.").ConfigureAwait(false); return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); @@ -365,7 +364,7 @@ namespace NadekoBot.Modules.Searches .WithAuthor(au => au.WithName("Yoda").WithIconUrl("http://www.yodaspeak.co.uk/yoda-small1.gif")) .WithDescription(res) .WithColor(NadekoBot.OkColor); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } catch { @@ -378,7 +377,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task UrbanDict(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.MashapeKey)) { @@ -392,7 +391,7 @@ namespace NadekoBot.Modules.Searches await channel.SendErrorAsync("Please enter a search term.").ConfigureAwait(false); return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); @@ -409,7 +408,7 @@ namespace NadekoBot.Modules.Searches .WithUrl(link) .WithAuthor(eab => eab.WithIconUrl("http://i.imgur.com/nwERwQE.jpg").WithName(word)) .WithDescription(def); - await channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await channel.EmbedAsync(embed).ConfigureAwait(false); } catch { @@ -422,7 +421,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Hashtag(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = query; if (string.IsNullOrWhiteSpace(arg)) @@ -436,7 +435,7 @@ namespace NadekoBot.Modules.Searches return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); string res = ""; using (var http = new HttpClient()) { @@ -456,8 +455,7 @@ namespace NadekoBot.Modules.Searches .WithAuthor(eab => eab.WithUrl(link) .WithIconUrl("http://res.cloudinary.com/urbandictionary/image/upload/a_exif,c_fit,h_200,w_200/v1394975045/b8oszuu3tbq7ebyo7vo1.jpg") .WithName(query)) - .WithDescription(desc) - .Build()); + .WithDescription(desc)); } catch { @@ -467,9 +465,9 @@ namespace NadekoBot.Modules.Searches [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Catfact(IUserMessage umsg) + public async Task Catfact() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; using (var http = new HttpClient()) { var response = await http.GetStringAsync("http://catfacts-api.appspot.com/api/facts").ConfigureAwait(false); @@ -485,10 +483,10 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Revav(IUserMessage umsg, [Remainder] IUser usr = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (usr == null) - usr = umsg.Author; + usr = Context.User; await channel.SendConfirmAsync($"https://images.google.com/searchbyimage?image_url={usr.AvatarUrl}").ConfigureAwait(false); } @@ -496,7 +494,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Revimg(IUserMessage umsg, [Remainder] string imageLink = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; imageLink = imageLink?.Trim() ?? ""; if (string.IsNullOrWhiteSpace(imageLink)) @@ -508,7 +506,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Safebooru(IUserMessage umsg, [Remainder] string tag = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; tag = tag?.Trim() ?? ""; var link = await GetSafebooruImageLink(tag).ConfigureAwait(false); @@ -522,7 +520,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Wiki(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; query = query?.Trim(); if (string.IsNullOrWhiteSpace(query)) @@ -542,7 +540,7 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Color(IUserMessage umsg, [Remainder] string color = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; color = color?.Trim().Replace("#", ""); if (string.IsNullOrWhiteSpace((string)color)) @@ -562,11 +560,11 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Videocall(IUserMessage umsg, [Remainder] string arg = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; try { - var allUsrs = umsg.MentionedUsers.Append(umsg.Author); + var allUsrs = umsg.MentionedUsers.Append(Context.User); var allUsrsArray = allUsrs.ToArray(); var str = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Username[0].ToString())); str += new NadekoRandom().Next(); @@ -585,9 +583,9 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Avatar(IUserMessage umsg, [Remainder] string mention = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; - var usr = umsg.MentionedUsers.FirstOrDefault(); + var usr = umsg.MentionedUsers().FirstOrDefault(); if (usr == null) { await channel.SendErrorAsync("Invalid user specified.").ConfigureAwait(false); @@ -616,13 +614,13 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task Wikia(IUserMessage umsg, string target, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(target) || string.IsNullOrWhiteSpace(query)) { await channel.SendErrorAsync("Please enter a target wikia, followed by search query.").ConfigureAwait(false); return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); @@ -647,14 +645,14 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task MCPing(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = query; if (string.IsNullOrWhiteSpace(arg)) { await channel.SendErrorAsync("πŸ’’ Please enter a `ip:port`.").ConfigureAwait(false); return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); @@ -684,14 +682,14 @@ namespace NadekoBot.Modules.Searches [RequireContext(ContextType.Guild)] public async Task MCQ(IUserMessage umsg, [Remainder] string query = null) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var arg = query; if (string.IsNullOrWhiteSpace(arg)) { await channel.SendErrorAsync("Please enter `ip:port`.").ConfigureAwait(false); return; } - await umsg.Channel.TriggerTypingAsync().ConfigureAwait(false); + await Context.Channel.TriggerTypingAsync().ConfigureAwait(false); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); diff --git a/src/NadekoBot/Modules/Trello/Trello.cs b/src/NadekoBot/Modules/Trello/Trello.cs index fbda6fab..c3a7863f 100644 --- a/src/NadekoBot/Modules/Trello/Trello.cs +++ b/src/NadekoBot/Modules/Trello/Trello.cs @@ -75,7 +75,7 @@ // .Parameter("board_id", Discord.Commands.ParameterType.Required) // .Do(async e => // { -// if (!NadekoBot.IsOwner(umsg.Author.Id)) return; +// if (!NadekoBot.IsOwner(Context.User.Id)) return; // if (bound != null) return; // try // { @@ -95,7 +95,7 @@ // .Description($"Unbinds a bot from the channel and board. **Bot Owner Only!**| `{Prefix}unbind`") // .Do(async e => // { -// if (!NadekoBot.IsOwner(umsg.Author.Id)) return; +// if (!NadekoBot.IsOwner(Context.User.Id)) return; // if (bound == null || bound != e.Channel) return; // t.Stop(); // bound = null; @@ -109,7 +109,7 @@ // .Description($"Lists all lists, yo ;) **Bot Owner Only!**| `{Prefix}list`") // .Do(async e => // { -// if (!NadekoBot.IsOwner(umsg.Author.Id)) return; +// if (!NadekoBot.IsOwner(Context.User.Id)) return; // if (bound == null || board == null || bound != e.Channel) return; // await channel.SendMessageAsync("Lists for a board '" + board.Name + "'\n" + string.Join("\n", board.Lists.Select(l => "**β€’ " + l.ToString() + "**"))) // .ConfigureAwait(false); @@ -120,7 +120,7 @@ // .Parameter("list_name", Discord.Commands.ParameterType.Unparsed) // .Do(async e => // { -// if (!NadekoBot.IsOwner(umsg.Author.Id)) return; +// if (!NadekoBot.IsOwner(Context.User.Id)) return; // if (bound == null || board == null || bound != e.Channel || list_name == null) return; // int num; diff --git a/src/NadekoBot/Modules/Utility/Commands/CalcCommand.cs b/src/NadekoBot/Modules/Utility/Commands/CalcCommand.cs index 31a91f6f..0f90db17 100644 --- a/src/NadekoBot/Modules/Utility/Commands/CalcCommand.cs +++ b/src/NadekoBot/Modules/Utility/Commands/CalcCommand.cs @@ -16,15 +16,15 @@ namespace NadekoBot.Modules.Utility { [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public static async Task Calculate(IUserMessage msg, [Remainder] string expression) + public async Task Calculate([Remainder] string expression) { var expr = new NCalc.Expression(expression, NCalc.EvaluateOptions.IgnoreCase); expr.EvaluateParameter += Expr_EvaluateParameter; var result = expr.Evaluate(); if (expr.Error == null) - await msg.Channel.SendConfirmAsync("Result", $"{result}"); + await Context.Channel.SendConfirmAsync("Result", $"{result}"); else - await msg.Channel.SendErrorAsync($"βš™ Error", expr.Error); + await Context.Channel.SendErrorAsync($"βš™ Error", expr.Error); } private static void Expr_EvaluateParameter(string name, NCalc.ParameterArgs args) @@ -39,7 +39,7 @@ namespace NadekoBot.Modules.Utility [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task CalcOps(IUserMessage msg) + public async Task CalcOps() { var selection = typeof(Math).GetTypeInfo().GetMethods().Except(typeof(object).GetTypeInfo().GetMethods()).Distinct(new MethodInfoEqualityComparer()).Select(x => { @@ -49,7 +49,7 @@ namespace NadekoBot.Modules.Utility "Equals", "GetHashCode", "GetType"}); - await msg.Channel.SendConfirmAsync(string.Join(", ",selection)); + await Context.Channel.SendConfirmAsync(string.Join(", ",selection)); } } diff --git a/src/NadekoBot/Modules/Utility/Commands/InfoCommands.cs b/src/NadekoBot/Modules/Utility/Commands/InfoCommands.cs index 740b18e0..9c01b77c 100644 --- a/src/NadekoBot/Modules/Utility/Commands/InfoCommands.cs +++ b/src/NadekoBot/Modules/Utility/Commands/InfoCommands.cs @@ -14,9 +14,9 @@ namespace NadekoBot.Modules.Utility { [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ServerInfo(IUserMessage msg, string guildName = null) + public async Task ServerInfo(string guildName = null) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; guildName = guildName?.ToUpperInvariant(); IGuild guild; if (string.IsNullOrWhiteSpace(guildName)) @@ -43,24 +43,24 @@ namespace NadekoBot.Modules.Utility .AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true)) .AddField(fb => fb.WithName("**Region**").WithValue(guild.VoiceRegionId.ToString()).WithIsInline(true)) .AddField(fb => fb.WithName("**Roles**").WithValue(guild.Roles.Count().ToString()).WithIsInline(true)) - .WithImage(tn => tn.WithUrl(guild.IconUrl)) + .WithImageUrl(guild.IconUrl) .WithColor(NadekoBot.OkColor); if (guild.Emojis.Count() > 0) { embed.AddField(fb => fb.WithName("**Custom Emojis**").WithValue(Format.Italics(string.Join(", ", guild.Emojis))).WithIsInline(true)); } - await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChannelInfo(IUserMessage msg, ITextChannel channel = null) + public async Task ChannelInfo(ITextChannel channel = null) { - var ch = channel ?? (ITextChannel)msg.Channel; + var ch = channel ?? (ITextChannel)Context.Channel; if (ch == null) return; var createdAt = new DateTime(2015, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(ch.Id >> 22); - var usercount = (await ch.GetUsersAsync()).Count(); + var usercount = (await ch.GetUsersAsync().Flatten()).Count(); var embed = new EmbedBuilder() .WithTitle(ch.Name) .WithDescription(ch.Topic?.SanitizeMentions()) @@ -68,15 +68,15 @@ namespace NadekoBot.Modules.Utility .AddField(fb => fb.WithName("**Created At**").WithValue($"{createdAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true)) .AddField(fb => fb.WithName("**Users**").WithValue(usercount.ToString()).WithIsInline(true)) .WithColor(NadekoBot.OkColor); - await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task UserInfo(IUserMessage msg, IGuildUser usr = null) + public async Task UserInfo(IGuildUser usr = null) { - var channel = (ITextChannel)msg.Channel; - var user = usr ?? msg.Author as IGuildUser; + var channel = (ITextChannel)Context.Channel; + var user = usr ?? Context.User as IGuildUser; if (user == null) return; @@ -89,11 +89,11 @@ namespace NadekoBot.Modules.Utility embed.AddField(fb => fb.WithName("**ID**").WithValue(user.Id.ToString()).WithIsInline(true)) .AddField(fb => fb.WithName("**Joined Server**").WithValue($"{user.JoinedAt?.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true)) .AddField(fb => fb.WithName("**Joined Discord**").WithValue($"{user.CreatedAt.ToString("dd.MM.yyyy HH:mm")}").WithIsInline(true)) - .AddField(fb => fb.WithName("**Current Game**").WithValue($"{(user.Game?.Name == null ? "-" : user.Game.Name)}").WithIsInline(true)) - .AddField(fb => fb.WithName("**Roles**").WithValue($"**({user.Roles.Count()})** - {string.Join(", ", user.Roles.Select(r => r.Name)).SanitizeMentions()}").WithIsInline(true)) + .AddField(fb => fb.WithName("**Current Game**").WithValue($"{(user.Game?.Name == null ? "-" : user.Game.Value.Name)}").WithIsInline(true)) + .AddField(fb => fb.WithName("**Roles**").WithValue($"**({user.RoleIds.Count})** - {string.Join(", ", user.Roles.Select(r => r.Name)).SanitizeMentions()}").WithIsInline(true)) .WithThumbnail(tn => tn.WithUrl(user.AvatarUrl)) .WithColor(NadekoBot.OkColor); - await msg.Channel.EmbedAsync(embed.Build()).ConfigureAwait(false); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } } } diff --git a/src/NadekoBot/Modules/Utility/Commands/QuoteCommands.cs b/src/NadekoBot/Modules/Utility/Commands/QuoteCommands.cs index 41ce9aa8..1162f3d7 100644 --- a/src/NadekoBot/Modules/Utility/Commands/QuoteCommands.cs +++ b/src/NadekoBot/Modules/Utility/Commands/QuoteCommands.cs @@ -15,10 +15,8 @@ namespace NadekoBot.Modules.Utility { [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ListQuotes(IUserMessage imsg, int page = 1) + public async Task ListQuotes(int page = 1) { - var channel = (ITextChannel)imsg.Channel; - page -= 1; if (page < 0) @@ -27,22 +25,20 @@ namespace NadekoBot.Modules.Utility IEnumerable quotes; using (var uow = DbHandler.UnitOfWork()) { - quotes = uow.Quotes.GetGroup(channel.Guild.Id, page * 16, 16); + quotes = uow.Quotes.GetGroup(Context.Guild.Id, page * 16, 16); } if (quotes.Any()) - await channel.SendConfirmAsync($"πŸ’¬ **Page {page + 1} of quotes:**\n```xl\n" + String.Join("\n", quotes.Select((q) => $"{q.Keyword,-20} by {q.AuthorName}")) + "\n```") + await Context.Channel.SendConfirmAsync($"πŸ’¬ **Page {page + 1} of quotes:**\n```xl\n" + String.Join("\n", quotes.Select((q) => $"{q.Keyword,-20} by {q.AuthorName}")) + "\n```") .ConfigureAwait(false); else - await channel.SendErrorAsync("No quotes on this page.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("No quotes on this page.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ShowQuote(IUserMessage umsg, [Remainder] string keyword) + public async Task ShowQuote([Remainder] string keyword) { - var channel = (ITextChannel)umsg.Channel; - if (string.IsNullOrWhiteSpace(keyword)) return; @@ -51,21 +47,19 @@ namespace NadekoBot.Modules.Utility Quote quote; using (var uow = DbHandler.Instance.GetUnitOfWork()) { - quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(channel.Guild.Id, keyword).ConfigureAwait(false); + quote = await uow.Quotes.GetRandomQuoteByKeywordAsync(Context.Guild.Id, keyword).ConfigureAwait(false); } if (quote == null) return; - await channel.SendMessageAsync("πŸ“£ " + quote.Text.SanitizeMentions()); + await Context.Channel.SendMessageAsync("πŸ“£ " + quote.Text.SanitizeMentions()); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task AddQuote(IUserMessage umsg, string keyword, [Remainder] string text) + public async Task AddQuote(string keyword, [Remainder] string text) { - var channel = (ITextChannel)umsg.Channel; - if (string.IsNullOrWhiteSpace(keyword) || string.IsNullOrWhiteSpace(text)) return; @@ -75,56 +69,52 @@ namespace NadekoBot.Modules.Utility { uow.Quotes.Add(new Quote { - AuthorId = umsg.Author.Id, - AuthorName = umsg.Author.Username, - GuildId = channel.Guild.Id, + AuthorId = Context.Message.Author.Id, + AuthorName = Context.Message.Author.Username, + GuildId = Context.Guild.Id, Keyword = keyword, Text = text, }); await uow.CompleteAsync().ConfigureAwait(false); } - await channel.SendConfirmAsync("βœ… Quote added.").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync("βœ… Quote added.").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task DeleteQuote(IUserMessage umsg, [Remainder] string keyword) + public async Task DeleteQuote([Remainder] string keyword) { - var channel = (ITextChannel)umsg.Channel; - if (string.IsNullOrWhiteSpace(keyword)) return; - var isAdmin = ((IGuildUser)umsg.Author).GuildPermissions.Administrator; + var isAdmin = ((IGuildUser)Context.Message.Author).GuildPermissions.Administrator; keyword = keyword.ToUpperInvariant(); string response; using (var uow = DbHandler.UnitOfWork()) { - var qs = uow.Quotes.GetAllQuotesByKeyword(channel.Guild.Id, keyword); + var qs = uow.Quotes.GetAllQuotesByKeyword(Context.Guild.Id, keyword); if (qs==null || !qs.Any()) { - await channel.SendErrorAsync("No quotes found."); + await Context.Channel.SendErrorAsync("No quotes found.").ConfigureAwait(false); return; } - var q = qs.Shuffle().FirstOrDefault(elem => isAdmin || elem.AuthorId == umsg.Author.Id); + var q = qs.Shuffle().FirstOrDefault(elem => isAdmin || elem.AuthorId == Context.Message.Author.Id); uow.Quotes.Remove(q); await uow.CompleteAsync().ConfigureAwait(false); response = "πŸ—‘ **Deleted a random quote.**"; } - await channel.SendConfirmAsync(response); + await Context.Channel.SendConfirmAsync(response); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - [RequirePermission(GuildPermission.Administrator)] - public async Task DelAllQuotes(IUserMessage umsg, [Remainder] string keyword) + [RequireUserPermission(GuildPermission.Administrator)] + public async Task DelAllQuotes([Remainder] string keyword) { - var channel = (ITextChannel)umsg.Channel; - if (string.IsNullOrWhiteSpace(keyword)) return; @@ -132,14 +122,14 @@ namespace NadekoBot.Modules.Utility using (var uow = DbHandler.UnitOfWork()) { - var quotes = uow.Quotes.GetAllQuotesByKeyword(channel.Guild.Id, keyword); + var quotes = uow.Quotes.GetAllQuotesByKeyword(Context.Guild.Id, keyword); uow.Quotes.RemoveRange(quotes.ToArray());//wtf?! await uow.CompleteAsync(); } - await channel.SendConfirmAsync($"πŸ—‘ **Deleted all quotes** with **{keyword}** keyword."); + await Context.Channel.SendConfirmAsync($"πŸ—‘ **Deleted all quotes** with **{keyword}** keyword."); } } } diff --git a/src/NadekoBot/Modules/Utility/Commands/Remind.cs b/src/NadekoBot/Modules/Utility/Commands/Remind.cs index 60ba241a..2f0300a4 100644 --- a/src/NadekoBot/Modules/Utility/Commands/Remind.cs +++ b/src/NadekoBot/Modules/Utility/Commands/Remind.cs @@ -17,7 +17,7 @@ namespace NadekoBot.Modules.Utility public partial class Utility { [Group] - public class RemindCommands + public class RemindCommands : ModuleBase { Regex regex = new Regex(@"^(?:(?\d)mo)?(?:(?\d)w)?(?:(?\d{1,2})d)?(?:(?\d{1,2})h)?(?:(?\d{1,2})m)?$", @@ -62,14 +62,16 @@ namespace NadekoBot.Modules.Utility await Task.Delay(time); try { - IMessageChannel ch; + IMessageChannel ch = null; if (r.IsPrivate) { ch = await NadekoBot.Client.GetDMChannelAsync(r.ChannelId).ConfigureAwait(false); } else { - ch = NadekoBot.Client.GetGuild(r.ServerId)?.GetTextChannel(r.ChannelId); + var t = NadekoBot.Client.GetGuild(r.ServerId)?.GetTextChannelAsync(r.ChannelId).ConfigureAwait(false); + if (t != null) + ch = await t.Value; } if (ch == null) return; @@ -101,16 +103,14 @@ namespace NadekoBot.Modules.Utility [Priority(1)] public async Task Remind(IUserMessage umsg, MeOrHere meorhere, string timeStr, [Remainder] string message) { - var channel = (ITextChannel)umsg.Channel; - IMessageChannel target; if (meorhere == MeOrHere.Me) { - target = await ((IGuildUser)umsg.Author).CreateDMChannelAsync().ConfigureAwait(false); + target = await ((IGuildUser)Context.User).CreateDMChannelAsync().ConfigureAwait(false); } else { - target = channel; + target = Context.Channel; } await Remind(umsg, target, timeStr, message).ConfigureAwait(false); } @@ -120,11 +120,11 @@ namespace NadekoBot.Modules.Utility [Priority(0)] public async Task Remind(IUserMessage umsg, IMessageChannel ch, string timeStr, [Remainder] string message) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (ch == null) { - await channel.SendErrorAsync($"{umsg.Author.Mention} Something went wrong (channel cannot be found) ;(").ConfigureAwait(false); + await channel.SendErrorAsync($"{Context.User.Mention} Something went wrong (channel cannot be found) ;(").ConfigureAwait(false); return; } @@ -177,7 +177,7 @@ namespace NadekoBot.Modules.Utility IsPrivate = ch is IDMChannel, When = time, Message = message, - UserId = umsg.Author.Id, + UserId = Context.User.Id, ServerId = channel.Guild.Id }; @@ -187,7 +187,7 @@ namespace NadekoBot.Modules.Utility await uow.CompleteAsync(); } - try { await channel.SendConfirmAsync($"⏰ I will remind **\"{(ch is ITextChannel ? ((ITextChannel)ch).Name : umsg.Author.Username)}\"** to **\"{message.SanitizeMentions()}\"** in **{output}** `({time:d.M.yyyy.} at {time:HH:mm})`").ConfigureAwait(false); } catch { } + try { await channel.SendConfirmAsync($"⏰ I will remind **\"{(ch is ITextChannel ? ((ITextChannel)ch).Name : Context.User.Username)}\"** to **\"{message.SanitizeMentions()}\"** in **{output}** `({time:d.M.yyyy.} at {time:HH:mm})`").ConfigureAwait(false); } catch { } await StartReminder(rem); } @@ -196,7 +196,7 @@ namespace NadekoBot.Modules.Utility [OwnerOnly] public async Task RemindTemplate(IUserMessage umsg, [Remainder] string arg) { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; if (string.IsNullOrWhiteSpace(arg)) return; diff --git a/src/NadekoBot/Modules/Utility/Commands/UnitConversion.cs b/src/NadekoBot/Modules/Utility/Commands/UnitConversion.cs index 3468a15f..4238bcad 100644 --- a/src/NadekoBot/Modules/Utility/Commands/UnitConversion.cs +++ b/src/NadekoBot/Modules/Utility/Commands/UnitConversion.cs @@ -21,7 +21,7 @@ namespace NadekoBot.Modules.Utility public partial class Utility { [Group] - public class UnitConverterCommands + public class UnitConverterCommands : ModuleBase { public static List Units { get; set; } = new List(); @@ -102,7 +102,7 @@ namespace NadekoBot.Modules.Utility } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ConvertList(IUserMessage msg) + public async Task ConvertList() { var res = Units.GroupBy(x => x.UnitType) .Aggregate(new EmbedBuilder().WithTitle("__Units which can be used by the converter__") @@ -111,21 +111,21 @@ namespace NadekoBot.Modules.Utility efb.WithName(g.Key.ToTitleCase()) .WithValue(String.Join(", ", g.Select(x => x.Triggers.FirstOrDefault()) .OrderBy(x => x))))); - await msg.Channel.EmbedAsync(res.Build()); + await Context.Channel.EmbedAsync(res); } [NadekoCommand, Usage, Description, Aliases] - public async Task Convert(IUserMessage msg, string origin, string target, decimal value) + public async Task Convert(string origin, string target, decimal value) { var originUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(origin.ToLowerInvariant())); var targetUnit = Units.Find(x => x.Triggers.Select(y => y.ToLowerInvariant()).Contains(target.ToLowerInvariant())); if (originUnit == null || targetUnit == null) { - await msg.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: units not found", origin, target)); + await Context.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: units not found", origin, target)); return; } if (originUnit.UnitType != targetUnit.UnitType) { - await msg.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First())); + await Context.Channel.SendErrorAsync(string.Format("Cannot convert {0} to {1}: types of unit are not equal", originUnit.Triggers.First(), targetUnit.Triggers.First())); return; } decimal res; @@ -169,7 +169,7 @@ namespace NadekoBot.Modules.Utility } res = Math.Round(res, 4); - await msg.Channel.SendConfirmAsync(string.Format("{0} {1} is equal to {2} {3}", value, (originUnit.Triggers.First() + "s").SnPl(value.IsInteger() ? (int)value : 2), res, (targetUnit.Triggers.First() + "s").SnPl(res.IsInteger() ? (int)res : 2))); + await Context.Channel.SendConfirmAsync(string.Format("{0} {1} is equal to {2} {3}", value, (originUnit.Triggers.First() + "s").SnPl(value.IsInteger() ? (int)value : 2), res, (targetUnit.Triggers.First() + "s").SnPl(res.IsInteger() ? (int)res : 2))); } } diff --git a/src/NadekoBot/Modules/Utility/Utility.cs b/src/NadekoBot/Modules/Utility/Utility.cs index 1e6fce9c..f91d8a02 100644 --- a/src/NadekoBot/Modules/Utility/Utility.cs +++ b/src/NadekoBot/Modules/Utility/Utility.cs @@ -18,7 +18,6 @@ using EmbedField = Discord.API.EmbedField; namespace NadekoBot.Modules.Utility { - [NadekoModule("Utility", ".")] public partial class Utility : DiscordModule { @@ -29,103 +28,101 @@ namespace NadekoBot.Modules.Utility [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task WhosPlaying(IUserMessage umsg, [Remainder] string game = null) + public async Task WhosPlaying([Remainder] string game = null) { - var channel = (ITextChannel)umsg.Channel; game = game.Trim().ToUpperInvariant(); if (string.IsNullOrWhiteSpace(game)) return; - var arr = (await (umsg.Channel as IGuildChannel).Guild.GetUsersAsync()) + var arr = (await (Context.Channel as IGuildChannel).Guild.GetUsersAsync()) .Where(u => u.Game?.Name?.ToUpperInvariant() == game) .Select(u => u.Username) .ToList(); int i = 0; if (!arr.Any()) - await channel.SendErrorAsync("Nobody is playing that game.").ConfigureAwait(false); + await Context.Channel.SendErrorAsync("Nobody is playing that game.").ConfigureAwait(false); else - await channel.SendConfirmAsync("```css\n" + string.Join("\n", arr.GroupBy(item => (i++) / 2) + await Context.Channel.SendConfirmAsync("```css\n" + string.Join("\n", arr.GroupBy(item => (i++) / 2) .Select(ig => string.Concat(ig.Select(el => $"β€’ {el,-27}")))) + "\n```") .ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task InRole(IUserMessage umsg, [Remainder] string roles) + public async Task InRole([Remainder] string roles) { if (string.IsNullOrWhiteSpace(roles)) return; - var channel = (ITextChannel)umsg.Channel; var arg = roles.Split(',').Select(r => r.Trim().ToUpperInvariant()); string send = "ℹ️ **Here is a list of users in those roles:**"; foreach (var roleStr in arg.Where(str => !string.IsNullOrWhiteSpace(str) && str != "@EVERYONE" && str != "EVERYONE")) { - var role = channel.Guild.Roles.Where(r => r.Name.ToUpperInvariant() == roleStr).FirstOrDefault(); + var role = Context.Guild.Roles.Where(r => r.Name.ToUpperInvariant() == roleStr).FirstOrDefault(); if (role == null) continue; send += $"```css\n[{role.Name}]\n"; - send += string.Join(", ", channel.Guild.GetUsers().Where(u => u.Roles.Contains(role)).Select(u => u.ToString())); + send += string.Join(", ", (await Context.Guild.GetUsersAsync()).Where(u => u.Roles.Contains(role)).Select(u => u.ToString())); send += $"\n```"; } - var usr = umsg.Author as IGuildUser; + var usr = Context.User as IGuildUser; while (send.Length > 2000) { - if (!usr.GetPermissions(channel).ManageMessages) + if (!usr.GetPermissions((ITextChannel)Context.Channel).ManageMessages) { - await channel.SendErrorAsync($"⚠️ {usr.Mention} **you are not allowed to use this command on roles with a lot of users in them to prevent abuse.**").ConfigureAwait(false); + await Context.Channel.SendErrorAsync($"⚠️ {usr.Mention} **you are not allowed to use this command on roles with a lot of users in them to prevent abuse.**").ConfigureAwait(false); return; } var curstr = send.Substring(0, 2000); - await channel.SendConfirmAsync(curstr.Substring(0, + await Context.Channel.SendConfirmAsync(curstr.Substring(0, curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false); send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) + send.Substring(2000); } - await channel.SendConfirmAsync(send).ConfigureAwait(false); + await Context.Channel.SendConfirmAsync(send).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task CheckMyPerms(IUserMessage msg) + public async Task CheckMyPerms() { StringBuilder builder = new StringBuilder("```http\n"); - var user = msg.Author as IGuildUser; - var perms = user.GetPermissions((ITextChannel)msg.Channel); + var user = Context.User as IGuildUser; + var perms = user.GetPermissions((ITextChannel)Context.Channel); foreach (var p in perms.GetType().GetProperties().Where(p => !p.GetGetMethod().GetParameters().Any())) { builder.AppendLine($"{p.Name} : {p.GetValue(perms, null).ToString()}"); } builder.Append("```"); - await msg.Channel.SendConfirmAsync(builder.ToString()); + await Context.Channel.SendConfirmAsync(builder.ToString()); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task UserId(IUserMessage msg, IGuildUser target = null) + public async Task UserId(IGuildUser target = null) { - var usr = target ?? msg.Author; - await msg.Channel.SendConfirmAsync($"πŸ†” of the user **{ usr.Username }** is `{ usr.Id }`").ConfigureAwait(false); + var usr = target ?? Context.User; + await Context.Channel.SendConfirmAsync($"πŸ†” of the user **{ usr.Username }** is `{ usr.Id }`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] - public async Task ChannelId(IUserMessage msg) + public async Task ChannelId() { - await msg.Channel.SendConfirmAsync($"πŸ†” of this channel is `{msg.Channel.Id}`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ†” of this channel is `{Context.Channel.Id}`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ServerId(IUserMessage msg) + public async Task ServerId() { - await msg.Channel.SendConfirmAsync($"πŸ†” of this server is `{((ITextChannel)msg.Channel).Guild.Id}`").ConfigureAwait(false); + await Context.Channel.SendConfirmAsync($"πŸ†” of this server is `{((ITextChannel)Context.Channel).Guild.Id}`").ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task Roles(IUserMessage msg, IGuildUser target, int page = 1) + public async Task Roles(IGuildUser target, int page = 1) { - var channel = (ITextChannel)msg.Channel; + var channel = (ITextChannel)Context.Channel; var guild = channel.Guild; const int RolesPerPage = 20; @@ -144,14 +141,14 @@ namespace NadekoBot.Modules.Utility [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public Task Roles(IUserMessage msg, int page = 1) => - Roles(msg, null, page); + public Task Roles(int page = 1) => + Roles(null, page); [NadekoCommand, Usage, Description, Aliases] [RequireContext(ContextType.Guild)] - public async Task ChannelTopic(IUserMessage umsg) + public async Task ChannelTopic() { - var channel = (ITextChannel)umsg.Channel; + var channel = (ITextChannel)Context.Channel; var topic = channel.Topic; if (string.IsNullOrWhiteSpace(topic)) @@ -161,76 +158,31 @@ namespace NadekoBot.Modules.Utility } [NadekoCommand, Usage, Description, Aliases] - public async Task Stats(IUserMessage umsg) + public async Task Stats() { - var channel = umsg.Channel; + var channel = Context.Channel; var stats = NadekoBot.Stats; await channel.EmbedAsync( - new Embed() - { - Author = new EmbedAuthor() - { - Name = $"NadekoBot v{StatsService.BotVersion}", - Url = "http://nadekobot.readthedocs.io/en/latest/", - IconUrl = "https://cdn.discordapp.com/avatars/116275390695079945/b21045e778ef21c96d175400e779f0fb.jpg" - }, - Fields = new[] { - new EmbedField() { - Name = Format.Bold("Author"), - Value = stats.Author, - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Library"), - Value = stats.Library, - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Bot ID"), - Value = NadekoBot.Client.GetCurrentUser().Id.ToString(), - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Commands Ran"), - Value = stats.CommandsRan.ToString(), - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Messages"), - Value = $"{stats.MessageCounter} ({stats.MessagesPerSecond:F2}/sec)", - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Memory"), - Value = $"{stats.Heap} MB", - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Owner ID(s)"), - Value = stats.OwnerIds, - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Uptime"), - Value = stats.GetUptimeString("\n"), - Inline = true - }, - new EmbedField() { - Name = Format.Bold("Presence"), - Value = $"{NadekoBot.Client.GetGuilds().Count} Servers\n{stats.TextChannels} Text Channels\n{stats.VoiceChannels} Voice Channels", - Inline = true - }, - - }, - Color = 0x00bbd6 - }); + new EmbedBuilder().WithColor(new Color(0x00bbd6)) + .WithAuthor(eab => eab.WithName($"NadekoBot v{StatsService.BotVersion}") + .WithUrl("http://nadekobot.readthedocs.io/en/latest/") + .WithIconUrl("https://cdn.discordapp.com/avatars/116275390695079945/b21045e778ef21c96d175400e779f0fb.jpg")) + .AddField(efb => efb.WithName(Format.Bold("Author")).WithValue(stats.Author).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Library")).WithValue(stats.Library).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Bot ID")).WithValue(NadekoBot.Client.CurrentUser().Id.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Commands Ran")).WithValue(stats.CommandsRan.ToString()).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Messages")).WithValue($"{stats.MessageCounter} ({stats.MessagesPerSecond:F2}/sec)").WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Memory")).WithValue($"{stats.Heap} MB").WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Owner ID(s)")).WithValue(stats.OwnerIds).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Uptime")).WithValue(stats.GetUptimeString("\n")).WithIsInline(true)) + .AddField(efb => efb.WithName(Format.Bold("Presence")).WithValue($"{NadekoBot.Client.GetGuilds().Count} Servers\n{stats.TextChannels} Text Channels\n{stats.VoiceChannels} Voice Channels").WithIsInline(true))); } private Regex emojiFinder { get; } = new Regex(@"<:(?.+?):(?\d*)>", RegexOptions.Compiled); [NadekoCommand, Usage, Description, Aliases] - public async Task Showemojis(IUserMessage msg, [Remainder] string emojis) + public async Task Showemojis([Remainder] string emojis) { var matches = emojiFinder.Matches(emojis); @@ -238,9 +190,9 @@ namespace NadekoBot.Modules.Utility .Select(m => $"**Name:** {m.Groups["name"]} **Link:** http://discordapp.com/api/emojis/{m.Groups["id"]}.png")); if (string.IsNullOrWhiteSpace(result)) - await msg.Channel.SendErrorAsync("No special emojis found."); + await Context.Channel.SendErrorAsync("No special emojis found."); else - await msg.Channel.SendMessageAsync(result).ConfigureAwait(false); + await Context.Channel.SendMessageAsync(result).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -248,7 +200,7 @@ namespace NadekoBot.Modules.Utility [OwnerOnly] public async Task ListServers(IUserMessage imsg, int page = 1) { - var channel = (ITextChannel)imsg.Channel; + var channel = (ITextChannel)Context.Channel; page -= 1; @@ -265,9 +217,8 @@ namespace NadekoBot.Modules.Utility await channel.EmbedAsync(guilds.Aggregate(new EmbedBuilder().WithColor(NadekoBot.OkColor), (embed, g) => embed.AddField(efb => efb.WithName(g.Name) - .WithValue($"```css\nID: {g.Id}\nMembers: {g.GetUsers().Count}\nOwnerID: {g.OwnerId} ```") - .WithIsInline(false))) - .Build()) + .WithValue($"```css\nID: {g.Id}\nMembers: {(g.GetUsersAsync().GetAwaiter().GetResult()).Count}\nOwnerID: {g.OwnerId} ```") + .WithIsInline(false)))) .ConfigureAwait(false); } } diff --git a/src/NadekoBot/NadekoBot.cs b/src/NadekoBot/NadekoBot.cs index 56839613..6168b062 100644 --- a/src/NadekoBot/NadekoBot.cs +++ b/src/NadekoBot/NadekoBot.cs @@ -12,12 +12,10 @@ using System.Reflection; using System.Threading.Tasks; using System.Collections.Generic; using NadekoBot.Modules.Permissions; -using Module = Discord.Commands.Module; using NadekoBot.TypeReaders; using System.Collections.Concurrent; using NadekoBot.Modules.Music; using NadekoBot.Services.Database.Models; -using NadekoBot.Modules.Games.Commands.Hangman; namespace NadekoBot { @@ -25,8 +23,8 @@ namespace NadekoBot { private Logger _log; - public static uint OkColor { get; } = 0x71cd40; - public static uint ErrorColor { get; } = 0xee281f; + public static Color OkColor { get; } = new Color(0x71cd40); + public static Color ErrorColor { get; } = new Color(0xee281f); public static CommandService CommandService { get; private set; } public static CommandHandler CommandHandler { get; private set; } @@ -84,7 +82,7 @@ namespace NadekoBot //setup typereaders CommandService.AddTypeReader(new PermissionActionTypeReader()); - CommandService.AddTypeReader(new CommandTypeReader()); + CommandService.AddTypeReader(new CommandTypeReader()); CommandService.AddTypeReader(new ModuleTypeReader()); CommandService.AddTypeReader(new GuildTypeReader()); @@ -103,9 +101,9 @@ namespace NadekoBot // start handling messages received in commandhandler await CommandHandler.StartHandling().ConfigureAwait(false); - await CommandService.LoadAssembly(this.GetType().GetTypeInfo().Assembly).ConfigureAwait(false); + await CommandService.AddModulesAsync(this.GetType().GetTypeInfo().Assembly).ConfigureAwait(false); #if !GLOBAL_NADEKO - await CommandService.Load(new Music()).ConfigureAwait(false); + await CommandService.AddModuleAsync().ConfigureAwait(false); #endif Ready = true; Console.WriteLine(await Stats.Print().ConfigureAwait(false)); diff --git a/src/NadekoBot/Services/CommandHandler.cs b/src/NadekoBot/Services/CommandHandler.cs index 031a2dfe..10615415 100644 --- a/src/NadekoBot/Services/CommandHandler.cs +++ b/src/NadekoBot/Services/CommandHandler.cs @@ -39,7 +39,7 @@ namespace NadekoBot.Services private List ownerChannels { get; set; } - public event Func CommandExecuted = delegate { return Task.CompletedTask; }; + public event Func CommandExecuted = delegate { return Task.CompletedTask; }; public CommandHandler(ShardedDiscordClient client, CommandService commandService) { @@ -49,7 +49,7 @@ namespace NadekoBot.Services } public async Task StartHandling() { - ownerChannels = (await Task.WhenAll(_client.GetGuilds().SelectMany(g => g.GetUsers()) + ownerChannels = (await Task.WhenAll(_client.GetGuilds().SelectMany(g => g.GetUsersAsync().GetAwaiter().GetResult()) .Where(u => NadekoBot.Credentials.OwnerIds.Contains(u.Id)) .Distinct(new IGuildUserComparer()) .Select(async u => { try { return await u.CreateDMChannelAsync(); } catch { return null; } }))) @@ -64,20 +64,20 @@ namespace NadekoBot.Services _client.MessageReceived += MessageReceivedHandler; } - private async Task MessageReceivedHandler(IMessage msg) + private async Task MessageReceivedHandler(SocketMessage msg) { - var usrMsg = msg as IUserMessage; + var usrMsg = msg as SocketUserMessage; if (usrMsg == null) return; - if (usrMsg.Author.IsBot || !NadekoBot.Ready) //no bots + if (usrContext.User.IsBot || !NadekoBot.Ready) //no bots return; - var guild = (msg.Channel as ITextChannel)?.Guild; + var guild = (Context.Channel as SocketTextChannel)?.Guild; - if (guild != null && guild.OwnerId != usrMsg.Author.Id) + if (guild != null && guild.OwnerId != usrContext.User.Id) { - if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrMsg.Channel.Id) || + if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrContext.Channel.Id) || Permissions.FilterCommands.InviteFilteringServers.Contains(guild.Id)) { if (usrMsg.Content.IsDiscordInvite()) @@ -89,12 +89,12 @@ namespace NadekoBot.Services } catch (HttpException ex) { - _log.Warn("I do not have permission to filter invites in channel with id " + usrMsg.Channel.Id, ex); + _log.Warn("I do not have permission to filter invites in channel with id " + usrContext.Channel.Id, ex); } } } - var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrMsg.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id)); + var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrContext.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id)); var wordsInMessage = usrMsg.Content.ToLowerInvariant().Split(' '); if (filteredWords.Any(w => wordsInMessage.Contains(w))) { @@ -105,7 +105,7 @@ namespace NadekoBot.Services } catch (HttpException ex) { - _log.Warn("I do not have permission to filter words in channel with id " + usrMsg.Channel.Id, ex); + _log.Warn("I do not have permission to filter words in channel with id " + usrContext.Channel.Id, ex); } } } @@ -113,8 +113,8 @@ namespace NadekoBot.Services BlacklistItem blacklistedItem; if ((blacklistedItem = Permissions.BlacklistCommands.BlacklistedItems.FirstOrDefault(bi => (bi.Type == BlacklistItem.BlacklistType.Server && bi.ItemId == guild?.Id) || - (bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == msg.Channel.Id) || - (bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrMsg.Author.Id))) != null) + (bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == Context.Channel.Id) || + (bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrContext.User.Id))) != null) { return; } @@ -146,12 +146,12 @@ namespace NadekoBot.Services try { - var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, MultiMatchHandling.Best); + var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrContext.User, MultiMatchHandling.Best); var command = t.Item1; var permCache = t.Item2; var result = t.Item3; sw.Stop(); - var channel = (usrMsg.Channel as ITextChannel); + var channel = (usrContext.Channel as ITextChannel); if (result.IsSuccess) { await CommandExecuted(usrMsg, command); @@ -160,7 +160,7 @@ namespace NadekoBot.Services "Server: {1}\n\t" + "Channel: {2}\n\t" + "Message: {3}", - usrMsg.Author + " [" + usrMsg.Author.Id + "]", // {0} + usrContext.User + " [" + usrContext.User.Id + "]", // {0} (channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1} (channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2} usrMsg.Content, // {3} @@ -175,7 +175,7 @@ namespace NadekoBot.Services "Channel: {2}\n\t" + "Message: {3}\n\t" + "Error: {4}", - usrMsg.Author + " [" + usrMsg.Author.Id + "]", // {0} + usrContext.User + " [" + usrContext.User.Id + "]", // {0} (channel == null ? "PRIVATE" : channel.Guild.Name + " [" + channel.Guild.Id + "]"), // {1} (channel == null ? "PRIVATE" : channel.Name + " [" + channel.Id + "]"), // {2} usrMsg.Content,// {3} @@ -185,18 +185,18 @@ namespace NadekoBot.Services if (guild != null && command != null && result.Error == CommandError.Exception) { if (permCache != null && permCache.Verbose) - try { await msg.Channel.SendMessageAsync("⚠️ " + result.ErrorReason).ConfigureAwait(false); } catch { } + try { await Context.Channel.SendMessageAsync("⚠️ " + result.ErrorReason).ConfigureAwait(false); } catch { } } } else { - if (msg.Channel is IPrivateChannel) + if (Context.Channel is IPrivateChannel) { //rofl, gotta do this to prevent this message from occuring on polls int vote; if (int.TryParse(msg.Content, out vote)) return; - await msg.Channel.SendMessageAsync(Help.DMHelpString).ConfigureAwait(false); + await Context.Channel.SendMessageAsync(Help.DMHelpString).ConfigureAwait(false); await DMForwardCommands.HandleDMForwarding(msg, ownerChannels); } @@ -212,10 +212,10 @@ namespace NadekoBot.Services return; } - public async Task> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) { + public async Task> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) { var searchResult = _commandService.Search(message, input); if (!searchResult.IsSuccess) - return new Tuple(null, null, searchResult); + return new Tuple(null, null, searchResult); var commands = searchResult.Commands; for (int i = commands.Count - 1; i >= 0; i--) @@ -224,7 +224,7 @@ namespace NadekoBot.Services if (!preconditionResult.IsSuccess) { if (commands.Count == 1) - return new Tuple(null, null, searchResult); + return new Tuple(null, null, searchResult); else continue; } @@ -248,7 +248,7 @@ namespace NadekoBot.Services if (!parseResult.IsSuccess) { if (commands.Count == 1) - return new Tuple(null, null, parseResult); + return new Tuple(null, null, parseResult); else continue; } @@ -276,7 +276,7 @@ namespace NadekoBot.Services if (!resetCommand && !pc.RootPermission.AsEnumerable().CheckPermissions(message, cmd.Text, cmd.Module.Name, out index)) { var returnMsg = $"Permission number #{index + 1} **{pc.RootPermission.GetAt(index).GetCommand(guild)}** is preventing this action."; - return new Tuple(cmd, pc, SearchResult.FromError(CommandError.Exception, returnMsg)); + return new Tuple(cmd, pc, SearchResult.FromError(CommandError.Exception, returnMsg)); } @@ -284,28 +284,28 @@ namespace NadekoBot.Services { if (!((IGuildUser)user).Roles.Any(r => r.Name.Trim().ToLowerInvariant() == pc.PermRole.Trim().ToLowerInvariant())) { - return new Tuple(cmd, pc, SearchResult.FromError(CommandError.Exception, $"You need the **{pc.PermRole}** role in order to use permission commands.")); + return new Tuple(cmd, pc, SearchResult.FromError(CommandError.Exception, $"You need the **{pc.PermRole}** role in order to use permission commands.")); } } } if (CmdCdsCommands.HasCooldown(cmd, guild, user)) - return new Tuple(cmd, null, SearchResult.FromError(CommandError.Exception, $"That command is on cooldown for you.")); + return new Tuple(cmd, null, SearchResult.FromError(CommandError.Exception, $"That command is on cooldown for you.")); - return new Tuple(commands[i], null, await commands[i].Execute(message, parseResult)); + return new Tuple(commands[i], null, await commands[i].Execute(message, parseResult)); } - return new Tuple(null, null, SearchResult.FromError(CommandError.UnknownCommand, "This input does not match any overload.")); + return new Tuple(null, null, SearchResult.FromError(CommandError.UnknownCommand, "This input does not match any overload.")); } } public class CommandExecutedEventArgs { - public Command Command { get; } + public CommandInfo Command { get; } public IUserMessage Message { get; } - public CommandExecutedEventArgs(IUserMessage msg, Command cmd) + public CommandExecutedEventArgs(CommandInfo cmd) { Message = msg; Command = cmd; diff --git a/src/NadekoBot/Services/Impl/BotCredentials.cs b/src/NadekoBot/Services/Impl/BotCredentials.cs index fdd0a1fa..2aa58a33 100644 --- a/src/NadekoBot/Services/Impl/BotCredentials.cs +++ b/src/NadekoBot/Services/Impl/BotCredentials.cs @@ -46,7 +46,7 @@ namespace NadekoBot.Services.Impl configBuilder.AddJsonFile(credsFileName, true) .AddEnvironmentVariables("NadekoBot_"); - var data = configBuilder.Build(); + var data = configBuilder; Token = data[nameof(Token)]; if (string.IsNullOrWhiteSpace(Token)) diff --git a/src/NadekoBot/Services/Impl/StatsService.cs b/src/NadekoBot/Services/Impl/StatsService.cs index 8b71f3c4..95c04854 100644 --- a/src/NadekoBot/Services/Impl/StatsService.cs +++ b/src/NadekoBot/Services/Impl/StatsService.cs @@ -67,7 +67,7 @@ namespace NadekoBot.Services.Impl } public async Task Print() { - var curUser = await client.GetCurrentUserAsync(); + var curUser = await client.CurrentUser(); return $@" Author: [{Author}] | Library: [{Library}] Bot Version: [{BotVersion}] diff --git a/src/NadekoBot/ShardedDiscordClient.cs b/src/NadekoBot/ShardedDiscordClient.cs index 892bc6d8..747ba4fa 100644 --- a/src/NadekoBot/ShardedDiscordClient.cs +++ b/src/NadekoBot/ShardedDiscordClient.cs @@ -13,19 +13,19 @@ namespace NadekoBot private DiscordSocketConfig discordSocketConfig; private Logger _log { get; } - public event Func UserJoined = delegate { return Task.CompletedTask; }; - public event Func MessageReceived = delegate { return Task.CompletedTask; }; - public event Func UserLeft = delegate { return Task.CompletedTask; }; - public event Func UserUpdated = delegate { return Task.CompletedTask; }; - public event Func, IMessage, Task> MessageUpdated = delegate { return Task.CompletedTask; }; - public event Func, Task> MessageDeleted = delegate { return Task.CompletedTask; }; - public event Func UserBanned = delegate { return Task.CompletedTask; }; - public event Func UserUnbanned = delegate { return Task.CompletedTask; }; - public event Func UserPresenceUpdated = delegate { return Task.CompletedTask; }; - public event Func UserVoiceStateUpdated = delegate { return Task.CompletedTask; }; - public event Func ChannelCreated = delegate { return Task.CompletedTask; }; - public event Func ChannelDestroyed = delegate { return Task.CompletedTask; }; - public event Func ChannelUpdated = delegate { return Task.CompletedTask; }; + public event Func UserJoined = delegate { return Task.CompletedTask; }; + public event Func MessageReceived = delegate { return Task.CompletedTask; }; + public event Func UserLeft = delegate { return Task.CompletedTask; }; + public event Func UserUpdated = delegate { return Task.CompletedTask; }; + public event Func, SocketMessage, Task> MessageUpdated = delegate { return Task.CompletedTask; }; + public event Func, Task> MessageDeleted = delegate { return Task.CompletedTask; }; + public event Func UserBanned = delegate { return Task.CompletedTask; }; + public event Func UserUnbanned = delegate { return Task.CompletedTask; }; + public event Func, SocketUser, SocketPresence, SocketPresence, Task> UserPresenceUpdated = delegate { return Task.CompletedTask; }; + public event Func UserVoiceStateUpdated = delegate { return Task.CompletedTask; }; + public event Func ChannelCreated = delegate { return Task.CompletedTask; }; + public event Func ChannelDestroyed = delegate { return Task.CompletedTask; }; + public event Func ChannelUpdated = delegate { return Task.CompletedTask; }; public event Func Disconnected = delegate { return Task.CompletedTask; }; private IReadOnlyList Clients { get; } @@ -48,7 +48,7 @@ namespace NadekoBot client.MessageUpdated += async (arg1, m2) => await MessageUpdated(arg1, m2); client.MessageDeleted += async (arg1, arg2) => await MessageDeleted(arg1, arg2); client.UserBanned += async (arg1, arg2) => await UserBanned(arg1, arg2); - client.UserPresenceUpdated += async (arg1, arg2, arg3) => await UserPresenceUpdated(arg1, arg2, arg3); + client.UserPresenceUpdated += async (arg1, arg2, arg3, arg4) => await UserPresenceUpdated(arg1, arg2, arg3, arg4); client.UserVoiceStateUpdated += async (arg1, arg2, arg3) => await UserVoiceStateUpdated(arg1, arg2, arg3); client.ChannelCreated += async arg => await ChannelCreated(arg); client.ChannelDestroyed += async arg => await ChannelDestroyed(arg); @@ -60,17 +60,14 @@ namespace NadekoBot Clients = clientList.AsReadOnly(); } - public ISelfUser GetCurrentUser() => - Clients[0].GetCurrentUser(); + public ISelfUser CurrentUser() => + Clients[0].CurrentUser; - public Task GetCurrentUserAsync() => - Clients[0].GetCurrentUserAsync(); - - public Task GetAllCurrentUsersAsync() => - Task.WhenAll(Clients.Select(c => c.GetCurrentUserAsync())); + public ISelfUser[] GetAllCurrentUsers() => + Clients.Select(c => c.CurrentUser).ToArray(); public IReadOnlyCollection GetGuilds() => - Clients.SelectMany(c => c.GetGuilds()).ToArray(); + Clients.SelectMany(c => c.Guilds).ToList(); public IGuild GetGuild(ulong id) => Clients.Select(c => c.GetGuild(id)).FirstOrDefault(g => g != null); @@ -104,19 +101,11 @@ namespace NadekoBot } internal Task DownloadAllUsersAsync() => - Task.WhenAll(Clients.Select(async c => { await c.DownloadAllUsersAsync().ConfigureAwait(false); _log.Info($"Shard #{c.ShardId} downloaded {c.GetGuilds().Sum(g => g.GetUsers().Count)} users."); })); + Task.WhenAll(Clients.Select(async c => { await c.DownloadAllUsersAsync().ConfigureAwait(false); _log.Info($"Shard #{c.ShardId} downloaded {c.Guilds.Sum(g => g.Users.Count)} users."); })); - public async Task SetGame(string game) - { - await Task.WhenAll((await GetAllCurrentUsersAsync()) - .Select(u => u.ModifyStatusAsync(ms => ms.Game = new Discord.Game(game)))); - } + public Task SetGame(string game) => Task.WhenAll(Clients.Select(ms => ms.SetGame(game))); - public async Task SetStream(string name, string url) - { - await Task.WhenAll((await GetAllCurrentUsersAsync()) - .Select(u => u.ModifyStatusAsync(ms => ms.Game = new Discord.Game(name, url, StreamType.Twitch)))); - - } + + public Task SetStream(string name, string url) => Task.WhenAll(Clients.Select(ms => ms.SetGame(name, url, StreamType.NotStreaming))); } } diff --git a/src/NadekoBot/TypeReaders/BotCommandTypeReader.cs b/src/NadekoBot/TypeReaders/BotCommandTypeReader.cs index 91763e8a..6128f6ff 100644 --- a/src/NadekoBot/TypeReaders/BotCommandTypeReader.cs +++ b/src/NadekoBot/TypeReaders/BotCommandTypeReader.cs @@ -7,12 +7,11 @@ namespace NadekoBot.TypeReaders { public class CommandTypeReader : TypeReader { - public override Task Read(IUserMessage context, string input) + public override Task Read(CommandContext context, string input) { input = input.ToUpperInvariant(); var cmd = NadekoBot.CommandService.Commands.FirstOrDefault(c => - c.Aliases.Select(a => a.ToUpperInvariant()).Contains(input) || - c.Text.ToUpperInvariant() == input); + c.Aliases.Select(a => a.ToUpperInvariant()).Contains(input)); if (cmd == null) return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "No such command found.")); diff --git a/src/NadekoBot/TypeReaders/GuildTypeReader.cs b/src/NadekoBot/TypeReaders/GuildTypeReader.cs index ab9a5259..37576b95 100644 --- a/src/NadekoBot/TypeReaders/GuildTypeReader.cs +++ b/src/NadekoBot/TypeReaders/GuildTypeReader.cs @@ -7,7 +7,7 @@ namespace NadekoBot.TypeReaders { public class GuildTypeReader : TypeReader { - public override Task Read(IUserMessage context, string input) + public override Task Read(CommandContext context, string input) { input = input.Trim().ToLowerInvariant(); var guilds = NadekoBot.Client.GetGuilds(); diff --git a/src/NadekoBot/TypeReaders/ModuleTypeReader.cs b/src/NadekoBot/TypeReaders/ModuleTypeReader.cs index 366429ec..fbc36ac8 100644 --- a/src/NadekoBot/TypeReaders/ModuleTypeReader.cs +++ b/src/NadekoBot/TypeReaders/ModuleTypeReader.cs @@ -7,7 +7,7 @@ namespace NadekoBot.TypeReaders { public class ModuleTypeReader : TypeReader { - public override Task Read(IUserMessage context, string input) + public override Task Read(CommandContext context, string input) { input = input.ToUpperInvariant(); var module = NadekoBot.CommandService.Modules.FirstOrDefault(m => m.Name.ToUpperInvariant() == input); diff --git a/src/NadekoBot/TypeReaders/PermissionActionTypeReader.cs b/src/NadekoBot/TypeReaders/PermissionActionTypeReader.cs index 209f69b1..76071620 100644 --- a/src/NadekoBot/TypeReaders/PermissionActionTypeReader.cs +++ b/src/NadekoBot/TypeReaders/PermissionActionTypeReader.cs @@ -10,7 +10,7 @@ namespace NadekoBot.TypeReaders /// public class PermissionActionTypeReader : TypeReader { - public override Task Read(IUserMessage context, string input) + public override Task Read(CommandContext context, string input) { input = input.ToUpperInvariant(); switch (input) diff --git a/src/NadekoBot/_Extensions/Extensions.cs b/src/NadekoBot/_Extensions/Extensions.cs index a94681bb..ae947ee5 100644 --- a/src/NadekoBot/_Extensions/Extensions.cs +++ b/src/NadekoBot/_Extensions/Extensions.cs @@ -69,16 +69,18 @@ namespace NadekoBot.Extensions await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendMessageAsync(message, isTTS).ConfigureAwait(false); public static async Task SendConfirmAsync(this IGuildUser user, string text) - => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = text, Color = NadekoBot.OkColor }); + => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text)); public static async Task SendConfirmAsync(this IGuildUser user, string title, string text, string url = null) - => await(await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = text, Title = title, Url = url, Color = NadekoBot.OkColor }); + => await(await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text) + .WithTitle(title).WithUrl(url)); public static async Task SendErrorAsync(this IGuildUser user, string title, string error, string url = null) - => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = error, Title = title, Url = url, Color = NadekoBot.ErrorColor }); + => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error) + .WithTitle(title).WithUrl(url)); public static async Task SendErrorAsync(this IGuildUser user, string error) - => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new Embed() { Description = error, Color = NadekoBot.ErrorColor }); + => await (await user.CreateDMChannelAsync()).SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error)); public static async Task SendFileAsync(this IGuildUser user, string filePath, string caption = null, bool isTTS = false) => await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(filePath, caption, isTTS).ConfigureAwait(false); @@ -87,25 +89,27 @@ namespace NadekoBot.Extensions await (await user.CreateDMChannelAsync().ConfigureAwait(false)).SendFileAsync(fileStream, fileName, caption, isTTS).ConfigureAwait(false); public static bool IsAuthor(this IUserMessage msg) => - NadekoBot.Client.GetCurrentUser().Id == msg.Author.Id; + NadekoBot.Client.CurrentUser().Id == msg.Author.Id; public static IEnumerable Members(this IRole role) => - NadekoBot.Client.GetGuild(role.GuildId)?.GetUsers().Where(u => u.Roles.Contains(role)) ?? Enumerable.Empty(); + role.Guild.GetUsersAsync().GetAwaiter().GetResult() ?? Enumerable.Empty(); - public static Task EmbedAsync(this IMessageChannel ch, Discord.API.Embed embed, string msg = "") + public static Task EmbedAsync(this IMessageChannel ch, EmbedBuilder embed, string msg = "") => ch.SendMessageAsync(msg, embed: embed); public static Task SendErrorAsync(this IMessageChannel ch, string title, string error, string url = null) - => ch.SendMessageAsync("", embed: new Embed() { Description = error, Title = title, Url = url, Color = NadekoBot.ErrorColor }); + => ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.ErrorColor).WithDescription(error) + .WithTitle(title).WithUrl(url)); public static Task SendErrorAsync(this IMessageChannel ch, string error) - => ch.SendMessageAsync("", embed: new Embed() { Description = error, Color = NadekoBot.ErrorColor }); + => ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(error)); public static Task SendConfirmAsync(this IMessageChannel ch, string title, string text, string url = null) - => ch.SendMessageAsync("", embed: new Embed() { Description = text, Title = title, Url = url, Color = NadekoBot.OkColor }); + => ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text) + .WithTitle(title).WithUrl(url)); public static Task SendConfirmAsync(this IMessageChannel ch, string text) - => ch.SendMessageAsync("", embed: new Embed() { Description = text, Color = NadekoBot.OkColor }); + => ch.SendMessageAsync("", embed: new EmbedBuilder().WithColor(NadekoBot.OkColor).WithDescription(text)); public static Task SendTableAsync(this IMessageChannel ch, string seed, IEnumerable items, Func howToPrint, int columns = 3) { @@ -274,11 +278,11 @@ namespace NadekoBot.Extensions public static string Unmention(this string str) => str.Replace("@", "ΰΆΈ"); - public static Image Merge(this IEnumerable images) + public static ImageSharp.Image Merge(this IEnumerable images) { var imgList = images.ToList(); - var canvas = new Image(imgList.Sum(img => img.Width), imgList.Max(img => img.Height)); + var canvas = new ImageSharp.Image(imgList.Sum(img => img.Width), imgList.Max(img => img.Height)); var canvasPixels = canvas.Lock(); int offsetX = 0; @@ -297,7 +301,7 @@ namespace NadekoBot.Extensions return canvas; } - public static Stream ToStream(this Image img) + public static Stream ToStream(this ImageSharp.Image img) { var imageStream = new MemoryStream(); img.SaveAsPng(imageStream); diff --git a/src/NadekoBot/project.json b/src/NadekoBot/project.json index cbf49aa2..ac27a4f3 100644 --- a/src/NadekoBot/project.json +++ b/src/NadekoBot/project.json @@ -19,12 +19,6 @@ "dependencies": { "VideoLibrary": "1.3.4", "CoreCLR-NCalc": "2.1.2", - "Discord.Net.Commands": { - "target": "project" - }, - "Discord.Net": { - "target": "project" - }, "Google.Apis.Urlshortener.v1": "1.19.0.138", "Google.Apis.YouTube.v3": "1.19.0.655", "ImageSharp": "1.0.0-alpha-000079", @@ -44,7 +38,9 @@ "Newtonsoft.Json": "9.0.2-beta1", "NLog": "5.0.0-beta03", "System.Diagnostics.Contracts": "4.3.0", - "System.Xml.XPath": "4.3.0" + "System.Xml.XPath": "4.3.0", + "Discord.Net.Commands": "1.0.0-*", + "Discord.Net.WebSocket": "1.0.0-*" }, "tools": { "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final",