Пример #1
0
        public async Task ReportFlask()
        {
            var googleSettings = _config.CurrentValue.GoogleSettings;        // gets curent value of GoogleSettings
            var channel        = (SocketTextChannel)_discord.GetGuild(_config.CurrentValue.MyGuildId).GetChannel(_config.CurrentValue.FlaskChannelId);

            var reportDate = await _googleService.ReadCellAsync(googleSettings.FlaskData.ReportDateAddres);

            if (DateTime.TryParseExact(reportDate, googleSettings.FlaskData.ReportDateFormat, new CultureInfo("en-US"), DateTimeStyles.None, out var reportDateResoult))
            {
                var flaskData = await _googleService.ReadDataAsync <FlaskModel>(googleSettings.FlaskData.ReportValuesAddres);

                var sb = new StringBuilder();
                sb.AppendLine($"[Ostatnia aktualizacja: {reportDateResoult:dd.MM.yyyy HH:mm}]".Decorate(Decorator.Bold));

                if (flaskData.Any(x => x.FlaskCount < 0))
                {
                    // build ref string to algin text
                    var strRef = StringExtensions.Empty(flaskData.Where(x => x.FlaskCount < 0).Max(x => x.WowNick.Length) + 6);

                    sb.AppendLine("Poniższe osoby proszone są o uzupełnienie flaszek:");
                    sb.AppendLine(string.Empty);
                    foreach (var item in flaskData.Where(x => x.FlaskCount < 0).OrderBy(x => x.FlaskCount))
                    {
                        sb.AppendLine($"{StringExtensions.AlginToRef(item.WowNick, item.FlaskCount.ToString(), strRef).Decorate(Decorator.Inline_code)}\t{_discordContext.MentionId(item.DiscordId)}");
                    }
                }

                var chartResponse = await _httpClient.GetAsync(googleSettings.ReportChartUrl);

                var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Guid.NewGuid() + ".png");
                await using (var fs = new FileStream(filePath, FileMode.CreateNew))
                {
                    await chartResponse.Content.CopyToAsync(fs);
                }

                await channel.SendFileAsync(filePath, sb.ToString());

                File.Delete(filePath);    // cleanup
            }
            else
            {
                await Context.Channel.SendMessageAsync("Wystąpił problem z bazą flaszek, skontaktuj się z administratorem");

                await _logger.WriteLog($"Can't parse DateTime in GooglSheets: {(string.IsNullOrEmpty(reportDate) ? "null" : reportDate)}");
            }
        }