public async Task GetUsers(long chatId) { var user = _dbContext.Users.Where(x => x.ChatId == chatId.ToString()).SingleOrDefault(); if (user == null) { await Bot.Api.SendTextMessageAsync (chatId, "Подписка не активна."); return; } var clearedPhoneNumber = _phoneHelper.Clear(user.PhoneNumber); if (_configService.Config.Admins.Contains(clearedPhoneNumber)) { var result = string.Join("\n", _dbContext.Users.Select(x => $"{x.Username} {_phoneHelper.Format(x.PhoneNumber)}").ToArray()); await Bot.Api.SendTextMessageAsync (chatId, $"Список активных пользователей:\n{result}"); await _logger.LogIncoming(LogConst.AdminRequestUsers, _phoneHelper.Format(user.PhoneNumber)); await _newLogger.LogByType(MessageTypes.System, LogConst.UserRequestSubscribe, _phoneHelper.Format(user.PhoneNumber)); return; } await _logger.LogIncoming(LogConst.RequestUsersButPermissionDenied, _phoneHelper.Format(user.PhoneNumber)); await _newLogger.LogByType(MessageTypes.System, LogConst.RequestUsersButPermissionDenied, _phoneHelper.Format(user.PhoneNumber)); }
public async Task RequestSubscribe(long chatId, string username) { var user = _dbContext.Users.Where(x => x.ChatId == chatId.ToString()).SingleOrDefault(); if (user != null) { await Bot.Api.SendTextMessageAsync(chatId, _configService.Config.AlreadySubscribedMessage); await _logger.LogAuth(LogConst.UserAlreadySubscribetButSendStart, _phoneHelper.Format(user.PhoneNumber)); await _newLogger.LogByType(MessageTypes.Incoming, LogConst.UserRequestSubscribe, user.PhoneNumber); return; } await Bot.Api.SendTextMessageAsync (chatId, _configService.Config.HelloMessage, replyMarkup : phoneNumberKeyboard); await _logger.LogAuth(LogConst.UserRequestSubscribe, username); await _newLogger.LogByType(MessageTypes.Auth, LogConst.UserRequestSubscribe, username); }
public async Task Process(CancellationToken cancellation) { var errorList = new List <string>(); var sendedList = new List <SendedMessage>(); var isErrorSended = false; var isSuccessSended = false; try { if (!CheckEnable()) { _toFileLogger.LogInformation("Sendidng stoped. Do nothing."); await _logger.LogSended(LogConst.SendedStopedDoNothing, null); await _newLogger.LogByType(MessageTypes.System, LogConst.SendedStopedDoNothing); return; } _toFileLogger.LogInformation("Start sending..."); await _logger.LogSystem(LogConst.StartSending, null); await _newLogger.LogByType(MessageTypes.System, LogConst.StartSending); if (!IsListValid()) { await _logger.LogError(LogConst.InvalidConfig); await _newLogger.LogByType(MessageTypes.Errors, LogConst.InvalidConfig); return; } var rows = await _messageDataSource.GetMessages(_config); var sendedMesageCount = 0; if (rows != null) { var rowsForUpdate = new Dictionary <string, List <INeedSend> >(); foreach (var message in rows.OrderBy(x => x.LastModifiedDate)) { { var text = message.Text; if (message.To == null) { var list = message.CellForUpdate.Substring(0, message.CellForUpdate.IndexOf('!')); // Regex.Match(message.CellForUpdate, @"/^(.*?)\!/").Groups[0]; var cellWithoutList = message.CellForUpdate.Substring(message.CellForUpdate.IndexOf('!') + 1, message.CellForUpdate.Length - list.Length - 1); // Regex.Match(message.CellForUpdate, @"/[^!]*$/").Groups[0]; var rownum = Regex.Match(cellWithoutList, @"\d+").Value; var errNoPhone = $"У пользователя в таблице {message.Table } на листе {list} в строке {rownum} не указан номер телефона, сообщение НЕ отправлено!"; errorList.Add(errNoPhone); await _newLogger.LogByType(MessageTypes.Errors, errNoPhone); continue; } //TODO! Validation to separate service if (_phoneHelper.IsPhone(message.To)) { message.To = _phoneHelper.Format(message.To); } if (string.IsNullOrEmpty(message.Text)) { var list = message.CellForUpdate.Substring(0, message.CellForUpdate.IndexOf('!')); // Regex.Match(message.CellForUpdate, @"/^(.*?)\!/").Groups[0]; var cellWithoutList = message.CellForUpdate.Substring(message.CellForUpdate.IndexOf('!') + 1, message.CellForUpdate.Length - list.Length - 1); // Regex.Match(message.CellForUpdate, @"/[^!]*$/").Groups[0]; var rownum = Regex.Match(cellWithoutList, @"\d+").Value; var errEmptyMessage = $"В таблице {message.Table } на листе {list} в строке {rownum} пустое сообщение. Из этой строки ничего не отправляю!"; errorList.Add(errEmptyMessage); await _newLogger.LogByType(MessageTypes.Errors, errEmptyMessage); continue; } var senderAgent = _senderAgentProvider.Resolve(message.SenderType); var sendResult = await senderAgent.Send(message); if (sendResult.IsSuccess) { sendedList.Add(new SendedMessage() { Message = message.Text, To = message.To }); await _newLogger.LogByType(MessageTypes.Outgoing, $"На {message.SenderType} : {message.Text}", _phoneHelper.Clear(message.To)); if (!rowsForUpdate.ContainsKey(message.Table)) { rowsForUpdate[message.Table] = new List <INeedSend>(); } rowsForUpdate[message.Table].Add(message); sendedMesageCount++; } else { var sendErr = $"Не удалось отправить сообщение пользователю {message.To}. Ошибка: {sendResult.Error}"; errorList.Add(sendErr); await _newLogger.LogByType(MessageTypes.Errors, sendErr); } } } if (rowsForUpdate.Count > 0) { foreach (var item in rowsForUpdate) { var updateResult = await _messageDataSource.UpdateMessageStatus(item.Value); } } await _logger.LogErrorList(errorList); isErrorSended = true; await _logger.LogSendedList(sendedList); isSuccessSended = true; } var sendingEnded = $"Отправка сообщений закончена. Сообщений отправлено: {sendedMesageCount}"; await _logger.LogSystem(sendingEnded, null); await _newLogger.LogByType(MessageTypes.System, sendingEnded); _toFileLogger.LogInformation($"End sending. Message count: {sendedMesageCount}"); } catch (Exception err) { _toFileLogger.LogError(err, err.Message); if (!isErrorSended) { await _logger.LogErrorList(errorList); } if (!isSuccessSended) { await _logger.LogSendedList(sendedList); } var errToLog = $"Произошла непредвиденная ошибка во время отправки сообщений! Подробнее: {err.Message} . Stack Trace : {err.StackTrace}"; await _newLogger.LogByType(MessageTypes.SystemErrors, errToLog); await _logger.LogError(errToLog); } }