Ejemplo n.º 1
0
        public void ShowNextDayTimetable(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            MessageTransfer msg = new MessageTransfer()
            {
                ChatId = user.Id
            };

            var day = result.Entities.OfType <DateEntity>(Sys.Date);

            DayTimetable timetable = new DayTimetable();

            switch (user.Role)
            {
            case Role.Student:
                timetable = CistApi.GetGroupTimetable((user as Student).GroupId, day.DateTime);
                break;

            case Role.Teacher:
                timetable = CistApi.GetTeacherTimetable((user as Teacher).TeacherId, day.DateTime);
                break;

            default:
                break;
            }

            msg.Message = timetable?.ToString() ?? $"В расписании нету пар на {day.DateTime.ToShortDateString()}";
            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 2
0
        public void ShowGroupTimetable(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            MessageTransfer msg = new MessageTransfer()
            {
                ChatId = user.Id
            };

            var group = result.Entities.OfType("groupName");
            var day   = result.Entities.OfType <DateEntity>(Sys.Date) ?? new DateEntity("", DateTime.Now);

            int groupId = -1;

            try
            {
                groupId = CistApi.GetGroupIdFromName(group.Value);
            }
            catch (Exception)
            {
                msg.Message = "Что-то я не нашел такой группы, попробуй ещё раз!";
                result.SendResponse(msg.ToJson());
                return;
            }

            DayTimetable timetable = CistApi.GetGroupTimetable(groupId, day.DateTime);

            msg.Message = timetable?.ToString() ?? $"В расписании нету пар на {day.DateTime.ToShortDateString()}";
            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 3
0
        public void ShowTodayTimetable(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            MessageTransfer msg = new MessageTransfer()
            {
                ChatId = user.Id
            };

            DayTimetable timetable = new DayTimetable();

            switch (user.Role)
            {
            case Role.Student:
                timetable = CistApi.GetGroupTimetable((user as Student).GroupId, DateTime.Now);
                break;

            case Role.Teacher:
                timetable = CistApi.GetTeacherTimetable((user as Teacher).TeacherId, DateTime.Now);
                break;

            default:
                break;
            }

            msg.Message = timetable?.ToString() ?? "На сегодня пар нету!";
            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 4
0
        public void ShowTeacherNearestTimetable(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            var msg = new MessageTransfer()
            {
                ChatId = user.Id
            };

            var teacher   = result.Entities.OfType("teacherName");
            var day       = DateTime.Now;
            int teacherId = -1;

            try
            {
                teacherId = CistApi.GetTeacherIdFromName(teacher.Value);
            }
            catch (Exception)
            {
                msg.Message = "Что-то я не нашел такого преподователя, попробуй ещё раз!";
                result.SendResponse(msg.ToJson());
                return;
            }

            var timetable = CistApi.GetTeacherNearestTimetable(teacherId, day);

            msg.Message = timetable != null
                ? $"Ближайшая пара у {teacher}:\n" + timetable?.ToString()
                : $"В расписании нету пар для {teacher}";

            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 5
0
        public void ShowTeacherTimetable(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            MessageTransfer msg = new MessageTransfer()
            {
                ChatId = user.Id
            };

            var teacher   = result.Entities.OfType("teacherName");
            var day       = result.Entities.OfType <DateEntity>(Sys.Date);
            int teacherId = -1;

            try
            {
                teacherId = CistApi.GetTeacherIdFromName(teacher.Value);
            }
            catch (Exception)
            {
                msg.Message = "Что-то я не нашел такого преподователя, попробуй ещё раз!";
                result.SendResponse(msg.ToJson());
                return;
            }

            DayTimetable timetable = CistApi.GetTeacherTimetable(teacherId, day.DateTime);

            msg.Message = timetable?.ToString() ?? $"В расписании нету пар на {day.DateTime.ToShortDateString()}";
            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 6
0
        public void ShowNureFeed(Context context, Result result)
        {
            var user = context.SharedData.OfType <User>();

            context.SharedData.Remove(user);
            var msg = new MessageTransfer()
            {
                ChatId = user.Id
            };


            try
            {
                msg.Message = CistApi.GetNureFeed();
            }
            catch (Exception)
            {
                msg.Message = "К сожалению, сервер с новостями не работает!";
                result.SendResponse(msg.ToJson());
                return;
            }

            result.SendResponse(msg.ToJson());
        }
Ejemplo n.º 7
0
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message != null && message.Type == MessageType.LocationMessage)
            {
                var msg = CistApi.GetTravelTime($"{message.Location.Latitude.ToString().Replace(",",".")},{message.Location.Longitude.ToString().Replace(",", ".")}");
                await Bot.SendTextMessageAsync(message.Chat.Id, msg, replyMarkup : new ReplyKeyboardHide());

                return;
            }

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

            User user = CheckRegistration(message);

            user = await CheckUserRoleAsync(user, message);

            if (user.Role == Role.NotSet)
            {
                return;
            }

            if (user.Role == Role.Student)
            {
                var student = user as Student;
                if (student == null)
                {
                    return;
                }

                switch (student.GroupId)
                {
                case 0:
                    await Bot.SendTextMessageAsync(message.Chat.Id, "Будь добр, напиши из какой ты группы?");

                    UService.ChangeGroup(user.Id, -1);
                    return;

                case -1:
                    try
                    {
                        int id = CistApi.GetGroupIdFromName(message.Text);
                        UService.ChangeGroup(user.Id, id);
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Отлично, я запомнил это!");
                    }
                    catch (Exception)
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Что-то у меня не получается найти такую группу, попробуй ещё раз!");

                        return;
                    }
                    return;

                default: break;
                }
            }
            else if (user.Role == Role.Teacher)
            {
                var teacher = user as Teacher;
                if (teacher == null)
                {
                    return;
                }

                switch (teacher.TeacherId)
                {
                case 0:
                    await Bot.SendTextMessageAsync(message.Chat.Id, "Пожалуйста, напишите ваше ФИО");

                    UService.ChangeTeacherId(teacher.Id, -1);
                    return;

                case -1:
                    try
                    {
                        int id = CistApi.GetTeacherIdFromName(message.Text);
                        UService.ChangeTeacherId(user.Id, id);
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Отлично, я запомнил это!");

                        return;
                    }
                    catch (Exception)
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Что-то у меня не получается найти вас, попробуйте еще раз!");
                    }
                    return;

                default: break;
                }
            }


            var textMessage = message.Text;

            switch (message.Text)
            {
            case "/timetable":
                textMessage = "Покажи мне моё расписание";
                break;

            case "/weather":
                textMessage = "Погода";
                break;

            case "/news":
                textMessage = "Новости";
                break;

            case "/locate":
                var keyboard = new ReplyKeyboardMarkup(new[]
                {
                    new KeyboardButton($"{Emoji.Round_Pushpin} Моё местоположение")
                    {
                        RequestLocation = true
                    }
                }
                                                       );
                await Bot.SendTextMessageAsync(message.Chat.Id, "Отправьте пожалуйста своё местоположение!", replyMarkup : keyboard);

                return;

            case "/help":
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Для общения с ботом можно использовать как быстрые команды:");
                sb.Append(
                    $"{Emoji.White_Check_Mark} /timetable - Расписание на сегодня\n{Emoji.White_Check_Mark} /weather - Погода\n{Emoji.White_Check_Mark} /news - Новости\n{Emoji.White_Check_Mark} /locate - Маршрут до университета\n{Emoji.White_Check_Mark} /help - Помощь\n{Emoji.White_Check_Mark} /restart - Перезагрузка отношений\n");
                sb.AppendLine("Так и всевозможные фразы:");
                sb.AppendLine($"{Emoji.Arrow_Right} Покажи мне моё расписание");
                sb.AppendLine($"{Emoji.Arrow_Right} Покажи мне моё расписание на [дату]");
                sb.AppendLine($"{Emoji.Arrow_Right} Расписание [название группы | ФИО преподователя]");
                sb.AppendLine($"{Emoji.Arrow_Right} Новости");
                sb.AppendLine("И много много других фраз!");

                await Bot.SendTextMessageAsync(message.Chat.Id, sb.ToString());

                return;

            case "/restart":
                UService.RemoveUser(user.Id);
                await Bot.SendTextMessageAsync(message.Chat.Id, "Хорошо, как скажешь!");

                return;

            default:
                break;
            }

            RecognitionSystem.MainUser.Context.SharedData.Add(user);
            var evaluateRequest = RecognitionSystem.Evaluate(textMessage);

            try
            {
                evaluateRequest.Invoke();
            }
            catch (Exception)
            {
                await Bot.SendTextMessageAsync(message.Chat.Id,
                                               $"Извини, не получилось выполнить твой запроc{Emoji.Disappointed}\n" +
                                               $"Какие-то проблемы на сервере\n" +
                                               $"Попробуй по позже!");
            }
        }