예제 #1
0
        protected ReplyKeyboardMarkup GetTelegramKeyboardReply(int col, IButton[] buttons)
        {
            var keyBoard = KeyBoardBuilder.CreateKeyBoard <KeyboardButton>(col, buttons.Count());
            int counter  = 0;

            for (int i = 0; i < keyBoard.Count(); i++)
            {
                for (int j = 0; j < keyBoard[i].Count(); j++)
                {
                    keyBoard[i][j].Text = buttons[counter].Text;
                    if (buttons[counter].Key == "RequestContact")
                    {
                        keyBoard[i][j].RequestContact = true;
                    }
                    else if (buttons[counter].Key == "RequestLocation")
                    {
                        keyBoard[i][j].RequestLocation = true;
                    }
                    counter++;
                }
            }
            var rkm = new ReplyKeyboardMarkup(keyBoard, true, true);

            return(rkm);
        }
예제 #2
0
 public void Init(long _userId, Vk _vkApi, UserManager _userManager)
 {
     m_vkApi         = _vkApi ?? throw new ArgumentNullException(nameof(_vkApi));
     m_userManager   = _userManager ?? throw new ArgumentNullException(nameof(_userManager));
     m_userId        = _userId;
     m_generalMarkup = KeyBoardBuilder.BuildMarkupKeyboard(new string[] { "Добавить группу", "Удалить группу" });
 }
예제 #3
0
        private global::Viber.Bot.Keyboard GetViberKeyboard(IButton[] buttons)
        {
            var kbd = new global::Viber.Bot.Keyboard();

            var keyBoard = KeyBoardBuilder.CreateCol <KeyboardButton>(buttons.Count());

            for (int i = 0; i < keyBoard.Count(); i++)
            {
                keyBoard[i].Text            = buttons[i].Text;
                keyBoard[i].TextSize        = TextSize.Regular;
                keyBoard[i].BackgroundColor = "#00a3cc";
                keyBoard[i].ActionBody      = buttons[i].Text;
                keyBoard[i].ActionType      = KeyboardActionType.Reply;

                if (buttons[i].Key == "RequestContact")
                {
                    keyBoard[i].ActionType = KeyboardActionType.SharePhone;
                }
                else if (buttons[i].Key == "RequestLocation")
                {
                    keyBoard[i].ActionType = KeyboardActionType.LocationPicker;
                }
            }
            kbd.Buttons         = keyBoard;
            kbd.BackgroundColor = "#80e5ff";
            kbd.DefaultHeight   = false;
            return(kbd);
        }
예제 #4
0
        protected InlineKeyboardMarkup GetTelegramKeyboardInLine(int col, IButton[] buttons)
        {
            var keyBoard = KeyBoardBuilder.CreateKeyBoard <InlineKeyboardButton>(col, buttons.Count());
            int counter  = 0;

            for (int i = 0; i < keyBoard.Count(); i++)
            {
                for (int j = 0; j < keyBoard[i].Count(); j++)
                {
                    keyBoard[i][j].Text         = buttons[counter].Text;
                    keyBoard[i][j].CallbackData = buttons[counter].Key ?? buttons[counter].Text;
                    counter++;
                }
            }
            var rkm = new InlineKeyboardMarkup(keyBoard);

            return(rkm);
        }
예제 #5
0
        private async void TelegramBot_OnCallbackQuery(object _sender, CallbackQueryEventArgs _e)
        {
            if (_e.CallbackQuery?.Data == null)
            {
                return;
            }

            if (PostLikeHelper.TryParseLikeInfo(_e.CallbackQuery.Data, out var likeInfo))
            {
                try
                {
                    if (likeInfo.IsLiked)
                    {
                        await m_telegramBot.AnswerCallbackQueryAsync(_e.CallbackQuery.Id, text : "Отметка ❤ уже поставлена");

                        return;
                    }

                    var user = m_userManager.GetUser(_e.CallbackQuery.Message.Chat.Id.ToString());

                    if (user == null)
                    {
                        await m_telegramBot.AnswerCallbackQueryAsync(_e.CallbackQuery.Id, text : "Пользователь не найден");

                        return;
                    }

                    try
                    {
                        await m_telegramBot.AnswerCallbackQueryAsync(_e.CallbackQuery.Id, text : "Вам ❤ это");

                        likeInfo.IsLiked = true;

                        var likeButton = KeyBoardBuilder.BuildInlineKeyboard(new[]
                        {
                            new KeyValuePair <string, string>("✅❤", PostLikeHelper.SerializeInfo(likeInfo))
                        }) as InlineKeyboardMarkup;

                        await m_telegramBot.EditMessageReplyMarkupAsync(_e.CallbackQuery.Message.Chat.Id,
                                                                        _e.CallbackQuery.Message.MessageId, replyMarkup : likeButton);

                        m_vkApi.LikePost(-likeInfo.OwnerId, (uint)likeInfo.ItemId, user.Token);
                    }
                    catch (InvalidParameterException)
                    {
                        //too late response
                    }
                    catch (Exception ex)
                    {
                        likeInfo.IsLiked = false;

                        await m_telegramBot.AnswerCallbackQueryAsync(_e.CallbackQuery.Id, text : "Не удалось поставить ❤");

                        var likeButton = KeyBoardBuilder.BuildInlineKeyboard(new[]
                        {
                            new KeyValuePair <string, string>("❤", PostLikeHelper.SerializeInfo(likeInfo))
                        }) as InlineKeyboardMarkup;

                        await m_telegramBot.EditMessageReplyMarkupAsync(_e.CallbackQuery.Message.Chat.Id,
                                                                        _e.CallbackQuery.Message.MessageId, replyMarkup : likeButton);

                        Console.WriteLine(ex);
                    }
                }
                catch (InvalidParameterException)
                {
                    //too late response
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }
예제 #6
0
        private async Task SendMessage(long _userId, Post _post)
        {
            if (_post is null)
            {
                throw new ArgumentNullException(nameof(_post));
            }

            var text = $"Группа: {_post.GroupName} \n \n {_post.Text}";

            var serializedLikeInfo = PostLikeHelper.SerializeInfo(new LikeInfo
            {
                OwnerId = _post.GroupId,
                ItemId  = _post.PostId
            });

            var likeButton = KeyBoardBuilder.BuildInlineKeyboard(new[] { new KeyValuePair <string, string>("❤", serializedLikeInfo) });

            if (!_post.Items.Any())
            {
                await m_telegramBot.SendTextMessageAsync(_userId, text, replyMarkup : likeButton);
            }
            else
            {
                if (_post.Items.Length == 1)
                {
                    switch (_post.Items.First())
                    {
                    case ImageItem imageItem:
                        await m_telegramBot.SendPhotoAsync(_userId,
                                                           new InputOnlineFile(imageItem.UrlMedium ?? imageItem.UrlSmall), text, replyMarkup : likeButton);

                        break;

                    case VideoItem videoItem:
                        if (!string.IsNullOrEmpty(videoItem.Url))
                        {
                            await m_telegramBot.SendTextMessageAsync(_userId, $"{text}\n{videoItem.Url}", replyMarkup : likeButton);
                        }
                        break;

                    case DocumentItem documentItem:
                        await m_telegramBot.SendDocumentAsync(_userId,
                                                              new InputOnlineFile(documentItem.Url), $"{text}\n{documentItem.Title}", replyMarkup : likeButton);

                        break;

                    case LinkItem linkItem:
                        await m_telegramBot.SendTextMessageAsync(_userId, $"{text}\n{linkItem.Url}", replyMarkup : likeButton);

                        break;
                    }
                }
                else
                {
                    await m_telegramBot.SendTextMessageAsync(_userId, text, replyMarkup : likeButton);

                    var media = new List <IAlbumInputMedia>();

                    foreach (var postItem in _post.Items)
                    {
                        switch (postItem)
                        {
                        case ImageItem imageItem:
                            media.Add(new InputMediaPhoto(
                                          new InputMedia(imageItem.UrlLarge ?? imageItem.UrlMedium ?? imageItem.UrlSmall)));
                            break;

                        case VideoItem videoItem:
                            if (!string.IsNullOrEmpty(videoItem.Url))
                            {
                                media.Add(new InputMediaVideo(new InputMedia(videoItem.Url)));
                            }
                            break;
                        }
                    }
                    if (media.Any())
                    {
                        await m_telegramBot.SendMediaGroupAsync(media, _userId);
                    }
                }
            }
        }
예제 #7
0
        public Response OnMessage(string _message)
        {
            try
            {
                var user = m_userManager.GetUser(m_userId.ToString());

                if (user == null)
                {
                    return(new Response("Ты еще не зарегистрирован!"));
                }

                if (_message == Command)
                {
                    return(new Response("Выбирай команду:", m_generalMarkup));
                }

                if (_message == "Добавить группу")
                {
                    var builder = new StringBuilder();

                    builder.AppendLine("Пришли мне ID группы для добавления из списка ниже");

                    m_rawGroups = m_vkApi.GetGroups(user.Token, 100);

                    foreach (var userGroup in user.Groups)
                    {
                        var existed = m_rawGroups.FirstOrDefault(_rawGroup => _rawGroup.Id == userGroup.GroupId);

                        if (existed != null)
                        {
                            m_rawGroups.Remove(existed);
                        }
                    }

                    for (int i = 0; i < m_rawGroups.Count; i++)
                    {
                        var group = m_rawGroups[i];
                        builder.AppendLine($"ID: {i}. Имя: {group.Name}");
                    }

                    m_waitingGroupNum    = true;
                    m_waitingGroupPeriod = false;
                    m_waitingGroupRemove = false;


                    return(new Response(builder.ToString()));
                }

                if (_message == "Удалить группу")
                {
                    var builder = new StringBuilder();

                    builder.AppendLine("Пришли мне ID группы для удаления из списка ниже");

                    if (user.Groups.Any())
                    {
                        for (int i = 0; i < user.Groups.Length; i++)
                        {
                            var group = user.Groups[i];
                            builder.AppendLine($"ID: {i}. Имя: {group.Name}");
                        }

                        m_waitingGroupNum    = false;
                        m_waitingGroupPeriod = false;
                        m_waitingGroupRemove = true;

                        return(new Response(builder.ToString()));
                    }

                    return(new Response("Список групп пуст!", m_generalMarkup));
                }

                if (m_waitingGroupRemove)
                {
                    m_waitingGroupRemove = false;

                    if (int.TryParse(_message, out var removeIndex) && removeIndex >= 0 && user.Groups.Length - 1 >= removeIndex)
                    {
                        m_userManager.RemoveGroupFromUser(user.Key, user.Groups[removeIndex]);

                        return(new Response("Удалено!", m_generalMarkup));
                    }

                    return(new Response("Некорректный ID", m_generalMarkup));
                }

                if (m_waitingGroupNum)
                {
                    m_waitingGroupNum = false;

                    if (int.TryParse(_message, out var groupNum) && groupNum >= 0 && m_rawGroups.Count - 1 >= groupNum)
                    {
                        m_selectedGroup = m_rawGroups[groupNum];

                        m_waitingGroupPeriod = true;

                        return(new Response("Почти все! Выбери период обновления",
                                            KeyBoardBuilder.BuildMarkupKeyboard(new string[] { "00:15:00", "00:30:00", "01:00:00", "01:30:00", "02:00:00" })));
                    }

                    return(new Response("Некорректный ID", m_generalMarkup));
                }

                if (m_waitingGroupPeriod)
                {
                    m_waitingGroupPeriod = false;

                    if (TimeSpan.TryParse(_message, out var span) &&
                        span >= TimeSpan.FromMinutes(15))
                    {
                        m_userManager.AddGroupToUser(user.Key,
                                                     new VkGrabber.Group(m_selectedGroup.Id, span, m_selectedGroup.Name));

                        return(new Response("Добавлено!", m_generalMarkup));
                    }

                    return(new Response("Некорректный период обновления!", m_generalMarkup));
                }

                return(null);
            }
            catch
            {
                WorkCompleteEventHandler?.Invoke(m_userId);

                return(new Response("Что-то пошло не так"));
            }
        }