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);
        }
Exemplo n.º 2
0
        public async Task <SendMessageResult> SendMessageAsync(MessageCategory category, MessageType type, MessageRarity rarity, long chatId)
        {
            var redalertMessage = false;

            var message = await _messageTextProvider.GetMessage(category, type, rarity, chatId);

            if (message == null)
            {
                message.Text    = Const.RedAlertMessage;
                redalertMessage = true;
            }

            try
            {
                if (message.ImageUrl == null)
                {
                    await _telegramBotClientWrapper.Client.SendTextMessageAsync(chatId, message.Text);
                }
                else
                {
                    await _telegramBotClientWrapper.Client.SendPhotoAsync(chatId, message.ImageUrl, caption : message.Text);
                }
            }
            catch (ApiRequestException ex)
            {
                if (ex.Message.Contains("blocked"))
                {
                    var result = SendMessageResult.CreateBlocked();
                    return(result);
                }

                _logger.LogError(ex.ToString());

                return(SendMessageResult.CreateUnknown());
            }

            if (redalertMessage)
            {
                _logger.LogInformation($"RedAlert message sent. ChatId: {chatId}.");
            }
            else
            {
                _logger.LogInformation($"Message sent. " +
                                       $"ChatId: {chatId}, " +
                                       $"Category: {category}, " +
                                       $"Type: {type}, " +
                                       $"Rarity: {rarity}.");
            }

            return(SendMessageResult.CreateSuccess());
        }
Exemplo n.º 3
0
        public async Task ProcessUserInput(string userInput, long chatId)
        {
            var realUser = await _userStorage.GetUserByChatIdNoTracking(chatId);

            if (userInput.StartsWith("/"))
            {
                await _commandProcessor.ProcessCommand(userInput.TrimStart('/'), chatId);
            }
            else
            {
                var responseMessage = await _botMessageProvider.GetMessage(
                    category : MessageCategory.SIMPLERESPONSE,
                    type : MessageType.STANDARD,
                    rarity : _rarityRoller.RollRarityForUser(realUser),
                    chatId);

                await _botClient.SendTextMessageAsync(chatId, responseMessage.Text);
            }
        }