Exemplo n.º 1
0
        public MessagesSendParams Cancel(long user_id, Message message)
        {
            if (usersStateMap.ContainsKey(user_id))
            {
                bool status = usersStateMap.Remove(user_id);
                if (!status)
                {
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        RandomId = new Random().Next(),
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = "Возникла ошибка при отмене!"
                    });
                }
                else
                {
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        RandomId = new Random().Next(),
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = "Добавление поста отменено."
                    });
                }
            }

            return(new MessagesSendParams()
            {
                PeerId = message.PeerId,
                RandomId = new Random().Next(),
                Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                Message = "Отмена добавления поста."
            });
        }
Exemplo n.º 2
0
        public MessagesSendParams HandlePost(long userId, WallPostData postData, Message message)
        {
            State st = new State {
                PostData = postData
            };

            usersStateMap[userId] = st;
            return(new MessagesSendParams()
            {
                PeerId = message.PeerId,
                RandomId = new Random().Next(),
                Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
                Message = "Обработка поста."
            });
        }
Exemplo n.º 3
0
        public async Task <MessagesSendParams> Send(long user_id, Message message, bool isUserWarned = false)
        {
            if (usersStateMap.ContainsKey(user_id))
            {
                State state = usersStateMap[user_id];
                if (!isUserWarned && (state.Tags == null || state.Tags.Count == 0))
                {
                    string warning = "Вы уверены, что хотите отправить пост без тэгов?";
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        RandomId = new Random().Next(),
                        Keyboard = Keyboards.AcceptOrDeclineKeyboardBuilder().Build(),
                        Message = warning
                    });
                }
                usersStateMap.Remove(user_id);
                int id = await _feedService.AddPost(state.PostData, state.Tags.ToArray());

                if (id != -1)
                {
                    string replyText = $"пост {id} добавлен с тэгами:\n" + string.Join("\n", state.Tags);
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        RandomId = new Random().Next(),
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = replyText
                    });
                }
                return(new MessagesSendParams()
                {
                    PeerId = message.PeerId,
                    RandomId = new Random().Next(),
                    Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                    Message = "Возникла ошибка при добавлении поста или тэгов!"
                });
            }
            return(new MessagesSendParams()
            {
                PeerId = message.PeerId,
                RandomId = new Random().Next(),
                Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
                Message = "Нет поста для отправки. Ожидание поста..."
            });
        }
Exemplo n.º 4
0
 public MessagesSendParams DetachTagFromPost(long user_id, string tag, Message message)
 {
     if (usersStateMap.ContainsKey(user_id))
     {
         //usersStateMap[user_id].Tags.Add(tag);
         var res = usersStateMap[user_id].Tags.Remove(tag);
         if (res)
         {
             return new MessagesSendParams()
                    {
                        PeerId   = message.PeerId,
                        RandomId = new Random().Next(),
                        Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
                        Message  = $"Тэг {tag} откреплён от поста."
                    }
         }
         ;
         else
         {
             return(new MessagesSendParams()
             {
                 PeerId = message.PeerId,
                 RandomId = new Random().Next(),
                 Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
                 Message = $"Не удалось открепить тэг {tag}"
             });
         }
     }
     else
     {
         return(new MessagesSendParams()
         {
             PeerId = message.PeerId,
             RandomId = new Random().Next(),
             Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
             Message = $"Нет поста для открепления тэга."
         });
     }
 }
Exemplo n.º 5
0
 public MessagesSendParams AddTagToPost(long user_id, string tag, Message message)
 {
     if (usersStateMap.ContainsKey(user_id))
     {
         usersStateMap[user_id].Tags.Add(tag);
         return(new MessagesSendParams()
         {
             PeerId = message.PeerId,
             RandomId = new Random().Next(),
             Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
             Message = $"Тэг {tag} добавлен к посту."
         });
     }
     else
     {
         return(new MessagesSendParams()
         {
             PeerId = message.PeerId,
             RandomId = new Random().Next(),
             Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
             Message = $"Нет поста для добавления тэга. Ожидание поста..."
         });
     }
 }
Exemplo n.º 6
0
 public MessagesSendParams AttachedTagsMessage(long user_id, int i, Message message)
 {
     if (usersStateMap.ContainsKey(user_id))
     {
         var tags = usersStateMap[user_id].Tags.ToArray();
         return(new MessagesSendParams()
         {
             PeerId = message.PeerId,
             RandomId = new Random().Next(),
             Keyboard = Keyboards.AttachedTagsKeyboardBuilders(tags)[i].Build(),
             Message = "Для открепления тэга нажмите на него"
         });
     }
     else
     {
         return(new MessagesSendParams()
         {
             PeerId = message.PeerId,
             RandomId = new Random().Next(),
             Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build(),
             Message = "Нет поста для открепления тэга."
         });
     }
 }
Exemplo n.º 7
0
        public async Task <MessagesSendParams> Reply(Message message)
        {
            if (!Condition(message))
            {
                return(null);
            }

            var keyboardBuilder = Keyboards.MainMenuKeyboardBuilder();

            //Console.WriteLine(message.UserId);
            Console.WriteLine(message.FromId == null);
            if (message.FromId != null)
            {
                long userId = (long)message.FromId;
                //Console.WriteLine(userId);
                if (usersAddingTag.Contains(userId))
                {
                    //Console.WriteLine("пользователь добавляет тэг!");
                    if (message.Text != null)
                    {
                        string[]      tags = message.Text.Split(',');
                        StringBuilder sb   = new StringBuilder();
                        foreach (var tag in tags)
                        {
                            bool status = await _feedService.AddTag(tag);

                            if (status)
                            {
                                sb.Append($"Тэг {tag} добавлен.\n");
                            }
                            else
                            {
                                sb.Append($"Произошла ошибка добавления тэга {tag}.");
                            }
                        }
                        StopAddingTag(userId);
                        return(new MessagesSendParams()
                        {
                            PeerId = message.PeerId,
                            Message = sb.ToString(),
                            RandomId = new Random().Next(),
                            Keyboard = keyboardBuilder.Build()
                        });
                    }

                    keyboardBuilder = Keyboards.InputKeyboardBuilder();
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        Message = "Невозможно добавить пустой тэг. Введите тэг.",
                        RandomId = new Random().Next(),
                        Keyboard = keyboardBuilder.Build()
                    });
                }
                else
                {
                    if (usersAddingAdmin.Contains(userId))
                    {
                        if (message.Text != null)
                        {
                            try
                            {
                                string userLink = message.Text.Split('/').Last();
                                long   adminId  = _messageApi.GetUserId(userLink);
                                StopAddingAdmin(userId);
                                keyboardBuilder = Keyboards.SetAccessKeyboardBuilder(adminId);
                                return(new MessagesSendParams()
                                {
                                    PeerId = message.PeerId,
                                    Message = $"Добавляю пользователя {adminId}. Выберите уровень доступа: ",
                                    RandomId = new Random().Next(),
                                    Keyboard = keyboardBuilder.Build()
                                });
                            }
                            catch (Exception e)
                            {
                                return(new MessagesSendParams()
                                {
                                    PeerId = message.PeerId,
                                    Message = $"Ошибка ввода! Необходимо ввести ссылку на пользователя вк.",
                                    RandomId = new Random().Next(),
                                    //Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build()
                                });
                            }
                        }

                        keyboardBuilder = Keyboards.InputKeyboardBuilder();
                        return(new MessagesSendParams()
                        {
                            PeerId = message.PeerId,
                            Message = "Невозможно добавить пустого пользователя. Введите ссылку на пользователя.",
                            RandomId = new Random().Next(),
                            Keyboard = keyboardBuilder.Build()
                        });
                    }
                    else
                    {
                        if (usersRemovingAdmin.Contains(userId))
                        {
                            if (message.Text != null)
                            {
                                try
                                {
                                    string userLink = message.Text.Split('/').Last();
                                    long   adminId  = _messageApi.GetUserId(userLink);
                                    StopRemovingAdmin(userId);
                                    keyboardBuilder = Keyboards.AcceptOrDeclineAdminKeyboardBuilder(adminId);
                                    return(new MessagesSendParams()
                                    {
                                        PeerId = message.PeerId,
                                        Message = $"Подтвердите удаление пользователя {adminId}.",
                                        RandomId = new Random().Next(),
                                        Keyboard = keyboardBuilder.Build()
                                    });
                                }
                                catch (Exception e)
                                {
                                    return(new MessagesSendParams()
                                    {
                                        PeerId = message.PeerId,
                                        Message = $"Ошибка ввода! Необходимо ввести ссылку на пользователя вк.",
                                        RandomId = new Random().Next(),
                                        //Keyboard = Keyboards.AdminPanelKeyboardBuilder().Build()
                                    });
                                }
                            }

                            keyboardBuilder = Keyboards.InputKeyboardBuilder();
                            return(new MessagesSendParams()
                            {
                                PeerId = message.PeerId,
                                Message = "Невозможно удалить пустого пользователя. Введите ссылку на пользователя.",
                                RandomId = new Random().Next(),
                                Keyboard = keyboardBuilder.Build()
                            });
                        }
                        else
                        {
                            if (usersAddingTagToPost.Contains(userId))
                            {
                                if (message.Text != null)
                                {
                                    string[]      tags     = message.Text.Split(',');
                                    StringBuilder sb       = new StringBuilder();
                                    string[]      realTags = await _feedService.GetTagsList();

                                    foreach (var tag in tags)
                                    {
                                        if (realTags.Contains(tag))
                                        {
                                            this.AddTagToWallPost?.Invoke(userId, tag, message);
                                            sb.Append($"Тэг {tag} добавлен к посту.\n");
                                        }
                                        else
                                        {
                                            sb.Append($"Не существует тэг \"{tag}\".");
                                        }
                                    }
                                    return(new MessagesSendParams()
                                    {
                                        PeerId = message.PeerId,
                                        Message = sb.ToString(),
                                        RandomId = new Random().Next(),
                                        Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build()
                                    });
                                }

                                keyboardBuilder = Keyboards.InputKeyboardBuilder();
                                return(new MessagesSendParams()
                                {
                                    PeerId = message.PeerId,
                                    Message = "Невозможно прикрепить пустой тэг. Введите тэг.",
                                    RandomId = new Random().Next(),
                                    Keyboard = Keyboards.PostHandlingKeyboardBuilder().Build()
                                });
                            }
                        }
                    }
                }
                return(new MessagesSendParams()
                {
                    PeerId = message.PeerId,
                    Message = "Неизвестная команда. Нажмите \"Помощь\"",
                    RandomId = new Random().Next(),
                    Keyboard = keyboardBuilder.Build()
                });
            }
            else
            {
                Console.WriteLine("Debug line!");
                return(new MessagesSendParams()
                {
                    PeerId = message.PeerId,
                    Message = "Неизвестная команда. Нажмите \"Помощь\"",
                    RandomId = new Random().Next(),
                    Keyboard = keyboardBuilder.Build()
                });
            }

            throw new ApplicationException(); //never happens, added for compiler's calm
        }
Exemplo n.º 8
0
        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, "Неизвестная команда. Используйте кнопку \"Помощь\""));
        }
    }
Exemplo n.º 9
0
        public async Task <MessagesSendParams> Reply(Message message)
        {
            if (Condition(message))
            {
                long userId = 0;
                if (message.FromId != null)
                {
                    userId = (long)message.FromId;
                }
                AccessLevel userAccess = await _usersService.GetAccess(userId);

                var attachments = message.Attachments;
                try
                {
                    var wallPost = _messageApi.GetAttachmentsPost(attachments);

                    /*bool postAdded = _tagsService.AddPost(wallPost, null, out int id); /* using tags service. status = true if
                     *  post if added, and false if an error has occured. */
                    if (userAccess == AccessLevel.NotAuthorized)
                    {
                        return(new MessagesSendParams()
                        {
                            PeerId = message.PeerId,
                            Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                            Message = "Недостаточный уровень доступа.",
                            RandomId = new Random().Next()
                        });
                    }
                    var messagesSendParams = AddingPostEvent?.Invoke(userId, wallPost, message);
                    return(messagesSendParams);
                }
                catch (InvalidOperationException e)
                {
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = "Нажмите \"Помощь\" для помощи.",
                        RandomId = new Random().Next()
                    });
                }
                catch (IndexOutOfRangeException ioore)
                {
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = "Нажмите \"Помощь\" для помощи.",
                        RandomId = new Random().Next()
                    });
                }
                catch (ArgumentNullException ane)
                {
                    return(new MessagesSendParams()
                    {
                        PeerId = message.PeerId,
                        Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                        Message = "Нажмите \"Помощь\" для помощи.",
                        RandomId = new Random().Next()
                    });
                }
                catch (DeepCopyHistoryException dche)
                {
                    int depth = dche.Deapth;
                    if (depth < int.MaxValue)
                    {
                        return new MessagesSendParams()
                               {
                                   PeerId   = message.PeerId,
                                   Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                                   Message  = $"Ошибка! Вложенность репостов равна {depth}. " +
                                              "Бот может работать только с вложенностью не больше 1",
                                   RandomId = new Random().Next()
                               }
                    }
                    ;
                    else
                    {
                        return new MessagesSendParams()
                               {
                                   PeerId   = message.PeerId,
                                   Keyboard = Keyboards.MainMenuKeyboardBuilder().Build(),
                                   Message  = "Ошибка! Слишком большая вложенность репостов.",
                                   RandomId = new Random().Next()
                               }
                    };
                }
            }

            return(null); //awful!
        }
    }