Beispiel #1
0
 protected async void SendLikeDislikeKeyboard(User forUser, User profileUser, bool isForResponse = false)
 {
     await this.Instance.SendPhotoAsync(
         chatId : forUser.UserId,
         photo : profileUser.PictureId,
         caption : MessageFormatter.FormatProfileMessage(profileUser, isForResponse),
         parseMode : ParseMode.Html,
         replyMarkup : CallbackKeyboardExt.CreateLikeDislikeKeyboard(profileUser, isForResponse));
 }
Beispiel #2
0
        public void ExtractLike_From_RequestLike()
        {
            var buttons = CallbackKeyboardExt.CreateLikeDislikeKeyboard(new User(7331, "misha"))
                          .InlineKeyboard.First().ToArray();

            Like likeExtracted = CallbackKeyboardExt.ExtractLike(buttons[0].CallbackData);

            Assert.AreEqual(true, likeExtracted.Liked, "Like  bool .Liked");

            Like dislikeExtracted = CallbackKeyboardExt.ExtractLike(buttons[1].CallbackData);

            Assert.AreEqual(false, dislikeExtracted.Liked, "Dislike bool .Liked");
        }
Beispiel #3
0
        public void CreateLikeDislikeKeyboard_Response()
        {
            var user = new User(1337, "durov");

            var buttons = CallbackKeyboardExt.CreateLikeDislikeKeyboard(user, isForResponse: true)
                          .InlineKeyboard
                          .First().ToArray();

            Assert.AreEqual(CallbackKeyboardExt.EmojiConsts.Heart, buttons[0].Text);
            Assert.AreEqual(CallbackKeyboardExt.EmojiConsts.BrokenHeart, buttons[1].Text);

            Assert.AreEqual("resp 1337 true", buttons[0].CallbackData);
            Assert.AreEqual("resp 1337 false", buttons[1].CallbackData);
        }
Beispiel #4
0
        public void ExtractLike_From_ResponseLike()
        {
            var user = new User(7331, "misha");

            user.GotLikes.Add(new Like(user, true)
            {
                User = new User(1337, "durov")
            });

            var buttons = CallbackKeyboardExt.CreateLikeDislikeKeyboard(user.GotLikes.First().User, true)
                          .InlineKeyboard.First().ToArray();

            Like likeExtracted = CallbackKeyboardExt.ExtractLike(buttons[0].CallbackData, user.GotLikes.First());

            Assert.AreEqual(true, likeExtracted.Response, "Like response");

            Like dislikeExtracted = CallbackKeyboardExt.ExtractLike(buttons[1].CallbackData, user.GotLikes.First());

            Assert.AreEqual(false, dislikeExtracted.Response, "Dislike response");
        }
Beispiel #5
0
        internal void HandleCallbackQuery(object sender, CallbackQueryEventArgs callbackArgs)
        {
            var callback = callbackArgs.ToCallbackQuery();

            this.RemoveKeyboard(callback);

            if (string.IsNullOrEmpty(callback.From.Username))
            {
                this.SendNoUsernameSetMessage(callback.From.Id);
                return;
            }

            Console.WriteLine($"Callback: {callback.Id} | {callback.From.Username} | {callback.Data}");

            User currentUser = this.UserContext.GetByUserId(callback.From.Id);

            if (currentUser == null)
            {
                this.StartNewUser(callback.From.Id, callback.From.Username);
                return;
            }

            currentUser.LastVisitAt = DateTime.Now;
            this.UserContext.SaveChanges();

            if (currentUser.IsCreatingProfile())
            {
                this.CreatingProfileLoop(currentUser, cquery: callback);
                return;
            }

            // После всех условий выше, этот CallbackQuery - определённо лайк/дизлайк.

            this.UserContext.LoadGotLikes(currentUser);

            // Response case
            Like likeWithNoResponse = currentUser.GotLikes.FirstOrDefault(x => x.Response == null);

            if (likeWithNoResponse != null)
            {
                CallbackKeyboardExt.ExtractLike(callback.Data, likeWithNoResponse);
                this.UserContext.SaveChanges();

                if (likeWithNoResponse.Response.Value)                 // if liked
                {
                    this.NotifyMatchedBoth(likeWithNoResponse.User, likeWithNoResponse.CheckedUser);
                }
            }
            else // Request case
            {
                var like = CallbackKeyboardExt.ExtractLike(callback.Data);
                if (!currentUser.GotLikes.Select(x => x.CheckedUser.Id).Contains(like.CheckedUser.Id)) // TODO: Нужно ли? Или переделать?
                {
                    currentUser.Likes.Add(like);
                    this.UserContext.SaveChanges();
                }
            }

            if (!this.TrySendNextProfileForResponse(currentUser))
            {
                this.TrySendNextProfile(currentUser);
            }
        }