/// <summary>
        /// Requests the contact from the user.
        /// </summary>
        /// <param name="buttonText"></param>
        /// <param name="requestMessage"></param>
        /// <param name="OneTimeOnly"></param>
        /// <returns></returns>
        public async Task <Message> RequestContact(String buttonText = "Send your contact", String requestMessage = "Give me your phone number!", bool OneTimeOnly = true)
        {
            var rck = new ReplyKeyboardMarkup(KeyboardButton.WithRequestContact(buttonText));

            rck.OneTimeKeyboard = OneTimeOnly;
            return(await API(a => a.SendTextMessageAsync(this.DeviceId, requestMessage, replyMarkup: rck)));
        }
Beispiel #2
0
        private async static void Bot_OnMessage(object sender, MessageEventArgs e)
        {
            var msg = e.Message;

            if (msg.Text == "/start")
            {
                string texto = $"🙋‍♂️ Olá *{msg.Chat.FirstName} {msg.Chat.LastName}*. O texto que você enviar será retornado pelo Bot. " +
                               $"Você pode compartilhar a sua *localização* ou o seu *contato*, basta pressionar os botões abaixo.";

                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("📍 Localização"),
                    KeyboardButton.WithRequestContact("👤 Contato"),
                });
                await bot.SendTextMessageAsync(
                    chatId : msg.Chat.Id,
                    text : texto,
                    parseMode : ParseMode.Markdown,
                    replyMarkup : RequestReplyKeyboard);
            }

            else if (msg.Type == MessageType.Text)
            {
                await bot.SendTextMessageAsync(msg.Chat.Id, $"Olá *{msg.Chat.FirstName}*. \nVocê escreveu: \n*{msg.Text}*", ParseMode.Markdown);
            }
        }
        public async Task Should_Receive_Contact_Info()
        {
            await _fixture.SendTestCaseNotificationAsync(FactTitles.ShouldReceiveContactInfo);

            await BotClient.SendTextMessageAsync(
                chatId : _classFixture.PrivateChat,
                text : "Share your contact info using the keyboard reply markup provided.",
                replyMarkup : new ReplyKeyboardMarkup(
                    keyboardRow: new[] { KeyboardButton.WithRequestContact("Share Contact"), },
                    resizeKeyboard: true,
                    oneTimeKeyboard: true
                    )
                );

            Message contactMessage = await GetMessageFromChat(MessageType.Contact);

            Assert.NotEmpty(contactMessage.Contact.FirstName);
            Assert.NotEmpty(contactMessage.Contact.PhoneNumber);
            Assert.Equal(_classFixture.PrivateChat.Id, contactMessage.Contact.UserId);

            await BotClient.SendTextMessageAsync(
                chatId : _classFixture.PrivateChat,
                text : "Got it. Removing reply keyboard markup...",
                replyMarkup : new ReplyKeyboardRemove()
                );
        }
Beispiel #4
0
        private async Task Receive(Message message)
        {
            try
            {
                var phoneChatId = _phoneChatIds.FirstOrDefault(x => x.ChatId == message.Chat.Id);
                if (phoneChatId == null && message.Contact == null)
                {
                    await _botClient.SendTextMessageAsync(
                        chatId : message.Chat,
                        text : "Пожалуйста, расшарьте Ваш номер телефона",
                        replyMarkup : new ReplyKeyboardMarkup(
                            new[] { KeyboardButton.WithRequestContact("Share Contact") }, true, true
                            )
                        );

                    _logService.TraceMessage($"Новый пользователь: {message.Chat.Username}");
                }
                else
                {
                    if (phoneChatId == null)
                    {
                        lock (this)
                        {
                            string phone = message.Contact.PhoneNumber.Replace("+", "");
                            phoneChatId = new PhoneChatId()
                            {
                                ChatId  = message.Chat.Id,
                                Phone   = phone,
                                Allowed = _allowedPhoneNumbers.Any(x => x == phone)
                            };
                            _phoneChatIds.Add(phoneChatId);

                            XmlSerializer xsr = new XmlSerializer(typeof(List <PhoneChatId>));
                            using (StreamWriter tw = new StreamWriter(_phoneChatIdsFile))
                            {
                                xsr.Serialize(tw, _phoneChatIds);
                            }
                        }
                    }
                    if (phoneChatId.Allowed)
                    {
                        await _botClient.SendTextMessageAsync(
                            chatId : message.Chat,
                            text : "Вы подключены. Заявки будут высылаться вам автоматически."
                            );
                    }
                    else
                    {
                        await _botClient.SendTextMessageAsync(
                            chatId : message.Chat,
                            text : "У вас нет доступа"
                            );
                    }
                }
            }
            catch (Exception e)
            {
                _logService.LogError(e);
            }
        }
Beispiel #5
0
        public void AddRequestContact(string text)
        {
            KeyboardButton btn = KeyboardButton.WithRequestContact(text);

            _buttons.Add(new List <KeyboardButton> {
                btn
            });
        }
 public static async Task AskLocationMessage(long chatId)
 {
     await botClient.SendTextMessageAsync(chatId : chatId, text : "Share your contact & location",
                                          replyMarkup : new ReplyKeyboardMarkup(new [] {
         new [] { KeyboardButton.WithRequestContact("Share Contact") },
         new [] { KeyboardButton.WithRequestLocation("Share Location") }
     }
                                                                                ));
 }
Beispiel #7
0
 internal static IReplyMarkup GetRequestcontactKeyboard(string text)
 {
     return(new ReplyKeyboardMarkup
     {
         Keyboard = new KeyboardButton[][]
         {
             new KeyboardButton[] { KeyboardButton.WithRequestContact(text) },
         },
         ResizeKeyboard = true,
         OneTimeKeyboard = true,
     });
 }
 static async Task RequestContact(Message message)
 {
     var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
     {
         KeyboardButton.WithRequestContact("Contact"),
     });
     await Bot.SendTextMessageAsync(
         chatId : message.Chat.Id,
         text : "Who are you?",
         replyMarkup : RequestReplyKeyboard
         );
 }
Beispiel #9
0
            static async Task <Message> RequestContactAndLocation(ITelegramBotClient botClient, Message message)
            {
                ReplyKeyboardMarkup RequestReplyKeyboard = new(
                    new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });

                return(await botClient.SendTextMessageAsync(chatId : message.Chat.Id,
                                                            text : "Who or Where are you?",
                                                            replyMarkup : RequestReplyKeyboard));
            }
        public async void request(TelegramBotClient Bot, Message message)
        {
            var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
            {
                KeyboardButton.WithRequestLocation("Location"),
                KeyboardButton.WithRequestContact("Contact"),
            });

            await Bot.SendTextMessageAsync(
                message.Chat.Id,
                "Who or Where are you?",
                replyMarkup : RequestReplyKeyboard);
        }
Beispiel #11
0
        private async Task SendReplyKeyboard(Message message)
        {
            var replyKeyboardMarkup = new ReplyKeyboardMarkup(
                new[]
            {
                new[] { KeyboardButton.WithRequestLocation("Location"), "1" },
                new[] { KeyboardButton.WithRequestContact("Contact"), "2" },
            },
                true
                );

            await _client.SendTextMessageAsync(message.Chat.Id, Strings.Choose, replyMarkup : replyKeyboardMarkup);
        }
Beispiel #12
0
 static async Task RequestContactAndLocation(Message message)
 {
     var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
     {
         KeyboardButton.WithRequestLocation("Location"),
         KeyboardButton.WithRequestContact("Contact"),
     });
     await botClient.SendTextMessageAsync(
         chatId : message.Chat.Id,
         text : "Who or Where are you?",
         replyMarkup : RequestReplyKeyboard
         );
 }
Beispiel #13
0
        public async void GetContact()
        {
            var messageToSent = "Для дальнейшей связи после оплаты нам потребуются твои контактные данные.";

            shareButton = new ReplyKeyboardMarkup(new[]
            {
                KeyboardButton.WithRequestContact("Поделиться"),
            });
            await client.SendTextMessageAsync(
                chatId : msg.Chat.Id,
                text : messageToSent,
                replyMarkup : shareButton
                );
        }
Beispiel #14
0
        public async Task Should_Throw_Exception_ContactRequestException()
        {
            await _fixture.SendTestCaseNotificationAsync(FactTitles.ShouldThrowExceptionContactRequestException);

            ReplyKeyboardMarkup replyMarkup = new ReplyKeyboardMarkup(new[]
            {
                KeyboardButton.WithRequestContact("Share Contact"),
            });

            BadRequestException e = await Assert.ThrowsAnyAsync <BadRequestException>(() =>
                                                                                      BotClient.SendTextMessageAsync(_fixture.SupergroupChat.Id, "You should never see this message",
                                                                                                                     replyMarkup: replyMarkup));

            Assert.IsType <ContactRequestException>(e);
        }
        public async Task Should_Throw_Exception_ApiRequestException()
        {
            ReplyKeyboardMarkup replyMarkup = new ReplyKeyboardMarkup(new[]
            {
                KeyboardButton.WithRequestContact("Share Contact"),
            });

            ApiRequestException exception = await Assert.ThrowsAnyAsync <ApiRequestException>(() =>
                                                                                              BotClient.SendTextMessageAsync(
                                                                                                  chatId: _fixture.SupergroupChat.Id,
                                                                                                  text: "You should never see this message",
                                                                                                  replyMarkup: replyMarkup
                                                                                                  )
                                                                                              );

            Assert.Equal(400, exception.ErrorCode);
        }
        /// <summary>
        ///     Выполнение комады Start
        /// </summary>
        /// <param name="message">Сообщение из чата Telegram</param>
        /// <param name="client">Клиент для отправи ответа в Telegram</param>
        public async override void Execute(Message message, TelegramBotClient client)
        {
            var ChatId     = message.Chat.Id;
            var MessageId  = message.MessageId;
            var getContact = KeyboardButton.WithRequestContact("\U0001F4DE" + " Log in");

            var ButtonsMenu = new ReplyKeyboardMarkup();

            ButtonsMenu.Keyboard = new KeyboardButton[][] {
                new KeyboardButton[] {
                    getContact
                },
            };

            ButtonsMenu.ResizeKeyboard = true;
            await client.SendTextMessageAsync(ChatId, "Для авторизации в системе нажмите кнопку Log in",
                                              Telegram.Bot.Types.Enums.ParseMode.Default, false, true, replyToMessageId : MessageId, ButtonsMenu);
        }
Beispiel #17
0
        public async Task Should_Throw_ContactRequestException_When_Asked_To_Share_Contact_In_Non_Private_Chat()
        {
            ReplyKeyboardMarkup replyMarkup = new ReplyKeyboardMarkup(new[]
            {
                KeyboardButton.WithRequestContact("Share Contact"),
            });

            ContactRequestException exception = await Assert.ThrowsAsync <ContactRequestException>(
                async() => await BotClient.SendTextMessageAsync(
                    Fixture.SupergroupChat.Id,
                    "You should never see this message",
                    replyMarkup: replyMarkup
                    )
                );

            Assert.Equal(400, exception.ErrorCode);
            Assert.Contains("phone number can be requested in private chats only", exception.Message);
        }
Beispiel #18
0
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message.Type == MessageType.Text)
            {
                switch (message.Text.Split(' ').First())
                {
                // request location or contact
                case "/mobile":
                    var requestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                    {
                        KeyboardButton.WithRequestContact("شماره موبایلم را به بات میدهم")
                    });

                    await Bot.SendTextMessageAsync(
                        message.Chat.Id,
                        "لطفا شماره موبایل خود را به بات بدهید",
                        replyMarkup : requestReplyKeyboard);

                    break;


                case "/help":
                    await Help(message);

                    break;


                case "/list":
                    GetFutureGames(message, DateTime.Now);
                    break;

                default:

                    await Bot.SendTextMessageAsync(
                        message.Chat.Id,
                        Usage,
                        replyMarkup : new ReplyKeyboardRemove());

                    break;
                }
            }
            else if (message.Type == MessageType.Contact)
            {
                using (var db = new ApplicationContext())
                {
                    var find = db.Users.AsQueryable().SingleOrDefault(x => x.PhoneNumber == message.Contact.PhoneNumber);
                    if (find == null)
                    {
                        var user = new User()
                        {
                            Id             = Guid.NewGuid(),
                            FirstName      = message.Contact.FirstName,
                            LastName       = message.Contact.LastName,
                            PhoneNumber    = message.Contact.PhoneNumber,
                            TelegramUserId = message.Contact.UserId
                        };
                        db.Users.Add(user);
                        db.SaveChanges();
                        await Help(message);
                    }
                    else
                    {
                        await Bot.SendTextMessageAsync(
                            message.Chat.Id,
                            "شما قبلا ثبت نام کرده اید",
                            replyMarkup : new ReplyKeyboardRemove());
                    }
                }
            }
        }
        public async Task EchoAsync(Update update)
        {
            switch (update.Type)
            {
            case UpdateType.Message:
                var message = update.Message;
                if (message == null || message.Type != MessageType.Text)
                {
                    return;
                }

                _logger.LogInformation("Received Message from {0}", message.Chat.Id);

                switch (message.Text.Split(' ').First())
                {
                // send inline keyboard
                case "/inline":
                    await _botService.Client.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                    await Task.Delay(500);         // simulate longer running task

                    var inlineKeyboard = new InlineKeyboardMarkup(new[]
                    {
                        new []         // first row
                        {
                            InlineKeyboardButton.WithCallbackData("1.1"),
                            InlineKeyboardButton.WithCallbackData("1.2"),
                        },
                        new []         // second row
                        {
                            InlineKeyboardButton.WithCallbackData("2.1"),
                            InlineKeyboardButton.WithCallbackData("2.2"),
                        }
                    });

                    await _botService.Client.SendTextMessageAsync(
                        message.Chat.Id,
                        "Choose",
                        replyMarkup : inlineKeyboard);

                    break;

                // send custom keyboard
                case "/keyboard":
                    ReplyKeyboardMarkup ReplyKeyboard = new[]
                    {
                        new[] { "1.1", "1.2" },
                        new[] { "2.1", "2.2" },
                    };

                    await _botService.Client.SendTextMessageAsync(
                        message.Chat.Id,
                        "Choose",
                        replyMarkup : ReplyKeyboard);

                    break;

                // send a photo
                case "/photo":
                    try
                    {
                        await _botService.Client.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                        var req = HttpWebRequest.Create("https://i.imgur.com/l8WqVDx.png");

                        using (var stream = req.GetResponse().GetResponseStream())
                        {
                            await _botService.Client.SendPhotoAsync(
                                message.Chat.Id,
                                stream,
                                "Nice Picture");
                        }
                    }
                    catch (System.Exception e)
                    {
                        _logger.LogInformation("Exception:{0}", e.Message);
                        throw e;
                    }
                    break;

                // request location or contact
                case "/request":
                    var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                    {
                        KeyboardButton.WithRequestLocation("Location"),
                        KeyboardButton.WithRequestContact("Contact"),
                    });

                    await _botService.Client.SendTextMessageAsync(
                        message.Chat.Id,
                        "Who or Where are you?",
                        replyMarkup : RequestReplyKeyboard);

                    break;

                default:
                    const string usage = @"
Usage:
/inline   - send inline keyboard
/keyboard - send custom keyboard
/photo    - send a photo
/request  - request location or contact";

                    await _botService.Client.SendTextMessageAsync(
                        message.Chat.Id,
                        usage,
                        replyMarkup : new ReplyKeyboardRemove());

                    break;
                }
                break;

            case UpdateType.CallbackQuery:
                var callbackQuery = update.CallbackQuery;
                await _botService.Client.AnswerCallbackQueryAsync(
                    callbackQuery.Id,
                    $"Received {callbackQuery.Data}");

                await _botService.Client.SendTextMessageAsync(
                    callbackQuery.Message.Chat.Id,
                    $"Received {callbackQuery.Data}");

                break;

            default:
                break;
            }
        }
Beispiel #20
0
        static async void OnMessage(object sender, MessageEventArgs e)
        {
            try
            {
                switch (e.Message.Text)
                {
                case "/start":
                    var isUserRegistred = (bool)UserAction.UserAddedTelegram(e.Message.Chat.Id);
                    if (!isUserRegistred)
                    {
                        await botClient.SendTextMessageAsync(
                            chatId : e.Message.Chat.Id,
                            text : "Нажмите Подтвердить, чтобы получать уведомления. ВНИМАНИЕ: подтверждая, вы передаете БЮРО свой номер телефона для регистрации в системе.",
                            replyMarkup : new ReplyKeyboardMarkup(KeyboardButton.WithRequestContact("Подтвердить")));
                    }
                    else
                    {
                        await botClient.SendTextMessageAsync(
                            chatId : e.Message.Chat.Id,
                            text : "Вы уже подписаны"
                            );
                    }

                    break;

                //case "Test":
                //    Dictionary<long, List<PostDTO>> posts = new Dictionary<long, List<PostDTO>>();
                //    posts.Add(127354174, new List<PostDTO> {
                //    new PostDTO() {
                //        FirstName = "Ольга",
                //        LastName = "Бузова",
                //        AvatarUrl = "https://sun9-60.userapi.com/c850324/v850324431/1dffa8/EfHhV4TGJHc.jpg?ava=1",
                //        Text = "Такой потрясающий день🙏🏻 Просто самая лучшая перезарядка🤤🥰 В кругу близких, детишек, на свежем воздухе....природа, устрицы, гребешки 🤤🤤🤤 провожали закат 🌅 Наслаждаюсь каждой секундой 🥰 я люблю тебя жизнь ❤",
                //        Tags = new string[2]{ "#отдых", "#тревл" },
                //        Likes = 8861,
                //        PostUrl = "https://vk.com/olgabuzova?z=photo32707600_457250122%2Falbum32707600_00%2Frev",
                //        Images = new string[1]{ "https://sun9-71.userapi.com/c543105/v543105535/50cb6/Nxirt3LCSes.jpg" }
                //    },
                //    //new PostDTO() {
                //    //    Text = "222 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                //    //},
                //    //new PostDTO() {
                //    //    Text = "333 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
                //    //    Images = new string[3]{"https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Telegram_2019_Logo.svg/1200px-Telegram_2019_Logo.svg.png",
                //    //    "https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Telegram_2019_Logo.svg/1200px-Telegram_2019_Logo.svg.png",
                //    //    "https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Telegram_2019_Logo.svg/1200px-Telegram_2019_Logo.svg.png"}
                //    //}
                //     });
                //    SendMessages(posts);
                //    break;
                default:
                    if (e.Message.Contact != null && e.Message.Contact != null)
                    {
                        string replyText = "Благодарим за подписку";
                        var    userDto   = UserAction.GetUserByPhone(e.Message.Contact.PhoneNumber);
                        if (userDto.ChatId != e.Message.Chat.Id)
                        {
                            if (userDto == null)
                            {
                                userDto = new BLL.DTO.UserDTO()
                                {
                                    FirstName = e.Message.Contact.FirstName,
                                    LastName  = e.Message.Contact.LastName,
                                    Phone     = e.Message.Contact.PhoneNumber,
                                    ChatId    = e.Message.Chat.Id
                                };
                            }
                            else
                            {
                                userDto.ChatId = e.Message.Chat.Id;
                            }
                            UserAction.AddUpdateUser(userDto);
                        }
                        else
                        {
                            replyText = "Вы уже подписаны";
                        }
                        await botClient.SendTextMessageAsync(
                            chatId : e.Message.Chat.Id,
                            text : replyText,
                            replyMarkup : new ReplyKeyboardRemove()
                            );
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #21
0
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            switch (message.Text.Split(' ').First())
            {
            // send inline keyboard
            case "/inline":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                await Task.Delay(500);                         // simulate longer running task

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []                             // first row
                    {
                        InlineKeyboardButton.WithCallbackData("1.1"),
                        InlineKeyboardButton.WithCallbackData("1.2"),
                    },
                    new []                             // second row
                    {
                        InlineKeyboardButton.WithCallbackData("2.1"),
                        InlineKeyboardButton.WithCallbackData("2.2"),
                    }
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : inlineKeyboard);

                break;

            // send custom keyboard
            case "/keyboard":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "1.1", "1.2" },
                    new[] { "2.1", "2.2" },
                };

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : ReplyKeyboard);

                break;

            case "/rootfolderlist":
                var subFolders = Directory.GetDirectories(selectedFolder);
                var items      = subFolders.Count() != 0 ? subFolders.Select(folder => folder.Split(Path.DirectorySeparatorChar).Last()) : Directory.GetFiles(selectedFolder).Select(f => Path.GetFileName(f));

                ReplyKeyboardMarkup keyboardWithFolders = new ReplyKeyboardMarkup(
                    items.Select(folder => new[] { new KeyboardButton(folder) }).Take(20));
                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : keyboardWithFolders);

                ;
                break;

            // send a photo
            case "/photo":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                const string file = @"d:\Temp\1.jpg";

                var fileName = file.Split(Path.DirectorySeparatorChar).Last();

                using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    await Bot.SendPhotoAsync(
                        message.Chat.Id,
                        fileStream,
                        "Nice Picture");
                }
                break;

            // request location or contact
            case "/request":
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard);

                break;

            default:
                if (message.Text.ToLower().EndsWith(".jpg"))
                {
                    var   pathToFile = Path.Combine(selectedFolder, message.Text);
                    Image image      = Image.FromFile(pathToFile);
                    var   aspect     = (double)image.Size.Width / (double)image.Size.Height;
                    Image thumb      = image.GetThumbnailImage((int)(480 * aspect), 480, () => false, IntPtr.Zero);
                    using (MemoryStream imageStream = new MemoryStream())
                    {
                        thumb.Save(imageStream, ImageFormat.Jpeg);
                        imageStream.Position = 0;
                        await Bot.SendPhotoAsync(
                            message.Chat.Id,
                            imageStream,
                            null);
                    }
                    return;
                    // put the image into the memory stream
                }

                selectedFolder = Path.Combine(selectedFolder, message.Text);
                try
                {
                    var sFolders = Directory.GetDirectories(selectedFolder);
                    var itms     = sFolders.Count() != 0 ? sFolders.Select(folder => folder.Split(Path.DirectorySeparatorChar).Last()) : Directory.GetFiles(selectedFolder).Select(f => Path.GetFileName(f));
                    var buttons  = itms.Select(folder => new[] { new KeyboardButton(folder) }).Take(20).ToArray();
                    ReplyKeyboardMarkup _keyboardWithFolders = new ReplyKeyboardMarkup(buttons);
                    await Bot.SendTextMessageAsync(
                        message.Chat.Id,
                        null,
                        replyMarkup : _keyboardWithFolders);

                    ;
                }
                catch (Exception ex)
                {
                    await Bot.SendTextMessageAsync(
                        message.Chat.Id,
                        "Wrong command",
                        replyMarkup : new ReplyKeyboardRemove());
                }
                /**/
                break;
            }
        }
Beispiel #22
0
        private async Task ProcessMessageWithCommands(Message message)
        {
            switch (message.Text.Split(' ').First())
            {
            // send inline keyboard
            case "/inline":
                await _botService.Client.SendChatActionAsync(message.Chat.Id,
                                                             ChatAction.Typing);

                await Task.Delay(500);     // simulate longer running task

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []     // first row
                    {
                        InlineKeyboardButton.WithCallbackData("1.1"),
                        InlineKeyboardButton.WithCallbackData("1.2"),
                    },
                    new []     // second row
                    {
                        InlineKeyboardButton.WithCallbackData("2.1"),
                        InlineKeyboardButton.WithCallbackData("2.2"),
                    }
                });

                await _botService.Client.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : inlineKeyboard
                    );

                break;

            // send custom keyboard
            case "/keyboard":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "1.1", "1.2" },
                    new[] { "2.1", "2.2" },
                };

                await _botService.Client.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : ReplyKeyboard
                    );

                break;

            // send a photo
            case "/photo":
                await _botService.Client.SendChatActionAsync(message.Chat.Id,
                                                             ChatAction.UploadPhoto);

                const string file = @"Files/flat.jpg";

                var fileName = file.Split(Path.DirectorySeparatorChar).Last();

                using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read,
                                                       FileShare.Read))
                {
                    await _botService.Client.SendPhotoAsync(
                        message.Chat.Id,
                        fileStream,
                        "Nice Picture"
                        );
                }
                break;

            // request location or contact
            case "/request":
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });

                await _botService.Client.SendTextMessageAsync(
                    message.Chat.Id,
                    "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard
                    );

                break;

            default:
                const string usage = @"
Usage:
/inline   - send inline keyboard
/keyboard - send custom keyboard
/photo    - send a photo
/request  - request location or contact";

                await _botService.Client.SendTextMessageAsync(
                    message.Chat.Id,
                    usage,
                    replyMarkup : new ReplyKeyboardRemove());

                break;
            }
        }
Beispiel #23
0
        private static async Task BotOnMessageReceived(Message message)
        {
            Console.WriteLine($"Recevie message type: {message.Type}");
            if (message.Type != MessageType.Text)
            {
                return;
            }

            switch (message.Text.Split(' ').First())
            {
            // send inline keyboard
            case "/inline":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                // simulate longer running task
                await Task.Delay(500);

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    // first row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("1.1", "11"),
                        InlineKeyboardButton.WithCallbackData("1.2", "12"),
                    },
                    // second row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("2.1", "21"),
                        InlineKeyboardButton.WithCallbackData("2.2", "22"),
                    }
                });
                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : inlineKeyboard
                    );

                break;

            // send custom keyboard
            case "/keyboard":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "1.1", "1.2" },
                    new[] { "2.1", "2.2" },
                };
                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : ReplyKeyboard
                    );

                break;

            // send a photo
            case "/photo":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                const string file = @"Files/tux.png";
                using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var fileName = file.Split(Path.DirectorySeparatorChar).Last();
                    await Bot.SendPhotoAsync(
                        chatId : message.Chat.Id,
                        photo : new InputOnlineFile(fileStream, fileName),
                        caption : "Nice Picture"
                        );
                }
                break;

            // request location or contact
            case "/request":
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });
                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard
                    );

                break;

            default:
                const string usage = "Usage:\n" +
                                     "/inline   - send inline keyboard\n" +
                                     "/keyboard - send custom keyboard\n" +
                                     "/photo    - send a photo\n" +
                                     "/request  - request location or contact";
                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : usage,
                    replyMarkup : new ReplyKeyboardRemove()
                    );

                break;
            }
        }
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            switch (message.Text.Split(' ').First())
            {
            // send inline keyboard
            case "/inline":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                await Task.Delay(500);     // simulate longer running task

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []     // first row
                    {
                        InlineKeyboardButton.WithCallbackData("1.1"),
                        InlineKeyboardButton.WithCallbackData("1.2"),
                    },
                    new []     // second row
                    {
                        InlineKeyboardButton.WithCallbackData("2.1"),
                        InlineKeyboardButton.WithCallbackData("2.2"),
                    }
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : inlineKeyboard);

                break;

            // send custom keyboard
            case "/keyboard":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "1.1", "1.2" },
                    new[] { "2.1", "2.2" },
                };

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : ReplyKeyboard);

                break;

            // send a photo
            case "/photo":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                const string file = @"Files/tux.png";

                var fileName = file.Split(Path.DirectorySeparatorChar).Last();

                using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    await Bot.SendPhotoAsync(
                        message.Chat.Id,
                        fileStream,
                        "Nice Picture");
                }
                break;

            // request location or contact
            case "/request":
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard);

                break;

            default:
                const string usage = @"
Usage:
/inline   - send inline keyboard
/keyboard - send custom keyboard
/photo    - send a photo
/request  - request location or contact";

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    usage,
                    replyMarkup : new ReplyKeyboardRemove());

                break;
            }
        }
 public static ReplyKeyboardMarkup GetRequestContactReplyMarkup()
 => new ReplyKeyboardMarkup(
     new[]
 {
     KeyboardButton.WithRequestContact("Перевірити номер телефону")
 }, oneTimeKeyboard: true);
Beispiel #26
0
        public async Task NavigateTo(string messageBody, long chatId, int userId, TelegramBotClient _telegramBot)
        {
            await _telegramBot.SendChatActionAsync(chatId, ChatAction.Typing);

            if (messageBody == "🆘 SOS ДТП" ||
                messageBody == "💲 Купить" ||
                messageBody == "☎️ Связаться с оператором" ||
                messageBody == "📝 Мои полисы")
            {
                messagePath = string.Empty;
            }
            else
            {
                messageBody = '\\' + messageBody;
            }

            var responseMessage     = string.Empty;
            var splittedMessageBody = messagePath.Split('\\');

            if (messageBody == "\\🔙 Назад..." || messageBody == "\\⏩ Продолжить...")
            {
                CutMessagePath(splittedMessageBody, 0);
            }
            else
            {
                if (splittedMessageBody[splittedMessageBody.Length - 1] != messageBody)
                {
                    messagePath += messageBody;
                }
            }


            splittedMessageBody = messagePath.Split('\\');
            if (splittedMessageBody.Length > 2 && (splittedMessageBody[splittedMessageBody.Length - 1] == splittedMessageBody[splittedMessageBody.Length - 2]))
            {
                CutMessagePath(splittedMessageBody);
            }

            switch (splittedMessageBody[0])
            {
            case "💲 Купить":
            {
                if (splittedMessageBody.Length > 1)
                {
                    switch (splittedMessageBody[1])
                    {
                    case "Sam takoi":
                    {
                        await _telegramBot.SendTextMessageAsync(
                            chatId,
                            "Ty durak?");

                        break;
                    }

                    case "Izvinis":
                    {
                        await _telegramBot.SendTextMessageAsync(
                            chatId,
                            "izvini");

                        break;
                    }
                    }
                }
                inlineKeyboard = CreateInlineKeyboard("🔙 Назад...|");

                await _telegramBot.SendTextMessageAsync(
                    chatId,
                    "otvet",
                    replyMarkup : inlineKeyboard);

                break;
            }


            case "🆘 SOS ДТП":

                if (splittedMessageBody.Length > 1)
                {
                    switch (splittedMessageBody[1])
                    {
                    case "📞 Контакты при ДТП":
                    {
                        responseMessage = "Вызовите сотрудников административной полиции – 102\n" +
                                          "<b>1) В случае необходимости:</b>\n" +
                                          "\t- 101 – пожарная служба; 🚒\n" +
                                          "\t- 103 – скорая медицинская помощь; 🚑\n" +
                                          "\t- 104 – газовая служба; 👷\n" +
                                          "\t- 112 – служба спасения. ⛑️\n" +
                                          "<b>2) Сообщите другим участникам ДТП номер Вашего полиса ОГПО ВТС и телефон Jysan Garant</b>\n" +
                                          "\t- <b>Контакты для консультации:</b> \n" +
                                          "\tс <b>8:00 до 22:00</b> – call центр: 3264 с мобильных бесплатно, +7 (727) 357 25 25\n" +
                                          "\tс <b>22:00 до 8:00</b> – аварийный комиссар +7 701 529 80 48 🚔\n";

                        inlineKeyboard = CreateInlineKeyboard("🔙 Назад...|");
                        await _telegramBot.SendTextMessageAsync(
                            chatId,
                            responseMessage,
                            replyMarkup : inlineKeyboard,
                            parseMode : ParseMode.Html);

                        break;
                    }

                    case "📝 Список документов":
                    {
                        inlineKeyboard = CreateInlineKeyboard("🔙 Назад...|");
                        await _telegramBot.SendTextMessageAsync(
                            chatId,
                            "1⃣ Включите аварийную световую сигнализацию.\n" +
                            "2⃣ Выставьте знак аварийной остановки(не менее 15 м от авто в населенном пункте и не менее 30 м от - вне населенного пункта).\n" +
                            "3⃣ Вызовите сотрудников административной полиции – 102 👮\n\n" +

                            " В случае необходимости:\n" +
                            "👨‍🚒 101 – пожарная служба;\n" +
                            "👨⚕ 103 – скорая медицинская помощь;\n" +
                            "👷 104 – газовая служба;\n" +
                            "⛑ 112 – служба спасения.\n\n" +

                            "4⃣ Сообщите другим участникам ДТП номер Вашего полиса ОГПО ВТС и телефон «Jýsan Garant»\n" +
                            "Контакты для консультации:\n\n" +

                            "с 8:00 до 22:00 – call центр: 3264 с мобильных бесплатно, +7(727) 357 25 25\n" +
                            "с 22:00 до 8:00 – аварийный комиссар 8 701 529 80 48\n\n" +

                            "5⃣ Оставайтесь на месте ДТП до приезда сотрудников Административной полиции.\n" +
                            "Вниманию лиц, пострадавших в дорожно-транспортных происшествиях, в случаях, когда виновное лицо не установлено!\n" +
                            "АО «Фонд гарантирования страховых выплат» сообщает, что при ДТП, произошедших с 1 октября 2008 года, предусмотрена выплата компенсаций пострадавшим, получившим тяжкие телесные повреждения и родственникам погибших.\n\n" +

                            "Выплаты осуществляются только в случаях, когда виновник ДТП скрылся с места аварии.\n\n" +

                            "Для получения компенсаций пострадавшим необходимо представить в Фонд полный пакет документов в соответствии с требованиями действующего законодательства:\n\n" +

                            "⚫ заявление на выплату возмещения вреда в произвольной форме;\n\n" +

                            "⚫ документ от органов Министерства внутренних дел Республики Казахстан, подтверждающий факт наступления случая, то есть случай не установления лица, скрывшегося с места транспортного происшествия и ответственного за причинение вреда потерпевшему;\n\n" +

                            "⚫ копия заключения организации здравоохранения, в которой потерпевшему была оказана медицинская помощь в связи с причиненным тяжким вредом здоровью в результате транспортного происшествия, с указанием характера полученных потерпевшим травм и увечий, диагноза, периода временной нетрудоспособности;\n\n" +

                            "⚫ копия заключения учреждений медико-социальной или судебно-медицинской экспертизы;\n\n" +

                            "⚫ нотариально засвидетельствованная копия свидетельства о смерти потерпевшего(в случае смерти потерпевшего);\n\n" +

                            "⚫ документ, подтверждающий право лица, имеющего согласно законодательным актам Республики Казахстан право на возмещение вреда(в случае смерти потерпевшего);\n\n" +

                            "⚫ документы либо их копии, подтверждающие затраты на погребение(при отсутствии родственников);\n\n" +

                            "⚫ копия удостоверения личности заявителя(получателя);\n\n" +

                            "⚫ данные о банковских реквизитах для перечисления средств.\n\n" +

                            "Обращаем внимание, что право на выплату компенсаций в случае смерти потерпевшего согласно статье 940 Гражданского кодекса РК имеют только \n" +
                            "нетрудоспособные лица, состоявшие на иждивении умершего или имевшие ко дню его смерти право на получение от него содержания; ребенок умершего, \n" +
                            "родившийся после его смерти, а также один из родителей, супруг либо другой член семьи, независимо от трудоспособности, который не работает и\n" +
                            " занят уходом за находившимся на иждивении умершего его детьми, внуками, братьями и сестрами, не достигшими четырнадцати лет либо хотя и достигшими \n" +
                            "указанного возраста, но по заключению медицинских органов, нуждающимися по состоянию здоровья в постороннем уходе.\n" +
                            "Потерпевшие вправе обратиться в Фонд в течение одного года с момента наступления дорожно - транспортного происшествия.\n",
                            replyMarkup : inlineKeyboard);

                        break;
                    }

                    case "❓ Действия клиента":
                    {
                        if (splittedMessageBody.Length > 2)
                        {
                            switch (splittedMessageBody[2])
                            {
                            case "❗ Виновник":
                            {
                                responseMessage = "1) заявление о страховом случае;\n" +
                                                  "2) страховой полис(его дубликат) виновника ДТП;\n" +
                                                  "3) документ компетентных органов, подтверждающий факт наступления страхового случая и размер вреда, причиненного потерпевшим;\n" +
                                                  "4) копию удостоверения личности;\n" +
                                                  "5) копия водительского удостоверения(временных прав);заключение медицинского освидетельствования.\n";
                                break;
                            }

                            case "❕ Потерпевший":
                            {
                                responseMessage = "1) (Прямое урегулирование)\n" +
                                                  "2) К вышеперечисленному списку документов + полис виновника ДТП\n" +
                                                  "3) Более полную информацию по перечню предоставляемых документов можно получить у специалиста\n" +
                                                  "4) Отдела страховых выплат(список аварийных комиссаров)\n";
                                break;
                            }
                            }
                            CutMessagePath(splittedMessageBody);
                            await _telegramBot.SendTextMessageAsync(chatId, responseMessage, replyMarkup : inlineKeyboard);

                            break;
                        }
                        inlineKeyboard = CreateInlineKeyboard("❗ Виновник|❕ Потерпевший|🔙 Назад...|");

                        await _telegramBot.SendTextMessageAsync(
                            chatId,
                            "izvini",
                            replyMarkup : inlineKeyboard);

                        break;
                    }

                    case string s when s == "🛂 Заявить о ДТП":
                        var user = _insuranceService.GetUserInfo(userId);
                        if (splittedMessageBody.Length > 2)
                        {
                            switch (splittedMessageBody[2])
                            {
                            case string st when st == "❌ ФИО" || st == "✔️ ФИО":
                                if (splittedMessageBody.Length == 3)
                                {
                                    await _telegramBot.SendTextMessageAsync(chatId, "⌨️ Введите ФИО", replyMarkup : new ReplyKeyboardRemove());
                                }
                                else if (splittedMessageBody[3].Split(' ').Length == 3)
                                {
                                    user.FIO = st;
                                    _insuranceService.UserUpdate(user);
                                    CutMessagePath(splittedMessageBody, 0);
                                }
                                else
                                {
                                    await _telegramBot.SendTextMessageAsync(chatId, "Неверное ФИО", replyMarkup : new ReplyKeyboardRemove());

                                    CutMessagePath(splittedMessageBody);
                                }
                                break;

                            case string st when st == "❌ ИИН" || st == "✔️ ИИН" || IsStringIIN(st):
                                if (splittedMessageBody.Length == 3)
                                {
                                    await _telegramBot.SendTextMessageAsync(chatId, "⌨️ Введите ИИН", replyMarkup : new ReplyKeyboardRemove(), parseMode : ParseMode.Html);
                                }
                                else if (IsStringIIN(splittedMessageBody[3]))
                                {
                                    user.IIN = splittedMessageBody[3];
                                    _insuranceService.UserUpdate(user);
                                    CutMessagePath(splittedMessageBody);
                                }
                                else
                                {
                                    await _telegramBot.SendTextMessageAsync(chatId, "Неверный ИИН", replyMarkup : new ReplyKeyboardRemove());

                                    CutMessagePath(splittedMessageBody);
                                }
                                break;

                            case string st when st == "❌ Телефон" || st == "✔️ Телефон":
                                if (splittedMessageBody.Length == 3)
                                {
                                    replyKeyboardMarkup = new ReplyKeyboardMarkup(KeyboardButton.WithRequestContact("Отправить телефон"));
                                    replyKeyboardMarkup.ResizeKeyboard = true;
                                    await _telegramBot.SendTextMessageAsync(chatId, "📲 Поделитесь номером телефона",
                                                                            parseMode : ParseMode.Html, replyMarkup : replyKeyboardMarkup);
                                }
                                break;

                            case string st when st == "❌ Местоположение" || st == "✔️ Местоположение":
                                if (splittedMessageBody.Length == 3)
                                {
                                    replyKeyboardMarkup = new ReplyKeyboardMarkup(KeyboardButton.WithRequestLocation("🌏 Отправить местоположение"));
                                    replyKeyboardMarkup.ResizeKeyboard = true;
                                    await _telegramBot.SendTextMessageAsync(chatId, "🌏 Поделитесь местоположением",
                                                                            parseMode : ParseMode.Html, replyMarkup : replyKeyboardMarkup);
                                }
                                break;

                            case string st when st == "❌ Фото" || st == "✔️ Фото":
                                if (splittedMessageBody.Length == 3)
                                {
                                    await _telegramBot.SendTextMessageAsync(chatId, "Отправьте фото <b>ДТП</b>",
                                                                            parseMode : ParseMode.Html);
                                }
                                break;

                            case string st when st == "❓ Как сделать фото?":
                                inlineKeyboard  = CreateInlineKeyboard("🔙 Назад...|");
                                responseMessage = "<b>Какие снимки делаются при ДТП?</b>\n" +
                                                  "<i>Фотоснимки, необходимые для документирования дорожно-транспортного происшествия:</i>\n" +
                                                  "❕ Фотография, на которой запечатлено место аварии. На ней также должны быть видны машины, ставшие участниками ДТП;\n" +
                                                  "❕ Снимки государственных номеров ТС. Если есть такая возможность – примените макросъемку;\n" +
                                                  "❕ Фотоснимок общего вида автомобиля, участвовавшего в ДТП. Особенно важно снять место контакта двух машин. Повреждения фотографируйте детально. Неплохо запечатлеть малейшие следы соприкосновения, например, след краски;\n" +
                                                  "❕ Фотография общего плана ДТП и его главного очевидца;\n" +
                                                  "❕ Снимок, запечатлевший положение автомобилей относительно полос движения. При фотографировании в вечернее время или ночное, учтите особенности вспышки своего фотоаппарата, особенно ее дальность;\n" +
                                                  "❕ Фото со следами торможения (если таковые есть);\n" +
                                                  "❕ Снимки, запечатлевшие погодные условия на момент аварии (снег, лужи, прочее);\n" +
                                                  "❕ Если в районе места аварии есть дорожные знаки, сделайте их фотографии в том виде, в котором они были на момент столкновения (например, знак “STOP”, закрытый деревьями, прочее);\n" +
                                                  "❕ Фото приборной доски автомобиля, особенно часов, спидометра (если он сохранил показания скорости);\n" +
                                                  "❕ Сделайте снимок водителя и пассажиров ТС, их состояние. Это необходимо для того случая, когда они потребуют возмещения ущерба. А если у вас есть возможность сделать видеосъемку – это будет еще лучше;\n" +
                                                  "Фотографии, снятые крупным планом травм и ранений пострадавших в ДТП, вплоть до выбитых зубов.\n\n" +
                                                  "<b>Иногда участники ДТП, которые все сфотографировали, говорят о том, что другие участники аварии даже не хотят писать заявление, стараются оправдаться. " +
                                                  "А все это происходит по той причине, что по снимкам совершенно ясно, что это именно они виновны в данном происшествии. Позвольте дать вам несколько полезных советов:</b>" +
                                                  "❕ Место, в котором произошло столкновение машин, снимайте крупным планом;\n" +
                                                  "❕ Обязательно делайте фото таким образом, чтобы в объектив попадал и государственный номер машины. " +
                                                  "Так специалисты точно поймут, какой именно автомобиль сфотографирован.\n";
                                await _telegramBot.SendTextMessageAsync(chatId, responseMessage,
                                                                        parseMode : ParseMode.Html, replyMarkup : inlineKeyboard);;
                                break;
                            }
                            CutMessagePath(splittedMessageBody, 3);
                        }
                        if (splittedMessageBody.Length != 3)
                        {
                            string FIO                = string.Empty,
                                   IIN                = string.Empty,
                                   phoneNum           = string.Empty,
                                   location           = string.Empty,
                                   photos             = string.Empty,
                                   fullKeyboardString = string.Empty;

                            if (user.FIO == null)
                            {
                                FIO += "❌ ФИО";
                            }
                            else
                            {
                                FIO += "✔️ ФИО";
                            }
                            if (user.IIN == null)
                            {
                                IIN += "❌ ИИН";
                            }
                            else
                            {
                                IIN += "✔️ ИИН";
                            }
                            if (user.Contact == null)
                            {
                                phoneNum += "❌ Телефон";
                            }
                            else
                            {
                                phoneNum += "✔️ Телефон";
                            }
                            if (user.DTPs == null)
                            {
                                user.DTPs = new DTOs.DTP();
                            }
                            if (user.DTPs.Location == null)
                            {
                                location += "❌ Местоположение";
                            }
                            else
                            {
                                location += "✔️ Местоположение";
                            }
                            if (user.DTPs.Photos == null)
                            {
                                photos += "❌ Фото";
                            }
                            else
                            {
                                photos += "✔️ Фото";
                            }
                            fullKeyboardString = $"{FIO}\\{IIN}\\{phoneNum}|{location}\\{photos}|❓ Как сделать фото?|";
                            if (fullKeyboardString.Contains("❌"))
                            {
                                inlineKeyboard = CreateInlineKeyboard(fullKeyboardString);
                            }
                            else
                            {
                                inlineKeyboard = CreateInlineKeyboard(fullKeyboardString + "🛂 Заявить о ДТП|");
                            }


                            await _telegramBot.SendTextMessageAsync(chatId, "❕ Заполните все поля чтобы продолжить", replyMarkup : inlineKeyboard);
                        }
                        break;

                    case "📖 Вернуться в меню":
                        messagePath = string.Empty;
                        break;
                    }
                    break;
                }
                else
                {
                    inlineKeyboard = CreateInlineKeyboard("📞 Контакты при ДТП\\📝 Список документов|🛂 Заявить о ДТП|❓ Действия клиента\\🔙 Назад...|");

                    await _telegramBot.SendTextMessageAsync(
                        chatId,
                        "<b>🆘 SOS ДТП</b>\n\n" +

                        "- для того, чтобы заявить о ДТП, нажмите на кнопку - <b>'🛂 Заявить о ДТП'</b>\n\n" +

                        "- для того, чтобы узнать что делать при ДТП, нажмите на кнопку - <b>'❓ Действия клиента</b>\n\n" +

                        "- для того, чтобы посмотреть необходимые контакты при ДТП, нажмите на кнопку - <b>'📞 Контакты при ДТП</b>\n\n" +

                        "- для того, чтобы просмотреть необходимый перечень документов при ДТП, нажмите на кнопку - <b>'📝 Список документов'</b>\n\n",
                        replyMarkup : inlineKeyboard, parseMode : ParseMode.Html);;
                    break;
                }


            case "☎️ Связаться с оператором":
                if (splittedMessageBody.Length > 1)
                {
                    switch (splittedMessageBody[1])
                    {
                    case "🌎 Ближайшее отделение":
                        var user = _insuranceService.GetUserInfo(userId);
                        if (user.DTPs.IsLocationNeeded())
                        {
                            replyKeyboardMarkup = new ReplyKeyboardMarkup(KeyboardButton.WithRequestLocation("🌏 Отправить местоположение"));
                            replyKeyboardMarkup.ResizeKeyboard = true;
                            await _telegramBot.SendTextMessageAsync(chatId, "🌏 Поделитесь местоположением",
                                                                    parseMode : ParseMode.Html, replyMarkup : replyKeyboardMarkup);
                        }
                        else
                        {
                            List <Tuple <Location, string, float> > allDepartamentsAndPhones = new List <Tuple <Location, string, float> >();
                            string connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["fstpString"].ConnectionString;
                            try
                            {
                                using (SqlConnection cnn = new SqlConnection(connetionString))
                                {
                                    using (SqlCommand command = new SqlCommand("exec [Fstp]..Report_ogpo_dept", cnn))
                                    {
                                        cnn.Open();
                                        using (SqlDataReader dataReader = command.ExecuteReader())
                                        {
                                            while (dataReader.Read())
                                            {
                                                try
                                                {
                                                    Location loc  = GetLocationByAdress(dataReader.GetValue(4).ToString());
                                                    String   phon = dataReader.GetValue(5).ToString();
                                                    float    dist = GetDistanceBettweenLocations(user.DTPs.Location.Latitude,
                                                                                                 user.DTPs.Location.Longitude,
                                                                                                 float.Parse(loc.lat, CultureInfo.InvariantCulture),
                                                                                                 float.Parse(loc.lon, CultureInfo.InvariantCulture));
                                                    allDepartamentsAndPhones.Add(new Tuple <Location, string, float>(loc, phon, dist));
                                                }
                                                catch { }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }

                            Tuple <Location, string, float> sortedDepts = allDepartamentsAndPhones.OrderBy(x => x.Item3).First();
                            await _telegramBot.SendTextMessageAsync(chatId,
                                                                    $"🌏 Ближайшее подразеделение\n" +
                                                                    $"🚶 Расстояние: {sortedDepts.Item3.ToString("0.##")}км",
                                                                    parseMode : ParseMode.Html);

                            await _telegramBot.SendLocationAsync(chatId, float.Parse(sortedDepts.Item1.lat, CultureInfo.InvariantCulture),
                                                                 float.Parse(sortedDepts.Item1.lon, CultureInfo.InvariantCulture));

                            await _telegramBot.SendTextMessageAsync(chatId,
                                                                    $"☎️ Номер: {sortedDepts.Item2}\n",
                                                                    parseMode : ParseMode.Html, replyMarkup : CreateInlineKeyboard("🔙 Назад...|"));
                        }


                        break;
                    }
                }
                else
                {
                    responseMessage = "Вошел в \"☎️ Связаться с оператором\"";
                    inlineKeyboard  = CreateInlineKeyboard("🌎 Ближайшее отделение|");
                    await _telegramBot.SendTextMessageAsync(chatId, responseMessage, replyMarkup : inlineKeyboard);
                }
                break;


            default:
                inlineKeyboard  = CreateInlineKeyboard("💲 Купить\\🆘 SOS ДТП|🌍 Подразделения|📝 Мои полисы|");
                responseMessage = $"<b>'🕮 Главное меню'</b> \n\n" +
                                  $"- для того, чтобы приобрести полис, нажмите на кнопку - <b>'💲 Купить'</b>\n\n" +
                                  "- для того, чтобы заявить о ДТП и получить необходимую информацию, нажмите на кнопку - <b>'🆘 SOS ДТП'</b>\n\n" +
                                  "- для того, чтобы получить необходимые контакты, нажмите на кнопку - <b>'🌍 Подразделения'</b>\n\n" +
                                  "- для того, чтобы посмотреть свои полисы, нажмите на кнопку - <b>'📝 Мои полисы'</b>\n\n";
                await _telegramBot.SendTextMessageAsync(chatId, responseMessage, parseMode : ParseMode.Html, replyMarkup : inlineKeyboard);

                break;
            }
        }
        public async void UpdateAsync(Message msg, TelegramBotClient bot, long chatId, Context db)
        {
            if (Globals.IsValidTime(msg.Text))
            {
                var user        = db.Users.FirstOrDefault(x => x.ChatId == msg.Chat.Id);
                var application = db.Applications.FirstOrDefault(x => x.UserId == user.UserId);
                if (application != null && user != null)
                {
                    application.Time = DateTime.Parse(msg.Text);
                    user.State       = StateChatEnum.SendingNumberPhone;
                }
                await bot.SendTextMessageAsync(chatId,
                                               $"Время {msg.Text} будет указано в заявке \n" +
                                               $"Теперь нажав на кнопку Далее разрешите отправку вашего номера," +
                                               $"он будет указан в заявке для связи водителя с вами",
                                               replyMarkup : new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestContact("Далее"),
                    new KeyboardButton("Отмена")
                }, true, true));

                db.SaveChanges();
            }
            else
            {
                if (msg.Text.Equals("Отмена", StringComparison.OrdinalIgnoreCase))
                {
                    var send = new SendMessageRequest(msg.Chat.Id,
                                                      "Вы отменили заказ")
                    {
                        ReplyMarkup = new ReplyKeyboardRemove(),
                    };
                    await bot.MakeRequestAsync(send);

                    var user        = db.Users.FirstOrDefault(x => x.ChatId == msg.Chat.Id);
                    var application = db.Applications.FirstOrDefault(x => x.UserId == user.UserId);
                    db.Applications.Remove(application ?? throw new InvalidOperationException());
                    if (user != null)
                    {
                        user.State = StateChatEnum.StartMain;
                    }
                    db.SaveChanges();
                }
                else if (msg.Text.Equals("Далее", StringComparison.OrdinalIgnoreCase))
                {
                    await bot.SendTextMessageAsync(
                        msg.Chat.Id,
                        text : "Текущее время отправлено. \n" +
                        "Теперь укажите пожалуйста ваш номер телефона. " +
                        "Для этого нажмите Далее и во всплывающем окне разрешите отправку вашего номера",
                        replyMarkup : new ReplyKeyboardMarkup(new[]
                    {
                        KeyboardButton.WithRequestContact("Далее"),
                        KeyboardButton.WithRequestContact("Отмена")
                    }, true, true));

                    var user        = db.Users.FirstOrDefault(x => x.ChatId == msg.Chat.Id);
                    var application = db.Applications.FirstOrDefault(x => x.UserId == user.UserId);
                    if (application != null && user != null)
                    {
                        user.State       = StateChatEnum.SendingNumberPhone;
                        application.Time = DateTime.Now;
                    }

                    db.SaveChanges();
                }
                else
                {
                    await bot.SendTextMessageAsync(
                        msg.Chat.Id,
                        text : "Вы не правильно указали время");
                }
            }
        }
        public async Task EchoAsync(Update update)
        {
            if (update.Type != UpdateType.Message)
            {
                return;
            }

            Message message = update.Message;

            switch (message.Text.Split(' ').First())
            {
            case "/menu":
                await TelegramBotClient.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                await Task.Delay(500);

                InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("soon", "soon"),
                        InlineKeyboardButton.WithCallbackData("soon", "soon"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("soon", "soon"),
                        InlineKeyboardButton.WithCallbackData("soon", "soon"),
                    }
                });
                await TelegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : inlineKeyboard
                    );

                break;

            case "/fun":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "1.1", "1.2" },
                    new[] { "2.1", "2.2" },
                };
                await TelegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : ReplyKeyboard
                    );

                break;


            case "/request":
                ReplyKeyboardMarkup RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });
                await TelegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard
                    );

                break;


            case "/Sasha":
                await TelegramBotClient.SendTextMessageAsync(message.Chat.Id, $"I love you bab");

                break;

            case "/Nikita":
                await TelegramBotClient.SendTextMessageAsync(message.Chat.Id, $"You are f*g!!! HA-ha");

                break;

            default:
                const string usage = "Usage:\n" +
                                     "/menu   - send inline keyboard\n" +
                                     "/request - Test request\n" +
                                     "/Nikita - That's for you Nikita";
                const string usageForSandra = "Usage:\n" +
                                              "/Sasha - if you have bad mood enter this command";
                await TelegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : message.Chat.Username == "Sandra_Nikitina"?usageForSandra : usage,
                    replyMarkup : new ReplyKeyboardRemove()
                    );

                break;
            }
        }
 public static KeyboardRow <KeyboardButton> AddContactButton(
     this KeyboardRow <KeyboardButton> rowBuilder, string text)
 => rowBuilder.AddButton(KeyboardButton.WithRequestContact(text));
Beispiel #30
0
        private async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            switch (message.Text.Split(' ')[0])
            {
            // Send inline keyboard
            case "/inline":
                await SendInlineKeyboard(message);

                break;

            // send custom keyboard
            case "/keyboard":
                await SendReplyKeyboard(message);

                break;

            // send a photo
            case "/photo":
                await SendDocument(message);

                break;

            // request location or contact
            case "/request":
                await RequestContactAndLocation(message);

                break;

            default:
                await Usage(message);

                break;
            }

            // Send inline keyboard
            // You can process responses in BotOnCallbackQueryReceived handler
            async Task SendInlineKeyboard(Message message)
            {
                await _bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                // Simulate longer running task
                await Task.Delay(500);

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    // first row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("1.1", "11"),
                        InlineKeyboardButton.WithCallbackData("1.2", "12"),
                    },
                    // second row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("2.1", "21"),
                        InlineKeyboardButton.WithCallbackData("2.2", "22"),
                    }
                });
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : inlineKeyboard
                    );
            }

            async Task SendReplyKeyboard(Message message)
            {
                var replyKeyboardMarkup = new ReplyKeyboardMarkup(
                    new KeyboardButton[][]
                {
                    new KeyboardButton[] { "1.1", "1.2" },
                    new KeyboardButton[] { "2.1", "2.2" },
                },
                    resizeKeyboard: true
                    );

                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : replyKeyboardMarkup

                    );
            }

            async Task SendDocument(Message message)
            {
                await _bot.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                const string filePath = @"Files/tux.png";

                using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                var fileName = filePath.Split(Path.DirectorySeparatorChar).Last();
                await _bot.SendPhotoAsync(
                    chatId : message.Chat.Id,
                    photo : new InputOnlineFile(fileStream, fileName),
                    caption : "Nice Picture"
                    );
            }

            async Task RequestContactAndLocation(Message message)
            {
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard
                    );
            }

            async Task Usage(Message message)
            {
                const string usage = "Usage:\n" +
                                     "/inline   - send inline keyboard\n" +
                                     "/keyboard - send custom keyboard\n" +
                                     "/photo    - send a photo\n" +
                                     "/request  - request location or contact";
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : usage,
                    replyMarkup : new ReplyKeyboardRemove()
                    );
            }
        }