예제 #1
0
        public static async void ChooseTripIdToEdit(int userId, string message)
        {
            try
            {
                var temp = message;
                if (message == "Назад")
                {
                    StartEditTimetable(userId);
                }
                else if (message == "Отмена")
                {
                    Undo(userId);
                }
                else if (!int.TryParse(temp, out var tempInt))
                {
                    await BotController.Bot.SendTextMessageAsync(userId, "Введите число, которое является ID рейса.");
                }
                else
                {
                    if (!DataBaseContextAdmin.CheckTripId(tempInt))
                    {
                        await BotController.Bot.SendTextMessageAsync(userId, "Введите существующий ID рейса.");
                    }
                    DataBaseContextAdmin.SetTripId(userId, tempInt);
                    await BotController.Bot.SendTextMessageAsync(userId, "Выберите, что будете редактировать.",
                                                                 replyMarkup : KeyboardContainer.CreateTimetableEditTripKeyboard());

                    DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ChooseTripColumn);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #2
0
        public static async void EditTripColumn(int userId, string message)
        {
            try
            {
                if (message == "Назад")
                {
                    await BotController.Bot.SendTextMessageAsync(userId, "Выберите, что будете редактировать.",
                                                                 replyMarkup : KeyboardContainer.CreateTimetableEditTripKeyboard());

                    DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ChooseTripColumn);
                }
                else if (message == "Отмена")
                {
                    Undo(userId);
                }
                else
                {
                    DataBaseContextAdmin.UpdateTripColumn(DataBaseContextAdmin.GetTripId(userId), DataBaseContextAdmin.GetColumn(userId), message);
                    StartEditTimetable(userId);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #3
0
 public static async void SetDepartureDate(int userId, string message)
 {
     try
     {
         var temp = message;
         if (message == "Назад")
         {
             DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.DeparturePlace);
             await BotController.Bot.SendTextMessageAsync(userId, "Откуда рейс?");
         }
         if (message == "Отмена")
         {
             Undo(userId);
         }
         if (!KeyWords.Contains(message))
         {
             DataBaseContextAdmin.UpdateTripColumn(DataBaseContextAdmin.GetTripId(userId),
                                                   AdminCommandStep.DepartureDate.ToString(), temp);
             DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.DepartureTime);
             await BotController.Bot.SendTextMessageAsync(userId, "Время отправки?");
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
예제 #4
0
        private static async void Undo(int userId)
        {
            await BotController.Bot.SendTextMessageAsync(userId, "Для вывода команд введите /admin",
                                                         replyMarkup : KeyboardContainer.CreateDefaultKeyboard());

            DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.Default);
        }
예제 #5
0
        public static async void EditTimetable(int userId, string message)
        {
            if (message == "Добавить рейс")
            {
                DataBaseContextAdmin.AddTrip();
                DataBaseContextAdmin.SetTripId(userId, DataBaseContextAdmin.GetLastTripId());
                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.DeparturePlace);
                await BotController.Bot.SendTextMessageAsync(userId, "Откуда рейс?",
                                                             replyMarkup : KeyboardContainer.CreateTwoKeyboardAdminButtons());
            }
            if (message == "Редактировать рейс")
            {
                await BotController.Bot.SendTextMessageAsync(userId, "Введите ID рейса для редактирования.",
                                                             replyMarkup : KeyboardContainer.CreateTwoKeyboardAdminButtons());

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.SetTripIdEdit);
            }
            if (message == "Удалить рейс")
            {
                await BotController.Bot.SendTextMessageAsync(userId, "Введите ID рейса для удаления.",
                                                             replyMarkup : KeyboardContainer.CreateTwoKeyboardAdminButtons());

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.SetTripIdDel);
            }
            if (message == "Отмена")
            {
                Undo(userId);
            }
        }
예제 #6
0
        private static async void HandleMessageTypeContact(MessageEventArgs messageEventArgs, int userId)
        {
            try
            {
                var phoneNumber = messageEventArgs.Message.Contact.PhoneNumber;
                await BotController.Bot.SendTextMessageAsync(userId, "Мы свяжемся с Вами в ближайшее время.");

                DataBaseContext.SetPhoneNumber(userId, phoneNumber);

                var customer = BotController.GetAvailableSenderName(messageEventArgs);

                var admins = DataBaseContextAdmin.GetAllAdminId();
                foreach (var admin in admins)
                {
                    try
                    {
                        await BotController.Bot.SendTextMessageAsync(admin, $"{customer} запросил звонок, " +
                                                                     $"его номер: {DataBaseContext.GetPhoneNumber(userId)}");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #7
0
 public static async void ChooseTripIdToDelete(int userId, string message)
 {
     try
     {
         var temp = message;
         if (message == "Назад")
         {
             StartEditTimetable(userId);
         }
         else if (message == "Отмена")
         {
             Undo(userId);
         }
         else if (!int.TryParse(temp, out var tempInt))
         {
             await BotController.Bot.SendTextMessageAsync(userId, "Введите число, которое является ID рейса.");
         }
         else if (!KeyWords.Contains(message))
         {
             if (!DataBaseContextAdmin.CheckTripId(tempInt))
             {
                 await BotController.Bot.SendTextMessageAsync(userId, "Введите существующий ID рейса.");
             }
             DataBaseContextAdmin.DeleteTrip(tempInt);
             StartEditTimetable(userId);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
예제 #8
0
 public static async void SetArrivalTime(int userId, string message)
 {
     try
     {
         var temp = message;
         if (message == "Назад")
         {
             DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ArrivalDate);
             await BotController.Bot.SendTextMessageAsync(userId, "Дата прибытия?");
         }
         if (message == "Отмена")
         {
             Undo(userId);
         }
         if (!KeyWords.Contains(message))
         {
             DataBaseContextAdmin.UpdateTripColumn(DataBaseContextAdmin.GetTripId(userId),
                                                   AdminCommandStep.ArrivalTime.ToString(), temp);
             StartEditTimetable(userId);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
예제 #9
0
        private static string ShowTimetableWithId()
        {
            try
            {
                string timetable = String.Join(null, DataBaseContextAdmin.GetTimetableTripsWithId());

                return($"\n\n{timetable}");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(" ");
            }
        }
예제 #10
0
        private static async void ConfirmUser(int userId, string userName)
        {
            try
            {
                await BotController.Bot.SendTextMessageAsync(userId,
                                                             $"Вы собираетесь присвоить права администратора пользователю {userName}?");

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ConfirmUser);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #11
0
        public static async void StartEditTimetable(int userId)
        {
            try
            {
                await BotController.Bot.SendTextMessageAsync(userId,
                                                             $"Какие действия произвести с текущим расписанием?" +
                                                             $"{ShowTimetableWithId()}", replyMarkup : KeyboardContainer.CreateTimetableEditKeyboard());

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.EditTimetable);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #12
0
        private static async void GetForwardingMessage(int userId)
        {
            try
            {
                await BotController.Bot.SendTextMessageAsync(userId,
                                                             "Отправьте сообщение для рассылки (только текст (обычный и форматированный) и эмодзи).",
                                                             replyMarkup :  KeyboardContainer.CreateThreeKeyboardAdminButtons());

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.SendMessage);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #13
0
        private static async void ConfirmForwardingMessage(int userId, int messageId)
        {
            try
            {
                await BotController.Bot.SendTextMessageAsync(userId,
                                                             "Отправить всем следующее сообщение?");

                await BotController.Bot.ForwardMessageAsync(userId, userId, messageId);

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ConfirmSending);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
예제 #14
0
        private static void HandleMessageTypeText(string sender, MessageEventArgs messageEventArgs)
        {
            var userId  = messageEventArgs.Message.From.Id;
            var message = messageEventArgs.Message.Text;

            Console.WriteLine($"{sender} отправил текстовое сообщение: {message}", true, Encoding.Unicode);

            AdminCommandHandler.HandleAdminCommands(messageEventArgs);

            var keyCommands = new[] { "/admin", "/appoint", "/timetable", "/message" };

            if (DataBaseContextAdmin.GetCommandId(userId) != (int)AdminCommandStep.Default)
            {
                return;
            }

            switch (message.ToLower().Trim())
            {
            case "/start":
                DataBaseContext.RegisterUser(messageEventArgs);
                TextMessageProcessor.CreateStartStatement(messageEventArgs);
                break;

            case "меню":
                var inlineMenu = new InlineMenu();
                inlineMenu.RunCreatingProcess(messageEventArgs, true);
                break;

            case "контакты":
                TextMessageProcessor.SendContacts(userId);
                break;

            case "заказать звонок":
                break;

            case "показать на карте":
                TextMessageProcessor.ShowInTheMap(userId);
                break;

            default:
                if (!keyCommands.Contains(message))
                {
                    TextMessageProcessor.SendAiAnswer(userId, message);
                }
                break;
            }
        }
예제 #15
0
        public static void HandleConfirmingUser(MessageEventArgs messageEventArgs, int userId, string message)
        {
            if (message == "Подтвердить")
            {
                AppointAdmin(messageEventArgs, DataBaseContextAdmin.GetTargetName(userId));

                Thread.Sleep(10);
                Undo(userId);
            }
            if (message == "Назад")
            {
                ShowUsers(userId);
            }
            if (message == "Отмена")
            {
                Undo(userId);
            }
        }
예제 #16
0
        private static async void AppointAdmin(MessageEventArgs messageEventArgs, string userName)
        {
            try
            {
                DataBaseContextAdmin.ChangeUserStatus(userName);
                await BotController.Bot.SendTextMessageAsync(messageEventArgs.Message.From.Id,
                                                             $"Пользователю {userName} присвоены права администратора.");

                await BotController.Bot.SendTextMessageAsync(DataBaseContextAdmin.GetUserIdByUserName(userName),
                                                             $"{BotController.GetAvailableSenderName(messageEventArgs)} " +
                                                             $"присвоил вам права администратора. Для вывода команд введите /admin");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                await BotController.Bot.SendTextMessageAsync(messageEventArgs.Message.From.Id,
                                                             $"Пользователю {userName} не удалось присвоить права администратора. \n{e.Message}");
            }
        }
예제 #17
0
        public static async void ChooseTripColumn(int userId, string message)
        {
            try
            {
                var keyCommands = new Dictionary <string, string>();
                keyCommands.Add("Место отправки", AdminCommandStep.DeparturePlace.ToString());
                keyCommands.Add("Дата отправки", AdminCommandStep.DepartureDate.ToString());
                keyCommands.Add("Время отправки", AdminCommandStep.DepartureTime.ToString());
                keyCommands.Add("Место прибытия", AdminCommandStep.ArrivalPlace.ToString());
                keyCommands.Add("Дата прибытия", AdminCommandStep.ArrivalDate.ToString());
                keyCommands.Add("Время прибытия", AdminCommandStep.ArrivalTime.ToString());

                if (keyCommands.ContainsKey(message))
                {
                    keyCommands.TryGetValue(message, out var resMessage);
                    DataBaseContextAdmin.SetColumn(userId, resMessage);
                    await BotController.Bot.SendTextMessageAsync(userId, "Введите новое значение.",
                                                                 replyMarkup : KeyboardContainer.CreateTwoKeyboardAdminButtons());

                    DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.EditTripColumn);
                }
                else if (message == "Назад")
                {
                    await BotController.Bot.SendTextMessageAsync(userId, "Введите ID рейса для редактирования.",
                                                                 replyMarkup : KeyboardContainer.CreateTwoKeyboardAdminButtons());

                    DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.SetTripIdEdit);
                }
                else if (message == "Отмена")
                {
                    Undo(userId);
                }
                else
                {
                    await BotController.Bot.SendTextMessageAsync(userId, "Выберите, что будете редактировать.");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #18
0
        private static async void CreateKeyboardButtons(int userId, string firstName)
        {
            if (DataBaseContextAdmin.GetCommandId(userId) != (int)AdminCommandStep.Default)
            {
                return;
            }

            try
            {
                var replyKeyboard = KeyboardContainer.CreateDefaultKeyboard();

                await BotController.Bot.SendTextMessageAsync(userId, $"Здравствуйте, " +
                                                             $"{firstName}! \nПожалуйста, воспользуйтесь кнопками для начала работы",
                                                             replyMarkup : replyKeyboard);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex}");
            }
        }
예제 #19
0
        private static async void ShowUsers(int userId)
        {
            try
            {
                var users     = DataBaseContextAdmin.GetAllUserNames();
                var userNames = string.Join(", ", users);
                await BotController.Bot.SendTextMessageAsync(userId,
                                                             "Выберите и введите username пользователя, которого хотите назначить администратором. " +
                                                             "Здесь показаны только те пользователи, которые имеют username. Если среди них нет нужного пользователя," +
                                                             "он должен выставить username в настройках своего профиля Telegram и ввести /start в боте, тогда его данные обновятся.",
                                                             replyMarkup : KeyboardContainer.CreateThreeKeyboardAdminButtons());

                Thread.Sleep(10);
                await BotController.Bot.SendTextMessageAsync(userId, userNames);

                DataBaseContextAdmin.SetCommandId(userId, (int)AdminCommandStep.ShowUsers);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
예제 #20
0
        public static void HandleConfirmingSending(int userId, string message)
        {
            if (message == "Подтвердить")
            {
                var usersId = DataBaseContextAdmin.GetAllUserId();
                foreach (var targetId in usersId)
                {
                    ForwardMessage(targetId, userId, DataBaseContextAdmin.GetForwardingMessageId(userId));
                }

                Thread.Sleep(10);
                Undo(userId);
            }
            if (message == "Назад")
            {
                GetForwardingMessage(userId);
            }
            if (message == "Отмена")
            {
                Undo(userId);
            }
        }
예제 #21
0
        public static async void HandleSendMessage(MessageEventArgs messageEventArgs, int userId, string message)
        {
            var forwardingMessage = messageEventArgs.Message;

            DataBaseContextAdmin.SetForwardingMessageId(userId, forwardingMessage.MessageId);
            if (message == "Подтвердить")
            {
                await BotController.Bot.SendTextMessageAsync(userId, "Введите сообщение для рассылки.");
            }
            if (message == "Назад")
            {
                Undo(userId);
            }
            if (message == "Отмена")
            {
                Undo(userId);
            }
            if (!KeyWords.Contains(message))
            {
                ConfirmForwardingMessage(userId, forwardingMessage.MessageId);
            }
        }
예제 #22
0
        public static async void HandleTargetName(int userId, string message)
        {
            var tempUserName = message;

            DataBaseContextAdmin.SetTargetName(userId, tempUserName);

            if (message == "Подтвердить")
            {
                await BotController.Bot.SendTextMessageAsync(userId, "Введите username");
            }
            if (message == "Назад")
            {
                Undo(userId);
            }
            if (message == "Отмена")
            {
                Undo(userId);
            }
            if (!KeyWords.Contains(message))
            {
                ConfirmUser(userId, tempUserName);
            }
        }
예제 #23
0
        public static void HandleAdminCommands(MessageEventArgs messageEventArgs)
        {
            if (!DataBaseContextAdmin.CheckAdminRights(messageEventArgs.Message.From.Id))
            {
                return;
            }

            var userId    = messageEventArgs.Message.From.Id;
            var message   = messageEventArgs.Message.Text;
            var commandId = DataBaseContextAdmin.GetCommandId(userId);

            switch (commandId)
            {
            case (int)AdminCommandStep.Default:
                AdminCommand.HandleDefaultCommands(userId, message);
                break;

            case (int)AdminCommandStep.ShowUsers:
                AdminCommand.HandleTargetName(userId, message);
                break;

            case (int)AdminCommandStep.ConfirmUser:
                AdminCommand.HandleConfirmingUser(messageEventArgs, userId, message);
                break;

            case (int)AdminCommandStep.SendMessage:
                AdminCommand.HandleSendMessage(messageEventArgs, userId, message);
                break;

            case (int)AdminCommandStep.ConfirmSending:
                AdminCommand.HandleConfirmingSending(userId, message);
                break;

            case (int)AdminCommandStep.EditTimetable:
                TimetableEditor.EditTimetable(userId, message);
                break;

            case (int)AdminCommandStep.DeparturePlace:
                TimetableEditor.SetDeparturePlace(userId, message);
                break;

            case (int)AdminCommandStep.DepartureDate:
                TimetableEditor.SetDepartureDate(userId, message);
                break;

            case (int)AdminCommandStep.DepartureTime:
                TimetableEditor.SetDepartureTime(userId, message);
                break;

            case (int)AdminCommandStep.ArrivalPlace:
                TimetableEditor.SetArrivalPlace(userId, message);
                break;

            case (int)AdminCommandStep.ArrivalDate:
                TimetableEditor.SetArrivalDate(userId, message);
                break;

            case (int)AdminCommandStep.ArrivalTime:
                TimetableEditor.SetArrivalTime(userId, message);
                break;

            case (int)AdminCommandStep.SetTripIdEdit:
                TimetableEditor.ChooseTripIdToEdit(userId, message);
                break;

            case (int)AdminCommandStep.SetTripIdDel:
                TimetableEditor.ChooseTripIdToDelete(userId, message);
                break;

            case (int)AdminCommandStep.ChooseTripColumn:
                TimetableEditor.ChooseTripColumn(userId, message);
                break;

            case (int)AdminCommandStep.EditTripColumn:
                TimetableEditor.EditTripColumn(userId, message);
                break;
            }
        }