Beispiel #1
0
        public async Task SendPassToAll()
        {
            var loginCell    = _config.CurrentValue.RaidbotsAccountData.LoginCellAddress;
            var passwordCell = _config.CurrentValue.RaidbotsAccountData.PasswordCellAddress;
            var allowedRole  = _config.CurrentValue.RaidbotsAccountData.AllowerRoleId;

            var login = await _googleService.ReadCellAsync(loginCell);

            var password = await _googleService.ReadCellAsync(passwordCell);

            foreach (var usr in _discord.GetGuild(_config.CurrentValue.MyGuildId).Users.Where(x => x.Roles.Any(y => y.Id == allowedRole)))
            {
                var container = new EmbedFieldBuilder
                {
                    IsInline = true,
                    Name     = "Dane logowania:",
                    Value    = $"{("Login: "******"Hasło: ".Decorate(Decorator.Bold))}{password.Decorate(Decorator.Inline_code)}"
                };

                var emb = new EmbedBuilder
                {
                    Color = Color.Blue,
                    Url   = @"https://www.raidbots.com/auth",
                    Title = $"Konto do raidbotsów"
                };

                var footer = new EmbedFooterBuilder
                {
                    Text = $"[{DateTime.Now:yyyy-MM-dd  HH:mm:ss}]"
                };

                emb.Footer = footer;
                emb.AddField(container);

                try
                {
                    await usr.SendMessageAsync(string.Empty, false, emb.Build());

                    await Context.Channel.SendMessageAsync($"Wysłano wiadomość z danymi dostępowymi do: {_discordContext.GetUserNickname(usr.Id)}");
                }
                catch (Discord.Net.HttpException ex)
                {
                    if (ex.DiscordCode == 50007)
                    {
                        await Context.Channel.SendMessageAsync($"Użytkownik nie zezwala na DM: {_discordContext.GetUserNickname(usr.Id)}");
                    }
                    else
                    {
                        await Context.Channel.SendMessageAsync($"Błąd doscorda: {_discordContext.GetUserNickname(usr.Id)} ([{ex.DiscordCode}] - {ex.Message})");
                    }
                }
                catch (Exception ex)
                {
                    await Context.Channel.SendMessageAsync($"Błąd bota: {_discordContext.GetUserNickname(usr.Id)} ({ex.Message})");
                }
            }
        }
Beispiel #2
0
        public async Task UserFlask()
        {
            var userDiscordTag = $"{Context.User.Username}#{Context.User.Discriminator}"; // create full DiscordTag
            var userDiscordId  = Context.User.Id;
            var googleSettings = _config.CurrentValue.GoogleSettings;                     // gets curent value of GoogleSettings

            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 userData = flaskData.FirstOrDefault(x => x.DiscordId == userDiscordId);
                if (userData != null)
                {
                    var sb = new StringBuilder();
                    sb.AppendLine($"[Ostatnia aktualizacja: {reportDateResoult:dd.MM.yyyy HH:mm}]".Decorate(Decorator.Bold));
                    sb.Append(Context.User.Mention);
                    sb.Append($" <{userData.WowNick}> masz ");
                    sb.Append(userData.FlaskCount.ToString().Decorate(Decorator.Underline));
                    sb.Append($" {userData.FlaskCount.FlaskGrammaVariety()}");

                    if (userData.FlaskCount < 0)
                    {
                        sb.AppendLine(string.Empty);
                        sb.AppendLine(string.Empty);
                        sb.AppendLine("Jak najszybciej uzupełnij brakujące flaszki!".Decorate(Decorator.underline_bold_italics));
                    }

                    await Context.Channel.SendMessageAsync(sb.ToString());
                }
                else
                {
                    await Context.Channel.SendMessageAsync("Brak w bazie... sorry\nJeżeli jest to błąd skontaktuj się z administratorem");

                    await _logger.WriteLog($"Can't find data in GooglSheets for user {userDiscordTag}({userDiscordId})");
                }
            }
            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)}");
            }
        }
        private async void SubstractFlasks(List <Friendly> characters, int count, DateTime fightDate)
        {
            var googleSettings = _config.CurrentValue.GoogleSettings;
            var nerdRoster     = await _googleService.GetNerdsAsync();

            var curentValues = await _googleService.ReadDataAsync <FlaskModel>(googleSettings.FlaskData.ReportValuesAddres);

            var newMembersLastRow = (await _googleService.ReadCellAsync(googleSettings.NewMembers.ConfigLastRow)).GetInt();

            var newMembers = new List <Friendly>();

            foreach (var character in characters)
            {
                var raider = nerdRoster.FirstOrDefault(x => x.AllNicks.Contains(character.Name, StringComparer.InvariantCultureIgnoreCase));
                if (raider != null)
                {
                    if (raider.Handled)
                    {
                        continue;                // skip if already counted
                    }
                    var flaskData = curentValues.First(x => x.WowNick == raider.MainNick);

                    if (flaskData != null)
                    {
                        flaskData.FlaskCount -= count;
                    }
                    else
                    {
                        newMembers.Add(character);    // missing data
                    }
                    raider.Handled = true;
                }
                else
                {
                    newMembers.Add(character);
                }
            }

            var rangeToSave  = string.Format(googleSettings.FlaskData.ReportFlaskCountAddresTemplate, curentValues.Count + 1);
            var valuesToSave = curentValues.Select(x => x.FlaskCount).ToList();

            var newMembersRangeToSave  = string.Format(googleSettings.NewMembers.NewMembersAddresTemplate, newMembersLastRow, newMembersLastRow + newMembers.Count);
            var newMembersValuesToSave = newMembers.Select(x => new { fightDate = fightDate.ToString("yyyy-MM-dd"), x.Name, x.Server, x.Type }).ToList();

            await _googleService.WriteDataAsync(rangeToSave, valuesToSave);

            await _googleService.WriteDataAsync(newMembersRangeToSave, newMembersValuesToSave);

            await _googleService.WriteDataAsync(googleSettings.FlaskData.ReportSubstarctDateAddres, DateTime.Now.ToString(googleSettings.FlaskData.ReportDateFormat));
        }