diff --git a/PluralKit.Bot/Bot.cs b/PluralKit.Bot/Bot.cs index ff87e9f9..9bed8d01 100644 --- a/PluralKit.Bot/Bot.cs +++ b/PluralKit.Bot/Bot.cs @@ -156,11 +156,11 @@ namespace PluralKit.Bot _client.ShardReady += ShardReady; - // Deliberately wrapping in an async function *without* awaiting, we don't want to "block" since this'd hold up the main loop + // Deliberately wrapping in a fake-"async" function *without* awaiting, we don't want to "block" since this'd hold up the main loop // These handlers return Task so we gotta be careful not to return the Task itself (which would then be awaited) - kinda weird design but eh - _client.MessageReceived += async (msg) => MessageReceived(msg).CatchException(HandleRuntimeError); - _client.ReactionAdded += async (message, channel, reaction) => _proxy.HandleReactionAddedAsync(message, channel, reaction).CatchException(HandleRuntimeError); - _client.MessageDeleted += async (message, channel) => _proxy.HandleMessageDeletedAsync(message, channel).CatchException(HandleRuntimeError); + _client.MessageReceived += (msg) => { var _ = MessageReceived(msg).CatchException(HandleRuntimeError); return Task.CompletedTask; }; + _client.ReactionAdded += (message, channel, reaction) => { var _ = _proxy.HandleReactionAddedAsync(message, channel, reaction).CatchException(HandleRuntimeError); return Task.CompletedTask; }; + _client.MessageDeleted += (message, channel) => { var _ = _proxy.HandleMessageDeletedAsync(message, channel).CatchException(HandleRuntimeError); return Task.CompletedTask; }; _client.Log += FrameworkLog; } @@ -207,7 +207,7 @@ namespace PluralKit.Bot await Task.WhenAll(((IMetricsRoot) _metrics).ReportRunner.RunAllAsync()); } - private async Task ShardReady(DiscordSocketClient shardClient) + private Task ShardReady(DiscordSocketClient shardClient) { _logger.Information("Shard {Shard} connected", shardClient.ShardId); Console.WriteLine($"Shard #{shardClient.ShardId} connected to {shardClient.Guilds.Sum(g => g.Channels.Count)} channels in {shardClient.Guilds.Count} guilds."); @@ -219,6 +219,8 @@ namespace PluralKit.Bot Console.WriteLine( $"PluralKit started as {_client.CurrentUser.Username}#{_client.CurrentUser.Discriminator} ({_client.CurrentUser.Id})."); } + + return Task.CompletedTask; } private async Task CommandExecuted(Optional cmd, ICommandContext ctx, IResult _result) diff --git a/PluralKit.Bot/ContextUtils.cs b/PluralKit.Bot/ContextUtils.cs index 39a4ead1..23de8067 100644 --- a/PluralKit.Bot/ContextUtils.cs +++ b/PluralKit.Bot/ContextUtils.cs @@ -134,7 +134,7 @@ namespace PluralKit.Bot { for (int i = 0; i < items.Count; i++) await msg.AddReactionAsync(new Emoji(indicators[i])); } - AddEmojis(); // Not concerned about awaiting + var _ = AddEmojis(); // Not concerned about awaiting while (true) @@ -157,7 +157,7 @@ namespace PluralKit.Bot { if (idx < items.Count) return items[idx]; } - msg.RemoveReactionAsync(reaction.Emote, ctx.User); // don't care about awaiting + var __ = msg.RemoveReactionAsync(reaction.Emote, ctx.User); // don't care about awaiting await msg.ModifyAsync(mp => mp.Content = $"**[Page {currPage + 1}/{pageCount}]**\n{description}\n{MakeOptionList(currPage)}"); } } @@ -171,7 +171,7 @@ namespace PluralKit.Bot { for (int i = 0; i < items.Count; i++) await msg.AddReactionAsync(new Emoji(indicators[i])); } - AddEmojis(); + var _ = AddEmojis(); // Then wait for a reaction and return whichever one we found var reaction = await ctx.AwaitReaction(msg, ctx.User,rx => indicators.Contains(rx.Emote.Name)); @@ -209,7 +209,7 @@ namespace PluralKit.Bot { } finally { - ctx.Message.RemoveReactionAsync(new Emoji(emoji), ctx.Client.CurrentUser); + var _ = ctx.Message.RemoveReactionAsync(new Emoji(emoji), ctx.Client.CurrentUser); } } } diff --git a/PluralKit.Bot/Preconditions.cs b/PluralKit.Bot/Preconditions.cs index f08cb674..b412599a 100644 --- a/PluralKit.Bot/Preconditions.cs +++ b/PluralKit.Bot/Preconditions.cs @@ -5,18 +5,18 @@ using Discord.Commands; namespace PluralKit.Bot { class MustHaveSystem : PreconditionAttribute { - public override async Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) + public override Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { var c = context as PKCommandContext; - if (c == null) return PreconditionResult.FromError("Must be called on a PKCommandContext (should never happen!)"); - if (c.SenderSystem == null) return PreconditionResult.FromError(Errors.NoSystemError); - return PreconditionResult.FromSuccess(); + if (c == null) return Task.FromResult(PreconditionResult.FromError("Must be called on a PKCommandContext (should never happen!)")) ; + if (c.SenderSystem == null) return Task.FromResult(PreconditionResult.FromError(Errors.NoSystemError)); + return Task.FromResult(PreconditionResult.FromSuccess()); } } class MustPassOwnMember : PreconditionAttribute { - public override async Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) + public override Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { // OK when: // - Sender has a system @@ -24,11 +24,10 @@ namespace PluralKit.Bot { // - Sender owns said member var c = context as PKCommandContext; - if (c == null) - if (c.SenderSystem == null) return PreconditionResult.FromError(Errors.NoSystemError); - if (c.GetContextEntity() == null) return PreconditionResult.FromError(Errors.MissingMemberError); - if (c.GetContextEntity().System != c.SenderSystem.Id) return PreconditionResult.FromError(Errors.NotOwnMemberError); - return PreconditionResult.FromSuccess(); + if (c.SenderSystem == null) return Task.FromResult(PreconditionResult.FromError(Errors.NoSystemError)); + if (c.GetContextEntity() == null) return Task.FromResult(PreconditionResult.FromError(Errors.MissingMemberError)); + if (c.GetContextEntity().System != c.SenderSystem.Id) return Task.FromResult(PreconditionResult.FromError(Errors.NotOwnMemberError)); + return Task.FromResult(PreconditionResult.FromSuccess()); } } } \ No newline at end of file diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index 53baff39..ff1ff27e 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -157,7 +157,7 @@ namespace PluralKit.Bot { .Build(); } - public async Task CreateFrontPercentEmbed(SwitchStore.PerMemberSwitchDuration frontpercent, DateTimeZone tz) + public Task CreateFrontPercentEmbed(SwitchStore.PerMemberSwitchDuration frontpercent, DateTimeZone tz) { var actualPeriod = frontpercent.RangeEnd - frontpercent.RangeStart; var eb = new EmbedBuilder() @@ -186,7 +186,7 @@ namespace PluralKit.Bot { .Aggregate(Duration.Zero, (prod, next) => prod + next.Value)), true); } - return eb.Build(); + return Task.FromResult(eb.Build()); } } } \ No newline at end of file diff --git a/PluralKit.Bot/Utils.cs b/PluralKit.Bot/Utils.cs index 637fddf3..b9258a2e 100644 --- a/PluralKit.Bot/Utils.cs +++ b/PluralKit.Bot/Utils.cs @@ -220,14 +220,14 @@ namespace PluralKit.Bot { } - public override async Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) + public override Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { // This stops the "delegating command" we define above from being called multiple times // If we've already added a context object to the context, then we'll return with the same // error you get when there's an invalid command - it's like it didn't exist // This makes sure the user gets the proper error, instead of the command trying to parse things weirdly - if ((context as PKCommandContext)?.GetContextEntity() == null) return PreconditionResult.FromSuccess(); - return PreconditionResult.FromError(command.Module.Service.Search("")); + if ((context as PKCommandContext)?.GetContextEntity() == null) return Task.FromResult(PreconditionResult.FromSuccess()); + return Task.FromResult(PreconditionResult.FromError(command.Module.Service.Search(""))); } }