示例#1
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)}");
            }
        }
示例#2
0
        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));
        }
示例#3
0
        public async Task UserLeftServer(SocketGuildUser arg)
        {
            var leaveDate = DateTime.Now;
            var role      = string.Empty;

            foreach (var rola in arg.Roles.Where(x => x.Name != "@everyone"))
            {
                role += string.IsNullOrEmpty(role)
                    ? rola.Name
                    : $"; {rola.Name}";
            }

            role = string.IsNullOrEmpty(role) ? "---" : role.Replace("@", string.Empty);

            var sb = new StringBuilder();

            sb.AppendLine($"Użytkownik opuścił serwer:".Decorate(Decorator.Underline_bold));
            sb.AppendLine(string.Empty);
            sb.AppendLine("\t" + "Discord: ".Decorate(Decorator.Bold) + $"{arg.Username}#{arg.DiscriminatorValue}".Decorate(Decorator.Italics));
            sb.AppendLine("\t" + "Nick: ".Decorate(Decorator.Bold) + arg.Nickname.Decorate(Decorator.Italics));
            sb.AppendLine("\t" + "Role: ".Decorate(Decorator.Bold) + role.Decorate(Decorator.Italics));
            sb.AppendLine("\t" + "Dołączył: ".Decorate(Decorator.Bold) + (arg.JoinedAt?.ToString("yyyy-MM-dd") ?? "brak danych").Decorate(Decorator.Italics));

            var auditLogsData = await arg.Guild.GetAuditLogsAsync(100).Flatten().Where(x => x.Action == ActionType.Kick || x.Action == ActionType.Ban).ToListAsync();

            var kicked = auditLogsData.FirstOrDefault(x =>
            {
                var auditDate = (DateTimeOffset)x.CreatedAt;
                var cDate     = auditDate.LocalDateTime;
                var bTime     = cDate.Year == leaveDate.Year && cDate.Month == leaveDate.Month && cDate.Day == leaveDate.Day && cDate.Hour == leaveDate.Hour && Math.Abs(cDate.Minute - leaveDate.Minute) <= 1;

                switch (x.Action)
                {
                case ActionType.Kick:
                    var auditDataKick = (Discord.Rest.KickAuditLogData)x.Data;
                    var b1            = auditDataKick.Target.Id == arg.Id;

                    return(b1 && bTime);

                case ActionType.Ban:
                    var auditDataBan = (Discord.Rest.BanAuditLogData)x.Data;
                    var b2           = auditDataBan.Target.Id == arg.Id;

                    return(b2 && bTime);

                default:
                    return(false);
                }
            });

            if (kicked != null)
            {
                var guildUser = _discord.GetGuild(_config.CurrentValue.MyGuildId).GetUser(kicked.User.Id);
                var userName  = _discordContext.GetUserNickname(kicked.User.Id);

                var kickBan = kicked.Action == ActionType.Ban
                    ? "zbanowany"
                    : "wyrzucony";

                sb.AppendLine(string.Empty);
                sb.AppendLine();
                sb.AppendLine($"Użytkownik został {kickBan} przez {userName}".Decorate(Decorator.Bold));
            }

            var adminChannel = _discord.GetChannel(_config.CurrentValue.AdminChannelId) as SocketTextChannel;
            var curentValues = await _googleService.ReadDataAsync <FlaskModel>(_config.CurrentValue.GoogleSettings.FlaskData.ReportValuesAddres);

            await adminChannel.SendMessageAsync(sb.ToString(), embed : NerdChecker.GetNerdArmory(curentValues.FirstOrDefault(x => x.DiscordId == arg.Id)));
        }