Beispiel #1
0
        async Task SendToOper(string threadId, InstaCurrentUser curUser)
        {
            var q1 = await api.GetDirectInboxThreadAsync(threadId);

            if (q1.Succeeded)
            {
                var thread = q1.Value;
                var q      = await api.GetUserAsync(Oper);

                if (!q.Succeeded)
                {
                    Task.Factory.StartNew(() => MessageBox.Show("Ошибка в параметре \"Оператор\": " + q.Info.Message, "Персонаж: " + name));
                    return;
                }

                string msg = "";
                thread.Items.Reverse();
                foreach (var item in thread.Items)
                {
                    if (item.UserId == thread.Users[0].Pk)
                    {
                        msg += thread.Users[0].UserName + ":\n";
                    }
                    else
                    {
                        msg += curUser.UserName + ":\n";
                    }

                    msg += "\t" + item.Text + "\n";
                }

                await SendMessage(q.Value.Pk.ToString(), string.Empty, msg);
            }
        }
Beispiel #2
0
        async void SetCurrentUser()
        {
            try
            {
                await Helper.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                {
                    ShowLoading();
                    var userResult = await Helper.InstaApi.GetCurrentUserAsync();
                    if (userResult.Succeeded)
                    {
                        var user    = userResult.Value;
                        CurrentUser = user;
                        PublicInformationGrid.Visibility     = Helper.CurrentUser.IsBusiness ? Visibility.Visible : Visibility.Collapsed;
                        PersonalInformationButton.Visibility = !Helper.CurrentUser.IsBusiness ? Visibility.Visible : Visibility.Collapsed;
                        NameText.Text                 = user.FullName;
                        UsernameText.Text             = user.UserName;
                        BioText.Text                  = user.Biography;
                        WebsiteText.Text              = user.ExternalUrl;
                        UserImage.Fill                = user.ProfilePicture.GetImageBrush();
                        PhoneNumberText.Text          = user.PhoneNumber;
                        EmailText.Text                = user.Email;
                        PersonalCustomGenderText.Text = CustomGenderText.Text = user.CustomGender;
                        if (!string.IsNullOrEmpty(user.Birthday))
                        {
                            try
                            {
                                var date             = DateTime.Parse(user.Birthday);
                                BirthDatePicker.Date = DateTime.Parse(user.Birthday);
                            }
                            catch { }
                        }
                        switch (user.Gender)
                        {
                        case InstagramApiSharp.Enums.InstaGenderType.Female:
                            PersonalGenderCombo.SelectedIndex = GenderCombo.SelectedIndex = 0;
                            break;

                        case InstagramApiSharp.Enums.InstaGenderType.Male:
                            PersonalGenderCombo.SelectedIndex = GenderCombo.SelectedIndex = 1;
                            break;

                        case InstagramApiSharp.Enums.InstaGenderType.Custom:
                            PersonalGenderCombo.SelectedIndex = GenderCombo.SelectedIndex = 2;
                            break;

                        case InstagramApiSharp.Enums.InstaGenderType.Unknown:
                        default:
                            PersonalGenderCombo.SelectedIndex = GenderCombo.SelectedIndex = 3;
                            break;
                        }
                    }
                    HideLoading();
                });
            }
            catch { HideLoading(); }
        }
Beispiel #3
0
        private Result <InstaCurrentUser> CreateReturnResultCurrentUser()
        {
            var instaUser = new InstaUserShort
            {
                UserName  = userName,
                Pk        = userId,
                IsPrivate = false
            };
            var returnUser = new InstaCurrentUser(instaUser);

            return(new Result <InstaCurrentUser>(true, returnUser));
        }
        private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.Title = "Home - Feed";
            DisableButtons();
            var _user = await Api.GetCurrentUserAsync();

            if (_user.Succeeded)
            {
                this.CurrentUser = _user.Value;

                using (var context = new InstaContext())
                {
                    if (!context.Users.Any(u => u.PK == this.CurrentUser.Pk))
                    {
                        var user = new UserModel
                        {
                            PK        = this.CurrentUser.Pk,
                            LastLogin = DateTime.Now
                        };

                        context.Users.Add(user);
                        context.SaveChanges();
                    }

                    this.UserModel           = context.Users.Include("Schedules").Include("Searches").Include("Tasks").First(u => this.CurrentUser.Pk == u.PK);
                    this.UserModel.LastLogin = DateTime.Now;
                    context.SaveChanges();
                }

                try
                {
                    TaskWorker.StartBackgroundWorker(this.UserModel.Id, this.Api);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("TaskWorker.StartBackgroundWorker" + Environment.NewLine + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }

                EnableButtons();

                profileImage.Fill      = new ImageBrush(new BitmapImage(new Uri(this.CurrentUser.ProfilePicture)));
                lblUsername.Content    = this.CurrentUser.UserName;
                progressBar.Visibility = Visibility.Hidden;
            }
            else
            {
                MessageBox.Show(_user.Info.Message);
                this.Close();
            }

            pnlMainContent.Children.Clear();
            pnlMainContent.Children.Add(new FeedView(this.Api));
        }
        public static UserInfo ToUserInfo(this InstaCurrentUser instaCurrentUser)
        {
            UserInfo userInfo = new UserInfo
            {
                Id                = instaCurrentUser.Pk,
                UserName          = instaCurrentUser.UserName,
                FullName          = instaCurrentUser.FullName,
                IsPrivate         = instaCurrentUser.IsPrivate,
                HasProfilePicture = instaCurrentUser.ProfilePictureId != ApiConstans.UNKNOWN
            };

            return(userInfo);
        }
Beispiel #6
0
        private async Task Answer(InstaCurrentUser curUser)
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();

            while (working)
            {
                if (watch.ElapsedMilliseconds >= 6 * 60 * 1000)
                {
                    Stop();
                    break;
                }

                if (Contacts.Count == 0)
                {
                    Stop();
                    break;
                }

                var result = await api.GetDirectInboxAsync();

                if (result.Succeeded && result.Value.Inbox.Threads != null && result.Value.Inbox.Threads.Count != 0)
                {
                    foreach (var thread1 in result.Value.Inbox.Threads)
                    {
                        //если бот уже чето ответил то ждем сообщения от пользователя и смотрим другой тред
                        if (thread1.Items[0].UserId == curUser.Pk)
                        {
                            continue;
                        }

                        //загружаем весь тред
                        var q1 = await api.GetDirectInboxThreadAsync(thread1.ThreadId);

                        if (q1.Succeeded)
                        {
                            var thread = q1.Value;

                            //определяем контактёра перебирая всех юзеров в треде
                            int contInd = Contacts.FindIndex(x => x.Login == thread.Users[0].UserName);

                            //если не найден пропускаем этот тред
                            if (contInd == -1)
                            {
                                continue;
                            }

                            if (Contacts == null || Contacts.Count == 0)
                            {
                                break;
                            }
                            Contact contact = Contacts[contInd];

                            //если пользователю отправили уже все наборы сообщений
                            if (contact.Complete)
                            {
                                continue;
                            }

                            if (contact.LastAnswered < 0)
                            {
                                continue;
                            }

                            List <string> refuses   = proj.script.contRefuses[contact.LastAnswered];
                            string[]      questions = proj.script.questions;
                            //string answer = proj.script.persMsgs[contact.LastAnswered + 1];



                            //определяем есть ли стоп слово или вопрос
                            bool foundStop     = false;
                            bool foundQuestion = false;
                            int  questionInd   = -1;

                            int countMsg = 0;
                            //смотрим все последние сообщения от пользователя
                            while (thread.Items[countMsg].UserId != curUser.Pk && countMsg + 1 < thread.Items.Count)
                            {
                                //ищем стоп слово
                                foreach (string word in refuses)
                                {
                                    //нашли стоп слово
                                    if (thread.Items[countMsg].Text == word)
                                    {
                                        foundStop = true;
                                        break;
                                    }
                                }

                                if (foundStop)
                                {
                                    break;
                                }


                                //ищем вопрос
                                for (int i = 0; i < questions.Length; i++)
                                {
                                    //нашли стоп слово
                                    if (thread.Items[countMsg].Text == questions[i])
                                    {
                                        foundQuestion = true;
                                        questionInd   = i;
                                        break;
                                    }
                                }

                                if (foundQuestion)
                                {
                                    break;
                                }

                                countMsg++;
                            }



                            if (foundStop)
                            {
                                //принудительно завершаем
                                Contacts.RemoveAt(contInd);
                                proj.DialCount++;
                                await SendMessage(thread.Users[0].Pk.ToString(), thread.ThreadId, proj.script.refuseAnswer);
                                await SendToOper(thread.ThreadId, curUser);
                            }
                            else if (foundQuestion)
                            {
                                await SendMessage(thread.Users[0].Pk.ToString(), thread.ThreadId, proj.script.answersToQuestions[questionInd]);
                            }   //если прошло нужное время
                            else if (contact.LastAnswered > 5 || DateTime.Now >= contact.LastAnswTime.Add(proj.script.delays[contact.LastAnswered]))
                            {
                                //обновляем номер последнего отвеченного
                                contact.LastAnswered++;
                                contact.LastAnswTime = DateTime.Now;

                                //если это было последнее сообщение в диалоге то отправляем оператору и удаляем из списка
                                if (contact.Complete)
                                {
                                    Contacts.RemoveAt(contInd);
                                    proj.DialCount++;
                                    await SendToOper(thread.ThreadId, curUser);

                                    foundStop = true;
                                    break;
                                }

                                //если не последнее то пишем ответ
                                string answer = proj.script.persMsgs[contact.LastAnswered];
                                await SendMessage(thread.Users[0].Pk.ToString(), thread.ThreadId, answer);
                            }
                        }
                    }
                }
            }
        }