Example #1
0
        public async Task CreateAsync(UpdateMessage message)
        {
            var chatId = message.Message.Chat.Id;
            var name   = message.Message.Text.Trim();

            var occasions = _occasionRepository.GetByChatId(chatId);

            if (occasions.Any(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase)))
            {
                await _telegramClient.SendMessageAsync(new SendMessage
                {
                    ChatId = chatId,
                    Text   = Messages.OccasionAllreadyExists
                });

                return;
            }

            await _occasionRepository.CreateAsync(new OccasionEntity
            {
                PartitionKey = chatId,
                RowKey       = Guid.NewGuid().ToString(),
                Timestamp    = _dateTimeService.TableEntityTimeStamp,
                ChatId       = chatId,
                Name         = name
            });
        }
        public async Task ShowAsync(UpdateMessage message)
        {
            var chatId = message.Message.Chat.Id;

            var(pollsCount, chatMemberStats) = await GetStatAsync(chatId);

            var displayTable = GetDisplayTable(pollsCount, chatMemberStats);
            await _telegramClient.SendMessageAsync(new SendMessage
            {
                ChatId    = chatId,
                Text      = displayTable,
                ParseMode = "HTML"
            });
        }
Example #3
0
        public async Task StartAsync(UpdateMessage message)
        {
            var callbackQueryData = message.CallbackQuery.Data.Split(';');
            var occasionId        = callbackQueryData[1];

            var occasion = _occasionRepository.FindById(occasionId);

            if (occasion == null)
            {
                return;
            }

            var activePolls = _pollRepository.Find(x => x.ChatId == occasion.ChatId && !x.IsClosed).ToList();

            if (activePolls.Any())
            {
                await _telegramClient.SendMessageAsync(new SendMessage
                {
                    ChatId = occasion.ChatId,
                    Text   = Messages.ActivePollRunning
                });

                return;
            }

            var sendPollMessage = TelegramMessageFactory.CreateSendPollMessage(occasion.ChatId, occasion.Name);
            var pollMessage     = await _telegramClient.SendPollAsync(sendPollMessage);

            var entity = new PollEntity
            {
                PartitionKey = occasion.ChatId,
                RowKey       = pollMessage.Poll.Id,
                Timestamp    = _dateTimeService.TableEntityTimeStamp,
                ChatId       = occasion.ChatId,
                OccasionId   = occasionId,
                MessageId    = pollMessage.MessageId.ToString(),
                IsClosed     = false
            };

            await _pollRepository.CreateAsync(entity);

            await _telegramClient.AnswerCallbackQuery(new AnswerCallbackQuery
            {
                CallBackQueryId = message.CallbackQuery.Id,
                Text            = Messages.PollStarted
            });
        }
Example #4
0
        public async Task ExecuteAsync(Subscriber subscriber, long chatId)
        {
            var menuKeyboard = new ReplyKeyboardBuilder()
                               .AddRow(new ReplyKeyboardButton(configuration.TelegramSearchSettingRequestWords))
                               .AddRow(new ReplyKeyboardButton(configuration.TelegramLastNewsRequestFormat));

            await telegramClient.SendMessageAsync(
                chatId,
                "Этот бот поможет тебе найти дешевые билеты в интернетах. Что сделать для тебя, дружище?",
                menuKeyboard);
        }
Example #5
0
        public async Task ProcessTelegramUpdateAsync(TelegramUpdate update, ILogger log)
        {
            log.LogInformation($"Received update: {JsonConvert.SerializeObject(update)}");

            var telegramUsername = update.Username;
            var chatId           = update.ChatId;
            var userId           = update.UserId;

            var subscriber = await GetSubscriberAsync(telegramUsername, chatId, userId);

            var parseResult = commandParser.Parse(update.Text);

            if (!parseResult.IsSuccess)
            {
                await telegramClient.SendMessageAsync(chatId, $"Не могу понять тебя. Ошибка: {parseResult.ErrorMessage}");

                return;
            }

            var command = parseResult.Command;
            await command.ExecuteAsync(subscriber, chatId);
        }
Example #6
0
        public async Task ExecuteAsync(Subscriber subscriber, long chatId)
        {
            var newDate   = DateTime.UtcNow.AddDays(-lastNewsDays);
            var newOffset = newDate.Ticks;

            foreach (var timeline in timelines)
            {
                log.LogInformation($"Rewinding {subscriber.TelegramUsername} offset in {timeline.Name} timeline to {newDate}");
                await notifier.RewindOffsetAsync(subscriber.Id, timeline.Name, newOffset);

                await notifier.NotifyAsync(subscriber);
            }

            await telegramClient.SendMessageAsync(chatId, "Сделано, хозяин!");
        }
Example #7
0
        public async Task ExecuteAsync(Subscriber subscriber, long chatId)
        {
            var replyKeyboard = new[] { 1, 3, 7, 14 }
            .Aggregate(new ReplyKeyboardBuilder(), (builder, x) =>
            {
                var buttonText = PatternParser.ReplacePatternWithInt(configuration.TelegramLastNewsFormat, x);
                return(builder.AddRow(new ReplyKeyboardButton(buttonText)));
            })
            .AddRow(new ReplyKeyboardButton("Обратно!"));

            await telegramClient.SendMessageAsync(
                chatId,
                "За какой период будем искать?",
                replyKeyboard);
        }
        private static async Task SendMessageToChannel(ITelegramClient client)
        {
            var dialogs = (TlDialogs)await client.GetUserDialogsAsync();

            var chat = dialogs.Chats.Lists
                       .OfType <TlChannel>()
                       .FirstOrDefault(c => c.Title == "Виктор Борисов");

            await client.SendMessageAsync(
                new TlInputPeerChannel
            {
                ChannelId  = chat.Id,
                AccessHash = chat.AccessHash.Value
            },
                "TEST MSG " + Random.Next());
        }
        public async Task SendTextMessage(Peer peer, int receiverId, string msg)
        {
            TlAbsInputPeer receiver = await GetInputPeer(peer, receiverId);

            var update = await _client.SendMessageAsync(receiver, msg);

            Message message = null;

            if (update is TlUpdateShortSentMessage)
            {
                message = _ioc.Resolve <Message>();
                message.FillValues("You", msg, (update as TlUpdateShortSentMessage).TimeUnixToWindows(true));
            }
            else
            {
                message = GetMessage(update);
            }
            OnSendMessage?.Invoke(message);
        }
        public async Task Error_must_be_saved()
        {
            // arrange
            var item = new Fixture().Create <FeedItem>();

            item.Status = FeedItemStatus.Pending;
            db.FeedItems.Add(item);
            db.SaveChanges();

            telegram
            .SendMessageAsync(item.Subscription.ApplicationUser.TelegramChatId, item.Link)
            .Throws(new Exception());

            // act
            var service = new SenderService(settings, serviceContext, telegram);
            await service.SendPendingsAsync(ct);

            // assert
            db.FeedItems.Count(x => x.Status == FeedItemStatus.Error).Should().Be(1);
            db.ItemErrors.Count().Should().Be(1);
        }
Example #11
0
        private async Task SendMessagesAsync(CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return;
            }

            var messageDateTimes = await _messageSchedule.GetAllScheduledMessageTimes(cancellationToken);

            foreach (var messageTime in messageDateTimes)
            {
                var now = DateTime.Now;

                if (now >= messageTime)
                {
                    var message = await _messageSchedule.GetScheduledMessage(messageTime, cancellationToken);

                    var result = await _telegramClient.SendMessageAsync(
                        category : Enum.Parse <MessageCategory>(messageTime.PartOfDay().Name.ToUpperInvariant()),
                        message.Type,
                        message.Rarity,
                        message.ChatId);

                    await _messageSchedule.RemoveScheduledMessage(messageTime, cancellationToken);

                    if (result.Type == SendMessageResultType.BLOCKED)
                    {
                        _logger.LogInformation($"Blocked by user. ChatId: {message.ChatId}");

                        await _userStorage.RemoveUser(message.ChatId);

                        await _messageSchedule.RemoveScheduledMessagesForChat(message.ChatId, cancellationToken);

                        return;
                    }
                }
            }
        }
        public async Task ExecuteAsync(Subscriber subscriber, long chatId)
        {
            await telegramClient.SendMessageAsync(chatId,
                                                  "Чтобы настроить поиск, нужно послать боту сообщение в таком формате:");

            await telegramClient.SendMessageAsync(chatId,
                                                  $"{configuration.TelegramSearchSettingWords} [Дублин, Майорка, Вена]");

            await telegramClient.SendMessageAsync(chatId,
                                                  "Бот будет искать новости, в тексте который есть слова 'Дублин', 'Майорка' или 'Вена'");

            await telegramClient.SendMessageAsync(chatId,
                                                  "Если хочешь, чтобы обязательно встретилось несколько слов, можешь обернуть их в круглые скобки:");

            await telegramClient.SendMessageAsync(chatId,
                                                  $"{configuration.TelegramSearchSettingWords} (Тайланд, дешево)");

            await telegramClient.SendMessageAsync(chatId,
                                                  "Условия можно комбинировать как тебе захочется! Например, если хочешь полететь в Тайланд дешево или в Дублин дорого, сделай так:");

            await telegramClient.SendMessageAsync(chatId,
                                                  $"{configuration.TelegramSearchSettingWords} [(Тайланд, дешево), (Дублин, дорого)]");
        }
 private async Task SendMessage(ITelegramClient client, TlUser user)
 {
     await client.SendMessageAsync(new TlInputPeerUser { UserId = user.Id }, "TEST_" + Random.Next());
 }
Example #14
0
        public async Task ExecuteAsync(Subscriber subscriber, long chatId)
        {
            await subscriberStorage.UpdateNotificationTriggerAsync(subscriber.Id, notificationTrigger);

            await telegramClient.SendMessageAsync(chatId, "Принято, босс! Теперь бот будет присылать только новости с такими словами");
        }