public MessagesSendParams Reply(Message message) { if (Condition(message)) { string[] words = message.Text.Split(' '); string replyText = "нет совпадающей команды"; switch (words[0]) { case "/help": { StringBuilder sb = new StringBuilder("Список команд:\n"); foreach (var kv in help) { sb.Append(kv.Key + ": " + kv.Value + "\n"); } replyText = sb.ToString(); break; } case "/add_tags": { string[] tags = words.Skip(1).ToArray(); if (_tagsService.AddTags(tags)) //using tag service to add tags { StringBuilder sb = new StringBuilder("Вы добавили тэги: "); foreach (string tag in tags) //building a reply string of tags to be added { sb.Append($"\"{tag}\" "); } replyText = sb.ToString(); } else { replyText = "Error!"; } break; } case "/tags_list": { var tags = _tagsService.GetTagsList(); if (tags == null || tags.Length == 0) { replyText = "<empty list>"; } else { replyText = tags.Aggregate((s1, s2) => s1 + " " + s2); } break; } case "/set_tags": { var attachments = message.Attachments; if (attachments == null) { replyText = "Ошибка: нет прикреплённого поста!"; break; } WallPostData wallPost; try { wallPost = _messageApi.GetAttachmentsPost(attachments); //Getting post from message } catch (InvalidOperationException ioe) { replyText = "Ошибка: нет прикреплённого поста!"; break; } catch (ArgumentNullException ane) { replyText = "Ошбика: нет прикреплённого поста!"; break; } catch (ApplicationException ae) { replyText = "Ошибка: больше 2 постов в сообщении!!!"; break; } //Building a string StringBuilder stringBuilder = new StringBuilder(); var tags = words.Skip(1).ToArray(); foreach (var tag in tags) { if (_tagsService.AddTag(tag)) { stringBuilder.Append($"Новый тэг {tag} добавлен.\n"); } } if (tags.Length == 0) { tags = null; } var status = _tagsService.AddPost(wallPost, tags, out int id); //Adding post and setting tags! if (status) { stringBuilder.Append($"Пост (id: {id}) добавлен.\nТэги установлены."); replyText = stringBuilder.ToString(); } else { replyText = "Произошла ошибка! Пост или тэги не были добавлены."; } break; } } return(IMessageApi.DefaultTextMessage(message, replyText)); } else { return(IMessageApi.DefaultTextMessage(message, "Введите /help для помощи")); } }
public async Task <MessagesSendParams> Reply(Message message) { string payload = message.Payload; string replyText = "hehehoho"; string help = "Для добавления поста пришлите его в сообщения боту.\n" + "Кнопка \"Добавить пост\" переводит бота в режим ожидания поста. " + "Её нажатие необязательно, и нужно для отображения клавиатуры в режиме настройки поста\n" + "После нажатия \"Добавить тэг\" бот будет ожидать первое отправленное вами текстовое сообщение, " + "и создаст новый тэг с таким названием.\n" + "После нажатия \"Список тэгов\" бот выведет все тэги, имеющиеся на данный момент."; if (!String.IsNullOrEmpty(message.Payload)) { long userId = 0; if (message.FromId != null) { userId = (long)message.FromId; } AccessLevel userAccess = await _usersService.GetAccess(userId); var d = JsonSerializer.Deserialize <Dictionary <String, String> >(payload); switch (d["command"]) { case "start": { replyText = help; var keyboardBuilder = Keyboards.MainMenuKeyboardBuilder(); MessagesSendParams sendParams = new MessagesSendParams() { PeerId = message.PeerId, Message = help, RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }; return(sendParams); } case "addTag": { AddingTagEvent?.Invoke(userId); if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; var keyboardBuilder = new KeyboardBuilder(); keyboardBuilder.AddButton(new MessageKeyboardButtonAction() { Type = KeyboardButtonActionType.Text, Label = "Отмена", Payload = "{\"command\": \"tagsAddingCancel\"}" }, KeyboardButtonColor.Negative); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Для добавления тэга, введите название тэга в поле ввода сообщения и отправьте сообщение.\n" + "Если вы хотите добавить несколько тэгов, разделяйте их символами \',\'. " + "Другие введённые вами символы, в том числе и пробелы, " + "будут считаться частью имени тэга", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "tagsAddingCancel": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelTag?.Invoke(userId); var keyboardBuilder = Keyboards.MainMenuKeyboardBuilder(); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Отмена добавления тэга", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "addPost": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; return(new MessagesSendParams() { PeerId = message.PeerId, RandomId = new Random().Next(), Message = "Ожидание отправки поста...", Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build() }); } case "tagsList": { var tags = await _feedService.GetTagsList(); var specialTags = await _feedService.GetSpecialTagsList(); string tagsString = "<empty list>"; if (tags != null || tags.Length != 0) { tagsString = tags.Aggregate((s1, s2) => s1 + "; " + s2); } string specialTagsString = "<empty list>"; if (specialTags != null || specialTags.Length != 0) { specialTagsString = specialTags.Aggregate((s1, s2) => s1 + "; " + s2); } replyText = "Основные тэги:\n" + tagsString + "\nТэги факультетов:\n" + specialTagsString; return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = replyText, Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() }); } case "tagsListPostHandling": { var tags = await _feedService.GetTagsList(); var specialTags = await _feedService.GetSpecialTagsList(); string tagsString = "<empty list>"; if (tags != null || tags.Length != 0) { tagsString = tags.Aggregate((s1, s2) => s1 + "; " + s2); } string specialTagsString = "<empty list>"; if (specialTags != null || specialTags.Length != 0) { specialTagsString = specialTags.Aggregate((s1, s2) => s1 + "; " + s2); } replyText = "Основные тэги:\n" + tagsString + "\nТэги факультетов:\n" + specialTagsString; return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = replyText, Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build() }); } case "cancelPost": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); return(Cancel?.Invoke(userId, message)); } case "attachTag": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; _tagsList = await _feedService.GetAllTags(); UserAddingTagToPost?.Invoke(userId); _messageApi.SendMessage(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Вы можете выбрать тэги по из предложенных в следующем сообщении, или ввести тэги вручную." + "Вводя тэги вручную в поле ввода сообщений, разделяйте тэги символами \',\'. Помните, что пробелы " + "считаются частью имени тэга.", Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build() //Keyboard = Keyboards.InputTagAttachingKeyboardBuilder().Build() }); IKeyboardBuilder keyboardBuilder = Keyboards.TagsKeyboardBuilders(_tagsList)[0]; return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Выбирете тэг из предложенных. Для переключения на следующую страницу нажмите зелёную кнопку.", Keyboard = keyboardBuilder.Build() }); } case "tagsAttachingInputCancel": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); var keyboardBuilder = Keyboards.MainMenuKeyboardBuilder(); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Отмена прикрепления тэга", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "detachTag": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); return(AttachedTagsMessage?.Invoke(userId, 0, message)); } case "nextPage": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; int current = int.Parse(d["current"]); int from = int.Parse(d["from"]); IKeyboardBuilder keyboardBuilder; if (current == from) { keyboardBuilder = Keyboards.TagsKeyboardBuilders(_tagsList)[0]; } else { keyboardBuilder = Keyboards.TagsKeyboardBuilders(_tagsList)[current]; } return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Выбирете тэг", Keyboard = keyboardBuilder.Build() }); } case "nextPageAttached": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; int current = int.Parse(d["current"]); int from = int.Parse(d["from"]); IKeyboardBuilder keyboardBuilder; if (current == from) { current = 0; } return(AttachedTagsMessage?.Invoke(userId, current, message)); } case "buttonTag": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; if (message.Text == null) { throw new Exception(); } string tag = message.Text; return(AddingTagToPostEvent?.Invoke(userId, tag, message)); } case "detachButtonTag": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; if (message.Text == null) { throw new Exception(); } string tag = message.Text; return(DetachingTagEvent?.Invoke(userId, tag, message)); } case "sendPost": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); return(await Send.Send(userId, message, false)); } case "help": { return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = help, Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() }); } case "postEventHelp": { CancelUserAddingTagToPost?.Invoke(userId); return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Чтобы начать работу с постом, необходимо отправить его в сообщения боту." + "\"Прикрепить тэг\" используется для прикрепления тэга к посту." + "\"Отправить\" используется для отправки поста вместе с прикреплёнными тэгами" + "Чтобы отменить добавление поста нажмите \"Отмена\"", Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build() }); } case "acceptSend": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); return(await Send.Send(userId, message, true)); } case "declineSend": { if (userAccess == AccessLevel.NotAuthorized) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без модераторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelUserAddingTagToPost?.Invoke(userId); return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Отправка отменена. Возвращаюсь к обработке поста.", Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build() }); } case "adminPanel": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Чтобы добавить администратора/модератора, нажмите \"Добавить админа\".", Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } case "adminsList": { List <UserData> botAdmins = new List <UserData>(); try { botAdmins = await _usersService.GetAdmins(); } catch (Exception e) { return(new MessagesSendParams() { PeerId = message.PeerId, Message = $"Ошибка при отправке запроса", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } if (botAdmins.Count == 0) { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Ошибка при отправке запроса", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } } ; StringBuilder sb = new StringBuilder(); foreach (UserData botAdmin in botAdmins) { var t = this.GetUserNameEvent(botAdmin.IdVk); string s = $"[id{botAdmin.IdVk}|{t.Item1} {t.Item2}] - " + $"{ApiUsersService.AccessLevelName(botAdmin.Role)}\n"; sb.Append(s); } return(new MessagesSendParams() { PeerId = message.PeerId, Message = sb.ToString(), RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } case "addAdmin": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; AddingAdminEvent?.Invoke(userId); var keyboardBuilder = new KeyboardBuilder(); keyboardBuilder.AddButton(new MessageKeyboardButtonAction() { Type = KeyboardButtonActionType.Text, Label = "Отмена", Payload = "{\"command\": \"adminAddingCancel\"}" }, KeyboardButtonColor.Negative); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Для добавления админа, скопируйте ссылку на пользователя ВКонтакте " + "в поле ввода сообщения и отправьте сообщение.", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "adminAddingCancel": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelAdmin?.Invoke(userId); var keyboardBuilder = Keyboards.AdminPanelKeyboardBuilder(); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Отмена добавления админа", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "addModeratorAccess": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; long moderId = long.Parse(d["userId"]); try { bool status = await _usersService.AddAdmin(moderId, AccessLevel.Moderator); if (status) { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Пользователь vk.com/id{moderId} добавлен как модератор", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } } ; else { return(new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при добавлении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } } catch (Exception e) { return(new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при добавлении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } } case "addAdminAccess": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; long adminId = long.Parse(d["userId"]); try { bool status = await _usersService.AddAdmin(adminId, AccessLevel.Admin); if (status) { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Пользователь vk.com/id{adminId} добавлен как администратор", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } } ; else { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при добавлении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } }; } catch (Exception e) { return(new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при добавлении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } } case "removeAdmin": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; RemovingAdmin?.Invoke(userId); var keyboardBuilder = new KeyboardBuilder(); keyboardBuilder.AddButton(new MessageKeyboardButtonAction() { Type = KeyboardButtonActionType.Text, Label = "Отмена", Payload = "{\"command\": \"declineRemoveAdmin\"}" }, KeyboardButtonColor.Negative); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Для удаения админа, скопируйте ссылку на пользователя ВКонтакте " + "в поле ввода сообщения и отправьте сообщение.", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "declineRemoveAdmin": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; CancelRemovingAdmin?.Invoke(userId); var keyboardBuilder = Keyboards.AdminPanelKeyboardBuilder(); return(new MessagesSendParams() { PeerId = message.PeerId, Message = "Отмена удаления админа", RandomId = new Random().Next(), Keyboard = keyboardBuilder.Build() }); } case "acceptRemoveAdmin": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; long adminId = long.Parse(d["userId"]); try { bool status = await _usersService.DeleteAdmin(adminId); if (status) { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Пользователь vk.com/id{adminId} удалён из списка админов", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } } ; else { return new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при удалении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() } }; } catch (Exception e) { return(new MessagesSendParams() { PeerId = message.PeerId, Message = $"Произошла ошибка при удалении пользователя.", RandomId = new Random().Next(), Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build() }); } } case "backToMain": { if (userAccess != AccessLevel.Admin) { return new MessagesSendParams() { PeerId = message.PeerId, Message = "Операция недоступна пользователям без администраторского доступа", RandomId = new Random().Next(), Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() } } ; return(new MessagesSendParams() { RandomId = new Random().Next(), PeerId = message.PeerId, Message = "Назад", Keyboard = Keyboards.MainMenuKeyboardBuilder().Build() }); } } return(IMessageApi.DefaultTextMessage(message, replyText)); } return(IMessageApi.DefaultTextMessage(message, "Неизвестная команда. Используйте кнопку \"Помощь\"")); } }