예제 #1
0
 public int GetTotalUsers()
 {
     using (var context = _dbContextFactory.Create())
     {
         return(context.User.Count());
     }
 }
        public async Task <List <Message> > SendWakeUpMessageToAllUsersAsync(CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            var sentMessages = new List <Message>();

            IEnumerable <UserDbo> users = null;

            using (var context = _dbContextFactory.Create())
            {
                users = context.User
                        .Include(x => x.UserSettings)
                        .Include(x => x.RarityWeights)
                        .Where(x => x.UserSettings.RecieveReminders);
            }

            foreach (var user in users)
            {
                Message sentMessage = null;
                var     rarity      = _rarityRoller.RollRarityForUser(user);
                var     message     = await _messageTextProvider.GetMessage(MessageCategory.WAKEUP, MessageType.STANDARD, rarity, user.ChatId); // could already pass gender and so on

                if (message.ImageUrl == null)
                {
                    sentMessage = await _botClient.SendTextMessageAsync(user.ChatId, message.Text);
                }
                else
                {
                    sentMessage = await _botClient.SendPhotoAsync(user.ChatId, message.ImageUrl, caption : message.Text);
                }

                sentMessages.Add(sentMessage);
            }

            return(sentMessages);
        }
예제 #3
0
        public DoubleUserStorage(
            ILogger <DoubleUserStorage> logger
            , IOptions <ScheduledMessageServiceAppSettings> appSettings
            , IBoyfriendBotDbContextFactory dbContextFactory
            )
        {
            _logger = logger;
            _scheduledMessageServiceAppSettings = appSettings.Value;
            _dbContextFactory = dbContextFactory;

            using (var context = _dbContextFactory.Create())
            {
                var dbos = context.User.ToList();

                dbos.ForEach(x => _userCache.Add(x.UserId, x.ChatId));
            }
        }
예제 #4
0
        public override async Task Execute(long chatId, params string[] args)
        {
            var settingId    = args[0];
            var settingValue = args[1];
            var user         = await _userStorage.GetUserByChatIdNoTracking(chatId);

            var userId = user.UserId;

            var messageId = 0;

            if (args.Length == 3)
            {
                int.TryParse(args[2], out messageId);
            }

            var query = $"UPDATE \"UserSettings\" SET \"{settingId}\" = {settingValue} WHERE \"UserId\" = {userId}";

            using (var context = _contextFactory.Create())
            {
                try
                {
                    await((DbContext)context).Database.ExecuteSqlRawAsync(query);

                    _logger.LogError($"Executed query \"{query}\". ChatId: {chatId}");

                    await _botClient.SendTextMessageAsync(chatId, "Готово!");

                    //if (messageId == 0)
                    //{
                    //    await _botClient.SendTextMessageAsync(chatId, "Готово!");
                    //
                    //}
                    //else
                    //{
                    //    await _botClient.EditMessageTextAsync(chatId, messageId, "Готово!");
                    //}
                }
                catch (Exception ex)
                {
                    _logger.LogError($"Query \"{query}\" wasn't executed. Exception: {ex.ToString()}");
                    await _botClient.SendTextMessageAsync(chatId, Const.ErrorMessage);
                }
            }
        }