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)); }
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))); }