public async Task GetUserAwardStatsOtherUser(CommandContext ctx, DiscordUser user) { var member = await _discordResolver.ResolveGuildMember(ctx.Guild, user.Id); if (member == null) { await ctx.RespondAsync("Could not fetch user"); return; } await GetUserAwardStats(ctx, member); }
public async Task HandleAwardChange(MessageAwardQueueItem awardItem) { // TODO optimize by resolving full message only if it will be posted var partialMessage = awardItem.DiscordMessage; var message = await _discordResolver.ResolveMessage(partialMessage.Channel, partialMessage.Id); if (message == null) { _logger.LogDebug("Could not resolve message"); return; } var channel = message.Channel; var guild = channel.Guild; var messageAuthor = await _discordResolver.ResolveGuildMember(guild, message.Author.Id); if (messageAuthor == null) { _logger.LogDebug("Could not resolve message author"); return; } var awardChannel = await _discordResolver.ResolveChannel(guild, _options.AwardChannelId); if (awardChannel == null) { _logger.LogDebug("Could not resolve awards channel"); return; } uint awardReactionCount = await GetAwardReactionCount(message, messageAuthor); var hasEnoughAwards = awardReactionCount >= _options.RequiredAwardCount; var awardMessage = await _awardMessageRepo.GetAwardMessageByOriginalMessageId(awardChannel.Id, message.Id); _logger.LogDebug($"Message has {awardReactionCount} awards"); if (awardMessage == null) { _logger.LogDebug($"Message ({message.Id}) does not exist in the database"); if (!hasEnoughAwards) { _logger.LogDebug($"Not enough awards. {awardReactionCount} / {_options.RequiredAwardCount}"); return; } var postedMessage = await PostAwardedMessage(awardChannel, message, messageAuthor, awardReactionCount); await _awardMessageRepo.CreateAwardMessage(message.Id, message.ChannelId, postedMessage.Id, awardChannel.Id, messageAuthor.Id, awardReactionCount); } else { _logger.LogDebug($"Message ({message.Id}) exists in award channel"); // TODO keep track if message was removed from award channels // so it's handled gracefully i.e. not throw an error // when it tries to update a removed message await UpdateAwardedMessageText(awardChannel, awardMessage.AwardedMessageId, awardReactionCount); await _awardMessageRepo.UpdateAwardCount(awardMessage.Id, awardReactionCount); } }