Ejemplo n.º 1
0
        public static async Task <User> CheckUserRoleAsync(User user, Message message)
        {
            if (user.Role == Role.NotSet)
            {
                if (!message.Text.StartsWith(Emoji.Star))
                {
                    RequestUserRole(user, message.Chat.Id);
                }
                else if (message.Text.StartsWith(Emoji.Star))
                {
                    string msg = message.Text.Replace(Emoji.Star, "");

                    if (msg.Equals(Rm.GetString("Student")))
                    {
                        UService.ChangeRole(user.Id, Role.Student);
                        user = UService.View <Student>(user.Id);
                    }
                    else if (msg.Equals(Rm.GetString("Teacher")))
                    {
                        UService.ChangeRole(user.Id, Role.Teacher);
                        user = UService.View <Teacher>(user.Id);
                    }

                    await Bot.SendTextMessageAsync(message.Chat.Id, Rm.GetString("RoleSetMessage"),
                                                   replyMarkup : new ReplyKeyboardHide());
                }
            }
            return(user);
        }
Ejemplo n.º 2
0
        public static User CheckRegistration(Message message)
        {
            try
            {
                var user = UService.View <User>(message.Chat.Id);
                switch (user.Role)
                {
                case Role.Student:
                    user = UService.View <Student>(message.Chat.Id);
                    break;

                case Role.Teacher:
                    user = UService.View <Teacher>(message.Chat.Id);
                    break;

                default:
                    break;
                }
                return(user);
            }
            catch (Exception)
            {
                return(UService.CreateUser(message.Chat.Id, message.From.FirstName, Role.NotSet));
            }
        }
Ejemplo n.º 3
0
        public async Task <User> CheckUserRoleAsync(User user, Message message)
        {
            if (user.Role == Role.NotSet)
            {
                if (!message.Text.StartsWith(Emoji.Star))
                {
                    RequestUserRole(user, message.Chat.Id);
                }
                else if (message.Text.StartsWith(Emoji.Star))
                {
                    string msg = message.Text.Replace(Emoji.Star, "");

                    if (msg.Equals(" Я учусь"))
                    {
                        NormalMessage($"User role changed:{user.Id}");
                        UService.ChangeRole(user.Id, Role.Student);
                        user = UService.View <Student>(user.Id);
                    }
                    else if (msg.Equals(" Я преподаю"))
                    {
                        NormalMessage($"User role changed:{user.Id}");
                        UService.ChangeRole(user.Id, Role.Teacher);
                        user = UService.View <Teacher>(user.Id);
                    }

                    await Bot.SendTextMessageAsync(message.Chat.Id, "Отлично, теперь я знаю кто ты!",
                                                   replyMarkup : new ReplyKeyboardHide());
                }
            }
            return(user);
        }
Ejemplo n.º 4
0
 public MainWindowModel(UService searchService, AudioPlayer player)
 {
     _searchService = searchService;
     _audioPlayer   = player;
     SearchResults  = new ObservableCollection <Music>();
     _audioPlayer.PlaybackStopped += OnWaveOutEventOnPlaybackStopped;
     DoSearchCommand("周杰伦");
 }
Ejemplo n.º 5
0
        public void ClientSendToServer()
        {
            const string hostName = "127.0.0.1";
            const ushort port     = 8889;

            using (IService clientService = new UService(hostName, 8888))
            {
                using (IService serverService = new UService(hostName, 8889))
                {
                    Task task1 = Task.Factory.StartNew(() =>
                    {
                        while (!this.isClientStop)
                        {
                            clientService.Update();
                        }
                    }, TaskCreationOptions.LongRunning);

                    Task task2 = Task.Factory.StartNew(() =>
                    {
                        while (!this.isServerStop)
                        {
                            serverService.Update();
                        }
                    }, TaskCreationOptions.LongRunning);

                    // 往server host线程增加事件,accept
                    serverService.Add(() => this.ServerEvent(serverService));

                    Thread.Sleep(1000);

                    // 往client host线程增加事件,client线程连接server
                    clientService.Add(() => this.ClientEvent(clientService, hostName, port));
                    this.barrier.SignalAndWait();

                    serverService.Add(() => { this.isServerStop = true; });
                    clientService.Add(() => { this.isClientStop = true; });
                    Task.WaitAll(task1, task2);
                }
            }
        }
Ejemplo n.º 6
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" +
                                               $"Попробуй по позже!");
            }
        }