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); }
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[] { "Добавить группу", "Удалить группу" }); }
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); }
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); }
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); } } }
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); } } } }
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("Что-то пошло не так")); } }